import { useMemo } from "react"; import { useOnChangeDeep, usePreviousValue } from "use-common-hook"; import { createDefaultUploaderFunction, createUploaderFunction, } from "./createUploaderFunction"; import { HasBaseData, HasGuid } from "./hookTypes"; const guidToId = (item: HasGuid) => ({ ...item, id: item.guid }); export const fileUploaderUtils = { useGuidToId: (items: HasGuid[]) => useMemo(() => items.map(guidToId), [items]), guidToId, createUploader: createUploaderFunction, createDefaultUploader: createDefaultUploaderFunction, useEnrich: >({ enrich, items, comparer = Object.is, }: { enrich: (items: T[]) => void; items: T[]; comparer?: (prev: T[], next: T[]) => boolean; }) => useOnChangeDeep({ deps: items, comparer, onChange: enrich, }), useSynchronizeOnItemsCountReduce: >({ items, sync, }: { sync: (items: T[]) => void; items: T[]; }) => { const previousItems = usePreviousValue(items); if (!previousItems) return; if (previousItems.length <= items.length) return; sync(previousItems); }, } as const;