refactor search,bookmark click - boostcampwm-2022/web33-Mildo GitHub Wiki

โœ‚๏ธ ๋ถ„๋ฐฐ๋œ ์ด์Šˆ

  • ์—ฐ๊ด€ ๊ฒ€์ƒ‰์–ด ํด๋ฆญ ์‹œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ(#74)
  • ์ธ๊ตฌ ๋ฐ€๋„ ์ •๋ณด ์‹œ๊ฐ„ ํ‘œ์‹œ(#83)

๐Ÿšฉ ๊ตฌํ˜„ ๋ชฉํ‘œ

  • ์—ฐ๊ด€ ๊ฒ€์ƒ‰์–ด ๋ฐ ๋ถ๋งˆํฌ ํด๋ฆญ ์‹œ ํ•ด๋‹น ์œ„์น˜๋กœ ์ด๋™
  • ๋กœ๊ทธ์•„์›ƒ css ์ ์šฉ
  • ํ˜„์žฌ ๊ธฐ์ค€ ์‹œ๊ฐ„ ํ‘œ์‹œ

๐Ÿ€ ์„ธ๋ถ€ ๋ชฉํ‘œ

  • ๊ทธ๋ž˜ํ”„ ๊ธฐ์ค€ ์‹œ๊ฐ„ ํ‘œ์‹œ
  • ํ˜„์žฌ ์ •๋ณด ๊ธฐ์ค€ ์‹œ๊ฐ„ ํ‘œ์‹œ
  • ๋ถ๋งˆํฌ ๋ชฉ๋ก ๋ฐ ๊ฒ€์ƒ‰ ๋ชฉ๋ก ์—์„œ ์ง€์—ญ ํด๋ฆญ ์‹œ ํ•ด๋‹น ์ง€์—ญ์œผ๋กœ ์ด๋™
  • ๋กœ๊ทธ์•„์›ƒ css ์ ์šฉ

๐Ÿ–ฅ๏ธ ๊ตฌํ˜„ ๋‚ด์šฉ

MyInfoSideBar ์ฃผ์˜ ์‚ฌํ•ญ ํ•ด๊ฒฐ

  • ์•„๋ž˜์™€ ๊ฐ™์€ ์ฃผ์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์ฝ˜์†”์— ์ฐํž˜

    ์ปดํฌ๋„ŒํŠธ ์ฃผ์˜.PNG

  • ์ด์œ ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ปดํฌ๋„ŒํŠธ ์•ˆ์— styled-component๊ฐ€ ์„ ์–ธ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋ฏ€๋กœ, LogoutLink๋ฅผ MyInfoSideBar ๋ฐ–์œผ๋กœ ๋นผ์„œ ์—๋Ÿฌ ํ•ด๊ฒฐ

    ...
    useEffect(() => {
        if (!userInfo || !areas) {
          return;
        }
    
        makeBookmarks();
      }, [userInfo, areas]);
    
      const LogoutLink = styled.a`
        position: absolute;
        bottom: 5%;
        left: 50%;
        transform: translate(-50%, 0);
    
        font-size: 1rem;
      `;
    ...
    

ํ•ด๋‹น ์žฅ์†Œ๋ช… ํด๋ฆญ ์‹œ ๋งˆ์ปค ์ด๋ฒคํŠธ ์‚ฌ์šฉ

  • atom์˜ markerArray์— ๋ชจ๋“  ๋งˆ์ปค์˜ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ์Œ

  • marker์˜ trigger ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋“ฑ๋กํ•œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ

  • ์ขŒํ‘œ ๊ฐ’์œผ๋กœ ํ•ด๋‹นํ•˜๋Š” ๋งˆ์ปค๋ฅผ ์ฐพ์•„ trigger(โ€™clickโ€™)์„ ์‹คํ–‰ํ•จ

  • MyInfoSideBar.tsx

    // MainPage์—์„œ ์ขŒํ‘œ ์„ค์ • setState ๊ฐ€์ ธ์™€์„œ ํด๋ฆญํ•œ ์œ„์น˜๋กœ ์ด๋™
      const onClickAreaName = (areaInfo: CoordinatesPopulationTypes) => {
        if (!setCoordinates) {
          return;
        }
        const { latitude, longitude } = areaInfo;
    
        const marker = markers.find(
          item =>
            item.getPosition().x === longitude && item.getPosition().y === latitude
        );
    
        if (!marker) {
          alert('ํ˜ผ์žก๋„ ํ•„ํ„ฐ๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”!');
          return;
        }
    
        marker.trigger('click');
        setIsMyInfoSideBarOpen(false);
      };
    
  • RelatedAreaList.tsx

    • e.target.id๋Š” RelatedAreaItem์—์„œ ์„ค์ •ํ•œ ์™„์„ฑ๋œ ์ง€์—ญ ์ด๋ฆ„์ž„
    const RelatedSearchList: React.FC<RelatedSearchListProps> = ({
      searchAreaName,
      relatedAreaInfo
    }) => {
      const [isEmptyRelatedList, setIsEmptyRelatedList] = useState(true);
      const markers = useAtomValue(markerArray);
    
      const onClickRelatedAreaList: React.MouseEventHandler<
        HTMLUListElement
      > = e => {
        if (e.target instanceof Element) {
          const { latitude, longitude } = relatedAreaInfo[e.target.id];
    
          const marker = markers.find(
            item =>
              item.getPosition().x === longitude &&
              item.getPosition().y === latitude
          );
    
          if (!marker) {
            return;
          }
    
          marker.trigger('click');
        }
      };
    

๐Ÿ“–ํ•™์Šต ๋‚ด์šฉ

Event.target์˜ Id ํƒ€์ž…์ด ์—†๋Š” ๊ฒฝ์šฐ

ApexChart์—์„œ label ์ค„ ๋ฐ”๊ฟˆ

  • ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐฐ์—ด๋กœ ๋„ฃ์–ด์ค€ ๋ถ€๋ถ„์€ ์ค„๋ฐ”๊ฟˆ์ด ๋จ
xaxis: {
  categories: [
    'Apples',
    'Pineapples',
    'Pears',
    ['Quararibea', 'cordata'],
    ['Prickly', 'Pear'],
    'Tangerines'
  ]
}

๐ŸŽธ ๊ธฐํƒ€

  • RelatedAreaList์—์„œ ์œ„์น˜ ์ด๋™ ์‹œ ๊ฒ€์ƒ‰ ์ฐฝ ๋‹ซ์•„์•ผํ•จ
  • infodetail์—์„œ ๊ทธ๋ž˜ํ”„ ๋ ˆ์ด๋ธ” ๊ธ€์ž์ƒ‰ ๋ฐ”๊พธ๋Š”๊ฒŒ ๋‚ฌ์ง€ ์•Š์„์ง€