intelicoreact 2.0.19 → 2.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/Atomic/FormElements/ActionAlert/ActionAlert.js.map +1 -1
- package/dist/es/Atomic/FormElements/AdvancedStatus/AdvancedStatus.js.map +1 -1
- package/dist/es/Atomic/FormElements/Calendar/Calendar.js +2 -1
- package/dist/es/Atomic/FormElements/Calendar/Calendar.js.map +1 -1
- package/dist/es/Atomic/FormElements/CheckboxInput/CheckboxInput.js.map +1 -1
- package/dist/es/Atomic/FormElements/CheckboxesLine/CheckboxesLine.js.map +1 -1
- package/dist/es/Atomic/FormElements/Datepicker/Datepicker.js +6 -5
- package/dist/es/Atomic/FormElements/Datepicker/Datepicker.js.map +1 -1
- package/dist/es/Atomic/FormElements/Datepicker/components/DatepickerCalendar.js +2 -1
- package/dist/es/Atomic/FormElements/Datepicker/components/DatepickerCalendar.js.map +1 -1
- package/dist/es/Atomic/FormElements/Dropdown/Dropdown.js +35 -26
- package/dist/es/Atomic/FormElements/Dropdown/Dropdown.js.map +1 -1
- package/dist/es/Atomic/FormElements/Dropdown/_utils.js +14 -9
- package/dist/es/Atomic/FormElements/Dropdown/_utils.js.map +1 -1
- package/dist/es/Atomic/FormElements/DropdownLiveSearch/DropdownLiveSearch.js.map +1 -1
- package/dist/es/Atomic/FormElements/FileLoader/FileLoader.js.map +1 -1
- package/dist/es/Atomic/FormElements/FileLoader/partial/LoadZone.js +1 -1
- package/dist/es/Atomic/FormElements/FileLoader/partial/LoadZone.js.map +1 -1
- package/dist/es/Atomic/FormElements/FileLoader/partial/LoadedContent.js +15 -13
- package/dist/es/Atomic/FormElements/FileLoader/partial/LoadedContent.js.map +1 -1
- package/dist/es/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.js +1 -1
- package/dist/es/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.js.map +1 -1
- package/dist/es/Atomic/FormElements/FileLoaderLocal/FileLoaderLocal.js +23 -19
- package/dist/es/Atomic/FormElements/FileLoaderLocal/FileLoaderLocal.js.map +1 -1
- package/dist/es/Atomic/FormElements/FileLoaderLocalGroup/FileLoaderLocalGroup.js +1 -1
- package/dist/es/Atomic/FormElements/FileLoaderLocalGroup/FileLoaderLocalGroup.js.map +1 -1
- package/dist/es/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN.js.map +1 -1
- package/dist/es/Atomic/FormElements/Input/Input.js.map +1 -1
- package/dist/es/Atomic/FormElements/Input/hooks/useInputValueProcessing.js +0 -1
- package/dist/es/Atomic/FormElements/Input/hooks/useInputValueProcessing.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputCalendar/InputCalendar.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputColor/InputColor.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputCurrency/InputCurrency.js +28 -25
- package/dist/es/Atomic/FormElements/InputCurrency/InputCurrency.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputDateRange/InputDateRange.js +2 -1
- package/dist/es/Atomic/FormElements/InputDateRange/InputDateRange.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputDateRange/components/DateInput.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputDateRange/components/Datepicker.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputDateRange/components/OpenedPart.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputDateRange/components/SelectItem.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputLink/InputLink.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputMask3/InputMask3.js +16 -14
- package/dist/es/Atomic/FormElements/InputMask3/InputMask3.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputWithAction/InputWithAction.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputsRow/InputsRow.js +3 -2
- package/dist/es/Atomic/FormElements/InputsRow/InputsRow.js.map +1 -1
- package/dist/es/Atomic/FormElements/Label/Label.js.map +1 -1
- package/dist/es/Atomic/FormElements/MobileCalendar/MobileCalendar.js.map +1 -1
- package/dist/es/Atomic/FormElements/MultiSelect/MultiSelect.js.map +1 -1
- package/dist/es/Atomic/FormElements/RadioGroup/RadioGroup.js.map +1 -1
- package/dist/es/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.js.map +1 -1
- package/dist/es/Atomic/FormElements/RadioInput/RadioInput.js.map +1 -1
- package/dist/es/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.js.map +1 -1
- package/dist/es/Atomic/FormElements/RangeCalendar/RangeCalendar.js +2 -1
- package/dist/es/Atomic/FormElements/RangeCalendar/RangeCalendar.js.map +1 -1
- package/dist/es/Atomic/FormElements/RangeInputs/RangeInputs.js.map +1 -1
- package/dist/es/Atomic/FormElements/RangeList/RangeList.js.map +1 -1
- package/dist/es/Atomic/FormElements/RangeList/partial/RangeListRow.js.map +1 -1
- package/dist/es/Atomic/FormElements/RangeSlider/RangeSlider.js +9 -6
- package/dist/es/Atomic/FormElements/RangeSlider/RangeSlider.js.map +1 -1
- package/dist/es/Atomic/FormElements/RangeSlider2/RangeSlider2.js +4 -2
- package/dist/es/Atomic/FormElements/RangeSlider2/RangeSlider2.js.map +1 -1
- package/dist/es/Atomic/FormElements/SwitchableRow/SwitchableRow.js.map +1 -1
- package/dist/es/Atomic/FormElements/Switcher/Switcher.js.map +1 -1
- package/dist/es/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.js.map +1 -1
- package/dist/es/Atomic/FormElements/SwitcherHide/SwitcherHide.js.map +1 -1
- package/dist/es/Atomic/FormElements/SwitcherRadio/SwitcherRadio.js.map +1 -1
- package/dist/es/Atomic/FormElements/SwitcherRange/SwitcherRange.js.map +1 -1
- package/dist/es/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.js +1 -1
- package/dist/es/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.js.map +1 -1
- package/dist/es/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.js.map +1 -1
- package/dist/es/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.js.map +1 -1
- package/dist/es/Atomic/FormElements/TagsDropdown/TagsDropdown.js.map +1 -1
- package/dist/es/Atomic/FormElements/Text/Text.js.map +1 -1
- package/dist/es/Atomic/FormElements/TextSwitcher/TextSwitcher.js.map +1 -1
- package/dist/es/Atomic/FormElements/Textarea/Textarea.js.map +1 -1
- package/dist/es/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js +4 -2
- package/dist/es/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js.map +1 -1
- package/dist/es/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.js.map +1 -1
- package/dist/es/Atomic/FormElements/TimeRange/TimeRange.js.map +1 -1
- package/dist/es/Atomic/FormElements/UserContacts/UserContacts.js.map +1 -1
- package/dist/es/Atomic/Layout/Header/Header.js.map +1 -1
- package/dist/es/Atomic/Layout/MainMenu/MainMenu.js.map +1 -1
- package/dist/es/Atomic/Layout/Spinner/Spinner.js.map +1 -1
- package/dist/es/Atomic/UI/Accordion/Accordion.js.map +1 -1
- package/dist/es/Atomic/UI/Accordion/AccordionItem.js.map +1 -1
- package/dist/es/Atomic/UI/AdvancedTag/AdvTag.js +2 -1
- package/dist/es/Atomic/UI/AdvancedTag/AdvTag.js.map +1 -1
- package/dist/es/Atomic/UI/AdvancedTag/AdvancedTags.js.map +1 -1
- package/dist/es/Atomic/UI/Alert/Alert.js.map +1 -1
- package/dist/es/Atomic/UI/Arrow/Arrow.js.map +1 -1
- package/dist/es/Atomic/UI/Button/Button.js.map +1 -1
- package/dist/es/Atomic/UI/ButtonsBar/ButtonsBar.js.map +1 -1
- package/dist/es/Atomic/UI/Chart/Chart.js +2 -1
- package/dist/es/Atomic/UI/Chart/Chart.js.map +1 -1
- package/dist/es/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.js.map +1 -1
- package/dist/es/Atomic/UI/Chart/partial/utils.js +2 -1
- package/dist/es/Atomic/UI/Chart/partial/utils.js.map +1 -1
- package/dist/es/Atomic/UI/DateTime/DateTime.js.map +1 -1
- package/dist/es/Atomic/UI/DebugContainer/DebugContainer.js.map +1 -1
- package/dist/es/Atomic/UI/DoubleString/DoubleString.js.map +1 -1
- package/dist/es/Atomic/UI/Hint/Hint.js +8 -12
- package/dist/es/Atomic/UI/Hint/Hint.js.map +1 -1
- package/dist/es/Atomic/UI/Hint/partials/_utils.js.map +1 -1
- package/dist/es/Atomic/UI/Modal/Modal.js.map +1 -1
- package/dist/es/Atomic/UI/Modal/ModalHOC.js.map +1 -1
- package/dist/es/Atomic/UI/Modal/partials/ModalTitle.js.map +1 -1
- package/dist/es/Atomic/UI/Modal/partials/_constants.js.map +1 -1
- package/dist/es/Atomic/UI/Modal/partials/_utils.js +1 -4
- package/dist/es/Atomic/UI/Modal/partials/_utils.js.map +1 -1
- package/dist/es/Atomic/UI/Modal/partials/useMobileModal.js +17 -10
- package/dist/es/Atomic/UI/Modal/partials/useMobileModal.js.map +1 -1
- package/dist/es/Atomic/UI/NavLine/NavLine.js.map +1 -1
- package/dist/es/Atomic/UI/PageTitle/PageTitle.js.map +1 -1
- package/dist/es/Atomic/UI/Price/Price.js.map +1 -1
- package/dist/es/Atomic/UI/PriceRange/PriceRange.js.map +1 -1
- package/dist/es/Atomic/UI/ProgressLine/ProgressLine.js.map +1 -1
- package/dist/es/Atomic/UI/Status/Status.js.map +1 -1
- package/dist/es/Atomic/UI/Tag/Tag.js.map +1 -1
- package/dist/es/Atomic/UI/TagList/TagList.js.map +1 -1
- package/dist/es/Atomic/UI/UserBox/UserBox.js.map +1 -1
- package/dist/es/Atomic/UI/WizardStepper/ui/StateIcon/StateIcon.js.map +1 -1
- package/dist/es/Atomic/UI/WizardStepper/ui/StepRow/StepRow.js.map +1 -1
- package/dist/es/Atomic/UI/WizardStepper/ui/StepWrapper/StepWrapper.js.map +1 -1
- package/dist/es/Atomic/UI/WizardStepper/ui/icons.js.map +1 -1
- package/dist/es/Classes/RESTAPI/partials/AbortableFetch.js +9 -2
- package/dist/es/Classes/RESTAPI/partials/AbortableFetch.js.map +1 -1
- package/dist/es/Classes/RESTAPI/partials/CredentialsProcessing.js +4 -2
- package/dist/es/Classes/RESTAPI/partials/CredentialsProcessing.js.map +1 -1
- package/dist/es/Classes/RESTAPI/partials/sse.js +4 -7
- package/dist/es/Classes/RESTAPI/partials/sse.js.map +1 -1
- package/dist/es/Functions/fieldValueFormatters.js +1 -3
- package/dist/es/Functions/fieldValueFormatters.js.map +1 -1
- package/dist/es/Functions/operations.js +22 -20
- package/dist/es/Functions/operations.js.map +1 -1
- package/dist/es/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js +8 -6
- package/dist/es/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js.map +1 -1
- package/dist/es/Functions/useFormTools/functions/General.js +8 -6
- package/dist/es/Functions/useFormTools/functions/General.js.map +1 -1
- package/dist/es/Functions/useFormTools/functions/RenderFields.js +6 -5
- package/dist/es/Functions/useFormTools/functions/RenderFields.js.map +1 -1
- package/dist/es/Functions/useFormTools/index.js +1 -4
- package/dist/es/Functions/useFormTools/index.js.map +1 -1
- package/dist/es/Functions/utils.js +2 -1
- package/dist/es/Functions/utils.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/AffiliateNetworks.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/AlertCircle.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/AppStore.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Arrow.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ArrowDown.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ArrowLeft.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ArrowRight.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ArrowUp.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Bell.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Button.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Campaigns.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Check.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Check2.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ChevronDown.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ChevronDownDisabled.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ChevronLeft.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ChevronRight.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ChevronUp.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ChevronUpDown.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Close.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ColumnsOrder.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Delete.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Edit.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Email.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/FinturfLogo.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/FinturfLogo2.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Flows.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Gift.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/GoogleAuth.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/GooglePlay.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/HelpCircle.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/HelpCircle2.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/HelpCircleFilled.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Home.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Home2.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Key.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Landers.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Lock.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Mail.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Mastercard.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Minus.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Offers.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Pause.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/PayPal.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/PayPalLightLarge.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Phone.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Play.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Plus.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Profile.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/QRCode.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Rectangle.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Revert.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Star.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Star2.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/TrafficSources.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Trash.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/TrashRed.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Triggers.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/User.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Visa.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/X.js.map +1 -1
- package/dist/es/Molecular/FormElement/FormElement.js.map +1 -1
- package/dist/es/Molecular/InputAddress/InputAddress.js +24 -19
- package/dist/es/Molecular/InputAddress/InputAddress.js.map +1 -1
- package/dist/es/Molecular/InputCustomFetch/InputCustomFetch.js +17 -11
- package/dist/es/Molecular/InputCustomFetch/InputCustomFetch.js.map +1 -1
- package/dist/es/Molecular/InputPassword/InputPassword.js.map +1 -1
- package/package.json +2 -2
- /package/dist/es/Atomic/FormElements/{SwitcherRangeList/SwitcherRangeList.styles.css → Datepicker/Datepicker.styles.css} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldValueFormatters.js","names":["value"],"sources":["../../../src/Functions/fieldValueFormatters.js"],"sourcesContent":["import { getIsOnlyAnObject } from \"./utils\";\n\n//? The first word \"format\" in the function name means a logic\n//? in which the function transforms the incoming value in any case.\n\n//? The first word \"transform\" in the function name means a logic\n//? in which the function converts the whole value, but this is not suitable for sequential input\n\n//? The first word \"filter\" in the function name means a logic\n//? in which the function works as a changer for sequential input\n\n// ****************************\n// Base utils\n// ****************************\n\nexport const getSafelyValue = (value) =>\n value !== undefined && value !== null ? value?.toString?.() || \"\" : \"\";\n\n// базовая реализация\nexport const intlNumbersFormatter = (inputValue, settings = {}) => {\n const safelyInputValue = getSafelyValue(inputValue);\n const previousValue = safelyInputValue.slice(0, -1);\n const lastSym = safelyInputValue.slice(-1);\n const value = lastSym === \".\" ? previousValue : safelyInputValue;\n\n if (Number.isNaN(Number(value)) || !getSafelyValue(value)) return \"\";\n\n const {\n // локаль, даже региональная, влияет на отображение знаков и формата.\n locale = \"en-US\",\n // percent || currency(default case) || decimal(просто число) влияет на ТИП обработки.\n withSymbol,\n //группировка запятыми поразрядно.\n useGrouping = true,\n //!!работает только при withSymbol: 'currency' !! влияет на то, как именно будет выглядет формат валюты.\n currency = {},\n //сколько знаков после точки, и всегда ли они будут.\n // !!если поставить isAlwaysRender: true, но не дать центов, то будет 100.00\n fractionDigits = {},\n } = settings;\n\n const { currencyType = \"USD\", currencyDisplay: inputCurrencyDisplay } =\n currency;\n\n let currencyDisplay;\n switch (inputCurrencyDisplay) {\n case \"name\":\n currencyDisplay = \"name\";\n break;\n case \"code\":\n currencyDisplay = \"code\";\n break;\n case \"narrowSymbol\":\n currencyDisplay = \"narrowSymbol\";\n break;\n default:\n currencyDisplay = \"symbol\";\n }\n\n let numberStyle;\n switch (withSymbol) {\n case \"percent\":\n numberStyle = \"percent\";\n break;\n case \"currency\":\n numberStyle = \"currency\";\n break;\n default:\n numberStyle = \"decimal\";\n break;\n }\n\n const {\n quantity,\n isRenderAlways = false,\n minimumFractionDigits: inputMinimumFractionDigits,\n maximumFractionDigits: inputMaximumFractionDigits,\n conditionallyMinimumFractionDigits,\n } = fractionDigits;\n\n const dotIndex = safelyInputValue?.indexOf(\".\");\n const afterDot = dotIndex !== -1 ? safelyInputValue.slice(dotIndex + 1) : \"\";\n const minimumFractionDigits = (() => {\n //? Безусловное минимальное количество. Всегда отрендерит дробную часть, в количестве символов сколько указано\n if (typeof inputMinimumFractionDigits === \"number\")\n return inputMinimumFractionDigits;\n //? Условное минимальное количество. Если есть дробная часть, то отрендерит дробных символов сколько указано\n if (typeof conditionallyMinimumFractionDigits === \"number\") {\n return afterDot && lastSym !== \".\"\n ? conditionallyMinimumFractionDigits\n : 0;\n }\n //? Дефолтное минимальное количество. Если есть дробная часть, то отрендерит дробных символов столько, сколько есть\n //? Флаг isRenderAlways превращает дефолтный кейс в безусловное минимальное количество\n return afterDot && lastSym !== \".\"\n ? safelyInputValue.slice(dotIndex).length - 1\n : isRenderAlways\n ? quantity\n : 0;\n })();\n\n const priceSettings = {\n useGrouping, //группировка разрядов\n style: numberStyle, //тип форматирования (валюта или число). decimal - без знака валюты\n currency: currencyType, //валюта\n currencyDisplay, //валюта в виде символа\n //минимально не надо отображать центы, если их нет, иначе всегда будет .00\n minimumFractionDigits,\n //! Важно! Если придет велью с количеством дробных разрядов БОЛЬШИМ\n //! чем указано в (inputMaximumFractionDigits ?? quantity) - округлит по правилам округления\n //максимально отображать 2 цифры после запятой, если центы всё же есть\n maximumFractionDigits: inputMaximumFractionDigits ?? quantity,\n };\n\n let output;\n\n try {\n output = new Intl.NumberFormat(locale, priceSettings).format(value);\n } catch (e) {\n output = value;\n // eslint-disable-next-line no-console\n console.warn(\"Intl.NumberFormat error\", e);\n }\n return lastSym === \".\" ? output + lastSym : output;\n};\n\n// ****************************\n// format\n// ****************************\n\nexport const formatOnlyNumbers = (value) =>\n getSafelyValue(value).replace(/\\D/g, \"\");\nexport const formatToRemoveComa = (value) =>\n getSafelyValue(value).replace(/,/g, \"\");\nexport const formatToAddBitDepthPoints = (value, settings) =>\n intlNumbersFormatter(getSafelyValue(value), {\n fractionDigits: {\n quantity: settings?.type === \"int\" ? 0 : settings?.decimalPlaces,\n },\n });\n\n//! Важно! Если придет велью с количеством дробных разрядов БОЛЬШИМ\n//! чем указано в quantity - округлит по правилам округления\nexport const formatToPriceWithUSD = (value) => {\n if (isNaN(Number(value))) return value;\n return intlNumbersFormatter(getSafelyValue(value), {\n withSymbol: \"currency\",\n currency: { currencyType: \"USD\" },\n fractionDigits: { quantity: 2, conditionallyMinimumFractionDigits: 2 },\n });\n};\n\n//! Важно! Если придет велью с количеством дробных разрядов БОЛЬШИМ\n//! чем указано в quantity - округлит по правилам округления\n\n// ToDo - symbolPosition временно не реализовано\nexport const formatToPriceWithCurrency = (\n value,\n currencyCode,\n symbolPosition = \"before\",\n) => {\n if (isNaN(Number(value))) return value;\n return intlNumbersFormatter(getSafelyValue(value), {\n withSymbol: \"currency\",\n currency: { currencyType: currencyCode },\n fractionDigits: { quantity: 2, conditionallyMinimumFractionDigits: 2 },\n });\n};\n\n//? Добавляет в конец знак %. Работает как с одиночными значениями, так и с диапазонами.\n\n//? value может быть любое, но ожидается что будет\n//? - числом\n//? - строкой в формате \"значение\"\n//? - строкой в формате \"значение - значение\" (значение_пробел_тире_пробел_значение)\n//? - объект в формате { from: значение, to: значение }\n\n//? Предполагается, что \"значение\" может быть приведено к числу операторм + (пример: +значение приводится к числу).\n//? Если не может быть приведено, то \"значение\" вернется как есть, к результату добавится %\n\n//? Если \"значение\" пустое (getSafelyValue(значение) вернет пустую строку),\n//? то это воспринимается как 0, приводится к 0.00%\n\n//? Одиноково работает как для \".\", так и \",\" в качестве разделителя дробных разрядов\n\n//! Важно! Если придет велью с количеством дробных разрядов БОЛЬШИМ\n//! чем указано в decimalPlaces - округлит по правилам округления\n\nexport const formatAsPercentage = (value, settings) => {\n const {\n isCommonPercentageSymbol = true,\n decimalPlaces = 2,\n beforeValueSymbol = \"\",\n afterValueSymbol = \"\",\n isGlueSameRangesTogether = false,\n\n // ? Тут удобный ф-л, поэтому иной раз удобно обработать обычный диапазан (НЕ проценты).\n // ? Добавил возможность выпиливать значек процентов.\n // todo(VL) - вообще правильно заренеймить (formatAsDiapason), а добавление процентов сделать как опцию,\n // todo(VL) - но как обычно нет времени, нужно будет перечекать по всем проектам где тянется со старым неймингом\n isUseAsSimpleDiapason = false,\n } = getIsOnlyAnObject(settings) ? settings : {};\n let safelyInputValue;\n\n const checkValue = (value) => getSafelyValue(value) || \"0\";\n\n const transform = (valueAsSting) => {\n const processedValue = valueAsSting.replace(/,/g, \".\");\n if (Number.isNaN(Number(processedValue))) return processedValue;\n return `${intlNumbersFormatter(getSafelyValue(Number(processedValue)), {\n fractionDigits: {\n quantity: decimalPlaces,\n minimumFractionDigits: decimalPlaces,\n },\n })}`;\n };\n\n if (getIsOnlyAnObject(value)) {\n safelyInputValue = {\n from: checkValue(value.from),\n to: checkValue(value.to),\n };\n } else {\n safelyInputValue = checkValue(value);\n\n if (safelyInputValue.includes(\" - \")) {\n const valuesArr = safelyInputValue\n .split(\" - \")\n .map((partOfValue) => partOfValue.trim());\n safelyInputValue = {\n from: checkValue(valuesArr[0]),\n to: checkValue(valuesArr[1]),\n };\n } else {\n // Вариант когда велью передано строкой (НЕ объектом) и оно не содержит сепаратора \" - \"\n // - одиночные велью\n // - некорректный диапазон\n return `${beforeValueSymbol}${transform(safelyInputValue)}${afterValueSymbol}${isUseAsSimpleDiapason ? '' : '%'}`;\n }\n }\n\n if (safelyInputValue.from === safelyInputValue.to && !!isGlueSameRangesTogether) {\n return `${beforeValueSymbol}${transform(safelyInputValue.from)}${afterValueSymbol}${isUseAsSimpleDiapason ? '' : '%'}`;\n }\n\n if (isCommonPercentageSymbol)\n return `${beforeValueSymbol}${transform(safelyInputValue.from)} - ${transform(\n safelyInputValue.to,\n )}${afterValueSymbol}${isUseAsSimpleDiapason ? '' : '%'}`;\n else\n return `${beforeValueSymbol}${transform(safelyInputValue.from)}${isUseAsSimpleDiapason ? '' : '%'} - ${transform(\n safelyInputValue.to,\n )}${isUseAsSimpleDiapason ? '' : '%'}${afterValueSymbol}`;\n};\n\n// eslint-disable-next-line no-control-regex\nexport const formatToOnlyASCIICodeText = (text) =>\n getSafelyValue(text).replace(/[^\\x00-\\x7F]+/g, \"\");\n\n// eslint-disable-next-line default-param-last\nexport const formatNumberValueToMask = (inputValue, settings) => {\n const safelyInputValue = getSafelyValue(inputValue);\n\n // default valueSymbol === 'n', default mask === 'nnn-nnn-nnnn'\n const {\n mask = \"XXX-XXX-XXXX\",\n valueSymbol = \"X\",\n isReturnAdvanced = false,\n } = settings || {};\n const processing = mask.split(\"\").reduce(\n (acc, item) => {\n if (acc.value.length) ++acc.cursorPosition;\n acc.newValue.push(\n item === valueSymbol && acc.value.length ? acc.value.shift() : item,\n );\n return acc;\n },\n {\n value: safelyInputValue.split(\"\").filter((sym) => /[0-9]/g.test(sym)),\n newValue: [],\n cursorPosition: 0,\n },\n );\n\n return isReturnAdvanced\n ? {\n value: processing.newValue.join(\"\"),\n cursorPosition: processing.cursorPosition,\n }\n : processing.newValue.join(\"\");\n};\n\nexport const formatToLimitLength = (inputValue, limit) => {\n const value = getSafelyValue(inputValue);\n return limit &&\n typeof limit === \"number\" &&\n !Number.isNaN(limit) &&\n value?.length > limit\n ? value.substr(0, limit)\n : value;\n};\n\nexport const formatToHex = ({ inputValue, withSharp }) => {\n const value = getSafelyValue(inputValue);\n if (withSharp) return `#${value.replace(/[^a-f0-9]/gi, \"\")}`;\n\n return `${value.replace(/[^#a-f0-9]/gi, \"\")}`;\n};\n\nexport function formatToReplaceAllWhiteSpace(str) {\n const value = getSafelyValue(str);\n return value.replace(/\\s+/g, \"\");\n}\n\n// ****************************\n// transform\n// ****************************\n\n// ...\n\n// ****************************\n// filter\n// ****************************\n//? Намерянно выпилил определение дефолтного значение на уровне параметров, чтобы сделать null рабочим значением\n//? decimalPlaces === null теперь точно определяет режим ввода БЕЗ ограничей десятичных знаков\nexport const filterFloat = (inputValue, decimalPlaces) => {\n const replaser = input => ('' + input).replace(/[^\\.\\d]/g, '');\n const value = getSafelyValue(inputValue);\n \n //? safelyDecimalPlaces ТОЧНО либо null, либо целое число\n const safelyDecimalPlaces = (() => {\n if (decimalPlaces === null) return decimalPlaces;\n\n const DEFAULT_VALUE = 2;\n const isNumber = typeof decimalPlaces === 'number' || (typeof decimalPlaces === 'string' && !Number.isNaN(+decimalPlaces));\n\n //? защита от дробного значения decimalPlaces\n return isNumber ? Number((+decimalPlaces).toFixed()) : DEFAULT_VALUE;\n })();\n\n // Обработка кейса если первым символом нажата точка\n if (value.length === 1 && (value[0] === '.' || value[0] === ',')) return '0.';\n\n // Приводим запятые к корректному разделителю, но не выпиливаем\n let output = ('' + value)?.replace(/,/g, '.');\n\n // Выпилить первый ноль, если это не дробь\n if (value.length > 1 && value[0] === '0' && value[1] !== '.' && value[0] !== ',') output = value.slice(1);\n\n const previousValue = '' + output.slice(0, -1);\n const lastSym = '' + output.slice(-1);\n\n // Обработка кейса второй точки в дроби\n if (lastSym === '.' && previousValue.includes('.')) output = previousValue;\n\n // if (localStorage.getItem('useDeb')) debugger;\n\n // Логика ограничения по decimalPlaces\n if (typeof safelyDecimalPlaces === 'number') {\n if (!safelyDecimalPlaces && lastSym === '.') return replaser(previousValue);\n if (previousValue.includes('.') && (previousValue.indexOf('.') + 1 + safelyDecimalPlaces === previousValue?.length)) {\n return replaser(previousValue);\n }\n }\n\n return replaser(output);\n};\n\nexport const filterNumeric = (value, settings) => {\n value = getSafelyValue(value)?.replace(/,/g, \"\");\n const { type = \"float\", decimalPlaces } = settings || {};\n\n const executor = type === \"float\" ? filterFloat : formatOnlyNumbers;\n return executor(getSafelyValue(value), decimalPlaces);\n};\n\nexport const formatToHideValuePartially = (value, settings) => {\n const {\n showSymbolsCount = 4,\n isVisibleFromFront = false,\n isCutOutWhiteSpaces = true,\n } = settings || {};\n const safelyValue = getSafelyValue(value);\n\n const newValue = isCutOutWhiteSpaces\n ? safelyValue.replace(/\\s/g, \"\")\n : safelyValue;\n if (newValue.length <= showSymbolsCount) return newValue;\n\n const hide = (val) =>\n val\n .split(\"\")\n .map(() => \"*\")\n .join(\"\");\n const visiblePart = isVisibleFromFront\n ? newValue.slice(0, showSymbolsCount)\n : newValue.slice(-1 * showSymbolsCount);\n const hiddenPart = isVisibleFromFront\n ? newValue.slice(showSymbolsCount)\n : newValue.slice(0, -1 * showSymbolsCount);\n\n return isVisibleFromFront\n ? `${visiblePart}${hide(hiddenPart)}`\n : `${hide(hiddenPart)}${visiblePart}`;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fieldValueFormatters.js","names":["value"],"sources":["../../../src/Functions/fieldValueFormatters.js"],"sourcesContent":["import { getIsOnlyAnObject } from \"./utils\";\n\n//? The first word \"format\" in the function name means a logic\n//? in which the function transforms the incoming value in any case.\n\n//? The first word \"transform\" in the function name means a logic\n//? in which the function converts the whole value, but this is not suitable for sequential input\n\n//? The first word \"filter\" in the function name means a logic\n//? in which the function works as a changer for sequential input\n\n// ****************************\n// Base utils\n// ****************************\n\nexport const getSafelyValue = (value) =>\n value !== undefined && value !== null ? value?.toString?.() || \"\" : \"\";\n\n// базовая реализация\nexport const intlNumbersFormatter = (inputValue, settings = {}) => {\n const safelyInputValue = getSafelyValue(inputValue);\n const previousValue = safelyInputValue.slice(0, -1);\n const lastSym = safelyInputValue.slice(-1);\n const value = lastSym === \".\" ? previousValue : safelyInputValue;\n\n if (Number.isNaN(Number(value)) || !getSafelyValue(value)) return \"\";\n\n const {\n // локаль, даже региональная, влияет на отображение знаков и формата.\n locale = \"en-US\",\n // percent || currency(default case) || decimal(просто число) влияет на ТИП обработки.\n withSymbol,\n //группировка запятыми поразрядно.\n useGrouping = true,\n //!!работает только при withSymbol: 'currency' !! влияет на то, как именно будет выглядет формат валюты.\n currency = {},\n //сколько знаков после точки, и всегда ли они будут.\n // !!если поставить isAlwaysRender: true, но не дать центов, то будет 100.00\n fractionDigits = {},\n } = settings;\n\n const { currencyType = \"USD\", currencyDisplay: inputCurrencyDisplay } =\n currency;\n\n let currencyDisplay;\n switch (inputCurrencyDisplay) {\n case \"name\":\n currencyDisplay = \"name\";\n break;\n case \"code\":\n currencyDisplay = \"code\";\n break;\n case \"narrowSymbol\":\n currencyDisplay = \"narrowSymbol\";\n break;\n default:\n currencyDisplay = \"symbol\";\n }\n\n let numberStyle;\n switch (withSymbol) {\n case \"percent\":\n numberStyle = \"percent\";\n break;\n case \"currency\":\n numberStyle = \"currency\";\n break;\n default:\n numberStyle = \"decimal\";\n break;\n }\n\n const {\n quantity,\n isRenderAlways = false,\n minimumFractionDigits: inputMinimumFractionDigits,\n maximumFractionDigits: inputMaximumFractionDigits,\n conditionallyMinimumFractionDigits,\n } = fractionDigits;\n\n const dotIndex = safelyInputValue?.indexOf(\".\");\n const afterDot = dotIndex !== -1 ? safelyInputValue.slice(dotIndex + 1) : \"\";\n const minimumFractionDigits = (() => {\n //? Безусловное минимальное количество. Всегда отрендерит дробную часть, в количестве символов сколько указано\n if (typeof inputMinimumFractionDigits === \"number\")\n return inputMinimumFractionDigits;\n //? Условное минимальное количество. Если есть дробная часть, то отрендерит дробных символов сколько указано\n if (typeof conditionallyMinimumFractionDigits === \"number\") {\n return afterDot && lastSym !== \".\"\n ? conditionallyMinimumFractionDigits\n : 0;\n }\n //? Дефолтное минимальное количество. Если есть дробная часть, то отрендерит дробных символов столько, сколько есть\n //? Флаг isRenderAlways превращает дефолтный кейс в безусловное минимальное количество\n return afterDot && lastSym !== \".\"\n ? safelyInputValue.slice(dotIndex).length - 1\n : isRenderAlways\n ? quantity\n : 0;\n })();\n\n const priceSettings = {\n useGrouping, //группировка разрядов\n style: numberStyle, //тип форматирования (валюта или число). decimal - без знака валюты\n currency: currencyType, //валюта\n currencyDisplay, //валюта в виде символа\n //минимально не надо отображать центы, если их нет, иначе всегда будет .00\n minimumFractionDigits,\n //! Важно! Если придет велью с количеством дробных разрядов БОЛЬШИМ\n //! чем указано в (inputMaximumFractionDigits ?? quantity) - округлит по правилам округления\n //максимально отображать 2 цифры после запятой, если центы всё же есть\n maximumFractionDigits: inputMaximumFractionDigits ?? quantity,\n };\n\n let output;\n\n try {\n output = new Intl.NumberFormat(locale, priceSettings).format(value);\n } catch (e) {\n output = value;\n // eslint-disable-next-line no-console\n console.warn(\"Intl.NumberFormat error\", e);\n }\n return lastSym === \".\" ? output + lastSym : output;\n};\n\n// ****************************\n// format\n// ****************************\n\nexport const formatOnlyNumbers = (value) =>\n getSafelyValue(value).replace(/\\D/g, \"\");\nexport const formatToRemoveComa = (value) =>\n getSafelyValue(value).replace(/,/g, \"\");\nexport const formatToAddBitDepthPoints = (value, settings) =>\n intlNumbersFormatter(getSafelyValue(value), {\n fractionDigits: {\n quantity: settings?.type === \"int\" ? 0 : settings?.decimalPlaces,\n },\n });\n\n//! Важно! Если придет велью с количеством дробных разрядов БОЛЬШИМ\n//! чем указано в quantity - округлит по правилам округления\nexport const formatToPriceWithUSD = (value) => {\n if (isNaN(Number(value))) return value;\n return intlNumbersFormatter(getSafelyValue(value), {\n withSymbol: \"currency\",\n currency: { currencyType: \"USD\" },\n fractionDigits: { quantity: 2, conditionallyMinimumFractionDigits: 2 },\n });\n};\n\n//! Важно! Если придет велью с количеством дробных разрядов БОЛЬШИМ\n//! чем указано в quantity - округлит по правилам округления\n\n// ToDo - symbolPosition временно не реализовано\nexport const formatToPriceWithCurrency = (\n value,\n currencyCode,\n symbolPosition = \"before\",\n) => {\n if (isNaN(Number(value))) return value;\n return intlNumbersFormatter(getSafelyValue(value), {\n withSymbol: \"currency\",\n currency: { currencyType: currencyCode },\n fractionDigits: { quantity: 2, conditionallyMinimumFractionDigits: 2 },\n });\n};\n\n//? Добавляет в конец знак %. Работает как с одиночными значениями, так и с диапазонами.\n\n//? value может быть любое, но ожидается что будет\n//? - числом\n//? - строкой в формате \"значение\"\n//? - строкой в формате \"значение - значение\" (значение_пробел_тире_пробел_значение)\n//? - объект в формате { from: значение, to: значение }\n\n//? Предполагается, что \"значение\" может быть приведено к числу операторм + (пример: +значение приводится к числу).\n//? Если не может быть приведено, то \"значение\" вернется как есть, к результату добавится %\n\n//? Если \"значение\" пустое (getSafelyValue(значение) вернет пустую строку),\n//? то это воспринимается как 0, приводится к 0.00%\n\n//? Одиноково работает как для \".\", так и \",\" в качестве разделителя дробных разрядов\n\n//! Важно! Если придет велью с количеством дробных разрядов БОЛЬШИМ\n//! чем указано в decimalPlaces - округлит по правилам округления\n\nexport const formatAsPercentage = (value, settings) => {\n const {\n isCommonPercentageSymbol = true,\n decimalPlaces = 2,\n beforeValueSymbol = \"\",\n afterValueSymbol = \"\",\n isGlueSameRangesTogether = false,\n\n // ? Тут удобный ф-л, поэтому иной раз удобно обработать обычный диапазан (НЕ проценты).\n // ? Добавил возможность выпиливать значек процентов.\n // todo(VL) - вообще правильно заренеймить (formatAsDiapason), а добавление процентов сделать как опцию,\n // todo(VL) - но как обычно нет времени, нужно будет перечекать по всем проектам где тянется со старым неймингом\n isUseAsSimpleDiapason = false,\n } = getIsOnlyAnObject(settings) ? settings : {};\n let safelyInputValue;\n\n const checkValue = (value) => getSafelyValue(value) || \"0\";\n\n const transform = (valueAsSting) => {\n const processedValue = valueAsSting.replace(/,/g, \".\");\n if (Number.isNaN(Number(processedValue))) return processedValue;\n return `${intlNumbersFormatter(getSafelyValue(Number(processedValue)), {\n fractionDigits: {\n quantity: decimalPlaces,\n minimumFractionDigits: decimalPlaces,\n },\n })}`;\n };\n\n if (getIsOnlyAnObject(value)) {\n safelyInputValue = {\n from: checkValue(value.from),\n to: checkValue(value.to),\n };\n } else {\n safelyInputValue = checkValue(value);\n\n if (safelyInputValue.includes(\" - \")) {\n const valuesArr = safelyInputValue\n .split(\" - \")\n .map((partOfValue) => partOfValue.trim());\n safelyInputValue = {\n from: checkValue(valuesArr[0]),\n to: checkValue(valuesArr[1]),\n };\n } else {\n // Вариант когда велью передано строкой (НЕ объектом) и оно не содержит сепаратора \" - \"\n // - одиночные велью\n // - некорректный диапазон\n return `${beforeValueSymbol}${transform(safelyInputValue)}${afterValueSymbol}${isUseAsSimpleDiapason ? '' : '%'}`;\n }\n }\n\n if (safelyInputValue.from === safelyInputValue.to && !!isGlueSameRangesTogether) {\n return `${beforeValueSymbol}${transform(safelyInputValue.from)}${afterValueSymbol}${isUseAsSimpleDiapason ? '' : '%'}`;\n }\n\n if (isCommonPercentageSymbol)\n return `${beforeValueSymbol}${transform(safelyInputValue.from)} - ${transform(\n safelyInputValue.to,\n )}${afterValueSymbol}${isUseAsSimpleDiapason ? '' : '%'}`;\n else\n return `${beforeValueSymbol}${transform(safelyInputValue.from)}${isUseAsSimpleDiapason ? '' : '%'} - ${transform(\n safelyInputValue.to,\n )}${isUseAsSimpleDiapason ? '' : '%'}${afterValueSymbol}`;\n};\n\n// eslint-disable-next-line no-control-regex\nexport const formatToOnlyASCIICodeText = (text) =>\n getSafelyValue(text).replace(/[^\\x00-\\x7F]+/g, \"\");\n\n// eslint-disable-next-line default-param-last\nexport const formatNumberValueToMask = (inputValue, settings) => {\n const safelyInputValue = getSafelyValue(inputValue);\n\n // default valueSymbol === 'n', default mask === 'nnn-nnn-nnnn'\n const {\n mask = \"XXX-XXX-XXXX\",\n valueSymbol = \"X\",\n isReturnAdvanced = false,\n } = settings || {};\n const processing = mask.split(\"\").reduce(\n (acc, item) => {\n if (acc.value.length) ++acc.cursorPosition;\n acc.newValue.push(\n item === valueSymbol && acc.value.length ? acc.value.shift() : item,\n );\n return acc;\n },\n {\n value: safelyInputValue.split(\"\").filter((sym) => /[0-9]/g.test(sym)),\n newValue: [],\n cursorPosition: 0,\n },\n );\n\n return isReturnAdvanced\n ? {\n value: processing.newValue.join(\"\"),\n cursorPosition: processing.cursorPosition,\n }\n : processing.newValue.join(\"\");\n};\n\nexport const formatToLimitLength = (inputValue, limit) => {\n const value = getSafelyValue(inputValue);\n return limit &&\n typeof limit === \"number\" &&\n !Number.isNaN(limit) &&\n value?.length > limit\n ? value.substr(0, limit)\n : value;\n};\n\nexport const formatToHex = ({ inputValue, withSharp }) => {\n const value = getSafelyValue(inputValue);\n if (withSharp) return `#${value.replace(/[^a-f0-9]/gi, \"\")}`;\n\n return `${value.replace(/[^#a-f0-9]/gi, \"\")}`;\n};\n\nexport function formatToReplaceAllWhiteSpace(str) {\n const value = getSafelyValue(str);\n return value.replace(/\\s+/g, \"\");\n}\n\n// ****************************\n// transform\n// ****************************\n\n// ...\n\n// ****************************\n// filter\n// ****************************\n//? Намерянно выпилил определение дефолтного значение на уровне параметров, чтобы сделать null рабочим значением\n//? decimalPlaces === null теперь точно определяет режим ввода БЕЗ ограничей десятичных знаков\nexport const filterFloat = (inputValue, decimalPlaces) => {\n const replaser = input => ('' + input).replace(/[^\\.\\d]/g, '');\n const value = getSafelyValue(inputValue);\n \n //? safelyDecimalPlaces ТОЧНО либо null, либо целое число\n const safelyDecimalPlaces = (() => {\n if (decimalPlaces === null) return decimalPlaces;\n\n const DEFAULT_VALUE = 2;\n const isNumber = typeof decimalPlaces === 'number' || (typeof decimalPlaces === 'string' && !Number.isNaN(+decimalPlaces));\n\n //? защита от дробного значения decimalPlaces\n return isNumber ? Number((+decimalPlaces).toFixed()) : DEFAULT_VALUE;\n })();\n\n // Обработка кейса если первым символом нажата точка\n if (value.length === 1 && (value[0] === '.' || value[0] === ',')) return '0.';\n\n // Приводим запятые к корректному разделителю, но не выпиливаем\n let output = ('' + value)?.replace(/,/g, '.');\n\n // Выпилить первый ноль, если это не дробь\n if (value.length > 1 && value[0] === '0' && value[1] !== '.' && value[0] !== ',') output = value.slice(1);\n\n const previousValue = '' + output.slice(0, -1);\n const lastSym = '' + output.slice(-1);\n\n // Обработка кейса второй точки в дроби\n if (lastSym === '.' && previousValue.includes('.')) output = previousValue;\n\n // if (localStorage.getItem('useDeb')) debugger;\n\n // Логика ограничения по decimalPlaces\n if (typeof safelyDecimalPlaces === 'number') {\n if (!safelyDecimalPlaces && lastSym === '.') return replaser(previousValue);\n if (previousValue.includes('.') && (previousValue.indexOf('.') + 1 + safelyDecimalPlaces === previousValue?.length)) {\n return replaser(previousValue);\n }\n }\n\n return replaser(output);\n};\n\nexport const filterNumeric = (value, settings) => {\n value = getSafelyValue(value)?.replace(/,/g, \"\");\n const { type = \"float\", decimalPlaces } = settings || {};\n\n const executor = type === \"float\" ? filterFloat : formatOnlyNumbers;\n return executor(getSafelyValue(value), decimalPlaces);\n};\n\nexport const formatToHideValuePartially = (value, settings) => {\n const {\n showSymbolsCount = 4,\n isVisibleFromFront = false,\n isCutOutWhiteSpaces = true,\n } = settings || {};\n const safelyValue = getSafelyValue(value);\n\n const newValue = isCutOutWhiteSpaces\n ? safelyValue.replace(/\\s/g, \"\")\n : safelyValue;\n if (newValue.length <= showSymbolsCount) return newValue;\n\n const hide = (val) =>\n val\n .split(\"\")\n .map(() => \"*\")\n .join(\"\");\n const visiblePart = isVisibleFromFront\n ? newValue.slice(0, showSymbolsCount)\n : newValue.slice(-1 * showSymbolsCount);\n const hiddenPart = isVisibleFromFront\n ? newValue.slice(showSymbolsCount)\n : newValue.slice(0, -1 * showSymbolsCount);\n\n return isVisibleFromFront\n ? `${visiblePart}${hide(hiddenPart)}`\n : `${hide(hiddenPart)}${visiblePart}`;\n};\n"],"mappings":"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"}
|
|
@@ -50,29 +50,31 @@ var addRangeDefault = (from, to, currentValues, decimalPlaces) => {
|
|
|
50
50
|
};
|
|
51
51
|
if (!acc.from && !acc.to) acc.result = [...acc.result, range];
|
|
52
52
|
else if (!acc.from && acc.to) processTo();
|
|
53
|
-
else if (acc.from && acc.to)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
else if (acc.from && acc.to) {
|
|
54
|
+
if (acc.from <= range.from) {
|
|
55
|
+
acc.result = [...acc.result, { from: acc.from }];
|
|
56
|
+
acc.from = null;
|
|
57
|
+
processTo();
|
|
58
|
+
} else if (isIncludesFrom) {
|
|
59
|
+
acc.result = [
|
|
60
|
+
...acc.result,
|
|
61
|
+
{
|
|
62
|
+
from: range.from,
|
|
63
|
+
to: Math.round10(acc.from - step, -1 * decimalPlaces)
|
|
64
|
+
},
|
|
65
|
+
{ from: acc.from }
|
|
66
|
+
];
|
|
67
|
+
acc.from = null;
|
|
68
|
+
processTo();
|
|
69
|
+
} else acc.result = [
|
|
59
70
|
...acc.result,
|
|
71
|
+
...!isRangeMustBeIncludet ? [range] : [],
|
|
60
72
|
{
|
|
61
|
-
from:
|
|
62
|
-
to: Math.round10(acc.
|
|
63
|
-
}
|
|
64
|
-
{ from: acc.from }
|
|
73
|
+
from: Math.round10(acc.from, -1 * decimalPlaces),
|
|
74
|
+
to: Math.round10(acc.to, -1 * decimalPlaces)
|
|
75
|
+
}
|
|
65
76
|
];
|
|
66
|
-
|
|
67
|
-
processTo();
|
|
68
|
-
} else acc.result = [
|
|
69
|
-
...acc.result,
|
|
70
|
-
...!isRangeMustBeIncludet ? [range] : [],
|
|
71
|
-
{
|
|
72
|
-
from: Math.round10(acc.from, -1 * decimalPlaces),
|
|
73
|
-
to: Math.round10(acc.to, -1 * decimalPlaces)
|
|
74
|
-
}
|
|
75
|
-
];
|
|
77
|
+
}
|
|
76
78
|
return acc;
|
|
77
79
|
}, {
|
|
78
80
|
from,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.js","names":[],"sources":["../../../src/Functions/operations.js"],"sourcesContent":["// Взято из https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n// При импорте любой ф-и из этого файла отработает самовызывающаяся ф-я и расширит\n// объект Math 3-мя ф-ми: round10, floor10, ceil10\n(function () {\n /**\n * Корректировка округления десятичных дробей.\n *\n * @param {String} type Тип корректировки.\n * @param {Number} value Число.\n * @param {Integer} exp Показатель степени (десятичный логарифм основания корректировки).\n * @returns {Number} Скорректированное значение.\n */\n function decimalAdjust(type, value, exp) {\n // Если степень не определена, либо равна нулю...\n if (typeof exp === \"undefined\" || Number(exp) === 0) {\n return Math[type](value);\n }\n value = Number(value);\n exp = Number(exp);\n // Если значение не является числом, либо степень не является целым числом...\n if (isNaN(value) || !(typeof exp === \"number\" && exp % 1 === 0)) {\n return NaN;\n }\n // Сдвиг разрядов\n value = value.toString().split(\"e\");\n value = Math[type](\n Number(value[0] + \"e\" + (value[1] ? Number(value[1]) - exp : -exp)),\n );\n // Обратный сдвиг\n value = value.toString().split(\"e\");\n return Number(value[0] + \"e\" + (value[1] ? Number(value[1]) + exp : exp));\n }\n\n // Десятичное округление к ближайшему\n if (!Math.round10) {\n Math.round10 = function (value, exp) {\n return decimalAdjust(\"round\", value, exp);\n };\n }\n // Десятичное округление вниз\n if (!Math.floor10) {\n Math.floor10 = function (value, exp) {\n return decimalAdjust(\"floor\", value, exp);\n };\n }\n // Десятичное округление вверх\n if (!Math.ceil10) {\n Math.ceil10 = function (value, exp) {\n return decimalAdjust(\"ceil\", value, exp);\n };\n }\n})();\n\nexport const addRangeDefault = (from, to, currentValues, decimalPlaces) => {\n if (!currentValues?.length) return [{ from, to }];\n const step = decimalPlaces ? Math.pow(10, -1 * decimalPlaces) : 1;\n\n const resultOfProcessAddingRange = currentValues.reduce(\n (acc, range) => {\n const isIncludesFrom =\n Boolean(acc.from) && range.from < acc.from && range.to >= acc.from;\n const isIncludesTo =\n Boolean(acc.to) && range.from <= acc.to && range.to > acc.to;\n const isRangeMustBeIncludet =\n Boolean(acc.from) &&\n Boolean(acc.to) &&\n acc.from <= range.from &&\n acc.to >= range.to;\n\n const processTo = () => {\n const lastAccRange = acc.result[acc.result.length - 1];\n\n if (acc.to < range.from) {\n lastAccRange.to = acc.to;\n acc.to = null;\n acc.result = [...acc.result, range];\n } else if (isIncludesTo) {\n lastAccRange.to = acc.to;\n acc.result = [\n ...acc.result,\n {\n from: Math.round10(acc.to + step, -1 * decimalPlaces),\n to: range.to,\n },\n ];\n acc.to = null;\n } else if (acc.to === range.to) {\n lastAccRange.to = acc.to;\n acc.to = null;\n }\n };\n\n if (!acc.from && !acc.to) acc.result = [...acc.result, range];\n else if (!acc.from && acc.to) processTo();\n else if (acc.from && acc.to) {\n if (acc.from <= range.from) {\n acc.result = [...acc.result, { from: acc.from }];\n acc.from = null;\n processTo();\n } else if (isIncludesFrom) {\n acc.result = [\n ...acc.result,\n {\n from: range.from,\n to: Math.round10(acc.from - step, -1 * decimalPlaces),\n },\n { from: acc.from },\n ];\n acc.from = null;\n processTo();\n } else {\n acc.result = [\n ...acc.result,\n ...(!isRangeMustBeIncludet ? [range] : []),\n {\n from: Math.round10(acc.from, -1 * decimalPlaces),\n to: Math.round10(acc.to, -1 * decimalPlaces),\n },\n ];\n }\n }\n return acc;\n },\n { from, to, result: [] },\n );\n\n const result = resultOfProcessAddingRange.result;\n if (!result[result.length - 1].to) result[result.length - 1].to = to;\n return result;\n};\n"],"mappings":";CAGC,WAAY;CASX,SAAS,cAAc,MAAM,OAAO,KAAK;EAEvC,IAAI,OAAO,QAAQ,eAAe,OAAO,GAAG,MAAM,GAChD,OAAO,KAAK,KAAI,CAAE,KAAK;EAEzB,QAAQ,OAAO,KAAK;EACpB,MAAM,OAAO,GAAG;EAEhB,IAAI,MAAM,KAAK,KAAK,EAAE,OAAO,QAAQ,YAAY,MAAM,MAAM,IAC3D,OAAO;EAGT,QAAQ,MAAM,SAAS,CAAA,CAAE,MAAM,GAAG;EAClC,QAAQ,KAAK,KAAI,CACf,OAAO,MAAM,KAAK,OAAO,MAAM,KAAK,OAAO,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CACpE;EAEA,QAAQ,MAAM,SAAS,CAAA,CAAE,MAAM,GAAG;EAClC,OAAO,OAAO,MAAM,KAAK,OAAO,MAAM,KAAK,OAAO,MAAM,EAAE,IAAI,MAAM,IAAI;CAC1E;CAGA,IAAI,CAAC,KAAK,SACR,KAAK,UAAU,SAAU,OAAO,KAAK;EACnC,OAAO,cAAc,SAAS,OAAO,GAAG;CAC1C;CAGF,IAAI,CAAC,KAAK,SACR,KAAK,UAAU,SAAU,OAAO,KAAK;EACnC,OAAO,cAAc,SAAS,OAAO,GAAG;CAC1C;CAGF,IAAI,CAAC,KAAK,QACR,KAAK,SAAS,SAAU,OAAO,KAAK;EAClC,OAAO,cAAc,QAAQ,OAAO,GAAG;CACzC;AAEJ,EAAA,CAAG;AAEI,IAAM,mBAAmB,MAAM,IAAI,eAAe,kBAAkB;CACzE,IAAI,CAAC,eAAe,QAAQ,OAAO,CAAC;EAAE;EAAM;CAAG,CAAC;CAChD,MAAM,OAAO,gBAAgB,KAAK,IAAI,IAAI,KAAK,aAAa,IAAI;CAuEhE,MAAM,SArE6B,cAAc,QAC9C,KAAK,UAAU;EACd,MAAM,iBACJ,QAAQ,IAAI,IAAI,KAAK,MAAM,OAAO,IAAI,QAAQ,MAAM,MAAM,IAAI;EAChE,MAAM,eACJ,QAAQ,IAAI,EAAE,KAAK,MAAM,QAAQ,IAAI,MAAM,MAAM,KAAK,IAAI;EAC5D,MAAM,wBACJ,QAAQ,IAAI,IAAI,KAChB,QAAQ,IAAI,EAAE,KACd,IAAI,QAAQ,MAAM,QAClB,IAAI,MAAM,MAAM;EAElB,MAAM,kBAAkB;GACtB,MAAM,eAAe,IAAI,OAAO,IAAI,OAAO,SAAS;GAEpD,IAAI,IAAI,KAAK,MAAM,MAAM;IACvB,aAAa,KAAK,IAAI;IACtB,IAAI,KAAK;IACT,IAAI,SAAS,CAAC,GAAG,IAAI,QAAQ,KAAK;GACpC,OAAA,IAAW,cAAc;IACvB,aAAa,KAAK,IAAI;IACtB,IAAI,SAAS,CACX,GAAG,IAAI,QACP;KACE,MAAM,KAAK,QAAQ,IAAI,KAAK,MAAM,KAAK,aAAa;KACpD,IAAI,MAAM;IACZ,CACF;IACA,IAAI,KAAK;GACX,OAAA,IAAW,IAAI,OAAO,MAAM,IAAI;IAC9B,aAAa,KAAK,IAAI;IACtB,IAAI,KAAK;GACX;EACF;EAEA,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAI,SAAS,CAAC,GAAG,IAAI,QAAQ,KAAK;OAAA,IACnD,CAAC,IAAI,QAAQ,IAAI,IAAI,UAAU;OAAA,IAC/B,IAAI,QAAQ,IAAI,
|
|
1
|
+
{"version":3,"file":"operations.js","names":[],"sources":["../../../src/Functions/operations.js"],"sourcesContent":["// Взято из https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n// При импорте любой ф-и из этого файла отработает самовызывающаяся ф-я и расширит\n// объект Math 3-мя ф-ми: round10, floor10, ceil10\n(function () {\n /**\n * Корректировка округления десятичных дробей.\n *\n * @param {String} type Тип корректировки.\n * @param {Number} value Число.\n * @param {Integer} exp Показатель степени (десятичный логарифм основания корректировки).\n * @returns {Number} Скорректированное значение.\n */\n function decimalAdjust(type, value, exp) {\n // Если степень не определена, либо равна нулю...\n if (typeof exp === \"undefined\" || Number(exp) === 0) {\n return Math[type](value);\n }\n value = Number(value);\n exp = Number(exp);\n // Если значение не является числом, либо степень не является целым числом...\n if (isNaN(value) || !(typeof exp === \"number\" && exp % 1 === 0)) {\n return NaN;\n }\n // Сдвиг разрядов\n value = value.toString().split(\"e\");\n value = Math[type](\n Number(value[0] + \"e\" + (value[1] ? Number(value[1]) - exp : -exp)),\n );\n // Обратный сдвиг\n value = value.toString().split(\"e\");\n return Number(value[0] + \"e\" + (value[1] ? Number(value[1]) + exp : exp));\n }\n\n // Десятичное округление к ближайшему\n if (!Math.round10) {\n Math.round10 = function (value, exp) {\n return decimalAdjust(\"round\", value, exp);\n };\n }\n // Десятичное округление вниз\n if (!Math.floor10) {\n Math.floor10 = function (value, exp) {\n return decimalAdjust(\"floor\", value, exp);\n };\n }\n // Десятичное округление вверх\n if (!Math.ceil10) {\n Math.ceil10 = function (value, exp) {\n return decimalAdjust(\"ceil\", value, exp);\n };\n }\n})();\n\nexport const addRangeDefault = (from, to, currentValues, decimalPlaces) => {\n if (!currentValues?.length) return [{ from, to }];\n const step = decimalPlaces ? Math.pow(10, -1 * decimalPlaces) : 1;\n\n const resultOfProcessAddingRange = currentValues.reduce(\n (acc, range) => {\n const isIncludesFrom =\n Boolean(acc.from) && range.from < acc.from && range.to >= acc.from;\n const isIncludesTo =\n Boolean(acc.to) && range.from <= acc.to && range.to > acc.to;\n const isRangeMustBeIncludet =\n Boolean(acc.from) &&\n Boolean(acc.to) &&\n acc.from <= range.from &&\n acc.to >= range.to;\n\n const processTo = () => {\n const lastAccRange = acc.result[acc.result.length - 1];\n\n if (acc.to < range.from) {\n lastAccRange.to = acc.to;\n acc.to = null;\n acc.result = [...acc.result, range];\n } else if (isIncludesTo) {\n lastAccRange.to = acc.to;\n acc.result = [\n ...acc.result,\n {\n from: Math.round10(acc.to + step, -1 * decimalPlaces),\n to: range.to,\n },\n ];\n acc.to = null;\n } else if (acc.to === range.to) {\n lastAccRange.to = acc.to;\n acc.to = null;\n }\n };\n\n if (!acc.from && !acc.to) acc.result = [...acc.result, range];\n else if (!acc.from && acc.to) processTo();\n else if (acc.from && acc.to) {\n if (acc.from <= range.from) {\n acc.result = [...acc.result, { from: acc.from }];\n acc.from = null;\n processTo();\n } else if (isIncludesFrom) {\n acc.result = [\n ...acc.result,\n {\n from: range.from,\n to: Math.round10(acc.from - step, -1 * decimalPlaces),\n },\n { from: acc.from },\n ];\n acc.from = null;\n processTo();\n } else {\n acc.result = [\n ...acc.result,\n ...(!isRangeMustBeIncludet ? [range] : []),\n {\n from: Math.round10(acc.from, -1 * decimalPlaces),\n to: Math.round10(acc.to, -1 * decimalPlaces),\n },\n ];\n }\n }\n return acc;\n },\n { from, to, result: [] },\n );\n\n const result = resultOfProcessAddingRange.result;\n if (!result[result.length - 1].to) result[result.length - 1].to = to;\n return result;\n};\n"],"mappings":";CAGC,WAAY;CASX,SAAS,cAAc,MAAM,OAAO,KAAK;EAEvC,IAAI,OAAO,QAAQ,eAAe,OAAO,GAAG,MAAM,GAChD,OAAO,KAAK,KAAI,CAAE,KAAK;EAEzB,QAAQ,OAAO,KAAK;EACpB,MAAM,OAAO,GAAG;EAEhB,IAAI,MAAM,KAAK,KAAK,EAAE,OAAO,QAAQ,YAAY,MAAM,MAAM,IAC3D,OAAO;EAGT,QAAQ,MAAM,SAAS,CAAA,CAAE,MAAM,GAAG;EAClC,QAAQ,KAAK,KAAI,CACf,OAAO,MAAM,KAAK,OAAO,MAAM,KAAK,OAAO,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CACpE;EAEA,QAAQ,MAAM,SAAS,CAAA,CAAE,MAAM,GAAG;EAClC,OAAO,OAAO,MAAM,KAAK,OAAO,MAAM,KAAK,OAAO,MAAM,EAAE,IAAI,MAAM,IAAI;CAC1E;CAGA,IAAI,CAAC,KAAK,SACR,KAAK,UAAU,SAAU,OAAO,KAAK;EACnC,OAAO,cAAc,SAAS,OAAO,GAAG;CAC1C;CAGF,IAAI,CAAC,KAAK,SACR,KAAK,UAAU,SAAU,OAAO,KAAK;EACnC,OAAO,cAAc,SAAS,OAAO,GAAG;CAC1C;CAGF,IAAI,CAAC,KAAK,QACR,KAAK,SAAS,SAAU,OAAO,KAAK;EAClC,OAAO,cAAc,QAAQ,OAAO,GAAG;CACzC;AAEJ,EAAA,CAAG;AAEI,IAAM,mBAAmB,MAAM,IAAI,eAAe,kBAAkB;CACzE,IAAI,CAAC,eAAe,QAAQ,OAAO,CAAC;EAAE;EAAM;CAAG,CAAC;CAChD,MAAM,OAAO,gBAAgB,KAAK,IAAI,IAAI,KAAK,aAAa,IAAI;CAuEhE,MAAM,SArE6B,cAAc,QAC9C,KAAK,UAAU;EACd,MAAM,iBACJ,QAAQ,IAAI,IAAI,KAAK,MAAM,OAAO,IAAI,QAAQ,MAAM,MAAM,IAAI;EAChE,MAAM,eACJ,QAAQ,IAAI,EAAE,KAAK,MAAM,QAAQ,IAAI,MAAM,MAAM,KAAK,IAAI;EAC5D,MAAM,wBACJ,QAAQ,IAAI,IAAI,KAChB,QAAQ,IAAI,EAAE,KACd,IAAI,QAAQ,MAAM,QAClB,IAAI,MAAM,MAAM;EAElB,MAAM,kBAAkB;GACtB,MAAM,eAAe,IAAI,OAAO,IAAI,OAAO,SAAS;GAEpD,IAAI,IAAI,KAAK,MAAM,MAAM;IACvB,aAAa,KAAK,IAAI;IACtB,IAAI,KAAK;IACT,IAAI,SAAS,CAAC,GAAG,IAAI,QAAQ,KAAK;GACpC,OAAA,IAAW,cAAc;IACvB,aAAa,KAAK,IAAI;IACtB,IAAI,SAAS,CACX,GAAG,IAAI,QACP;KACE,MAAM,KAAK,QAAQ,IAAI,KAAK,MAAM,KAAK,aAAa;KACpD,IAAI,MAAM;IACZ,CACF;IACA,IAAI,KAAK;GACX,OAAA,IAAW,IAAI,OAAO,MAAM,IAAI;IAC9B,aAAa,KAAK,IAAI;IACtB,IAAI,KAAK;GACX;EACF;EAEA,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAI,SAAS,CAAC,GAAG,IAAI,QAAQ,KAAK;OAAA,IACnD,CAAC,IAAI,QAAQ,IAAI,IAAI,UAAU;OAAA,IAC/B,IAAI,QAAQ,IAAI,IAAI;GAC3B,IAAI,IAAI,QAAQ,MAAM,MAAM;IAC1B,IAAI,SAAS,CAAC,GAAG,IAAI,QAAQ,EAAE,MAAM,IAAI,KAAK,CAAC;IAC/C,IAAI,OAAO;IACX,UAAU;GACZ,OAAA,IAAW,gBAAgB;IACzB,IAAI,SAAS;KACX,GAAG,IAAI;KACP;MACE,MAAM,MAAM;MACZ,IAAI,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,aAAa;KACtD;KACA,EAAE,MAAM,IAAI,KAAK;IACnB;IACA,IAAI,OAAO;IACX,UAAU;GACZ,OACE,IAAI,SAAS;IACX,GAAG,IAAI;IACP,GAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,CAAC;IACxC;KACE,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,aAAa;KAC/C,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,aAAa;IAC7C;GACF;EAEJ;EACA,OAAO;CACT,GACA;EAAE;EAAM;EAAI,QAAQ,CAAC;CAAE,CAGV,CAAA,CAA2B;CAC1C,IAAI,CAAC,OAAO,OAAO,SAAS,EAAC,CAAE,IAAI,OAAO,OAAO,SAAS,EAAC,CAAE,KAAK;CAClE,OAAO;AACT"}
|
|
@@ -6,9 +6,10 @@ function ObjectWithIterableObjects({ form, setForm, FormFields }) {
|
|
|
6
6
|
const template = Array.isArray(mainArg) ? [] : typeof mainArg === "object" ? {} : null;
|
|
7
7
|
if (!template) return void 0;
|
|
8
8
|
return args.reduce((result, item) => {
|
|
9
|
-
if (MainArgProto === "Array")
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
if (MainArgProto === "Array") {
|
|
10
|
+
if (Array.isArray(item)) return [...result, ...item];
|
|
11
|
+
else return [...result, item];
|
|
12
|
+
} else if (MainArgProto === "Object") return {
|
|
12
13
|
...result,
|
|
13
14
|
...item
|
|
14
15
|
};
|
|
@@ -51,9 +52,10 @@ function ObjectWithIterableObjects({ form, setForm, FormFields }) {
|
|
|
51
52
|
};
|
|
52
53
|
result.item = fields2[key2] || fields2.find((f) => f.key === key2);
|
|
53
54
|
if (!result.item) return result;
|
|
54
|
-
if (Array.isArray(fields2))
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
if (Array.isArray(fields2)) {
|
|
56
|
+
if (!isNaN(parseInt(key2, 10))) result.fields.splice(key2, 1);
|
|
57
|
+
else result.fields = result.fields.filter((f) => f.key !== key2);
|
|
58
|
+
} else if (typeof fields2 === "object") result.fields = Object.values(fields2).reduce((object, { key: fKey }) => {
|
|
57
59
|
if (key2 !== fKey) object[key2] = fields2[key2];
|
|
58
60
|
return object;
|
|
59
61
|
}, {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectWithIterableObjects.js","names":["fields","key","field"],"sources":["../../../../../src/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js"],"sourcesContent":["export default function ObjectWithIterableObjects({\n form,\n setForm,\n FormFields,\n}) {\n const joinData = (...args) => {\n const [mainArg] = args;\n const MainArgProto = Array.isArray(mainArg)\n ? \"Array\"\n : typeof mainArg === \"object\"\n ? \"Object\"\n : undefined;\n const template = Array.isArray(mainArg)\n ? []\n : typeof mainArg === \"object\"\n ? {}\n : null;\n\n if (!template) return undefined;\n\n return args.reduce((result, item) => {\n if (MainArgProto === \"Array\") {\n if (Array.isArray(item)) {\n return [...result, ...item];\n } else {\n return [...result, item];\n }\n } else if (MainArgProto === \"Object\") {\n return { ...result, ...item };\n } else {\n return template;\n }\n }, template);\n };\n\n const getFieldData = (key) => {\n if (Array.isArray(FormFields)) {\n return FormFields[key] || FormFields.find((f) => f.key === key);\n } else if (typeof FormFields === \"object\") {\n return (\n FormFields[key] || Object.values(FormFields).find((f) => f.key === key)\n );\n } else {\n return undefined;\n }\n };\n const getFormFields = () => {\n return form.fields || form;\n };\n const getFormField = (key) => {\n // eslint-disable-next-line no-undef\n if (FormProto === \"Array\") {\n return getFormFields().find((field) => field.key === key);\n // eslint-disable-next-line no-undef\n } else if (FormProto === \"Object\") {\n return (\n Object.values(getFormFields()).find((field) => field.key === key) ||\n Object.keys(getFormFields()).reduce((result, field) => {\n if (field === key) result = getFormFields()[field];\n return result;\n }, {})\n );\n } else {\n return undefined;\n }\n };\n const setFormFields = (data) => {\n const isFunction = typeof data === \"function\";\n\n setForm((state) => {\n if (state.fields) {\n return {\n ...state,\n fields: isFunction ? data(state.fields) : data,\n };\n } else {\n return isFunction ? data(state) : data;\n }\n });\n };\n const setFormField = (data, key = null) => {\n const isFunction = typeof data === \"function\";\n\n setFormFields((fields) => {\n const pop = (fields, key) => {\n const result = { fields, item: undefined };\n\n result.item = fields[key] || fields.find((f) => f.key === key);\n\n if (!result.item) return result;\n\n if (Array.isArray(fields)) {\n const index = parseInt(key, 10);\n if (!isNaN(index)) {\n result.fields.splice(key, 1);\n } else {\n result.fields = result.fields.filter((f) => f.key !== key);\n }\n } else if (typeof fields === \"object\") {\n result.fields = Object.values(fields).reduce(\n (object, { key: fKey }) => {\n if (key !== fKey) {\n object[key] = fields[key];\n }\n return object;\n },\n {},\n );\n }\n\n return result;\n };\n const update = (fields) => {\n //KEY is NULLable\n if (!key) {\n return data.key\n ? Object.values(fields).reduce((result, field, i) => {\n const index = fields[field.key] ? field.key : i;\n\n return {\n ...result,\n [index]:\n data.key === field.key\n ? isFunction\n ? data(field)\n : data\n : field,\n };\n }, {})\n : {\n ...fields,\n [fields.length || 0]: isFunction ? data({}) : data,\n };\n }\n\n const { fields: filtered, item: field } = pop(fields, key);\n\n const updatedField = isFunction\n ? data(field || {})\n : { ...field, ...data };\n return joinData(\n filtered,\n fields[key] ? { [key]: updatedField } : updatedField,\n );\n };\n\n return update(fields);\n });\n };\n\n return {\n joinData,\n getFieldData,\n getFormFields,\n getFormField,\n setFormFields,\n setFormField,\n };\n}\n"],"mappings":";AAAA,SAAwB,0BAA0B,EAChD,MACA,SACA,cACC;CACD,MAAM,YAAW,GAAI,SAAS;EAC5B,MAAM,CAAC,WAAW;EAClB,MAAM,eAAe,MAAM,QAAQ,OAAO,IACtC,UACA,OAAO,YAAY,WACjB,WACA,KAAA;EACN,MAAM,WAAW,MAAM,QAAQ,OAAO,IAClC,CAAC,IACD,OAAO,YAAY,WACjB,CAAC,IACD;EAEN,IAAI,CAAC,UAAU,OAAO,KAAA;EAEtB,OAAO,KAAK,QAAQ,QAAQ,SAAS;GACnC,IAAI,iBAAiB,
|
|
1
|
+
{"version":3,"file":"ObjectWithIterableObjects.js","names":["fields","key","field"],"sources":["../../../../../src/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js"],"sourcesContent":["export default function ObjectWithIterableObjects({\n form,\n setForm,\n FormFields,\n}) {\n const joinData = (...args) => {\n const [mainArg] = args;\n const MainArgProto = Array.isArray(mainArg)\n ? \"Array\"\n : typeof mainArg === \"object\"\n ? \"Object\"\n : undefined;\n const template = Array.isArray(mainArg)\n ? []\n : typeof mainArg === \"object\"\n ? {}\n : null;\n\n if (!template) return undefined;\n\n return args.reduce((result, item) => {\n if (MainArgProto === \"Array\") {\n if (Array.isArray(item)) {\n return [...result, ...item];\n } else {\n return [...result, item];\n }\n } else if (MainArgProto === \"Object\") {\n return { ...result, ...item };\n } else {\n return template;\n }\n }, template);\n };\n\n const getFieldData = (key) => {\n if (Array.isArray(FormFields)) {\n return FormFields[key] || FormFields.find((f) => f.key === key);\n } else if (typeof FormFields === \"object\") {\n return (\n FormFields[key] || Object.values(FormFields).find((f) => f.key === key)\n );\n } else {\n return undefined;\n }\n };\n const getFormFields = () => {\n return form.fields || form;\n };\n const getFormField = (key) => {\n // eslint-disable-next-line no-undef\n if (FormProto === \"Array\") {\n return getFormFields().find((field) => field.key === key);\n // eslint-disable-next-line no-undef\n } else if (FormProto === \"Object\") {\n return (\n Object.values(getFormFields()).find((field) => field.key === key) ||\n Object.keys(getFormFields()).reduce((result, field) => {\n if (field === key) result = getFormFields()[field];\n return result;\n }, {})\n );\n } else {\n return undefined;\n }\n };\n const setFormFields = (data) => {\n const isFunction = typeof data === \"function\";\n\n setForm((state) => {\n if (state.fields) {\n return {\n ...state,\n fields: isFunction ? data(state.fields) : data,\n };\n } else {\n return isFunction ? data(state) : data;\n }\n });\n };\n const setFormField = (data, key = null) => {\n const isFunction = typeof data === \"function\";\n\n setFormFields((fields) => {\n const pop = (fields, key) => {\n const result = { fields, item: undefined };\n\n result.item = fields[key] || fields.find((f) => f.key === key);\n\n if (!result.item) return result;\n\n if (Array.isArray(fields)) {\n const index = parseInt(key, 10);\n if (!isNaN(index)) {\n result.fields.splice(key, 1);\n } else {\n result.fields = result.fields.filter((f) => f.key !== key);\n }\n } else if (typeof fields === \"object\") {\n result.fields = Object.values(fields).reduce(\n (object, { key: fKey }) => {\n if (key !== fKey) {\n object[key] = fields[key];\n }\n return object;\n },\n {},\n );\n }\n\n return result;\n };\n const update = (fields) => {\n //KEY is NULLable\n if (!key) {\n return data.key\n ? Object.values(fields).reduce((result, field, i) => {\n const index = fields[field.key] ? field.key : i;\n\n return {\n ...result,\n [index]:\n data.key === field.key\n ? isFunction\n ? data(field)\n : data\n : field,\n };\n }, {})\n : {\n ...fields,\n [fields.length || 0]: isFunction ? data({}) : data,\n };\n }\n\n const { fields: filtered, item: field } = pop(fields, key);\n\n const updatedField = isFunction\n ? data(field || {})\n : { ...field, ...data };\n return joinData(\n filtered,\n fields[key] ? { [key]: updatedField } : updatedField,\n );\n };\n\n return update(fields);\n });\n };\n\n return {\n joinData,\n getFieldData,\n getFormFields,\n getFormField,\n setFormFields,\n setFormField,\n };\n}\n"],"mappings":"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"}
|
|
@@ -6,9 +6,10 @@ function General({ form, FormFields = [] } = {}) {
|
|
|
6
6
|
const template = Array.isArray(mainArg) ? [] : typeof mainArg === "object" ? {} : null;
|
|
7
7
|
if (!template) return void 0;
|
|
8
8
|
return args.reduce((result, item) => {
|
|
9
|
-
if (MainArgProto === "Array")
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
if (MainArgProto === "Array") {
|
|
10
|
+
if (Array.isArray(item)) return [...result, ...item];
|
|
11
|
+
else return [...result, item];
|
|
12
|
+
} else if (MainArgProto === "Object") return {
|
|
12
13
|
...result,
|
|
13
14
|
...item
|
|
14
15
|
};
|
|
@@ -16,9 +17,10 @@ function General({ form, FormFields = [] } = {}) {
|
|
|
16
17
|
}, template);
|
|
17
18
|
};
|
|
18
19
|
const getFieldData = (key) => {
|
|
19
|
-
if (Array.isArray(FormFields))
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
if (Array.isArray(FormFields)) {
|
|
21
|
+
if (FormFields[key]) return { ...FormFields[key] };
|
|
22
|
+
else return { ...FormFields.find((f) => f.key === key) };
|
|
23
|
+
} else if (typeof FormFields === "object") return { ...FormFields[key] };
|
|
22
24
|
else return;
|
|
23
25
|
};
|
|
24
26
|
const getFormFields = (argForm = form) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"General.js","names":["field"],"sources":["../../../../../src/Functions/useFormTools/functions/General.js"],"sourcesContent":["export default function General({ form, FormFields = [] } = {}) {\n const joinData = (...args) => {\n const [mainArg] = args;\n const MainArgProto = Array.isArray(mainArg)\n ? \"Array\"\n : typeof mainArg === \"object\"\n ? \"Object\"\n : undefined;\n const template = Array.isArray(mainArg)\n ? []\n : typeof mainArg === \"object\"\n ? {}\n : null;\n\n if (!template) return undefined;\n\n return args.reduce((result, item) => {\n if (MainArgProto === \"Array\") {\n if (Array.isArray(item)) {\n return [...result, ...item];\n } else {\n return [...result, item];\n }\n } else if (MainArgProto === \"Object\") {\n return { ...result, ...item };\n } else {\n return template;\n }\n }, template);\n };\n const getFieldData = (key) => {\n if (Array.isArray(FormFields)) {\n if (FormFields[key]) {\n return { ...FormFields[key] };\n } else {\n return { ...FormFields.find((f) => f.key === key) };\n }\n } else if (typeof FormFields === \"object\") {\n return (\n { ...FormFields[key] } || {\n ...Object.values(FormFields).find((f) => f.key === key),\n }\n );\n } else {\n return undefined;\n }\n };\n const getFormFields = (argForm = form) => {\n return argForm?.fields || argForm;\n };\n const getFormFieldsAsArray = (fields) => {\n if (Array.isArray(fields)) return fields;\n\n if (typeof fields === \"object\") {\n return Object.values(fields);\n }\n\n return fields;\n };\n const getFormFieldsKeys = (fields = getFormFields()) => {\n if (Array.isArray(fields)) return fields.map(({ key }) => key);\n\n if (typeof fields === \"object\") {\n return Object.values(fields).map(({ key }) => key);\n }\n\n return fields;\n };\n const popFormField = (fields, key) => {\n const result = { item: undefined, itemIndex: undefined };\n\n if (Array.isArray(fields)) {\n result.item = fields?.find((f) => f.key === key);\n result.itemIndex = result.item\n ? fields.findIndex((f) => f.key === key)\n : fields.length;\n } else if (typeof fields === \"object\") {\n result.item =\n fields[key] || Object.values(fields).find((f) => f.key === key);\n result.itemIndex = result.item\n ? fields[key]\n ? key\n : Object.values(fields).findIndex((f) => f.key === key)\n : key;\n }\n\n return result;\n };\n const updateFormField = (fields, data, key) => {\n const isFunction = typeof data === \"function\";\n //KEY is NULLable\n if (!key) {\n return data.key\n ? Object.values(fields).reduce((result, field, i) => {\n const index = fields[field.key] ? field.key : i;\n\n return {\n ...result,\n [index]:\n data.key === field.key\n ? isFunction\n ? data(field)\n : data\n : field,\n };\n }, {})\n : {\n ...fields,\n [fields.length || 0]: isFunction ? data({}) : data,\n };\n }\n\n const { item: field = data, itemIndex } = popFormField(fields, key);\n\n fields[itemIndex] = isFunction ? data(field || {}) : { ...field, ...data };\n\n return fields;\n };\n\n const getFieldClassName = (key, type) => {\n return `form-${type}_field-${key}`;\n };\n\n return {\n joinData,\n getFieldData,\n popFormField,\n updateFormField,\n getFormFields,\n getFormFieldsAsArray,\n getFieldClassName,\n getFormFieldsKeys,\n };\n}\n"],"mappings":";AAAA,SAAwB,QAAQ,EAAE,MAAM,aAAa,CAAC,MAAM,CAAC,GAAG;CAC9D,MAAM,YAAW,GAAI,SAAS;EAC5B,MAAM,CAAC,WAAW;EAClB,MAAM,eAAe,MAAM,QAAQ,OAAO,IACtC,UACA,OAAO,YAAY,WACjB,WACA,KAAA;EACN,MAAM,WAAW,MAAM,QAAQ,OAAO,IAClC,CAAC,IACD,OAAO,YAAY,WACjB,CAAC,IACD;EAEN,IAAI,CAAC,UAAU,OAAO,KAAA;EAEtB,OAAO,KAAK,QAAQ,QAAQ,SAAS;GACnC,IAAI,iBAAiB,
|
|
1
|
+
{"version":3,"file":"General.js","names":["field"],"sources":["../../../../../src/Functions/useFormTools/functions/General.js"],"sourcesContent":["export default function General({ form, FormFields = [] } = {}) {\n const joinData = (...args) => {\n const [mainArg] = args;\n const MainArgProto = Array.isArray(mainArg)\n ? \"Array\"\n : typeof mainArg === \"object\"\n ? \"Object\"\n : undefined;\n const template = Array.isArray(mainArg)\n ? []\n : typeof mainArg === \"object\"\n ? {}\n : null;\n\n if (!template) return undefined;\n\n return args.reduce((result, item) => {\n if (MainArgProto === \"Array\") {\n if (Array.isArray(item)) {\n return [...result, ...item];\n } else {\n return [...result, item];\n }\n } else if (MainArgProto === \"Object\") {\n return { ...result, ...item };\n } else {\n return template;\n }\n }, template);\n };\n const getFieldData = (key) => {\n if (Array.isArray(FormFields)) {\n if (FormFields[key]) {\n return { ...FormFields[key] };\n } else {\n return { ...FormFields.find((f) => f.key === key) };\n }\n } else if (typeof FormFields === \"object\") {\n return (\n { ...FormFields[key] } || {\n ...Object.values(FormFields).find((f) => f.key === key),\n }\n );\n } else {\n return undefined;\n }\n };\n const getFormFields = (argForm = form) => {\n return argForm?.fields || argForm;\n };\n const getFormFieldsAsArray = (fields) => {\n if (Array.isArray(fields)) return fields;\n\n if (typeof fields === \"object\") {\n return Object.values(fields);\n }\n\n return fields;\n };\n const getFormFieldsKeys = (fields = getFormFields()) => {\n if (Array.isArray(fields)) return fields.map(({ key }) => key);\n\n if (typeof fields === \"object\") {\n return Object.values(fields).map(({ key }) => key);\n }\n\n return fields;\n };\n const popFormField = (fields, key) => {\n const result = { item: undefined, itemIndex: undefined };\n\n if (Array.isArray(fields)) {\n result.item = fields?.find((f) => f.key === key);\n result.itemIndex = result.item\n ? fields.findIndex((f) => f.key === key)\n : fields.length;\n } else if (typeof fields === \"object\") {\n result.item =\n fields[key] || Object.values(fields).find((f) => f.key === key);\n result.itemIndex = result.item\n ? fields[key]\n ? key\n : Object.values(fields).findIndex((f) => f.key === key)\n : key;\n }\n\n return result;\n };\n const updateFormField = (fields, data, key) => {\n const isFunction = typeof data === \"function\";\n //KEY is NULLable\n if (!key) {\n return data.key\n ? Object.values(fields).reduce((result, field, i) => {\n const index = fields[field.key] ? field.key : i;\n\n return {\n ...result,\n [index]:\n data.key === field.key\n ? isFunction\n ? data(field)\n : data\n : field,\n };\n }, {})\n : {\n ...fields,\n [fields.length || 0]: isFunction ? data({}) : data,\n };\n }\n\n const { item: field = data, itemIndex } = popFormField(fields, key);\n\n fields[itemIndex] = isFunction ? data(field || {}) : { ...field, ...data };\n\n return fields;\n };\n\n const getFieldClassName = (key, type) => {\n return `form-${type}_field-${key}`;\n };\n\n return {\n joinData,\n getFieldData,\n popFormField,\n updateFormField,\n getFormFields,\n getFormFieldsAsArray,\n getFieldClassName,\n getFormFieldsKeys,\n };\n}\n"],"mappings":"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"}
|
|
@@ -50,13 +50,14 @@ function RenderFields({ form, fields, cols = 1, FormDataDriver = defaultFormData
|
|
|
50
50
|
const fieldsLen = fields?.length || 0;
|
|
51
51
|
const columnsQty = getColumnsQty() > fieldsLen ? fieldsLen : getColumnsQty();
|
|
52
52
|
if (!columnsQty) return null;
|
|
53
|
+
const parts = new Array(columnsQty).fill([]).map((v, i) => {
|
|
54
|
+
const startIndex = fieldsLen / columnsQty * i;
|
|
55
|
+
const endIndex = startIndex + fieldsLen / columnsQty;
|
|
56
|
+
return fields.slice(startIndex, endIndex);
|
|
57
|
+
});
|
|
53
58
|
return /* @__PURE__ */ jsx("div", {
|
|
54
59
|
className: "row",
|
|
55
|
-
children:
|
|
56
|
-
const startIndex = fieldsLen / columnsQty * i;
|
|
57
|
-
const endIndex = startIndex + fieldsLen / columnsQty;
|
|
58
|
-
return fields.slice(startIndex, endIndex);
|
|
59
|
-
}).map((part, i) => /* @__PURE__ */ jsx("div", {
|
|
60
|
+
children: parts.map((part, i) => /* @__PURE__ */ jsx("div", {
|
|
60
61
|
className: `col-12 col-lg-${parseInt(maxWidth / columnsQty, 10)}`,
|
|
61
62
|
children: part.map(renderFormField)
|
|
62
63
|
}, `render-fields-row-${i}`))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderFields.js","names":[],"sources":["../../../../../src/Functions/useFormTools/functions/RenderFields.js"],"sourcesContent":["const defaultRenderFieldComponent = () => {\n // eslint-disable-next-line no-console\n console.error(\"RenderFields: RenderFieldComponent Property is not recieved!\");\n return null;\n};\n\nconst defaultFormDataDriver = () => {\n // eslint-disable-next-line no-console\n console.error(\"RenderFields: FormDataDriver Property is not recieved!\");\n return null;\n};\n\nconst defaultOnFieldChange = () => {\n // eslint-disable-next-line no-console\n console.warn(\n \"RenderFields: Be careful, onFieldChange handler is not recieved!\",\n );\n return null;\n};\n\nconst defaultOnFieldBlur = () => {\n // eslint-disable-next-line no-console\n console.warn(\n \"RenderFields: Be careful, defaultOnFieldBlur handler is not recieved!\",\n );\n return null;\n};\n\nexport default function RenderFields({\n form,\n fields,\n cols = 1,\n FormDataDriver = defaultFormDataDriver,\n RenderFieldComponent = defaultRenderFieldComponent,\n onFieldChange = defaultOnFieldChange,\n onFieldBlur = defaultOnFieldBlur,\n} = {}) {\n const maxColumns = 6;\n const maxWidth = 12;\n\n const { getFormField } = FormDataDriver({ form });\n\n const getColumnsQty = () => {\n return cols > maxColumns ? maxColumns : cols;\n };\n\n const renderFormField = (key) => {\n try {\n const field = { ...getFormField(key), key };\n const { wrapperRef } = field;\n\n return (\n <div\n key={`render-field-wrapper-${key}`}\n id={`render-field-wrapper-${key}`}\n ref={\n wrapperRef\n ? typeof wrapperRef === \"function\"\n ? (node) => wrapperRef(node, key)\n : wrapperRef\n : null\n }\n >\n <RenderFieldComponent\n key={key}\n field={field}\n onChange={(value) => onFieldChange(key, value)}\n onBlur={(...args) => onFieldBlur(...args)}\n />\n </div>\n );\n } catch (e) {\n return null;\n }\n };\n\n const renderSingleColumn = () => {\n return fields.map(renderFormField);\n };\n const renderSplitColumns = () => {\n const fieldsLen = fields?.length || 0;\n const columnsQty =\n getColumnsQty() > fieldsLen ? fieldsLen : getColumnsQty();\n\n if (!columnsQty) return null;\n\n const parts = new Array(columnsQty).fill([]).map((v, i) => {\n const startIndex = (fieldsLen / columnsQty) * i;\n const endIndex = startIndex + fieldsLen / columnsQty;\n\n return fields.slice(startIndex, endIndex);\n });\n\n return (\n <div className=\"row\">\n {parts.map((part, i) => (\n <div\n key={`render-fields-row-${i}`}\n className={`col-12 col-lg-${parseInt(maxWidth / columnsQty, 10)}`}\n >\n {part.map(renderFormField)}\n </div>\n ))}\n </div>\n );\n };\n\n const render = cols === 1 ? renderSingleColumn : renderSplitColumns;\n\n return render();\n}\n"],"mappings":";;AAAA,IAAM,oCAAoC;CAExC,QAAQ,MAAM,8DAA8D;CAC5E,OAAO;AACT;AAEA,IAAM,8BAA8B;CAElC,QAAQ,MAAM,wDAAwD;CACtE,OAAO;AACT;AAEA,IAAM,6BAA6B;CAEjC,QAAQ,KACN,kEACF;CACA,OAAO;AACT;AAEA,IAAM,2BAA2B;CAE/B,QAAQ,KACN,uEACF;CACA,OAAO;AACT;AAEA,SAAwB,aAAa,EACnC,MACA,QACA,OAAO,GACP,iBAAiB,uBACjB,uBAAuB,6BACvB,gBAAgB,sBAChB,cAAc,uBACZ,CAAC,GAAG;CACN,MAAM,aAAa;CACnB,MAAM,WAAW;CAEjB,MAAM,EAAE,iBAAiB,eAAe,EAAE,KAAK,CAAC;CAEhD,MAAM,sBAAsB;EAC1B,OAAO,OAAO,aAAa,aAAa;CAC1C;CAEA,MAAM,mBAAmB,QAAQ;EAC/B,IAAI;GACF,MAAM,QAAQ;IAAE,GAAG,aAAa,GAAG;IAAG;GAAI;GAC1C,MAAM,EAAE,eAAe;GAEvB,OACE,oBAAC,OAAA;IAEC,IAAI,wBAAwB;IAC5B,KACE,aACI,OAAO,eAAe,cACnB,SAAS,WAAW,MAAM,GAAG,IAC9B,aACF;IAGN,UAAA,oBAAC,sBAAA;KAEC;KACA,WAAW,UAAU,cAAc,KAAK,KAAK;KAC7C,SAAQ,GAAI,SAAS,YAAY,GAAG,IAAI;IAAA,GAHnC,GAIP;GAAA,GAfK,wBAAwB,KAgB/B;EAEJ,SAAS,GAAG;GACV,OAAO;EACT;CACF;CAEA,MAAM,2BAA2B;EAC/B,OAAO,OAAO,IAAI,eAAe;CACnC;CACA,MAAM,2BAA2B;EAC/B,MAAM,YAAY,QAAQ,UAAU;EACpC,MAAM,aACJ,cAAc,IAAI,YAAY,YAAY,cAAc;EAE1D,IAAI,CAAC,YAAY,OAAO;
|
|
1
|
+
{"version":3,"file":"RenderFields.js","names":[],"sources":["../../../../../src/Functions/useFormTools/functions/RenderFields.js"],"sourcesContent":["const defaultRenderFieldComponent = () => {\n // eslint-disable-next-line no-console\n console.error(\"RenderFields: RenderFieldComponent Property is not recieved!\");\n return null;\n};\n\nconst defaultFormDataDriver = () => {\n // eslint-disable-next-line no-console\n console.error(\"RenderFields: FormDataDriver Property is not recieved!\");\n return null;\n};\n\nconst defaultOnFieldChange = () => {\n // eslint-disable-next-line no-console\n console.warn(\n \"RenderFields: Be careful, onFieldChange handler is not recieved!\",\n );\n return null;\n};\n\nconst defaultOnFieldBlur = () => {\n // eslint-disable-next-line no-console\n console.warn(\n \"RenderFields: Be careful, defaultOnFieldBlur handler is not recieved!\",\n );\n return null;\n};\n\nexport default function RenderFields({\n form,\n fields,\n cols = 1,\n FormDataDriver = defaultFormDataDriver,\n RenderFieldComponent = defaultRenderFieldComponent,\n onFieldChange = defaultOnFieldChange,\n onFieldBlur = defaultOnFieldBlur,\n} = {}) {\n const maxColumns = 6;\n const maxWidth = 12;\n\n const { getFormField } = FormDataDriver({ form });\n\n const getColumnsQty = () => {\n return cols > maxColumns ? maxColumns : cols;\n };\n\n const renderFormField = (key) => {\n try {\n const field = { ...getFormField(key), key };\n const { wrapperRef } = field;\n\n return (\n <div\n key={`render-field-wrapper-${key}`}\n id={`render-field-wrapper-${key}`}\n ref={\n wrapperRef\n ? typeof wrapperRef === \"function\"\n ? (node) => wrapperRef(node, key)\n : wrapperRef\n : null\n }\n >\n <RenderFieldComponent\n key={key}\n field={field}\n onChange={(value) => onFieldChange(key, value)}\n onBlur={(...args) => onFieldBlur(...args)}\n />\n </div>\n );\n } catch (e) {\n return null;\n }\n };\n\n const renderSingleColumn = () => {\n return fields.map(renderFormField);\n };\n const renderSplitColumns = () => {\n const fieldsLen = fields?.length || 0;\n const columnsQty =\n getColumnsQty() > fieldsLen ? fieldsLen : getColumnsQty();\n\n if (!columnsQty) return null;\n\n const parts = new Array(columnsQty).fill([]).map((v, i) => {\n const startIndex = (fieldsLen / columnsQty) * i;\n const endIndex = startIndex + fieldsLen / columnsQty;\n\n return fields.slice(startIndex, endIndex);\n });\n\n return (\n <div className=\"row\">\n {parts.map((part, i) => (\n <div\n key={`render-fields-row-${i}`}\n className={`col-12 col-lg-${parseInt(maxWidth / columnsQty, 10)}`}\n >\n {part.map(renderFormField)}\n </div>\n ))}\n </div>\n );\n };\n\n const render = cols === 1 ? renderSingleColumn : renderSplitColumns;\n\n return render();\n}\n"],"mappings":";;AAAA,IAAM,oCAAoC;CAExC,QAAQ,MAAM,8DAA8D;CAC5E,OAAO;AACT;AAEA,IAAM,8BAA8B;CAElC,QAAQ,MAAM,wDAAwD;CACtE,OAAO;AACT;AAEA,IAAM,6BAA6B;CAEjC,QAAQ,KACN,kEACF;CACA,OAAO;AACT;AAEA,IAAM,2BAA2B;CAE/B,QAAQ,KACN,uEACF;CACA,OAAO;AACT;AAEA,SAAwB,aAAa,EACnC,MACA,QACA,OAAO,GACP,iBAAiB,uBACjB,uBAAuB,6BACvB,gBAAgB,sBAChB,cAAc,uBACZ,CAAC,GAAG;CACN,MAAM,aAAa;CACnB,MAAM,WAAW;CAEjB,MAAM,EAAE,iBAAiB,eAAe,EAAE,KAAK,CAAC;CAEhD,MAAM,sBAAsB;EAC1B,OAAO,OAAO,aAAa,aAAa;CAC1C;CAEA,MAAM,mBAAmB,QAAQ;EAC/B,IAAI;GACF,MAAM,QAAQ;IAAE,GAAG,aAAa,GAAG;IAAG;GAAI;GAC1C,MAAM,EAAE,eAAe;GAEvB,OACE,oBAAC,OAAA;IAEC,IAAI,wBAAwB;IAC5B,KACE,aACI,OAAO,eAAe,cACnB,SAAS,WAAW,MAAM,GAAG,IAC9B,aACF;IAGN,UAAA,oBAAC,sBAAA;KAEC;KACA,WAAW,UAAU,cAAc,KAAK,KAAK;KAC7C,SAAQ,GAAI,SAAS,YAAY,GAAG,IAAI;IAAA,GAHnC,GAIP;GAAA,GAfK,wBAAwB,KAgB/B;EAEJ,SAAS,GAAG;GACV,OAAO;EACT;CACF;CAEA,MAAM,2BAA2B;EAC/B,OAAO,OAAO,IAAI,eAAe;CACnC;CACA,MAAM,2BAA2B;EAC/B,MAAM,YAAY,QAAQ,UAAU;EACpC,MAAM,aACJ,cAAc,IAAI,YAAY,YAAY,cAAc;EAE1D,IAAI,CAAC,YAAY,OAAO;EAExB,MAAM,QAAQ,IAAI,MAAM,UAAU,CAAA,CAAE,KAAK,CAAC,CAAC,CAAA,CAAE,KAAK,GAAG,MAAM;GACzD,MAAM,aAAc,YAAY,aAAc;GAC9C,MAAM,WAAW,aAAa,YAAY;GAE1C,OAAO,OAAO,MAAM,YAAY,QAAQ;EAC1C,CAAC;EAED,OACE,oBAAC,OAAA;GAAI,WAAU;GACZ,UAAA,MAAM,KAAK,MAAM,MAChB,oBAAC,OAAA;IAEC,WAAW,iBAAiB,SAAS,WAAW,YAAY,EAAE;IAE7D,UAAA,KAAK,IAAI,eAAe;GAAA,GAHpB,qBAAqB,GAI5B,CACD;EAAA,CACH;CAEJ;CAIA,QAFe,SAAS,IAAI,qBAAqB,mBAAA,CAEnC;AAChB"}
|
|
@@ -115,10 +115,7 @@ function useFormTools({ form, setForm, FormType, FormFields, FormDataDriverName
|
|
|
115
115
|
if (!event) return false;
|
|
116
116
|
const { keyCode } = event;
|
|
117
117
|
switch (keyCode) {
|
|
118
|
-
case 13:
|
|
119
|
-
onEnterDown(event);
|
|
120
|
-
break;
|
|
121
|
-
default: break;
|
|
118
|
+
case 13: onEnterDown(event);
|
|
122
119
|
}
|
|
123
120
|
};
|
|
124
121
|
useEffect(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["fields"],"sources":["../../../../src/Functions/useFormTools/index.js"],"sourcesContent":["// eslint-disable-next-line no-unused-vars\nimport { createRef, useEffect, useState } from \"react\";\n\nimport ArrayWithObjects from \"./form-drivers/ArrayWithObjects\";\nimport ObjectWithIterableObjects from \"./form-drivers/ObjectWithIterableObjects\";\nimport ObjectWithNamedKeyObjects from \"./form-drivers/ObjectWithNamedKeyObjects\";\nimport General from \"./functions/General\";\nimport RenderFields from \"./functions/RenderFields\";\n\nconst DefaultFocusControllerProps = {\n setAutoFocus: true,\n onlyEmptyFieldAutoFocus: false,\n};\n\nexport default function useFormTools({\n form,\n setForm,\n FormType,\n FormFields,\n FormDataDriverName = \"ArrayWithObjects\" ||\n \"ObjectWithIterableObjects\" ||\n \"ObjectWithNamedKeyObjects\",\n FormDataDriver = null,\n FocusControllerProps = DefaultFocusControllerProps,\n goToNextFieldOnEnterPressed = true,\n} = {}) {\n FocusControllerProps = {\n ...DefaultFocusControllerProps,\n ...FocusControllerProps,\n };\n\n const FormDataDrivers = {\n ArrayWithObjects: {\n handlers: ArrayWithObjects,\n default: true,\n },\n ObjectWithIterableObjects: {\n handlers: ObjectWithIterableObjects,\n },\n ObjectWithNamedKeyObjects: {\n handlers: ObjectWithNamedKeyObjects,\n },\n };\n\n const getFormDataDriver = (name) => {\n return (\n FormDataDriver ||\n FormDataDrivers[name]?.handlers ||\n Object.values(FormDataDrivers).find((df) => df.default === true)\n ?.handlers ||\n (() => ({}))\n );\n };\n const getFormDataDriverInstance = (name, ...args) => {\n return getFormDataDriver(name)(...args);\n };\n\n const { getFieldClassName, updateFormField } = General();\n\n const {\n getFieldData,\n getFormField,\n setFormFields,\n setFormField,\n getFormFieldsAsArray,\n getFormFieldsKeys,\n removeAllFormFields,\n removeFormField,\n removeFormFields,\n } = getFormDataDriverInstance(FormDataDriverName, {\n form,\n setForm,\n FormFields,\n });\n\n ///////////////////////////////////////////////////////////////\n //--- OnChange Observer ---//--- START ---//\n const [onChangeObservers, setOnChangeObservers] = useState({});\n const addOnChangeObserver = (key, cb) => {\n let observerId = null;\n\n setOnChangeObservers((state) => {\n //Set Default Value\n if (!state[key]) state[key] = {};\n\n observerId = state[key].length;\n\n state[key][observerId] = cb;\n\n return state;\n });\n\n return observerId;\n };\n const removeOnChangeObserver = (key, id) => {\n setOnChangeObservers((state) => {\n //Set Default Value\n if (!state[key]) return state;\n\n state[key] = Object.keys(state)\n .filter((cbId) => cbId !== id)\n .map((cbId) => state[key][cbId]);\n\n return state;\n });\n };\n const onChangeObserver = (key, value) => {\n if (!onChangeObservers[key] || typeof onChangeObservers[key] !== \"object\")\n return;\n\n const Observers = onChangeObservers[key];\n\n Object.values(Observers).map((cb) => {\n cb({ value, form });\n return null;\n });\n };\n const onFieldChange = (key, value) => {\n if (value === getFormField(key)?.value) return false;\n\n onChangeObserver(key, value);\n setFormField(\n (field) => ({\n ...field,\n error: \"\",\n value,\n }),\n key,\n );\n };\n //--- OnChange Observer ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- Form Submit Blocker ---//--- START ---//\n const [formSubmitBlockers, setFormSubmitBlockers] = useState([]);\n const toggleFormSubmitBlock = (key, value) => {\n setFormSubmitBlockers((state) =>\n state.includes(key) || !value\n ? [...state.filter((k) => k !== key)]\n : [...state, key],\n );\n };\n const clearFormSubmitBlockers = () => setFormSubmitBlockers([]);\n //--- Form Submit Blocker ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- Property Observer Blocker ---//--- START ---//\n // const [propertyObservers, setPropertyObservers] = useState({});\n // function addPropertyObserver () {\n // };\n //--- Property Observer Blocker ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- Render Fields Controller ---//--- START ---//\n const [isFormFieldsAdded, setIsFormFieldsAdded] = useState(false);\n const [renderFormFields, setRenderFormFieldsState] = useState([]);\n const setRenderFormFields = (data) => {\n setIsFormFieldsAdded(true);\n // eslint-disable-next-line no-use-before-define\n removeRenderFields(renderFormFields);\n // eslint-disable-next-line no-use-before-define\n resetIsInitFocused();\n setRenderFormFieldsState(data);\n };\n const addRenderFields = (fields) => {\n setRenderFormFieldsState((state) => [...state, ...fields]);\n };\n const removeRenderFields = (fields) => {\n setRenderFormFieldsState((state) =>\n state.filter((field) => !fields.includes(field)),\n );\n };\n\n const [isFormRendered, setIsFormRendered] = useState(false);\n const submitIsFormRendered = () => setIsFormRendered(true);\n const resetIsFormRendered = () => setIsFormRendered(false);\n\n const onEnterDown = async (e) => {\n if (!goToNextFieldOnEnterPressed) return false;\n\n const focusable = document.querySelectorAll(\n 'a, button, input, [tabindex]:not([tabindex=\"-1\"])',\n );\n const currentIndex = await new Promise((resolve) => {\n focusable.forEach((node, i) => {\n if (node === e.target) resolve(i);\n });\n });\n\n if (!currentIndex) return false;\n\n const nextIndex = currentIndex + 1;\n\n if (nextIndex >= focusable.length) return false;\n\n const nextItem = focusable[nextIndex];\n\n nextItem.focus();\n };\n\n const onKeyDown = (...args) => {\n const event = args.reduce((e, item) => {\n if (item?.nativeEvent instanceof KeyboardEvent) return item;\n return e;\n }, null);\n\n if (!event) return false;\n\n const { keyCode } = event;\n\n switch (keyCode) {\n //OnEnterDown\n case 13:\n onEnterDown(event);\n break;\n\n default:\n break;\n }\n };\n\n //On Type Change\n useEffect(() => {\n resetIsFormRendered();\n }, [FormType]);\n\n //On Render Fields Change\n useEffect(() => {\n if (isFormFieldsAdded) resetIsFormRendered(false);\n\n //Add Form Fields\n if (renderFormFields.length !== 0) {\n setFormFields((fields) => {\n return renderFormFields.reduce((result, key) => {\n const fieldData = getFieldData(key);\n const field = getFormField(key) ? getFormField(key) : fieldData;\n\n if (\n !field?.className ||\n field?.className?.indexOf(getFieldClassName(key, FormType)) === -1\n ) {\n field.className = `${field?.className} ${getFieldClassName(key, FormType)}`;\n }\n\n if (typeof fieldData?.label === \"object\") {\n field.label = fieldData.label[FormType] || fieldData.label.default;\n }\n\n field.ref = createRef();\n field.wrapperRef = createRef();\n\n field.isValueChangedByUser = false;\n\n if (goToNextFieldOnEnterPressed) {\n const onKeyDownProp = field.onKeyDown || (() => {});\n field.onKeyDown = (...args) => {\n onKeyDown(...args);\n onKeyDownProp(...args);\n };\n }\n\n //Is Field Value Changed By USER\n // eslint-disable-next-line no-use-before-define\n addOnFieldRenderedObserver(\n key,\n () => {\n const element = getFormField(key)?.ref?.current?.querySelector(\n field?.focusSelector || \"input\",\n );\n const handler = () =>\n setFormField({ isValueChangedByUser: true }, key);\n\n element?.addEventListener(\"paste\", handler, { once: true });\n element?.addEventListener(\"keypress\", handler, { once: true });\n },\n true,\n );\n\n return updateFormField(result, field, key);\n }, fields);\n });\n }\n }, [renderFormFields]);\n\n const [onFormRenderObservers, setOnFormRenderObservers] = useState([]);\n const addOnFormRenderObserver = (cb, { once = false } = {}) => {\n setOnFormRenderObservers((state) => [\n ...state,\n { cb, once, isWorkedOut: false },\n ]);\n };\n // eslint-disable-next-line no-unused-vars\n const updateOnFormRenderObserver = (key, data) => {\n setOnFormRenderObservers((state) => {\n const copy = [...state];\n copy[key] = { ...state[key], ...data };\n\n return copy;\n });\n };\n const removeOnFormRenderObserver = (key) => {\n setOnFormRenderObservers((state) =>\n state.slice().filter((v, i) => i !== key),\n );\n };\n const onFormRenderWorker = () => {\n // eslint-disable-next-line default-param-last\n onFormRenderObservers.map(\n ({ once, isWorkedOut, cb = () => {} } = {}, key) => {\n if (once && isWorkedOut) return null;\n\n cb(form);\n if (once) removeOnFormRenderObserver(key);\n else updateOnFormRenderObserver(key, { isWorkedOut: true });\n return null;\n },\n );\n };\n\n //On Form Rendered\n useEffect(() => {\n if (!isFormRendered && onFormRenderObservers.length) {\n const formFieldsKeys = getFormFieldsKeys(form);\n const isAllFieldsRendered = renderFormFields.reduce((result, key) => {\n if (!formFieldsKeys.includes(key)) result = false;\n\n return result;\n }, true);\n\n if (isAllFieldsRendered) {\n submitIsFormRendered(true);\n onFormRenderWorker();\n }\n }\n }, [form, renderFormFields, onFormRenderObservers]);\n //--- Render Fields Controller ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- HIGHTLIGHT LABELS IF FIELD WITH ERROR ---//--- START ---//\n const hightliteErrorLabels = () => {\n const fields = getFormFieldsAsArray();\n\n const filtered = fields?.reduce((result, field) => {\n if (field?.errorLabelHightlite) {\n // eslint-disable-next-line no-use-before-define\n result.push({\n ...field,\n className: getFieldClassName(field?.key, FormType),\n });\n }\n\n return result;\n }, []);\n\n filtered?.map((field) => {\n const formField = document.querySelector(`.${field?.className}`);\n\n if (!formField) return null;\n\n formField.classList.remove(\"errorLabelHightlite\");\n\n if (field?.error) {\n formField.classList.add(\"errorLabelHightlite\");\n }\n\n return null;\n });\n };\n useEffect(() => {\n hightliteErrorLabels();\n }, [form]);\n //--- HIGHTLIGHT LABELS IF FIELD WITH ERROR ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- Fields Focus Controller ---//--- START ---//\n const [isInitFocused, setIsInitFocused] = useState(false);\n const [autoFocusedField, setAutoFocusedField] = useState(null);\n\n const setFirstFieldInitFocused = () => setIsInitFocused(true);\n const resetIsInitFocused = () => setIsInitFocused(false);\n\n const toggleFieldFocus = (\n { key, cb = () => {}, form: argForm, field },\n action = \"focus\",\n ) => {\n if (!key && !field) return null;\n\n if (!argForm) argForm = form;\n\n const formField = field || getFormField(key, argForm);\n\n if (!formField || !formField.ref) {\n return false;\n }\n\n if (\n action === \"focus\" &&\n FocusControllerProps.onlyEmptyFieldAutoFocus &&\n Boolean(formField?.value)\n )\n return null;\n\n setTimeout(() => {\n formField.ref.current\n ?.querySelector(formField?.focusSelector || \"input\")\n ?.[action]();\n cb();\n }, 50);\n };\n\n const setFieldFocus = ({ key, cb = () => {}, form: argForm, field }) =>\n toggleFieldFocus({ key, cb, form: argForm, field }, \"focus\");\n const setFieldBlur = ({ key, cb = () => {}, form: argForm, field }) =>\n toggleFieldFocus({ key, cb, form: argForm, field }, \"blur\");\n\n const setFirstFieldFocus = () => {\n let field = null;\n\n for (let i = 0; i < renderFormFields.length && !field; ++i) {\n const key = renderFormFields[i];\n const tmpField = getFormField(key);\n if (tmpField && !tmpField?.disabled) field = tmpField;\n }\n\n if (!field) return false;\n\n if (FocusControllerProps.onlyEmptyFieldAutoFocus && Boolean(field?.value)) {\n setFirstFieldInitFocused();\n return false;\n }\n\n setAutoFocusedField(field.key);\n\n const callback = () => {\n setFormField({ value: field.value }, field.key);\n setFirstFieldInitFocused();\n };\n\n setTimeout(() => setFieldFocus({ key: field.key, cb: callback, form }), 50);\n };\n\n const [onFieldFocusCallbacks, setOnFieldFocusCallbacks] = useState({});\n const addOnFieldFocusCallback = (key, cb) => {\n setOnFieldFocusCallbacks((state) => {\n const stateCopy = { ...state };\n\n if (!state[key]) stateCopy[key] = [];\n\n stateCopy[key].push(cb);\n\n return stateCopy;\n });\n };\n const callOnFieldFocusCallbacks = (key) => {\n if (!Array.isArray(onFieldFocusCallbacks[key])) return null;\n\n onFieldFocusCallbacks[key]?.map((cb) => cb());\n };\n\n const [focusOnRenderFields, setFocusOnRenderFields] = useState([]);\n const addFocusFieldOnRender = (key, cb) => {\n setFocusOnRenderFields((state) => [...state, key]);\n\n if (cb) addOnFieldFocusCallback(key, cb);\n };\n const removeFocusFieldOnRender = (key) => {\n setFocusOnRenderFields((state) => state.filter((field) => field !== key));\n };\n\n useEffect(() => {\n if (\n FocusControllerProps.setAutoFocus &&\n !isInitFocused &&\n !autoFocusedField &&\n isFormRendered\n )\n setFirstFieldFocus();\n\n if (focusOnRenderFields.length) {\n getFormFieldsKeys(form)?.map((key) => {\n if (\n focusOnRenderFields.includes(key) &&\n getFormField(key)?.value?.length === 0\n ) {\n const cb = () => {\n removeFocusFieldOnRender(key);\n callOnFieldFocusCallbacks(key);\n };\n\n setFieldFocus({ key, form, cb });\n }\n return null;\n });\n }\n }, [form, focusOnRenderFields, isInitFocused, isFormRendered]);\n\n useEffect(() => {\n setAutoFocusedField(null);\n }, [isInitFocused]);\n\n useEffect(() => {\n resetIsInitFocused();\n }, [FormType]);\n\n //Remove Focus From Autocomplete field !!! TODO\n // useEffect(() => {\n // if (!autoFocusedField) return null;\n // const field = getFormField(autoFocusedField);\n\n // if (field?.value !== '' && !field?.isValueChangedByUser) {\n // setFieldBlur({key: autoFocusedField, form});\n // }\n // }, [autoFocusedField, form]);\n //--- Fields Focus Controller ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- OnFieldRendered Observer ---//--- START ---//\n const [onFieldRenderedObservers, setOnFieldRenderedObservers] = useState({});\n const [isFieldObserversReset, setIsFieldObserversReset] = useState(false);\n\n const resetOnFieldRenderObserversWorkedOut = () => {\n if (!isFieldObserversReset && renderFormFields.length) {\n renderFormFields.map((key) => {\n setFormField({ isOnRenderObserversWorkedOut: false }, key);\n return key;\n });\n setIsFieldObserversReset(true);\n }\n };\n const addOnFieldRenderedObserver = (key, cb, isOnceCallable = true) => {\n let observerId = null;\n\n setOnFieldRenderedObservers((state) => {\n //Set Default Value\n if (!state[key]) state[key] = {};\n\n observerId = Object.keys(state[key]).length || 0;\n\n state[key][observerId] = {\n f: cb,\n isOnceCallable,\n };\n\n return state;\n });\n\n return observerId;\n };\n const updateOnFieldRenderedObserver = (key, id, data) => {\n setOnFieldRenderedObservers((state) => {\n //Set Default Value\n if (!state[key]) return state;\n\n state[key][id] = {\n ...state[key][id],\n ...data,\n };\n\n return state;\n });\n };\n const removeOnFieldRenderedObserver = (key, id) => {\n setOnFieldRenderedObservers((state) => {\n //Set Default Value\n if (!state[key]) return state;\n\n state[key] = Object.keys(state)\n .filter((cbId) => cbId !== id)\n .map((cbId) => state[key][cbId]);\n\n return state;\n });\n };\n const onFieldRenderedObserver = (key, data) => {\n if (\n !onFieldRenderedObservers[key] ||\n typeof onFieldRenderedObservers[key] !== \"object\"\n )\n return;\n\n const Observers = onFieldRenderedObservers[key];\n const FilteredObservers = Object.values(Observers).filter(\n (observer) => !observer?.isObserverWorkedOut,\n );\n\n if (FilteredObservers.length === 0) return null;\n\n setFormField({ isOnRenderObserversWorkedOut: true }, key);\n\n FilteredObservers.map(({ f, isOnceCallable }, id) => {\n f(data);\n if (isOnceCallable)\n updateOnFieldRenderedObserver(key, id, { isObserverWorkedOut: true });\n return null;\n });\n };\n const onRenderObserverWorker = () => {\n return getFormFieldsKeys(form)?.map((key) => {\n //OnFieldRendered\n const fieldData = getFormField(key);\n if (!fieldData?.isOnRenderObserversWorkedOut) {\n onFieldRenderedObserver(key, fieldData);\n return { key, isWorkedOut: true };\n }\n\n return { key, isWorkedOut: false };\n });\n };\n\n useEffect(() => {\n resetOnFieldRenderObserversWorkedOut();\n onRenderObserverWorker();\n }, [form]);\n\n useEffect(() => {\n setIsFieldObserversReset(false);\n }, [FormType]);\n //--- OnFieldRendered Observer ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //Detect What Changed || TRY TO DO\n // const compare = async (prev, current) => {\n // if (!prev) return current;\n\n // return new Promise((resolve) => {\n // Object.keys(current).reduce((result, key, i, arr) => {\n // //If PROPERTY is NOT EXISTS BEFORE\n // if ([null, undefined].includes(prev[key])) {\n // result[key] = current[key];\n // }\n // //If PROPERTY is AN OBJECT\n // else if (typeof current[key] === 'object') {\n // //If PROPERTY is EXISTS BEFORE\n // const innerCompare = compare(prev[key], current[key]);\n // // //If SOMETHING CHANGED\n // if (innerCompare?.length) result[key] = innerCompare;\n // }\n // //If PROPERTY is AN SIMPLE VALUE and PROPERTY CHANGED\n // else if (prev[key] !== current[key]) {\n // result[key] = current[key];\n // }\n\n // if (i === arr.length-1) {\n // resolve(result);\n // }\n\n // return result;\n // }, {});\n // });\n // };\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- WindowScrollController ---//--- START ---//\n const scrollToField = ({ key = null, field = null, form: argForm }) => {\n if (!key && !field) return false;\n if (!argForm) argForm = form;\n\n if (!field) field = getFormField(key, argForm);\n\n const wrapperRef = field?.wrapperRef || field?.ref;\n // eslint-disable-next-line no-unsafe-optional-chaining\n const { top: topOffset } = wrapperRef?.current?.getBoundingClientRect();\n const scrollTop =\n Math.abs(Math.abs(topOffset) - Math.abs(window.scrollY)) - 16;\n window.scrollTo({ top: scrollTop });\n };\n\n //--- WindowScrollController ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n const addErrorsToForm = (errors, argForm = form) => {\n if (!argForm) argForm = form;\n\n setFormFields((fields) => {\n return errors.reduce(\n (fields, { message: error, propertyPath: errKey }) => {\n return updateFormField(fields, { error }, errKey);\n },\n fields,\n );\n });\n };\n\n return {\n FormDataDrivers,\n\n //OnChangeObserver\n addOnChangeObserver,\n removeOnChangeObserver,\n onChangeObservers,\n\n //OnChangeHandler\n onFieldChange,\n\n //Form Submit Blocker\n toggleFormSubmitBlock,\n clearFormSubmitBlockers,\n isFormSubmitBlocked: Boolean(formSubmitBlockers.length),\n\n //Property Observers\n // addPropertyObserver,\n\n //Render Fields\n renderFormFields,\n setRenderFormFields,\n addRenderFields,\n removeRenderFields,\n\n getFieldClassName,\n\n //Field Focus Controller\n isInitFocused,\n setFirstFieldInitFocused,\n resetIsInitFocused,\n setFieldFocus,\n setFieldBlur,\n setFirstFieldFocus,\n autoFocusedField,\n\n addFocusFieldOnRender,\n removeFocusFieldOnRender,\n\n //Field Render Controller\n addOnFieldRenderedObserver,\n removeOnFieldRenderedObserver,\n onFieldRenderedObservers,\n\n updateFormField,\n addOnFormRenderObserver,\n submitIsFormRendered,\n resetIsFormRendered,\n renderFields: ({\n form: argForm = form,\n fields: argFields = renderFormFields,\n cols: argCols = 1,\n RenderFieldComponent,\n }) =>\n RenderFields({\n form: argForm,\n fields: argFields,\n cols: argCols,\n RenderFieldComponent,\n onFieldChange,\n FormDataDriver: getFormDataDriver(FormDataDriverName),\n }),\n\n scrollToField,\n\n getFieldData,\n getFormField,\n setFormFields,\n setFormField: (data, key) => setFormField(data, key),\n getFormFieldsAsArray,\n getFormFieldsKeys,\n removeAllFormFields,\n removeFormField,\n removeFormFields,\n addErrorsToForm,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["fields"],"sources":["../../../../src/Functions/useFormTools/index.js"],"sourcesContent":["// eslint-disable-next-line no-unused-vars\nimport { createRef, useEffect, useState } from \"react\";\n\nimport ArrayWithObjects from \"./form-drivers/ArrayWithObjects\";\nimport ObjectWithIterableObjects from \"./form-drivers/ObjectWithIterableObjects\";\nimport ObjectWithNamedKeyObjects from \"./form-drivers/ObjectWithNamedKeyObjects\";\nimport General from \"./functions/General\";\nimport RenderFields from \"./functions/RenderFields\";\n\nconst DefaultFocusControllerProps = {\n setAutoFocus: true,\n onlyEmptyFieldAutoFocus: false,\n};\n\nexport default function useFormTools({\n form,\n setForm,\n FormType,\n FormFields,\n FormDataDriverName = \"ArrayWithObjects\" ||\n \"ObjectWithIterableObjects\" ||\n \"ObjectWithNamedKeyObjects\",\n FormDataDriver = null,\n FocusControllerProps = DefaultFocusControllerProps,\n goToNextFieldOnEnterPressed = true,\n} = {}) {\n FocusControllerProps = {\n ...DefaultFocusControllerProps,\n ...FocusControllerProps,\n };\n\n const FormDataDrivers = {\n ArrayWithObjects: {\n handlers: ArrayWithObjects,\n default: true,\n },\n ObjectWithIterableObjects: {\n handlers: ObjectWithIterableObjects,\n },\n ObjectWithNamedKeyObjects: {\n handlers: ObjectWithNamedKeyObjects,\n },\n };\n\n const getFormDataDriver = (name) => {\n return (\n FormDataDriver ||\n FormDataDrivers[name]?.handlers ||\n Object.values(FormDataDrivers).find((df) => df.default === true)\n ?.handlers ||\n (() => ({}))\n );\n };\n const getFormDataDriverInstance = (name, ...args) => {\n return getFormDataDriver(name)(...args);\n };\n\n const { getFieldClassName, updateFormField } = General();\n\n const {\n getFieldData,\n getFormField,\n setFormFields,\n setFormField,\n getFormFieldsAsArray,\n getFormFieldsKeys,\n removeAllFormFields,\n removeFormField,\n removeFormFields,\n } = getFormDataDriverInstance(FormDataDriverName, {\n form,\n setForm,\n FormFields,\n });\n\n ///////////////////////////////////////////////////////////////\n //--- OnChange Observer ---//--- START ---//\n const [onChangeObservers, setOnChangeObservers] = useState({});\n const addOnChangeObserver = (key, cb) => {\n let observerId = null;\n\n setOnChangeObservers((state) => {\n //Set Default Value\n if (!state[key]) state[key] = {};\n\n observerId = state[key].length;\n\n state[key][observerId] = cb;\n\n return state;\n });\n\n return observerId;\n };\n const removeOnChangeObserver = (key, id) => {\n setOnChangeObservers((state) => {\n //Set Default Value\n if (!state[key]) return state;\n\n state[key] = Object.keys(state)\n .filter((cbId) => cbId !== id)\n .map((cbId) => state[key][cbId]);\n\n return state;\n });\n };\n const onChangeObserver = (key, value) => {\n if (!onChangeObservers[key] || typeof onChangeObservers[key] !== \"object\")\n return;\n\n const Observers = onChangeObservers[key];\n\n Object.values(Observers).map((cb) => {\n cb({ value, form });\n return null;\n });\n };\n const onFieldChange = (key, value) => {\n if (value === getFormField(key)?.value) return false;\n\n onChangeObserver(key, value);\n setFormField(\n (field) => ({\n ...field,\n error: \"\",\n value,\n }),\n key,\n );\n };\n //--- OnChange Observer ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- Form Submit Blocker ---//--- START ---//\n const [formSubmitBlockers, setFormSubmitBlockers] = useState([]);\n const toggleFormSubmitBlock = (key, value) => {\n setFormSubmitBlockers((state) =>\n state.includes(key) || !value\n ? [...state.filter((k) => k !== key)]\n : [...state, key],\n );\n };\n const clearFormSubmitBlockers = () => setFormSubmitBlockers([]);\n //--- Form Submit Blocker ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- Property Observer Blocker ---//--- START ---//\n // const [propertyObservers, setPropertyObservers] = useState({});\n // function addPropertyObserver () {\n // };\n //--- Property Observer Blocker ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- Render Fields Controller ---//--- START ---//\n const [isFormFieldsAdded, setIsFormFieldsAdded] = useState(false);\n const [renderFormFields, setRenderFormFieldsState] = useState([]);\n const setRenderFormFields = (data) => {\n setIsFormFieldsAdded(true);\n // eslint-disable-next-line no-use-before-define\n removeRenderFields(renderFormFields);\n // eslint-disable-next-line no-use-before-define\n resetIsInitFocused();\n setRenderFormFieldsState(data);\n };\n const addRenderFields = (fields) => {\n setRenderFormFieldsState((state) => [...state, ...fields]);\n };\n const removeRenderFields = (fields) => {\n setRenderFormFieldsState((state) =>\n state.filter((field) => !fields.includes(field)),\n );\n };\n\n const [isFormRendered, setIsFormRendered] = useState(false);\n const submitIsFormRendered = () => setIsFormRendered(true);\n const resetIsFormRendered = () => setIsFormRendered(false);\n\n const onEnterDown = async (e) => {\n if (!goToNextFieldOnEnterPressed) return false;\n\n const focusable = document.querySelectorAll(\n 'a, button, input, [tabindex]:not([tabindex=\"-1\"])',\n );\n const currentIndex = await new Promise((resolve) => {\n focusable.forEach((node, i) => {\n if (node === e.target) resolve(i);\n });\n });\n\n if (!currentIndex) return false;\n\n const nextIndex = currentIndex + 1;\n\n if (nextIndex >= focusable.length) return false;\n\n const nextItem = focusable[nextIndex];\n\n nextItem.focus();\n };\n\n const onKeyDown = (...args) => {\n const event = args.reduce((e, item) => {\n if (item?.nativeEvent instanceof KeyboardEvent) return item;\n return e;\n }, null);\n\n if (!event) return false;\n\n const { keyCode } = event;\n\n switch (keyCode) {\n //OnEnterDown\n case 13:\n onEnterDown(event);\n break;\n\n default:\n break;\n }\n };\n\n //On Type Change\n useEffect(() => {\n resetIsFormRendered();\n }, [FormType]);\n\n //On Render Fields Change\n useEffect(() => {\n if (isFormFieldsAdded) resetIsFormRendered(false);\n\n //Add Form Fields\n if (renderFormFields.length !== 0) {\n setFormFields((fields) => {\n return renderFormFields.reduce((result, key) => {\n const fieldData = getFieldData(key);\n const field = getFormField(key) ? getFormField(key) : fieldData;\n\n if (\n !field?.className ||\n field?.className?.indexOf(getFieldClassName(key, FormType)) === -1\n ) {\n field.className = `${field?.className} ${getFieldClassName(key, FormType)}`;\n }\n\n if (typeof fieldData?.label === \"object\") {\n field.label = fieldData.label[FormType] || fieldData.label.default;\n }\n\n field.ref = createRef();\n field.wrapperRef = createRef();\n\n field.isValueChangedByUser = false;\n\n if (goToNextFieldOnEnterPressed) {\n const onKeyDownProp = field.onKeyDown || (() => {});\n field.onKeyDown = (...args) => {\n onKeyDown(...args);\n onKeyDownProp(...args);\n };\n }\n\n //Is Field Value Changed By USER\n // eslint-disable-next-line no-use-before-define\n addOnFieldRenderedObserver(\n key,\n () => {\n const element = getFormField(key)?.ref?.current?.querySelector(\n field?.focusSelector || \"input\",\n );\n const handler = () =>\n setFormField({ isValueChangedByUser: true }, key);\n\n element?.addEventListener(\"paste\", handler, { once: true });\n element?.addEventListener(\"keypress\", handler, { once: true });\n },\n true,\n );\n\n return updateFormField(result, field, key);\n }, fields);\n });\n }\n }, [renderFormFields]);\n\n const [onFormRenderObservers, setOnFormRenderObservers] = useState([]);\n const addOnFormRenderObserver = (cb, { once = false } = {}) => {\n setOnFormRenderObservers((state) => [\n ...state,\n { cb, once, isWorkedOut: false },\n ]);\n };\n // eslint-disable-next-line no-unused-vars\n const updateOnFormRenderObserver = (key, data) => {\n setOnFormRenderObservers((state) => {\n const copy = [...state];\n copy[key] = { ...state[key], ...data };\n\n return copy;\n });\n };\n const removeOnFormRenderObserver = (key) => {\n setOnFormRenderObservers((state) =>\n state.slice().filter((v, i) => i !== key),\n );\n };\n const onFormRenderWorker = () => {\n // eslint-disable-next-line default-param-last\n onFormRenderObservers.map(\n ({ once, isWorkedOut, cb = () => {} } = {}, key) => {\n if (once && isWorkedOut) return null;\n\n cb(form);\n if (once) removeOnFormRenderObserver(key);\n else updateOnFormRenderObserver(key, { isWorkedOut: true });\n return null;\n },\n );\n };\n\n //On Form Rendered\n useEffect(() => {\n if (!isFormRendered && onFormRenderObservers.length) {\n const formFieldsKeys = getFormFieldsKeys(form);\n const isAllFieldsRendered = renderFormFields.reduce((result, key) => {\n if (!formFieldsKeys.includes(key)) result = false;\n\n return result;\n }, true);\n\n if (isAllFieldsRendered) {\n submitIsFormRendered(true);\n onFormRenderWorker();\n }\n }\n }, [form, renderFormFields, onFormRenderObservers]);\n //--- Render Fields Controller ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- HIGHTLIGHT LABELS IF FIELD WITH ERROR ---//--- START ---//\n const hightliteErrorLabels = () => {\n const fields = getFormFieldsAsArray();\n\n const filtered = fields?.reduce((result, field) => {\n if (field?.errorLabelHightlite) {\n // eslint-disable-next-line no-use-before-define\n result.push({\n ...field,\n className: getFieldClassName(field?.key, FormType),\n });\n }\n\n return result;\n }, []);\n\n filtered?.map((field) => {\n const formField = document.querySelector(`.${field?.className}`);\n\n if (!formField) return null;\n\n formField.classList.remove(\"errorLabelHightlite\");\n\n if (field?.error) {\n formField.classList.add(\"errorLabelHightlite\");\n }\n\n return null;\n });\n };\n useEffect(() => {\n hightliteErrorLabels();\n }, [form]);\n //--- HIGHTLIGHT LABELS IF FIELD WITH ERROR ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- Fields Focus Controller ---//--- START ---//\n const [isInitFocused, setIsInitFocused] = useState(false);\n const [autoFocusedField, setAutoFocusedField] = useState(null);\n\n const setFirstFieldInitFocused = () => setIsInitFocused(true);\n const resetIsInitFocused = () => setIsInitFocused(false);\n\n const toggleFieldFocus = (\n { key, cb = () => {}, form: argForm, field },\n action = \"focus\",\n ) => {\n if (!key && !field) return null;\n\n if (!argForm) argForm = form;\n\n const formField = field || getFormField(key, argForm);\n\n if (!formField || !formField.ref) {\n return false;\n }\n\n if (\n action === \"focus\" &&\n FocusControllerProps.onlyEmptyFieldAutoFocus &&\n Boolean(formField?.value)\n )\n return null;\n\n setTimeout(() => {\n formField.ref.current\n ?.querySelector(formField?.focusSelector || \"input\")\n ?.[action]();\n cb();\n }, 50);\n };\n\n const setFieldFocus = ({ key, cb = () => {}, form: argForm, field }) =>\n toggleFieldFocus({ key, cb, form: argForm, field }, \"focus\");\n const setFieldBlur = ({ key, cb = () => {}, form: argForm, field }) =>\n toggleFieldFocus({ key, cb, form: argForm, field }, \"blur\");\n\n const setFirstFieldFocus = () => {\n let field = null;\n\n for (let i = 0; i < renderFormFields.length && !field; ++i) {\n const key = renderFormFields[i];\n const tmpField = getFormField(key);\n if (tmpField && !tmpField?.disabled) field = tmpField;\n }\n\n if (!field) return false;\n\n if (FocusControllerProps.onlyEmptyFieldAutoFocus && Boolean(field?.value)) {\n setFirstFieldInitFocused();\n return false;\n }\n\n setAutoFocusedField(field.key);\n\n const callback = () => {\n setFormField({ value: field.value }, field.key);\n setFirstFieldInitFocused();\n };\n\n setTimeout(() => setFieldFocus({ key: field.key, cb: callback, form }), 50);\n };\n\n const [onFieldFocusCallbacks, setOnFieldFocusCallbacks] = useState({});\n const addOnFieldFocusCallback = (key, cb) => {\n setOnFieldFocusCallbacks((state) => {\n const stateCopy = { ...state };\n\n if (!state[key]) stateCopy[key] = [];\n\n stateCopy[key].push(cb);\n\n return stateCopy;\n });\n };\n const callOnFieldFocusCallbacks = (key) => {\n if (!Array.isArray(onFieldFocusCallbacks[key])) return null;\n\n onFieldFocusCallbacks[key]?.map((cb) => cb());\n };\n\n const [focusOnRenderFields, setFocusOnRenderFields] = useState([]);\n const addFocusFieldOnRender = (key, cb) => {\n setFocusOnRenderFields((state) => [...state, key]);\n\n if (cb) addOnFieldFocusCallback(key, cb);\n };\n const removeFocusFieldOnRender = (key) => {\n setFocusOnRenderFields((state) => state.filter((field) => field !== key));\n };\n\n useEffect(() => {\n if (\n FocusControllerProps.setAutoFocus &&\n !isInitFocused &&\n !autoFocusedField &&\n isFormRendered\n )\n setFirstFieldFocus();\n\n if (focusOnRenderFields.length) {\n getFormFieldsKeys(form)?.map((key) => {\n if (\n focusOnRenderFields.includes(key) &&\n getFormField(key)?.value?.length === 0\n ) {\n const cb = () => {\n removeFocusFieldOnRender(key);\n callOnFieldFocusCallbacks(key);\n };\n\n setFieldFocus({ key, form, cb });\n }\n return null;\n });\n }\n }, [form, focusOnRenderFields, isInitFocused, isFormRendered]);\n\n useEffect(() => {\n setAutoFocusedField(null);\n }, [isInitFocused]);\n\n useEffect(() => {\n resetIsInitFocused();\n }, [FormType]);\n\n //Remove Focus From Autocomplete field !!! TODO\n // useEffect(() => {\n // if (!autoFocusedField) return null;\n // const field = getFormField(autoFocusedField);\n\n // if (field?.value !== '' && !field?.isValueChangedByUser) {\n // setFieldBlur({key: autoFocusedField, form});\n // }\n // }, [autoFocusedField, form]);\n //--- Fields Focus Controller ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- OnFieldRendered Observer ---//--- START ---//\n const [onFieldRenderedObservers, setOnFieldRenderedObservers] = useState({});\n const [isFieldObserversReset, setIsFieldObserversReset] = useState(false);\n\n const resetOnFieldRenderObserversWorkedOut = () => {\n if (!isFieldObserversReset && renderFormFields.length) {\n renderFormFields.map((key) => {\n setFormField({ isOnRenderObserversWorkedOut: false }, key);\n return key;\n });\n setIsFieldObserversReset(true);\n }\n };\n const addOnFieldRenderedObserver = (key, cb, isOnceCallable = true) => {\n let observerId = null;\n\n setOnFieldRenderedObservers((state) => {\n //Set Default Value\n if (!state[key]) state[key] = {};\n\n observerId = Object.keys(state[key]).length || 0;\n\n state[key][observerId] = {\n f: cb,\n isOnceCallable,\n };\n\n return state;\n });\n\n return observerId;\n };\n const updateOnFieldRenderedObserver = (key, id, data) => {\n setOnFieldRenderedObservers((state) => {\n //Set Default Value\n if (!state[key]) return state;\n\n state[key][id] = {\n ...state[key][id],\n ...data,\n };\n\n return state;\n });\n };\n const removeOnFieldRenderedObserver = (key, id) => {\n setOnFieldRenderedObservers((state) => {\n //Set Default Value\n if (!state[key]) return state;\n\n state[key] = Object.keys(state)\n .filter((cbId) => cbId !== id)\n .map((cbId) => state[key][cbId]);\n\n return state;\n });\n };\n const onFieldRenderedObserver = (key, data) => {\n if (\n !onFieldRenderedObservers[key] ||\n typeof onFieldRenderedObservers[key] !== \"object\"\n )\n return;\n\n const Observers = onFieldRenderedObservers[key];\n const FilteredObservers = Object.values(Observers).filter(\n (observer) => !observer?.isObserverWorkedOut,\n );\n\n if (FilteredObservers.length === 0) return null;\n\n setFormField({ isOnRenderObserversWorkedOut: true }, key);\n\n FilteredObservers.map(({ f, isOnceCallable }, id) => {\n f(data);\n if (isOnceCallable)\n updateOnFieldRenderedObserver(key, id, { isObserverWorkedOut: true });\n return null;\n });\n };\n const onRenderObserverWorker = () => {\n return getFormFieldsKeys(form)?.map((key) => {\n //OnFieldRendered\n const fieldData = getFormField(key);\n if (!fieldData?.isOnRenderObserversWorkedOut) {\n onFieldRenderedObserver(key, fieldData);\n return { key, isWorkedOut: true };\n }\n\n return { key, isWorkedOut: false };\n });\n };\n\n useEffect(() => {\n resetOnFieldRenderObserversWorkedOut();\n onRenderObserverWorker();\n }, [form]);\n\n useEffect(() => {\n setIsFieldObserversReset(false);\n }, [FormType]);\n //--- OnFieldRendered Observer ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //Detect What Changed || TRY TO DO\n // const compare = async (prev, current) => {\n // if (!prev) return current;\n\n // return new Promise((resolve) => {\n // Object.keys(current).reduce((result, key, i, arr) => {\n // //If PROPERTY is NOT EXISTS BEFORE\n // if ([null, undefined].includes(prev[key])) {\n // result[key] = current[key];\n // }\n // //If PROPERTY is AN OBJECT\n // else if (typeof current[key] === 'object') {\n // //If PROPERTY is EXISTS BEFORE\n // const innerCompare = compare(prev[key], current[key]);\n // // //If SOMETHING CHANGED\n // if (innerCompare?.length) result[key] = innerCompare;\n // }\n // //If PROPERTY is AN SIMPLE VALUE and PROPERTY CHANGED\n // else if (prev[key] !== current[key]) {\n // result[key] = current[key];\n // }\n\n // if (i === arr.length-1) {\n // resolve(result);\n // }\n\n // return result;\n // }, {});\n // });\n // };\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n //--- WindowScrollController ---//--- START ---//\n const scrollToField = ({ key = null, field = null, form: argForm }) => {\n if (!key && !field) return false;\n if (!argForm) argForm = form;\n\n if (!field) field = getFormField(key, argForm);\n\n const wrapperRef = field?.wrapperRef || field?.ref;\n // eslint-disable-next-line no-unsafe-optional-chaining\n const { top: topOffset } = wrapperRef?.current?.getBoundingClientRect();\n const scrollTop =\n Math.abs(Math.abs(topOffset) - Math.abs(window.scrollY)) - 16;\n window.scrollTo({ top: scrollTop });\n };\n\n //--- WindowScrollController ---//--- END ---//\n\n ///////////////////////////////////////////////////////////////\n ///////////////////////////////////////////////////////////////\n\n const addErrorsToForm = (errors, argForm = form) => {\n if (!argForm) argForm = form;\n\n setFormFields((fields) => {\n return errors.reduce(\n (fields, { message: error, propertyPath: errKey }) => {\n return updateFormField(fields, { error }, errKey);\n },\n fields,\n );\n });\n };\n\n return {\n FormDataDrivers,\n\n //OnChangeObserver\n addOnChangeObserver,\n removeOnChangeObserver,\n onChangeObservers,\n\n //OnChangeHandler\n onFieldChange,\n\n //Form Submit Blocker\n toggleFormSubmitBlock,\n clearFormSubmitBlockers,\n isFormSubmitBlocked: Boolean(formSubmitBlockers.length),\n\n //Property Observers\n // addPropertyObserver,\n\n //Render Fields\n renderFormFields,\n setRenderFormFields,\n addRenderFields,\n removeRenderFields,\n\n getFieldClassName,\n\n //Field Focus Controller\n isInitFocused,\n setFirstFieldInitFocused,\n resetIsInitFocused,\n setFieldFocus,\n setFieldBlur,\n setFirstFieldFocus,\n autoFocusedField,\n\n addFocusFieldOnRender,\n removeFocusFieldOnRender,\n\n //Field Render Controller\n addOnFieldRenderedObserver,\n removeOnFieldRenderedObserver,\n onFieldRenderedObservers,\n\n updateFormField,\n addOnFormRenderObserver,\n submitIsFormRendered,\n resetIsFormRendered,\n renderFields: ({\n form: argForm = form,\n fields: argFields = renderFormFields,\n cols: argCols = 1,\n RenderFieldComponent,\n }) =>\n RenderFields({\n form: argForm,\n fields: argFields,\n cols: argCols,\n RenderFieldComponent,\n onFieldChange,\n FormDataDriver: getFormDataDriver(FormDataDriverName),\n }),\n\n scrollToField,\n\n getFieldData,\n getFormField,\n setFormFields,\n setFormField: (data, key) => setFormField(data, key),\n getFormFieldsAsArray,\n getFormFieldsKeys,\n removeAllFormFields,\n removeFormField,\n removeFormFields,\n addErrorsToForm,\n };\n}\n"],"mappings":"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"}
|
|
@@ -39,7 +39,8 @@ var clone = (input) => {
|
|
|
39
39
|
var getResponseClone = async (res) => await (typeof res?.clone === "function" ? res.clone() : clone(res));
|
|
40
40
|
function transformUTCTimeToLocal(date, format = "YYYY-MM-DD HH:mm:ss") {
|
|
41
41
|
if (!date) return;
|
|
42
|
-
|
|
42
|
+
const utcDate = moment.utc(date).toDate();
|
|
43
|
+
return moment(utcDate, format).local().format(format);
|
|
43
44
|
}
|
|
44
45
|
function transformLocalTimeToUTC(date, format = "YYYY-MM-DD HH:mm:ss") {
|
|
45
46
|
if (!date) return;
|