import { useCallback } from 'react' import { TFileAttributes, TFileId, FileItem, TFileItemList } from '../types' export const useFileAttributes = ( value: TFileItemList, onFileUpdated: (TFileId: TFileId, updates: Partial) => void, ) => { const setAttributeForFile = useCallback( (TFileId: TFileId, attributeName: string, attributeValue: any) => { const fileItem = value.find((file) => file.fileId === TFileId)! const attributes = fileItem.attributes || {} fileItem.attributes = { ...attributes, [attributeName]: attributeValue, } onFileUpdated(TFileId, { attributes: fileItem.attributes }) }, [onFileUpdated, value], ) const getAttributeForFile = useCallback( (fileId: TFileId, attributeName: string): any | undefined => { const fileItem = value.find((file) => file.fileId === fileId)! const attributes = fileItem.attributes || {} return attributes[attributeName] }, [value], ) const fileAttributes: TFileAttributes = useCallback( (attributeName: string) => { return { get: (fileId: TFileId): T | undefined => { return getAttributeForFile(fileId, attributeName) }, set: (fileId: TFileId, attributeValue: T | undefined) => { setAttributeForFile(fileId, attributeName, attributeValue) }, } }, [getAttributeForFile, setAttributeForFile], ) return { fileAttributes } as const }