UNPKG

design-react-kit

Version:

Componenti React per Bootstrap 5

63 lines 2.54 kB
import React, { createContext, useContext, useMemo, useState } from 'react'; export const TransferContext = createContext({ sourceItems: [], targetItems: [], sourceCandidates: [], targetCandidates: [], setSourceItems: () => { }, setTargetItems: () => { }, setSourceCandidates: () => { }, setTargetCandidates: () => { }, isChanged: false, reset: () => { } }); export const useTransferContext = () => useContext(TransferContext); export const TransferContextProvider = ({ children }) => { const [sourceItems, setSourceItems] = useState([]); const [targetItems, setTargetItems] = useState([]); const [sourceCandidates, setSourceCandidates] = useState([]); const [targetCandidates, setTargetCandidates] = useState([]); const [originalSourceItems, setOriginalSourceItems] = useState([]); const [originalTargetItems, setOriginalTargetItems] = useState([]); const value = useMemo(() => ({ sourceCandidates, targetCandidates, sourceItems, targetItems, setSourceItems: ({ items, setOriginals }) => { setSourceItems(items); if (setOriginals) { setOriginalSourceItems(items); } }, setTargetItems: ({ items, setOriginals }) => { setTargetItems(items); if (setOriginals) { setOriginalTargetItems(items); } }, setSourceCandidates, setTargetCandidates, reset: () => { setSourceItems(originalSourceItems); setTargetItems(originalTargetItems); setSourceCandidates([]); setTargetCandidates([]); }, isChanged: JSON.stringify(sourceItems) !== JSON.stringify(originalSourceItems) || JSON.stringify(targetItems) !== JSON.stringify(originalTargetItems) }), [sourceItems, targetItems, sourceCandidates, targetCandidates, originalSourceItems, originalTargetItems]); return React.createElement(TransferContext.Provider, { value: value }, children); }; export const useTransfer = () => { const { sourceItems, targetItems, sourceCandidates, targetCandidates } = useTransferContext(); return { source: sourceItems.map((item) => { return { ...item, checked: sourceCandidates.includes(item.id) }; }), target: targetItems.map((item) => { return { ...item, checked: targetCandidates.includes(item.id) }; }) }; }; //# sourceMappingURL=useTransferContext.js.map