๐งฑ ๋ณต์กํ ํธ๋ฆฌ๊ตฌ์กฐ ํํฐ, ๊ณ์ธตํ ํํฐ๋ก ๊ฐ์ ํ๊ธฐ
โ ๊ธฐ์กด UI์ ๋ฌธ์ ์
๊ธฐ์กด์ ์ฒด์ปค ๊ด๋ฆฌ ์์คํ ์์๋ ์๋์ ๊ฐ์ด ํธ๋ฆฌ ๊ตฌ์กฐ ๊ธฐ๋ฐ์ ๋ ํผ๋ฐ์ค ํํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์๋ค.
- ํธ๋ฆฌ ํํ๋ก ๊ตฌ์ฑ๋ ํํฐ๋ ์๊ฐ์ ์ผ๋ก ๋ณต์กํ๋ฉฐ, ์ค์ฒฉ ๋ ๋ฒจ์ด ๋ง์์ง๋ฉด ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฉ์ฑ์ด ๊ธ๊ฒฉํ ๋จ์ด์ง๋ ๊ตฌ์กฐ
- ๊ฐ ์ฑํฐ/๋ฃฐ ๋จ์๋ก ์ ํํ ์๋ ์์์ง๋ง, ์ ์ฒด ์ ํ/ํด์ ๋ก์ง์ด ์ง๊ด์ ์ด์ง ์์๊ณ , ๋ง์ฐ์ค ์์ด ์กฐ์ํ๊ธฐ์๋ ๋ถํธ
- ์คํฌ๋กค์ด ๋ง๊ณ ๊ตฌ์กฐ๊ฐ ํํํ์ง ์์, ์ฌ์ฉ์ ์ ์ฅ์์๋ ์ด๋ค ๊ธฐ์ค์ผ๋ก ์ ํํ ์ง ํ์ ์ด ์ด๋ ค์ ๋ณด์
- ์ฒซ๋ฒ์งธ ์ ํ ํญ๋ชฉ์ ๊ฒฝ์ฐ ํํฐ ๋ ์ด์์์ ๋ฒ์ด๋ UI๋ฅผ ๊ฐ์ง๊ณ ์์
โ ๊ฐ์ ๋ฐฉํฅ: 3๋จ๊ณ ๊ณ์ธตํ ํํฐ UI
๊ธฐ์กด์ ํ๋์ ๋ณด๊ธฐ ์ด๋ ค์ด UI๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด 3๋จ๊ณ ๊ณ์ธต ๊ตฌ์กฐ์ ๊ธฐ๋ฐํ ์ปค์คํ ํํฐ ์ปดํฌ๋ํธ๋ฅผ ์ค๊ณ ๋ฐ ๊ตฌํํ๋ค.
๐ ๊ตฌ์กฐ ๊ฐ์
- ๋ ํผ๋ฐ์ค → ๊ทธ๋ฃน → ํญ๋ชฉ์ ๊ตฌ์กฐ๋ก ๋จ๊ณ๋ณ ํํฐ๋ง์ ๊ฐ๋ฅํ๊ฒ ์ค๊ณ
- ๊ฐ ๋จ๊ณ๋ ๋ช ํํ ํญ๊ณผ ๋ฆฌ์คํธ ๊ตฌ์กฐ๋ก ๋ถ๋ฆฌ๋์ด, ์๊ฐ์ ์ง์ค๋์ ์ ๊ทผ์ฑ์ ๋์
- ๊ธฐ์กด ๊ตฌ์กฐ๋ณด๋ค ์ ํ ํญ๋ชฉ ๊ฐ์ ๊ด๊ณ๊ฐ ๋ ๋ช ํํ๊ฒ ๋๋ฌ๋๋ UX ์ ๊ณต
๐ ๊ธฐ๋ฅ ๊ฐ์
- ์ ํ๋ ํญ๋ชฉ์ ๋ด๋ถ ์ํ์ ๋ฐ๋ผ ์๋ ๋๊ธฐํ๋๋ฉฐ, ์ ์ฒด ์ ํ/ํด์ ๊ธฐ๋ฅ๋ ๋ช ํํ๊ฒ ๊ตฌํ
- shadcn/ui์ Tailwind CSS ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋์ด, ํค๋ณด๋ ๋ค๋น๊ฒ์ด์ ์ง์๊ณผ ๋ฐ์ํ ๋์์ธ๋ ๊ณ ๋ ค๋จ
- ์ด๋ฆ์ด ๊ธธ์ด ์๋ฆฌ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฆฌ์ฌ์ด์ฆ ๊ฐ๋ฅํ๊ฒ shadcnUI์ resizable ์ปดํฌ๋ํธ ํ์ฉ
- ํํฐ ์ด๊ธฐํ, ์ ์ฉ, ์ค์ ๊ฐ UX ํ๋ฆ๋ ์ง๊ด์ ์ผ๋ก ๊ฐ์ ๋จ
๐ ๊ฐ๋ฐ : ๋ฐ์ดํฐ ๋ฐ ์ํ ๊ด๋ฆฌ ๊ณ ๋ฏผ
๋ ํผ๋ฐ์ค ๋ฐ์ดํฐ๋ ๋ฐฑ์๋์์ 3๋จ๊ณ ์ค์ฒฉ ๊ตฌ์กฐ๋ก ์ ๊ณต๋๋ฉฐ, ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ํ ๊ด๋ฆฌ๋ฅผ ์ค๊ณํ๋ค.
interface CascadingFilterProps {
data: ReferenceItem[];
selected: {
firstSelectedId: string;
secondSelectedIds: string[];
thirdSelectedValues: Record<string, string[]>;
};
onChange: (newSelected) => void;
onReset: () => void;
}
- firstSelectedId: ์ ํ๋ ์ต์์ ๊ทธ๋ฃน
- secondSelectedIds: ์ ํ๋ ์ค๊ฐ ๊ทธ๋ฃน๋ค
- thirdSelectedValues: ๊ฐ ์ค๊ฐ ๊ทธ๋ฃน๋ณ ์ ํ๋ ํ์ ํญ๋ชฉ๋ค (Key-Value ํํ)
์ด ๊ตฌ์กฐ๋ ์ค์ฒฉ ํํฐ ํญ๋ชฉ ๊ฐ์ ์์กด์ฑ์ ์์ ํ๊ฒ ๊ด๋ฆฌํ๋ฉฐ, ์ฌ์ฉ์ ์กฐ์์ ๋ฐ๋ผ ์๋ ์ํ ๋๊ธฐํ๊ฐ ๊ฐ๋ฅํ๋๋ก ์ค๊ณํ๋ค.
๐ฏ ๊ฐ์ ํจ๊ณผ
- ์๊ฐ์ ๊ณ์ธต์ด ๋ช ํํด์ ธ ์ฌ์ฉ์๊ฐ ์ํ๋ ํญ๋ชฉ์ ๋ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ์ฐพ์ ์ ์์
- ์ด์ ๋ณด๋ค ๋ณต์กํ ๋ ํผ๋ฐ์ค ๊ตฌ์กฐ๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ ๋ฐ ์ ํ ๊ฐ๋ฅ
๐ง ํฅํ ๊ฐ์ ์์
- ๋ ํผ๋ฐ์ค ํํฐ ํญ๋ชฉ์ด ๋ง์์ง ๊ฒฝ์ฐ ๋ฐ์ํ ์ ์๋ ๋ ๋๋ง ์ง์ฐ, ์คํฌ๋กค ๋ฒ๋ฒ ์ ๋ฑ์ ์ฑ๋ฅ ์ด์๋ฅผ ๊ณ ๋ คํด, ๋๋ ๋ฐ์ดํฐ ๋์์ ์ํ ๊ฐ์ํ(virtual scroll) ์ ์ฉ
- ์ฌ์ฉ์์๊ฒ ์ ์ฒด ๊ฐฏ์ ๋ฐ ์ ํ ๋ ๊ฐฏ์ ์ ๊ณต
- ํค๋ณด๋ ๋ค๋น๊ฒ์ด์ ์ง์ ๊ฐํ
๋๊ธ