From ba83d16345f1751e66a01b49a48a6988f1dbf5f3 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Sun, 3 Jul 2022 15:29:26 +0700 Subject: [PATCH] tried to make types --- .../sortable/SortableAudioGrid/index.tsx | 27 +++++++------- .../sortable/SortableList/index.tsx | 37 ++++++++++++------- 2 files changed, 36 insertions(+), 28 deletions(-) diff --git a/src/components/sortable/SortableAudioGrid/index.tsx b/src/components/sortable/SortableAudioGrid/index.tsx index 90584eac..ea0dd7b2 100644 --- a/src/components/sortable/SortableAudioGrid/index.tsx +++ b/src/components/sortable/SortableAudioGrid/index.tsx @@ -18,27 +18,22 @@ interface SortableAudioGridProps { onTitleChange: (file_id: IFile['id'], title: string) => void; } +const renderItem: FC<{ + item: IFile; + onDelete: (file_id: IFile['id']) => void; + onTitleChange: (file_id: IFile['id'], title: string) => void; +}> = ({ item, onDelete, onTitleChange }) => ( + +); + const SortableAudioGrid: FC = ({ items, locked, - onDelete, className, onSortEnd, + onDelete, onTitleChange, }) => { - const renderItem = useCallback>( - ({ item, key }) => ( - - ), - [onTitleChange, onDelete] - ); - const renderLocked = useCallback>( ({ locked }) => ( = ({ renderLocked={renderLocked} onSortEnd={onSortEnd} className={className} + renderItemProps={{ + onDelete, + onTitleChange, + }} /> ); }; diff --git a/src/components/sortable/SortableList/index.tsx b/src/components/sortable/SortableList/index.tsx index 1f596a8a..38ab81a7 100644 --- a/src/components/sortable/SortableList/index.tsx +++ b/src/components/sortable/SortableList/index.tsx @@ -1,27 +1,33 @@ -import React, { createElement, FC } from "react"; +import React, { createElement, FC } from 'react'; -import { closestCenter, DndContext, DragOverlay } from "@dnd-kit/core"; -import { SortableContext, verticalListSortingStrategy } from "@dnd-kit/sortable"; -import classNames from "classnames"; +import { closestCenter, DndContext, DragOverlay } from '@dnd-kit/core'; +import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable'; +import classNames from 'classnames'; -import { DragOverlayItem } from "~/components/sortable/DragOverlayItem"; -import { SortableItem } from "~/components/sortable/SortableItem"; -import { useSortableActions } from "~/hooks/sortable"; +import { DragOverlayItem } from '~/components/sortable/DragOverlayItem'; +import { SortableItem } from '~/components/sortable/SortableItem'; +import { useSortableActions } from '~/hooks/sortable'; -import styles from "./styles.module.scss"; +import styles from './styles.module.scss'; -interface SortableListProps { +interface SortableListProps< + T extends {}, + R extends {}, + P extends {}, + U extends {}, +> { items: T[]; locked: R[]; getID: (item: T) => number | string; getLockedID: (locked: R) => number | string; - renderItem: FC<{ item: T }>; + renderItem: FC

; + renderItemProps: U; renderLocked: FC<{ locked: R }>; onSortEnd: (newVal: T[]) => void; className?: string; } -const SortableList = ({ +const SortableList = ({ items, locked, getID, @@ -29,8 +35,9 @@ const SortableList = ({ className, renderItem, renderLocked, + renderItemProps, onSortEnd, -}: SortableListProps) => { +}: SortableListProps) => { const { sensors, onDragEnd, onDragStart, draggingItem, ids } = useSortableActions( items, getID, @@ -54,7 +61,7 @@ const SortableList = ({ draggingItem && getID(item) === getID(draggingItem) ? styles.dragging : undefined } > - {createElement(renderItem, { item, key: getID(item) })} + {createElement(renderItem, { ...renderItemProps, item })} ))} @@ -64,7 +71,9 @@ const SortableList = ({ {draggingItem ? ( - {createElement(renderItem, { item: draggingItem })} + + {createElement(renderItem, { ...(renderItemProps || {}), item: draggingItem })} + ) : null}