design-react-kit
Version:
Componenti React per Bootstrap 5
63 lines • 2.54 kB
JavaScript
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