@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
57 lines (56 loc) • 2.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isFileEqual = exports.default = void 0;
var _react = require("react");
var _useSharedState = require("../../shared/helpers/useSharedState.js");
function useUpload(id) {
const {
data,
extend
} = (0, _useSharedState.useSharedState)(id);
const clearFiles = (0, _react.useCallback)(() => {
extend({
files: [],
internalFiles: []
});
}, [extend]);
const setFiles = (0, _react.useCallback)(files => {
const newFiles = files === null || files === void 0 ? void 0 : files.filter(file => (file === null || file === void 0 ? void 0 : file.file) instanceof File);
extend({
files: newFiles
});
}, [extend]);
const setInternalFiles = (0, _react.useCallback)(internalFiles => {
extend({
internalFiles
});
}, [extend]);
const files = (0, _react.useMemo)(() => (data === null || data === void 0 ? void 0 : data.files) || [], [data === null || data === void 0 ? void 0 : data.files]);
const internalFiles = (0, _react.useMemo)(() => (data === null || data === void 0 ? void 0 : data.internalFiles) || [], [data === null || data === void 0 ? void 0 : data.internalFiles]);
const getExistingFile = (0, _react.useCallback)((file, fileItems = files) => {
return fileItems.find(({
file: f
}) => {
return isFileEqual(file, f);
});
}, [files]);
return {
files,
setFiles,
clearFiles,
internalFiles,
setInternalFiles,
getExistingFile
};
}
const isFileEqual = (fileA, fileB) => {
const compareExistingProperty = function (a, b, property) {
return a && property in a && b && property in b && (a[property] === 0 || b[property] === 0 || a[property] === b[property]);
};
return fileA.name === fileB.name && compareExistingProperty(fileA, fileB, 'size') && compareExistingProperty(fileA, fileB, 'lastModified');
};
exports.isFileEqual = isFileEqual;
var _default = exports.default = useUpload;
//# sourceMappingURL=useUpload.js.map