UNPKG

@kubit-ui-web/react-components

Version:

Kubit React Components is a customizable, accessible library of React web components, designed to enhance your application's user experience

66 lines 3.66 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SelectorBoxFile = void 0; const jsx_runtime_1 = require("react/jsx-runtime"); const react_1 = __importDefault(require("react")); const stylesName_1 = require("../../constants/stylesName/stylesName"); const useStyles_1 = require("../../hooks/useStyles/useStyles"); const errorBoundary_1 = require("../../provider/errorBoundary/errorBoundary"); const fallbackComponent_1 = require("../../provider/errorBoundary/fallbackComponent"); const selectorBoxFileStandAlone_1 = require("./selectorBoxFileStandAlone"); const state_utils_1 = require("./utils/state.utils"); const SelectorBoxFileComponent = react_1.default.forwardRef(({ variant, loading = false, success = false, error = false, disabled = false, percentage = 0, maxSize, fileExtension, errorMaxSizeMessage = { content: '' }, errorFileExtensionMessage = { content: '' }, errorMessage = { content: '' }, onSizeError, onFileError, ctv, ...props }, ref) => { const styles = (0, useStyles_1.useStyles)(stylesName_1.STYLES_NAME.SELECTOR_BOX_FILE, variant, ctv); const [focus, setFocus] = react_1.default.useState(false); const [validFile, setValidFile] = react_1.default.useState({ validSize: true, validExtension: true }); const onFocus = () => { setFocus(true); }; const onBlur = () => { setFocus(false); }; const onValidateFile = (files) => { if (!files || files.length === 0) { return; } const file = files[0]; const size = file.size / 1024 / 1024; //mb const extension = file.type; let _validSize = true; let _validFileExtension = true; if (maxSize && size > maxSize) { _validSize = false; onSizeError?.(true); } if (fileExtension && !fileExtension?.some(substring => extension.includes(substring))) { _validFileExtension = false; onFileError?.(true); } setValidFile({ validSize: _validSize, validExtension: _validFileExtension }); }; const getErrorMessage = () => { if (!validFile.validExtension) { return errorFileExtensionMessage; } if (!validFile.validSize) { return errorMaxSizeMessage; } return errorMessage; }; const hasError = () => { return error || !validFile.validExtension || !validFile.validSize; }; const handleOnChange = event => { onValidateFile(event.target.files); props.onChange?.(event); }; return ((0, jsx_runtime_1.jsx)(selectorBoxFileStandAlone_1.SelectorBoxFileStandAlone, { ...props, ref: ref, errorMessage: getErrorMessage(), focus: focus, percentage: percentage, state: (0, state_utils_1.getState)(loading, success, hasError(), disabled), styles: styles, onBlur: onBlur, onChange: handleOnChange, onFocus: onFocus })); }); SelectorBoxFileComponent.displayName = 'SelectorBoxFileComponent'; const SelectorBoxBoundary = (props, ref) => ((0, jsx_runtime_1.jsx)(errorBoundary_1.ErrorBoundary, { fallBackComponent: (0, jsx_runtime_1.jsx)(fallbackComponent_1.FallbackComponent, { children: (0, jsx_runtime_1.jsx)(selectorBoxFileStandAlone_1.SelectorBoxFileStandAlone, { ...props, ref: ref }) }), children: (0, jsx_runtime_1.jsx)(SelectorBoxFileComponent, { ...props, ref: ref }) })); const SelectorBoxFile = react_1.default.forwardRef(SelectorBoxBoundary); exports.SelectorBoxFile = SelectorBoxFile; //# sourceMappingURL=selectorBoxFile.js.map