0.0.11 โ€ข Published 9 months ago

@badahertz52/sortable-list-tsc v0.0.11

Weekly downloads
-
License
-
Repository
github
Last release
9 months ago

sortable-list-tsc

๐Ÿ”—sortable-list-tsc ํŒจํ‚ค์ง€ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ”— sortable-list-tsc ํŒจํ‚ค์ง€ ์‚ฌ์šฉํ•œ ์ƒ˜ํ”Œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

1. Sortable List

1) ์†Œ๊ฐœ

๋งˆ์šฐ์Šค์˜ ๋“œ๋ž˜๊ทธ, ๋“œ๋กญ (๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ํ„ฐ์น˜)์„ ์ด์šฉํ•ด ์•„์ดํ…œ์„ ์žฌ์ •๋ ฌํ•  ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” sortable-list ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋Š” react(with js)์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, typescript ๋กœ ์ง„ํ–‰ํ•˜๋Š” react ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” sortable-list-tsc๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

๐Ÿ”—sortable-list github ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ”—sortable-list npm ๋ฐ”๋กœ๊ฐ€๊ธฐ

2) ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

A. ์„ค์น˜

npm i @badahertz52/sortable-list-tsc

B. ์„ค๋ช…

a. ์ปดํฌ๋„ŒํŠธ

โ“ SortableItem

์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ data ์†์˜ ์•„์ดํ…œ๋“ค์„ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” html์š”์†Œ, ๋“œ๋ž˜๊ทธ,๋“œ๋กญ ์ด๋ฒคํŠธ(๋ชจ๋ฐ”์ผ์—์„œ๋Š” ํ„ฐ์น˜ ์ด๋ฒคํŠธ)๋ฅผ ํ†ตํ•ด ์žฌ์ •๋ ฌ๋œ๋‹ค.

type SortableListItemProps = {
  index: number;
  draggable: boolean;
  children?: ReactNode;
  onDragStart?: (index: number) => void;
  onDropItem: (index: number) => void;
  onClickItem?: (index: number) => void;
  mobileDrag: boolean;
  setMobileDrag: Dispatch<SetStateAction<boolean>>;
};

const SortableItem = ({ props }: SortableListItemProps) => {
  return <li>{props.children}</li>;
};
  • SortableItem์˜ props |props|์„ค๋ช…| |---|---| |index|SortableItem์ด ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” data ์† ์•„์ดํ…œ์˜ index | draggable|๋งˆ์šฐ์Šค๋กœ ๋“œ๋ž˜๊ทธ ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€ ์—ฌ๋ถ€. type:boolean| children|data ์†์˜ ์•„์ดํ…œ์„ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ์˜ˆ์‹œ : TestItem | onDragStart| ๋“œ๋ž˜๊ทธ ์‹œ,startIndex์˜ ์ƒํƒœ๋ฅผ ๋“œ๋ž˜๊ทธ๋˜๋Š” ์•„์ดํ…œ์˜ index๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜ | onDropItem| ์•„์ดํ…œ์„ ๋“œ๋กญ ์‹œ, ๋“œ๋กญ๋˜๋Š” ์œ„์น˜์— ๋งž๊ฒŒ ์•„์ดํ…œ์„ ์žฌ์ •๋ ฌํ•˜๋Š” ํ•จ์ˆ˜| onClickItem|์ •๋ ฌ๋œ ์•„์ดํ…œ๋“ค์„ ํด๋ฆญ ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ| mobileDrag, setMobileDrag|๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋“œ๋ž˜๊ทธ์•ค ๋“œ๋กญ์„ ์‹œ์ž‘ํ•˜๋Š” ์ง€ ์—ฌ๋ถ€|

โ“‘ SortableList

์—ฌ๋Ÿฌ ๊ฐœ์˜ SortableItem์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”, SortableItem์˜ ๋ถ€๋ชจ ์š”์†Œ

type SortableListProps = {
  data: any;
  onClickItem: (index: number) => void;
  renderItem: (item: any, index: number) => JSX.Element;
  updateList?: (newPlayList: any) => void;
  dragItemStyleProps?: CSSProperties;
};

const SortableList = ({props}:SortableListProps) => {
  ....
}
  • SortableList์˜ props |props|์„ค๋ช…| |---|---| |data|์ •๋ ฌํ•  ์•„์ดํ…œ๋“ค์„ ๋‹ด์€ ๋ฐฐ์—ด๋กœ ๋ฐฐ์—ด์•ˆ ์š”์†Œ์˜ ํ˜•์‹์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ. type: Array| |onClickItem|์ •๋ ฌ๋œ ์•„์ดํ…œ๋“ค์„ ํด๋ฆญ ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ | |renderItem| SortableItem์˜ children ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋กœ ์ •๋ ฌํ•  ์•„์ดํ…œ์„ ํ™”๋ฉด์ƒ์— ์–ด๋–ป๊ฒŒ ๋ณด์ผ ์ง€๋ฅผ ๊ฒฐ์ •ํ•จ. parameter: item (data์˜ item), index(item์˜ data ์† index) | |updateData|onDropItem ์—์„œ item์„ ์žฌ์ก๋ ฌํ•ด data๋ฅผ ๋ณ€๊ฒฝํ• ๋•Œ, ๋ณ€๊ฒฝ๋œ data๋ฅผ SortableList ์™ธ๋ถ€์—์„œ๋„ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ | |dragItemStyleProps| ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋“œ๋ž˜๊ทธ์•ค ๋“œ๋กญ์„ ์‹คํ–‰ ์‹œ, ํ„ฐ์น˜ ํฌ์ธํŠธ๋ฅผ ๋”ฐ๋ผ๋‹ค๋‹ˆ๋Š” ์š”์†Œ์˜ ์Šคํƒ€์ผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ undefined. type:CSSProperties|undefined|

b. ์‚ฌ์šฉ ์˜ˆ์‹œ

  • App.js
import SortableList from "@badahertz52/sortable-list/dist/SortableList";
import { data } from "./TestItem/testData";
import TestItem from "./TestItem/TestItem";
function App() {
  const onClickItem = (index) => {
    alert(index);
  };
  return (
    <SortableList
      data={data}
      renderItem={(item, index) => <TestItem data={item} index={index} />}
      onClickItem={onClickItem}
    />
  );
}

export default App;
import React from "react";
import "./TestItem.css";
function TestItem({ data, index }) {
  return (
    <div className="test-item">
      <div>
        <p>content:{data.content}</p>
        <p>index:{index}</p>
      </div>
    </div>
  );
}

export default TestItem;
  • testData.js
export const data = [
  { content: "Apple ๐ŸŽ" },
  { content: "Banana ๐ŸŒ" },
  { content: "Carrot ๐Ÿฅ•" },
  { content: "Dessert ๐Ÿง" },
];

2. Skill & Scripts

Skill

  • HTML, CSS, TypeScript
  • React

install

npm i

start

npm run start

publish

npm publish

Update

๐Ÿ”ง 2023 .8

  • ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ํ„ฐ์น˜๋ฅผ ํ†ตํ•ด ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ