intelicoreact 1.6.20 → 1.6.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/Atomic/FormElements/ActionAlert/ActionAlert.js +1 -102
- package/dist/Atomic/FormElements/AdvancedStatus/AdvancedStatus.js +1 -89
- package/dist/Atomic/FormElements/Calendar/Calendar.js +1 -232
- package/dist/Atomic/FormElements/Calendar/Calendar.props.js +1 -3
- package/dist/Atomic/FormElements/CheckboxInput/CheckboxInput.js +1 -101
- package/dist/Atomic/FormElements/CheckboxesLine/CheckboxesLine.js +1 -70
- package/dist/Atomic/FormElements/Datepicker/Datepicker.js +1 -350
- package/dist/Atomic/FormElements/Datepicker/Datepicker.props.js +1 -3
- package/dist/Atomic/FormElements/Datepicker/components/DatepickerCalendar.js +1 -177
- package/dist/Atomic/FormElements/Datepicker/components/DatepickerCalendar.props.js +1 -3
- package/dist/Atomic/FormElements/Dropdown/Dropdown.js +1 -561
- package/dist/Atomic/FormElements/Dropdown/components/DropdownLoader.js +1 -20
- package/dist/Atomic/FormElements/DropdownLiveSearch/DropdownLiveSearch.js +1 -405
- package/dist/Atomic/FormElements/FileLoader/FileLoader.js +1 -94
- package/dist/Atomic/FormElements/FileLoader/partial/LoadZone.js +1 -105
- package/dist/Atomic/FormElements/FileLoader/partial/LoadedContent.js +1 -67
- package/dist/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.js +1 -247
- package/dist/Atomic/FormElements/FileLoaderLocal/FileLoaderLocal.js +1 -160
- package/dist/Atomic/FormElements/FileLoaderLocalGroup/FileLoaderLocalGroup.js +1 -193
- package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN.js +1 -135
- package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN_old.js +1 -116
- package/dist/Atomic/FormElements/Input/Input.js +1 -467
- package/dist/Atomic/FormElements/InputCalendar/InputCalendar.js +1 -161
- package/dist/Atomic/FormElements/InputColor/InputColor.js +1 -64
- package/dist/Atomic/FormElements/InputCurrency/InputCurrency.js +1 -166
- package/dist/Atomic/FormElements/InputDateRange/InputDateRange.js +1 -354
- package/dist/Atomic/FormElements/InputDateRange/components/DateInput.js +1 -71
- package/dist/Atomic/FormElements/InputDateRange/components/Datepicker.js +1 -693
- package/dist/Atomic/FormElements/InputDateRange/components/OpenedPart.js +1 -254
- package/dist/Atomic/FormElements/InputDateRange/components/SelectItem.js +1 -32
- package/dist/Atomic/FormElements/InputDateRange/dependencies.js +1 -200
- package/dist/Atomic/FormElements/InputLink/InputLink.js +1 -99
- package/dist/Atomic/FormElements/InputMask/InputCarretPosition.js +1 -37
- package/dist/Atomic/FormElements/InputMask/InputMask.js +1 -1214
- package/dist/Atomic/FormElements/InputMask/config.js +1 -15
- package/dist/Atomic/FormElements/InputMask/functions.js +1 -58
- package/dist/Atomic/FormElements/InputMask2/InputMask2.js +1 -674
- package/dist/Atomic/FormElements/InputMask2/config.js +1 -15
- package/dist/Atomic/FormElements/InputMask2/functions.js +1 -58
- package/dist/Atomic/FormElements/InputMask3/InputMask3.js +1 -766
- package/dist/Atomic/FormElements/InputMask3/config.js +1 -15
- package/dist/Atomic/FormElements/InputMask3/functions.js +1 -58
- package/dist/Atomic/FormElements/InputWithAction/InputWithAction.js +1 -114
- package/dist/Atomic/FormElements/InputsRow/InputsRow.js +1 -140
- package/dist/Atomic/FormElements/Label/Label.js +1 -82
- package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.js +1 -506
- package/dist/Atomic/FormElements/MultiSelect/MultiSelect.js +1 -45
- package/dist/Atomic/FormElements/NumericInput/NumericInput.js +1 -331
- package/dist/Atomic/FormElements/RadioGroup/RadioGroup.js +1 -66
- package/dist/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.js +1 -80
- package/dist/Atomic/FormElements/RadioInput/RadioInput.js +1 -64
- package/dist/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.js +1 -54
- package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.js +1 -183
- package/dist/Atomic/FormElements/RangeInputs/RangeInputs.js +1 -209
- package/dist/Atomic/FormElements/RangeList/RangeList.js +1 -175
- package/dist/Atomic/FormElements/RangeList/partial/RangeListRow.js +1 -43
- package/dist/Atomic/FormElements/RangeSlider/RangeSlider.js +1 -443
- package/dist/Atomic/FormElements/RangeSlider2/RangeSlider2.js +1 -858
- package/dist/Atomic/FormElements/SwitchableRow/SwitchableRow.js +1 -39
- package/dist/Atomic/FormElements/Switcher/Switcher.js +1 -59
- package/dist/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.js +1 -50
- package/dist/Atomic/FormElements/SwitcherHide/SwitcherHide.js +1 -47
- package/dist/Atomic/FormElements/SwitcherRadio/SwitcherRadio.js +1 -96
- package/dist/Atomic/FormElements/SwitcherRange/SwitcherRange.js +1 -40
- package/dist/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.js +1 -64
- package/dist/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.js +1 -170
- package/dist/Atomic/FormElements/SwitcherTagsDropdown/partial/States.js +1 -202
- package/dist/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.js +1 -67
- package/dist/Atomic/FormElements/TagListToDropdown/TagListToDropdown.js +1 -115
- package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.js +1 -826
- package/dist/Atomic/FormElements/Text/Text.js +1 -125
- package/dist/Atomic/FormElements/TextSwitcher/TextSwitcher.js +1 -45
- package/dist/Atomic/FormElements/Textarea/Textarea.js +1 -80
- package/dist/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js +1 -176
- package/dist/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.js +1 -62
- package/dist/Atomic/FormElements/TimeRange/TimeRange.js +1 -127
- package/dist/Atomic/FormElements/UserContacts/UserContacts.js +1 -220
- package/dist/Atomic/FormElements/VariantsListRadio/VariantsListRadio.js +1 -83
- package/dist/Atomic/FormElements/VariantsListRadio/partials/VariantsListRadioItem.js +1 -82
- package/dist/Atomic/FormElements/WidgetPseudoTable/WidgetPseudoTable.js +1 -101
- package/dist/Atomic/FormElements/WidgetPseudoTable/partial/constructor.js +1 -29
- package/dist/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.js +1 -113
- package/dist/Atomic/FormElements/WidgetWithSwitchableRows/partial/constructor.js +1 -30
- package/dist/Atomic/Layout/Header/Header.js +1 -85
- package/dist/Atomic/Layout/Spinner/Spinner.js +1 -39
- package/dist/Atomic/UI/Accordion/Accordion.js +1 -118
- package/dist/Atomic/UI/Accordion/AccordionItem.js +1 -181
- package/dist/Atomic/UI/AccordionTable/AccordionTable.js +1 -238
- package/dist/Atomic/UI/AccordionText/AccordionText.js +1 -69
- package/dist/Atomic/UI/AdvancedTag/AdvTag.js +1 -207
- package/dist/Atomic/UI/AdvancedTag/AdvancedTags.js +1 -56
- package/dist/Atomic/UI/Alert/Alert.js +1 -72
- package/dist/Atomic/UI/Arrow/Arrow.js +1 -132
- package/dist/Atomic/UI/Box/Box.js +1 -52
- package/dist/Atomic/UI/Button/Button.js +1 -89
- package/dist/Atomic/UI/ButtonsBar/ButtonsBar.js +1 -72
- package/dist/Atomic/UI/Chart/Chart.js +1 -172
- package/dist/Atomic/UI/Chart/partial/Chart.constants.js +1 -95
- package/dist/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.js +1 -80
- package/dist/Atomic/UI/Chart/partial/datasetSetters.js +1 -188
- package/dist/Atomic/UI/Chart/partial/optionsConstructor.js +1 -335
- package/dist/Atomic/UI/Chart/partial/optionsSetters.js +1 -43
- package/dist/Atomic/UI/Chart/partial/utils.js +1 -60
- package/dist/Atomic/UI/CircleProgressBar/CircleProgressBar.js +1 -109
- package/dist/Atomic/UI/DateTime/DateTime.js +1 -57
- package/dist/Atomic/UI/DebugContainer/DebugContainer.js +1 -44
- package/dist/Atomic/UI/DebugContainer/useDebugContainer.js +1 -15
- package/dist/Atomic/UI/DoubleString/DoubleString.js +1 -102
- package/dist/Atomic/UI/DynamicIcon/DynamicIcon.js +1 -226
- package/dist/Atomic/UI/ExampleChartIntegration/ExampleChartIntegration.js +1 -221
- package/dist/Atomic/UI/ExampleChartIntegration/partial/utils.js +1 -106
- package/dist/Atomic/UI/Hint/Hint.js +1 -193
- package/dist/Atomic/UI/Hint/partials/_utils.js +1 -51
- package/dist/Atomic/UI/Modal/Modal.js +1 -188
- package/dist/Atomic/UI/Modal/ModalHOC.js +1 -72
- package/dist/Atomic/UI/Modal/partials/ModalFooter.js +1 -46
- package/dist/Atomic/UI/Modal/partials/ModalTitle.js +1 -83
- package/dist/Atomic/UI/Modal/partials/useMobileModal.js +1 -200
- package/dist/Atomic/UI/MonoAccordion/MonoAccordion._test.js +1 -75
- package/dist/Atomic/UI/MonoAccordion/MonoAccordion.js +1 -80
- package/dist/Atomic/UI/NavLine/NavLine.js +1 -293
- package/dist/Atomic/UI/PageTitle/PageTitle.js +1 -75
- package/dist/Atomic/UI/PieChart/PieChart.js +1 -42
- package/dist/Atomic/UI/Price/Price.js +1 -22
- package/dist/Atomic/UI/PriceRange/PriceRange.js +1 -36
- package/dist/Atomic/UI/ProgressLine/ProgressLine.js +1 -71
- package/dist/Atomic/UI/Status/Status.js +1 -59
- package/dist/Atomic/UI/Table/Partials/TdCell.js +1 -87
- package/dist/Atomic/UI/Table/Partials/TdHeader.js +1 -38
- package/dist/Atomic/UI/Table/Partials/TdRow.js +1 -99
- package/dist/Atomic/UI/Table/Partials/TdTitle.js +1 -52
- package/dist/Atomic/UI/Table/Table.js +1 -63
- package/dist/Atomic/UI/Table/TdTypes/TdActions.js +1 -80
- package/dist/Atomic/UI/Table/TdTypes/TdPriority.js +1 -28
- package/dist/Atomic/UI/Table/TdTypes/TdRange.js +1 -13
- package/dist/Atomic/UI/Table/TdTypes/TdWeight.js +1 -53
- package/dist/Atomic/UI/Tag/Tag.js +1 -160
- package/dist/Atomic/UI/TagList/TagList.js +1 -251
- package/dist/Atomic/UI/UserBox/UserBox.js +1 -73
- package/dist/Atomic/UI/WizardStepper/constructor.js +1 -84
- package/dist/Atomic/UI/WizardStepper/index.js +1 -3
- package/dist/Atomic/UI/WizardStepper/ui/StateIcon/StateIcon.js +1 -37
- package/dist/Atomic/UI/WizardStepper/ui/StateIcon/index.js +1 -3
- package/dist/Atomic/UI/WizardStepper/ui/StepRow/StepRow.js +1 -61
- package/dist/Atomic/UI/WizardStepper/ui/StepRow/index.js +1 -3
- package/dist/Atomic/UI/WizardStepper/ui/StepWrapper/StepWrapper.js +1 -39
- package/dist/Atomic/UI/WizardStepper/ui/StepWrapper/index.js +1 -3
- package/dist/Atomic/UI/WizardStepper/ui/icons.js +1 -49
- package/dist/Atomic/UI/WizardStepper/ui/index.js +1 -3
- package/dist/Classes/AbortableFetch.js +1 -454
- package/dist/Classes/AnimatedHandler.js +1 -47
- package/dist/Classes/RESTAPI/index.js +1 -228
- package/dist/Classes/RESTAPI/partials/AbortableFetch.js +1 -457
- package/dist/Classes/RESTAPI/partials/ApiBase.js +1 -48
- package/dist/Classes/RESTAPI/partials/ApiRequestCreators.js +1 -112
- package/dist/Classes/RESTAPI/partials/ApiUtils.js +1 -189
- package/dist/Classes/RESTAPI/partials/CredentialsProcessing.js +1 -252
- package/dist/Classes/RESTAPI/partials/Utils.js +1 -92
- package/dist/Classes/RESTAPI/partials/_outerDependencies.js +1 -3
- package/dist/Classes/RESTAPI/partials/_utils.js +1 -197
- package/dist/Constants/index.constants.js +1 -78
- package/dist/Functions/Portal.js +1 -22
- package/dist/Functions/customEventListener.js +1 -96
- package/dist/Functions/dateTime.js +1 -149
- package/dist/Functions/fieldValueFormatters.js +1 -405
- package/dist/Functions/guards/assertions.js +1 -66
- package/dist/Functions/guards/safeValue.js +1 -30
- package/dist/Functions/guards/typeGuards.js +1 -116
- package/dist/Functions/hooks/useFormFieldsChangesManager.js +1 -95
- package/dist/Functions/locale/createTranslator.js +1 -32
- package/dist/Functions/operations.js +1 -130
- package/dist/Functions/presets/inputMaskPresets.js +1 -170
- package/dist/Functions/presets/inputPresets.js +1 -60
- package/dist/Functions/presets/mobileKeyboardTypesPresets.js +1 -45
- package/dist/Functions/schemas.js +1 -31
- package/dist/Functions/useBodyScrollLock.js +1 -17
- package/dist/Functions/useClickOutside.js +1 -15
- package/dist/Functions/useDebounce.js +1 -17
- package/dist/Functions/useFieldFocus.js +1 -84
- package/dist/Functions/useFormTools/form-drivers/ArrayWithObjects.js +1 -39
- package/dist/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js +1 -159
- package/dist/Functions/useFormTools/form-drivers/ObjectWithNamedKeyObjects.js +1 -78
- package/dist/Functions/useFormTools/functions/General.js +1 -134
- package/dist/Functions/useFormTools/functions/RenderFields.js +1 -111
- package/dist/Functions/useFormTools/functions/usePrevious.js +1 -12
- package/dist/Functions/useFormTools/index.js +1 -778
- package/dist/Functions/useInputHighlightError.js +1 -67
- package/dist/Functions/useIsMobile/useIsMobile.js +1 -53
- package/dist/Functions/useKeyPress/useHandleKeyPress.js +1 -21
- package/dist/Functions/useKeyPress/useKeyPress.js +1 -75
- package/dist/Functions/useLocalStorage.js +1 -34
- package/dist/Functions/useLocationParams.js +1 -27
- package/dist/Functions/useMediaQuery.js +1 -17
- package/dist/Functions/useMetaInfo.js +1 -43
- package/dist/Functions/useMouseUpOutside.js +1 -16
- package/dist/Functions/useOnlineStatus.js +1 -29
- package/dist/Functions/usePasswordChecker.js +1 -110
- package/dist/Functions/usePrevious.js +1 -12
- package/dist/Functions/useResize.js +1 -31
- package/dist/Functions/useScrollTo.js +1 -17
- package/dist/Functions/useToggle.js +1 -17
- package/dist/Functions/utils.js +1 -522
- package/dist/Langs.js +1 -168
- package/dist/Molecular/CustomIcons/components/AffiliateNetworks.js +1 -21
- package/dist/Molecular/CustomIcons/components/AlertCircle.js +1 -23
- package/dist/Molecular/CustomIcons/components/AppStore.js +1 -29
- package/dist/Molecular/CustomIcons/components/Arrow.js +1 -32
- package/dist/Molecular/CustomIcons/components/ArrowDown.js +1 -17
- package/dist/Molecular/CustomIcons/components/ArrowLeft.js +1 -22
- package/dist/Molecular/CustomIcons/components/ArrowRight.js +1 -22
- package/dist/Molecular/CustomIcons/components/ArrowUp.js +1 -17
- package/dist/Molecular/CustomIcons/components/Bell.js +1 -15
- package/dist/Molecular/CustomIcons/components/Button.js +1 -12
- package/dist/Molecular/CustomIcons/components/Campaigns.js +1 -16
- package/dist/Molecular/CustomIcons/components/Check.js +1 -14
- package/dist/Molecular/CustomIcons/components/Check2.js +1 -12
- package/dist/Molecular/CustomIcons/components/ChevronDown.js +1 -12
- package/dist/Molecular/CustomIcons/components/ChevronDownDisabled.js +1 -11
- package/dist/Molecular/CustomIcons/components/ChevronLeft.js +1 -11
- package/dist/Molecular/CustomIcons/components/ChevronRight.js +1 -11
- package/dist/Molecular/CustomIcons/components/ChevronUp.js +1 -11
- package/dist/Molecular/CustomIcons/components/ChevronUpDown.js +1 -27
- package/dist/Molecular/CustomIcons/components/Close.js +1 -14
- package/dist/Molecular/CustomIcons/components/ColumnsOrder.js +1 -17
- package/dist/Molecular/CustomIcons/components/Delete.js +1 -16
- package/dist/Molecular/CustomIcons/components/Edit.js +1 -15
- package/dist/Molecular/CustomIcons/components/Email.js +1 -31
- package/dist/Molecular/CustomIcons/components/FinturfLogo.js +1 -18
- package/dist/Molecular/CustomIcons/components/FinturfLogo2.js +1 -35
- package/dist/Molecular/CustomIcons/components/Flows.js +1 -15
- package/dist/Molecular/CustomIcons/components/Gift.js +1 -25
- package/dist/Molecular/CustomIcons/components/GoogleAuth.js +1 -29
- package/dist/Molecular/CustomIcons/components/GooglePlay.js +1 -29
- package/dist/Molecular/CustomIcons/components/HelpCircle.js +1 -19
- package/dist/Molecular/CustomIcons/components/HelpCircle2.js +1 -20
- package/dist/Molecular/CustomIcons/components/HelpCircleFilled.js +1 -19
- package/dist/Molecular/CustomIcons/components/Home.js +1 -16
- package/dist/Molecular/CustomIcons/components/Home2.js +1 -22
- package/dist/Molecular/CustomIcons/components/Key.js +1 -23
- package/dist/Molecular/CustomIcons/components/Landers.js +1 -20
- package/dist/Molecular/CustomIcons/components/Lock.js +1 -15
- package/dist/Molecular/CustomIcons/components/Mail.js +1 -26
- package/dist/Molecular/CustomIcons/components/Mastercard.js +1 -73
- package/dist/Molecular/CustomIcons/components/Minus.js +1 -25
- package/dist/Molecular/CustomIcons/components/Offers.js +1 -16
- package/dist/Molecular/CustomIcons/components/Pause.js +1 -28
- package/dist/Molecular/CustomIcons/components/PayPal.js +1 -41
- package/dist/Molecular/CustomIcons/components/PayPalLightLarge.js +1 -28
- package/dist/Molecular/CustomIcons/components/Phone.js +1 -30
- package/dist/Molecular/CustomIcons/components/Play.js +1 -25
- package/dist/Molecular/CustomIcons/components/Plus.js +1 -25
- package/dist/Molecular/CustomIcons/components/Profile.js +1 -16
- package/dist/Molecular/CustomIcons/components/QRCode.js +1 -29
- package/dist/Molecular/CustomIcons/components/Rectangle.js +1 -12
- package/dist/Molecular/CustomIcons/components/Revert.js +1 -13
- package/dist/Molecular/CustomIcons/components/Star.js +1 -14
- package/dist/Molecular/CustomIcons/components/Star2.js +1 -16
- package/dist/Molecular/CustomIcons/components/TrafficSources.js +1 -14
- package/dist/Molecular/CustomIcons/components/Trash.js +1 -15
- package/dist/Molecular/CustomIcons/components/TrashRed.js +1 -15
- package/dist/Molecular/CustomIcons/components/Triggers.js +1 -15
- package/dist/Molecular/CustomIcons/components/User.js +1 -25
- package/dist/Molecular/CustomIcons/components/Visa.js +1 -31
- package/dist/Molecular/CustomIcons/components/X.js +1 -12
- package/dist/Molecular/CustomIcons/index.js +1 -61
- package/dist/Molecular/FormElement/FormElement.js +1 -54
- package/dist/Molecular/FormWithDependOn/FormWithDependOn.js +1 -184
- package/dist/Molecular/FormWithDependOn/partials/_utils.js +1 -53
- package/dist/Molecular/InputAddress/InputAddress.js +1 -620
- package/dist/Molecular/InputPassword/InputPassword.js +1 -48
- package/dist/index.js +1 -1
- package/package.json +1 -1
|
@@ -1,467 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import React, { useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
-
|
|
4
|
-
// import InputMask from 'react-input-mask';
|
|
5
|
-
import { KEYBOARD_SERVICE_KEYS } from "../../../Constants/index.constants";
|
|
6
|
-
import {
|
|
7
|
-
filterNumeric,
|
|
8
|
-
formatToAddBitDepthPoints as addCommas,
|
|
9
|
-
formatToOnlyASCIICodeText,
|
|
10
|
-
formatToRemoveComa as removeCommas,
|
|
11
|
-
getSafelyValue
|
|
12
|
-
} from "../../../Functions/fieldValueFormatters";
|
|
13
|
-
import { getIsOnlyAnObject } from "../../../Functions/utils";
|
|
14
|
-
import Spinner from "../../Layout/Spinner/Spinner";
|
|
15
|
-
import DynamicIcon from "../../UI/DynamicIcon/DynamicIcon";
|
|
16
|
-
|
|
17
|
-
import "./Input.scss";
|
|
18
|
-
|
|
19
|
-
const HIDE_SYMBOL = "\u2022";
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Input компонент.
|
|
23
|
-
*
|
|
24
|
-
* @component
|
|
25
|
-
* @param {object} props.blurTrim - Обрезает ведущие и оконечные символы строки при потере фокуса.
|
|
26
|
-
* @param {string} props.autocomplete - Определяет, должен ли браузер включать автозаполнение ввода пользователя.
|
|
27
|
-
* @param {boolean} props.isSelect - Определяет, будет ли компонент редактироваться по умолчанию при загрузке страницы.
|
|
28
|
-
* @param {function} props.onChange - Функция, которая вызывается при изменении содержимого элемента управления формы.
|
|
29
|
-
* @param {function} props.onBlur - Функция, которая вызывается при потере элементом управления фокуса.
|
|
30
|
-
* @param {function} props.onFocus - Функция, вызываемая при получении элементом управления фокуса.
|
|
31
|
-
* @param {function} props.onKeyUp - Функция, которая вызывается при отпускании клавиши.
|
|
32
|
-
* @param {function} props.onKeyDown - Функция, вызываемая при нажатии на клавишу.
|
|
33
|
-
* @param {boolean} props.isNotBlinkErrors - Отключает мигание элемента управления при ошибках.
|
|
34
|
-
* @param {boolean} props.isPriceInput - Определяет, будет ли компонент ввода формата числа с плавающей точкой.
|
|
35
|
-
* @param {boolean} props.onlyNumbers - Определяет, будет ли компонент прозволять только цифры.
|
|
36
|
-
* @param {boolean} props.isOnlyString - Определяет, будет ли компонент разрешать
|
|
37
|
-
* только строки (без чисел или других символов).
|
|
38
|
-
* @param {boolean} props.disabled - Блокировка поля ввода.
|
|
39
|
-
* @param {boolean} props.withDelete - Включает отображение кнопки удаления контента.
|
|
40
|
-
* @param {string} props.value - Значение поля ввода.
|
|
41
|
-
* @param {string} props.placeholder - Текст подсказки внутри поля ввода.
|
|
42
|
-
* @param {string} props.className - Строка с именами классов, применяемыми к компоненту.
|
|
43
|
-
* @param {string} props.type - Тип компонента ввода (например, 'text', 'password').
|
|
44
|
-
* @param {boolean} props.softStringMode - Используется для включения нестрогого режима ввода символов.
|
|
45
|
-
* @param {object} props.mask - Маска для поля ввода.
|
|
46
|
-
* @param {string} props.maskChar - Свойство определяет символ,
|
|
47
|
-
* используемый вместо пропущенных символов при введении маски.
|
|
48
|
-
* @param {object} props.formatChars - Объект, определяющий символы, которые должны быть заменены в маске.
|
|
49
|
-
* @param {string} props.error - Строка с сообщением об ошибке.
|
|
50
|
-
* @param {number} props.symbolsLimit - Лимит символов ввода.
|
|
51
|
-
* @param {number} props.blinkTime - Время мигания в миллисекундах.
|
|
52
|
-
* @param {boolean} props.isFocusDefault - Определяет, будет ли элемент получать фокус при загрузке страницы.
|
|
53
|
-
* @param {boolean} props.isNotValidateASCII - Отключает проверку ASCII для вводимых символов.
|
|
54
|
-
* @param {boolean} props.isNumericMobileKeyboard - Отображает цифровую клавиатуру на мобильных устройствах.
|
|
55
|
-
*/
|
|
56
|
-
const Input = React.forwardRef(
|
|
57
|
-
(
|
|
58
|
-
{
|
|
59
|
-
blurTrim,
|
|
60
|
-
autocomplete = "off",
|
|
61
|
-
isSelect,
|
|
62
|
-
onChange = () => {},
|
|
63
|
-
onBlur = () => {},
|
|
64
|
-
onFocus = () => {},
|
|
65
|
-
onKeyUp = () => {},
|
|
66
|
-
onKeyDown = () => {},
|
|
67
|
-
isNotBlinkErrors,
|
|
68
|
-
isPriceInput,
|
|
69
|
-
onlyNumbers,
|
|
70
|
-
disabled,
|
|
71
|
-
withDelete,
|
|
72
|
-
value,
|
|
73
|
-
placeholder,
|
|
74
|
-
className,
|
|
75
|
-
type = "text",
|
|
76
|
-
mask,
|
|
77
|
-
maskChar,
|
|
78
|
-
formatChars,
|
|
79
|
-
error,
|
|
80
|
-
icon,
|
|
81
|
-
iconDynamicKey,
|
|
82
|
-
iconDynamicProps = {},
|
|
83
|
-
symbolsLimit,
|
|
84
|
-
blinkTime,
|
|
85
|
-
isFocusDefault = false,
|
|
86
|
-
isNotValidateASCII = false,
|
|
87
|
-
isNumericMobileKeyboard = false,
|
|
88
|
-
isCropFirstNool = false,
|
|
89
|
-
testId = "input",
|
|
90
|
-
action,
|
|
91
|
-
isUseAutoSelect = true,
|
|
92
|
-
isReadOnly = false,
|
|
93
|
-
isLoading = false,
|
|
94
|
-
name,
|
|
95
|
-
fieldKey,
|
|
96
|
-
id,
|
|
97
|
-
attributesOfNativeInput = {},
|
|
98
|
-
},
|
|
99
|
-
ref,
|
|
100
|
-
) => {
|
|
101
|
-
const { trimStart, trimEnd, characters } = blurTrim || {};
|
|
102
|
-
const DynamicIconComponent =
|
|
103
|
-
iconDynamicKey && !icon ? (
|
|
104
|
-
<DynamicIcon iconKey={iconDynamicKey} {...iconDynamicProps} />
|
|
105
|
-
) : null;
|
|
106
|
-
const DEFAULT_BLINK_TIME = 100;
|
|
107
|
-
// STATES
|
|
108
|
-
const [isFocused, setIsFocused] = useState(false);
|
|
109
|
-
const [isEditing, setEditing] = useState(false);
|
|
110
|
-
const inputInnerRef = useRef(null);
|
|
111
|
-
const inputRef = useMemo(() => ref || inputInnerRef, [ref]);
|
|
112
|
-
// const previousValueRef = useRef(value);
|
|
113
|
-
const [isAttemptToChange, setIsAttemptToChange] = useState(false);
|
|
114
|
-
const [isToHighlightError, setIsToHighlightError] = useState(false);
|
|
115
|
-
const [onInputHover, setOnInputHover] = useState(false);
|
|
116
|
-
|
|
117
|
-
const [prevValue, setPreviousValue] = useState(value);
|
|
118
|
-
const [keyDownData, setKeyDownData] = useState({
|
|
119
|
-
start: null,
|
|
120
|
-
end: null,
|
|
121
|
-
keyCode: null,
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
const isUseBitDepthPoints = Boolean(onlyNumbers) && isPriceInput;
|
|
125
|
-
const isUseErrorsBlink = !isNotBlinkErrors && !mask;
|
|
126
|
-
|
|
127
|
-
const inputName = name || fieldKey || id;
|
|
128
|
-
|
|
129
|
-
const isPseudoPasswordMode = type === "pseudoPassword";
|
|
130
|
-
|
|
131
|
-
// HANDLES
|
|
132
|
-
const handle = {
|
|
133
|
-
correctMinMax: (value, correctionType) => {
|
|
134
|
-
if (!onlyNumbers) return value;
|
|
135
|
-
|
|
136
|
-
const { min, max, isOnlyPositive, isNoEmptyValues } = getIsOnlyAnObject(
|
|
137
|
-
onlyNumbers,
|
|
138
|
-
)
|
|
139
|
-
? onlyNumbers
|
|
140
|
-
: {};
|
|
141
|
-
const minimum =
|
|
142
|
-
!Number.isNaN(Number(min)) &&
|
|
143
|
-
min !== null &&
|
|
144
|
-
(min >= 0 || !isOnlyPositive)
|
|
145
|
-
? min
|
|
146
|
-
: undefined;
|
|
147
|
-
const maximum =
|
|
148
|
-
!Number.isNaN(Number(max)) &&
|
|
149
|
-
max !== null &&
|
|
150
|
-
(max >= 0 || !isOnlyPositive)
|
|
151
|
-
? max
|
|
152
|
-
: undefined;
|
|
153
|
-
|
|
154
|
-
let minusSymbol;
|
|
155
|
-
let inputValue = getSafelyValue(value);
|
|
156
|
-
|
|
157
|
-
const checkMin = () => {
|
|
158
|
-
if (!inputValue && isNoEmptyValues)
|
|
159
|
-
inputValue = minimum !== undefined ? minimum : "0";
|
|
160
|
-
else if (
|
|
161
|
-
inputValue &&
|
|
162
|
-
!Number.isNaN(Number(minimum)) &&
|
|
163
|
-
Number(minimum) > Number((minusSymbol ?? "") + inputValue)
|
|
164
|
-
)
|
|
165
|
-
inputValue = minimum;
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
const checkMax = () => {
|
|
169
|
-
if (
|
|
170
|
-
!Number.isNaN(Number(maximum)) &&
|
|
171
|
-
Number(maximum) < Number((minusSymbol ?? "") + inputValue)
|
|
172
|
-
) {
|
|
173
|
-
inputValue = maximum;
|
|
174
|
-
minusSymbol = null;
|
|
175
|
-
}
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
if (isUseBitDepthPoints) inputValue = removeCommas(inputValue);
|
|
179
|
-
if (!isOnlyPositive && inputValue[0] === "-") {
|
|
180
|
-
minusSymbol = "-";
|
|
181
|
-
inputValue = inputValue.slice(1);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
inputValue = filterNumeric(inputValue, onlyNumbers);
|
|
185
|
-
|
|
186
|
-
switch (correctionType) {
|
|
187
|
-
case "min":
|
|
188
|
-
checkMin();
|
|
189
|
-
break;
|
|
190
|
-
case "max":
|
|
191
|
-
checkMax();
|
|
192
|
-
break;
|
|
193
|
-
default:
|
|
194
|
-
checkMin();
|
|
195
|
-
checkMax();
|
|
196
|
-
break;
|
|
197
|
-
}
|
|
198
|
-
return inputValue;
|
|
199
|
-
},
|
|
200
|
-
|
|
201
|
-
processPseudoValue: (newValue, oldValue) => {
|
|
202
|
-
const insertedPart = newValue.replace(new RegExp(HIDE_SYMBOL, "g"), "");
|
|
203
|
-
|
|
204
|
-
// ? Если insertedPart.length > 1, то это точно копи-паст
|
|
205
|
-
// ? По договоренности любой копипаст заменяет текущее велью
|
|
206
|
-
if (insertedPart.length > 1) return insertedPart;
|
|
207
|
-
|
|
208
|
-
const isOldValueHasBeenReduced =
|
|
209
|
-
newValue.replace(new RegExp(/^HIDE_SYMBOL/g), "").length <
|
|
210
|
-
oldValue.length;
|
|
211
|
-
const oldValueArr = oldValue.split("");
|
|
212
|
-
|
|
213
|
-
const getIsInclude = (idx) => {
|
|
214
|
-
const BACKSPACE_CODE = 8;
|
|
215
|
-
|
|
216
|
-
// ? Если позиции не равны, значит была выделена область, значит будем воспринимать как копи-паст
|
|
217
|
-
if (keyDownData.start !== keyDownData.end) return false;
|
|
218
|
-
|
|
219
|
-
// ? Если позиции равны и есть вставляемое значение - обрезаем "хвост"
|
|
220
|
-
if (insertedPart) return idx < keyDownData.start;
|
|
221
|
-
|
|
222
|
-
// ? Если позиции равны и нет вставляемого значения - значит симвовол удалили
|
|
223
|
-
return keyDownData.keyCode === BACKSPACE_CODE
|
|
224
|
-
? idx < keyDownData.start - 1 || idx > keyDownData.end - 1
|
|
225
|
-
: idx < keyDownData.start || idx > keyDownData.end;
|
|
226
|
-
};
|
|
227
|
-
|
|
228
|
-
if (!insertedPart)
|
|
229
|
-
return oldValueArr.reduce(
|
|
230
|
-
(acc, sym, idx) => (getIsInclude(idx) ? `${acc}${sym}` : acc),
|
|
231
|
-
"",
|
|
232
|
-
);
|
|
233
|
-
|
|
234
|
-
const outputStructure = oldValueArr.reduce(
|
|
235
|
-
(acc, sym, idx) => {
|
|
236
|
-
if (getIsInclude(idx)) acc.result = `${acc.result}${sym}`;
|
|
237
|
-
else if (!acc.position) acc.position = insertedPart ? idx : idx - 1;
|
|
238
|
-
return acc;
|
|
239
|
-
},
|
|
240
|
-
{
|
|
241
|
-
result: "",
|
|
242
|
-
position: !isOldValueHasBeenReduced ? keyDownData.start : null,
|
|
243
|
-
},
|
|
244
|
-
);
|
|
245
|
-
|
|
246
|
-
const output = `${outputStructure.result.slice(
|
|
247
|
-
0,
|
|
248
|
-
outputStructure.position,
|
|
249
|
-
)}${insertedPart}${outputStructure.result.slice(outputStructure.position)}`;
|
|
250
|
-
|
|
251
|
-
return output;
|
|
252
|
-
},
|
|
253
|
-
|
|
254
|
-
change: (e) => {
|
|
255
|
-
const { isOnlyPositive } = getIsOnlyAnObject(onlyNumbers)
|
|
256
|
-
? onlyNumbers
|
|
257
|
-
: {};
|
|
258
|
-
|
|
259
|
-
let minusSymbol;
|
|
260
|
-
let inputValue = e.target ? e.target.value : e;
|
|
261
|
-
if (isPseudoPasswordMode)
|
|
262
|
-
inputValue = inputValue.includes(HIDE_SYMBOL)
|
|
263
|
-
? handle.processPseudoValue(inputValue, value, e)
|
|
264
|
-
: inputValue;
|
|
265
|
-
|
|
266
|
-
// If user typed comma(',') replace it to dot('.') for float value typing
|
|
267
|
-
if (isPriceInput && inputValue.charAt(inputValue.length-1) === ',') inputValue = inputValue.substring(0, inputValue.length-1).concat('.');
|
|
268
|
-
|
|
269
|
-
if (isUseBitDepthPoints) inputValue = removeCommas(inputValue);
|
|
270
|
-
if (onlyNumbers) inputValue = inputValue.replace(/,/g, ".");
|
|
271
|
-
|
|
272
|
-
if (onlyNumbers && !isOnlyPositive && inputValue[0] === "-") {
|
|
273
|
-
minusSymbol = "-";
|
|
274
|
-
inputValue = inputValue.slice(1);
|
|
275
|
-
}
|
|
276
|
-
if (!isNotValidateASCII)
|
|
277
|
-
inputValue = formatToOnlyASCIICodeText(inputValue);
|
|
278
|
-
if (symbolsLimit && inputValue.length > Number(symbolsLimit))
|
|
279
|
-
inputValue = inputValue.substring(0, Number(symbolsLimit));
|
|
280
|
-
if (isCropFirstNool && inputValue[0] == 0) return "";
|
|
281
|
-
else if (onlyNumbers)
|
|
282
|
-
inputValue = handle.correctMinMax(inputValue, "max");
|
|
283
|
-
onChange(((minusSymbol ?? "") + inputValue).toString());
|
|
284
|
-
},
|
|
285
|
-
toggleEdit: () => {
|
|
286
|
-
setEditing(!isEditing);
|
|
287
|
-
onChange("");
|
|
288
|
-
},
|
|
289
|
-
focus: (e) => {
|
|
290
|
-
setIsFocused(true);
|
|
291
|
-
onFocus(e);
|
|
292
|
-
},
|
|
293
|
-
blur: (e) => {
|
|
294
|
-
let inputValue = handle.correctMinMax(getSafelyValue(value), "min");
|
|
295
|
-
if (trimStart)
|
|
296
|
-
inputValue = inputValue.replace(new RegExp(`^[${characters}]+`), "");
|
|
297
|
-
if (trimEnd)
|
|
298
|
-
inputValue = inputValue.replace(new RegExp(`[${characters}]+$`), "");
|
|
299
|
-
|
|
300
|
-
if (value !== inputValue) onChange(inputValue);
|
|
301
|
-
|
|
302
|
-
setIsFocused(false);
|
|
303
|
-
setEditing(false);
|
|
304
|
-
// использую setTimeout для того чтоб прошли переназначения велью, если они есть,
|
|
305
|
-
// для того, чтоб верхний onBlur при обращении к e.target.value получал обновленное велью
|
|
306
|
-
if (onBlur) setTimeout(() => onBlur(e), 0);
|
|
307
|
-
},
|
|
308
|
-
keyDown: (e) => {
|
|
309
|
-
setPreviousValue(e?.target?.value);
|
|
310
|
-
setKeyDownData({
|
|
311
|
-
start: e.target.selectionStart,
|
|
312
|
-
end: e.target.selectionEnd,
|
|
313
|
-
keyCode: e.keyCode,
|
|
314
|
-
});
|
|
315
|
-
onKeyDown(e.keyCode, e);
|
|
316
|
-
},
|
|
317
|
-
keyUp: (e) => {
|
|
318
|
-
if (isUseErrorsBlink) {
|
|
319
|
-
const changedValue = `${value ?? ""}`;
|
|
320
|
-
const previousValue = `${prevValue}`;
|
|
321
|
-
|
|
322
|
-
const short =
|
|
323
|
-
previousValue.length <= changedValue.length
|
|
324
|
-
? previousValue
|
|
325
|
-
: changedValue;
|
|
326
|
-
const long =
|
|
327
|
-
previousValue.length > changedValue.length
|
|
328
|
-
? previousValue
|
|
329
|
-
: changedValue;
|
|
330
|
-
|
|
331
|
-
const infoAboutDifferencesSameness = short.split("").reduce(
|
|
332
|
-
(acc, symbol, idx) => {
|
|
333
|
-
if (acc.countOn && symbol === long[idx]) acc.same.push(symbol);
|
|
334
|
-
else {
|
|
335
|
-
acc.countOn = false;
|
|
336
|
-
acc.differences.push([idx, symbol]);
|
|
337
|
-
}
|
|
338
|
-
return acc;
|
|
339
|
-
},
|
|
340
|
-
{ same: [], countOn: true, differences: [] },
|
|
341
|
-
);
|
|
342
|
-
|
|
343
|
-
const samePart = infoAboutDifferencesSameness.same.join("");
|
|
344
|
-
const differencesLength =
|
|
345
|
-
infoAboutDifferencesSameness.differences.length;
|
|
346
|
-
const currentSet = changedValue?.replace(samePart, "");
|
|
347
|
-
|
|
348
|
-
if (
|
|
349
|
-
!KEYBOARD_SERVICE_KEYS.includes(e.key) &&
|
|
350
|
-
changedValue === previousValue
|
|
351
|
-
)
|
|
352
|
-
setIsAttemptToChange(!(!differencesLength && e.key === currentSet));
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
onKeyUp(e.keyCode, e);
|
|
356
|
-
},
|
|
357
|
-
};
|
|
358
|
-
|
|
359
|
-
useEffect(() => {
|
|
360
|
-
if (isEditing) inputRef?.current?.focus?.();
|
|
361
|
-
}, [isEditing, isFocused]);
|
|
362
|
-
|
|
363
|
-
useEffect(() => {
|
|
364
|
-
setEditing(isSelect ?? false);
|
|
365
|
-
}, [isSelect]);
|
|
366
|
-
|
|
367
|
-
useEffect(() => {
|
|
368
|
-
if (isUseErrorsBlink && isAttemptToChange) {
|
|
369
|
-
setIsAttemptToChange(null);
|
|
370
|
-
setIsToHighlightError(true);
|
|
371
|
-
setTimeout(() => {
|
|
372
|
-
setIsToHighlightError(false);
|
|
373
|
-
}, blinkTime || DEFAULT_BLINK_TIME);
|
|
374
|
-
}
|
|
375
|
-
}, [isAttemptToChange]);
|
|
376
|
-
|
|
377
|
-
useEffect(() => {
|
|
378
|
-
if (inputRef?.current && typeof isFocusDefault === "boolean")
|
|
379
|
-
setIsFocused(isFocusDefault);
|
|
380
|
-
setEditing(isFocusDefault);
|
|
381
|
-
}, [inputRef, isFocusDefault]);
|
|
382
|
-
|
|
383
|
-
const getInputType = () => {
|
|
384
|
-
if (isPriceInput || isPseudoPasswordMode) return "text";
|
|
385
|
-
return type;
|
|
386
|
-
};
|
|
387
|
-
|
|
388
|
-
const formatedValue = (() => {
|
|
389
|
-
let safelyValue = getSafelyValue(value);
|
|
390
|
-
|
|
391
|
-
const hideSymbols = () =>
|
|
392
|
-
safelyValue
|
|
393
|
-
.split("")
|
|
394
|
-
.map(() => HIDE_SYMBOL)
|
|
395
|
-
.join("");
|
|
396
|
-
|
|
397
|
-
if (isPseudoPasswordMode) return hideSymbols();
|
|
398
|
-
if (onlyNumbers?.isNoEmptyValues)
|
|
399
|
-
safelyValue = handle.correctMinMax(safelyValue, "min");
|
|
400
|
-
if (isUseBitDepthPoints)
|
|
401
|
-
safelyValue = addCommas(safelyValue, onlyNumbers);
|
|
402
|
-
return safelyValue;
|
|
403
|
-
})();
|
|
404
|
-
|
|
405
|
-
const uniProps = {
|
|
406
|
-
name: inputName,
|
|
407
|
-
className: cn("input", className, {
|
|
408
|
-
"input--with-icon": icon,
|
|
409
|
-
"input--with-delete": withDelete,
|
|
410
|
-
}),
|
|
411
|
-
placeholder,
|
|
412
|
-
value: formatedValue,
|
|
413
|
-
inputMode: isNumericMobileKeyboard ? "decimal" : "text",
|
|
414
|
-
disabled,
|
|
415
|
-
onChange: handle.change,
|
|
416
|
-
onFocus: handle.focus,
|
|
417
|
-
onBlur: handle.blur,
|
|
418
|
-
onKeyUp: handle.keyUp,
|
|
419
|
-
onKeyDown: handle.keyDown,
|
|
420
|
-
...(maskChar ? { maskChar } : {}),
|
|
421
|
-
...(formatChars ? { formatChars } : {}),
|
|
422
|
-
};
|
|
423
|
-
|
|
424
|
-
return (
|
|
425
|
-
<div
|
|
426
|
-
data-testid={testId}
|
|
427
|
-
className={cn(
|
|
428
|
-
`input__wrap`,
|
|
429
|
-
{ [`input__wrap_focus`]: isFocused },
|
|
430
|
-
{ [`input__wrap_error`]: error || isToHighlightError },
|
|
431
|
-
{ [`input__wrap--disabled`]: disabled || isLoading },
|
|
432
|
-
)}
|
|
433
|
-
onMouseEnter={() => setOnInputHover(true)}
|
|
434
|
-
onMouseLeave={() => setOnInputHover(false)}
|
|
435
|
-
>
|
|
436
|
-
<input
|
|
437
|
-
readOnly={isReadOnly}
|
|
438
|
-
{...uniProps}
|
|
439
|
-
ref={inputRef}
|
|
440
|
-
type={getInputType()}
|
|
441
|
-
autoComplete={isPseudoPasswordMode ? "off" : autocomplete}
|
|
442
|
-
{...attributesOfNativeInput}
|
|
443
|
-
onFocus={(...params) => {
|
|
444
|
-
attributesOfNativeInput?.onFocus?.(...params);
|
|
445
|
-
if (isUseAutoSelect) inputRef.current.select();
|
|
446
|
-
if (uniProps.onFocus) uniProps.onFocus(...params);
|
|
447
|
-
}}
|
|
448
|
-
onBlur={(...params) => {
|
|
449
|
-
attributesOfNativeInput?.onBlur?.(...params);
|
|
450
|
-
if (uniProps.onBlur) uniProps.onBlur(...params);
|
|
451
|
-
}}
|
|
452
|
-
/>
|
|
453
|
-
{DynamicIconComponent ?? icon}
|
|
454
|
-
{action}
|
|
455
|
-
{withDelete && onInputHover && (
|
|
456
|
-
<span
|
|
457
|
-
className={cn(`input__close`, { hidden: !getSafelyValue(value) })}
|
|
458
|
-
onClick={handle.toggleEdit}
|
|
459
|
-
/>
|
|
460
|
-
)}
|
|
461
|
-
{isLoading && <Spinner size="small" />}
|
|
462
|
-
</div>
|
|
463
|
-
);
|
|
464
|
-
},
|
|
465
|
-
);
|
|
466
|
-
|
|
467
|
-
export default Input;
|
|
1
|
+
function e(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function n(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function t(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},o=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),o.forEach(function(t){n(e,t,r[t])})}return e}function r(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function o(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],u=!0,a=!1;try{for(o=o.call(e);!(u=(t=o.next()).done)&&(i.push(t.value),!n||i.length!==n);u=!0);}catch(e){a=!0,r=e}finally{try{u||null==o.return||o.return()}finally{if(a)throw r}}return i}}(e,n)||u(e,n)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(n){return function(n){if(Array.isArray(n))return e(n)}(n)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(n)||u(n)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(n,t){if(n){if("string"==typeof n)return e(n,t);var r=Object.prototype.toString.call(n).slice(8,-1);if("Object"===r&&n.constructor&&(r=n.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return e(n,t)}}import{jsx as a,jsxs as l}from"react/jsx-runtime";import c from"classnames";import s,{useEffect as f,useMemo as p,useRef as m,useState as d}from"react";import{KEYBOARD_SERVICE_KEYS as y}from"../../../Constants/index.constants";import{filterNumeric as b,formatToAddBitDepthPoints as v,formatToOnlyASCIICodeText as g,formatToRemoveComa as h,getSafelyValue as N}from"../../../Functions/fieldValueFormatters";import{getIsOnlyAnObject as O}from"../../../Functions/utils";import w from"../../Layout/Spinner/Spinner";import j from"../../UI/DynamicIcon/DynamicIcon";import"./Input.scss";var k=s.forwardRef(function(e,u){var s,k=e.blurTrim,S=e.autocomplete,x=e.isSelect,C=e.onChange,P=void 0===C?function(){}:C,E=e.onBlur,D=void 0===E?function(){}:E,A=e.onFocus,I=void 0===A?function(){}:A,M=e.onKeyUp,_=void 0===M?function(){}:M,F=e.onKeyDown,B=void 0===F?function(){}:F,K=e.isNotBlinkErrors,T=e.isPriceInput,R=e.onlyNumbers,U=e.disabled,V=e.withDelete,L=e.value,$=e.placeholder,z=e.className,H=e.type,Y=void 0===H?"text":H,q=e.mask,G=e.maskChar,J=e.formatChars,Q=e.error,W=e.icon,X=e.iconDynamicKey,Z=e.iconDynamicProps,ee=e.symbolsLimit,en=e.blinkTime,et=e.isFocusDefault,er=void 0!==et&&et,eo=e.isNotValidateASCII,ei=void 0!==eo&&eo,eu=e.isNumericMobileKeyboard,ea=e.isCropFirstNool,el=void 0!==ea&&ea,ec=e.testId,es=e.action,ef=e.isUseAutoSelect,ep=void 0===ef||ef,em=e.isReadOnly,ed=e.isLoading,ey=void 0!==ed&&ed,eb=e.name,ev=e.fieldKey,eg=e.id,eh=e.attributesOfNativeInput,eN=void 0===eh?{}:eh,eO=k||{},ew=eO.trimStart,ej=eO.trimEnd,ek=eO.characters,eS=X&&!W?a(j,t({iconKey:X},void 0===Z?{}:Z)):null,ex=o(d(!1),2),eC=ex[0],eP=ex[1],eE=o(d(!1),2),eD=eE[0],eA=eE[1],eI=m(null),eM=p(function(){return u||eI},[u]),e_=o(d(!1),2),eF=e_[0],eB=e_[1],eK=o(d(!1),2),eT=eK[0],eR=eK[1],eU=o(d(!1),2),eV=eU[0],eL=eU[1],e$=o(d(L),2),ez=e$[0],eH=e$[1],eY=o(d({start:null,end:null,keyCode:null}),2),eq=eY[0],eG=eY[1],eJ=!!R&&T,eQ=!K&&!q,eW="pseudoPassword"===Y,eX={correctMinMax:function(e,n){if(!R)return e;var t,r=O(R)?R:{},o=r.min,i=r.max,u=r.isOnlyPositive,a=r.isNoEmptyValues,l=Number.isNaN(Number(o))||null===o||!(o>=0)&&u?void 0:o,c=Number.isNaN(Number(i))||null===i||!(i>=0)&&u?void 0:i,s=N(e),f=function(){!s&&a?s=void 0!==l?l:"0":s&&!Number.isNaN(Number(l))&&Number(l)>Number((null!=t?t:"")+s)&&(s=l)},p=function(){!Number.isNaN(Number(c))&&Number(c)<Number((null!=t?t:"")+s)&&(s=c,t=null)};switch(eJ&&(s=h(s)),!u&&"-"===s[0]&&(t="-",s=s.slice(1)),s=b(s,R),n){case"min":f();break;case"max":p();break;default:f(),p()}return s},processPseudoValue:function(e,n){var t=e.replace(RegExp("•","g"),"");if(t.length>1)return t;var r=e.replace(new RegExp(/^HIDE_SYMBOL/g),"").length<n.length,o=n.split(""),i=function(e){return eq.start===eq.end&&(t?e<eq.start:8===eq.keyCode?e<eq.start-1||e>eq.end-1:e<eq.start||e>eq.end)};if(!t)return o.reduce(function(e,n,t){return i(t)?"".concat(e).concat(n):e},"");var u=o.reduce(function(e,n,r){return i(r)?e.result="".concat(e.result).concat(n):e.position||(e.position=t?r:r-1),e},{result:"",position:r?null:eq.start});return"".concat(u.result.slice(0,u.position)).concat(t).concat(u.result.slice(u.position))},change:function(e){var n,t=(O(R)?R:{}).isOnlyPositive,r=e.target?e.target.value:e;if(eW&&(r=r.includes("•")?eX.processPseudoValue(r,L,e):r),T&&","===r.charAt(r.length-1)&&(r=r.substring(0,r.length-1).concat(".")),eJ&&(r=h(r)),R&&(r=r.replace(/,/g,".")),R&&!t&&"-"===r[0]&&(n="-",r=r.slice(1)),ei||(r=g(r)),ee&&r.length>Number(ee)&&(r=r.substring(0,Number(ee))),el&&0==r[0])return"";R&&(r=eX.correctMinMax(r,"max")),P(((null!=n?n:"")+r).toString())},toggleEdit:function(){eA(!eD),P("")},focus:function(e){eP(!0),I(e)},blur:function(e){var n=eX.correctMinMax(N(L),"min");ew&&(n=n.replace(new RegExp("^[".concat(ek,"]+")),"")),ej&&(n=n.replace(new RegExp("[".concat(ek,"]+$")),"")),L!==n&&P(n),eP(!1),eA(!1),D&&setTimeout(function(){return D(e)},0)},keyDown:function(e){var n;eH(null==e||null==(n=e.target)?void 0:n.value),eG({start:e.target.selectionStart,end:e.target.selectionEnd,keyCode:e.keyCode}),B(e.keyCode,e)},keyUp:function(e){if(eQ){var n="".concat(null!=L?L:""),t="".concat(ez),r=t.length<=n.length?t:n,o=t.length>n.length?t:n,i=r.split("").reduce(function(e,n,t){return e.countOn&&n===o[t]?e.same.push(n):(e.countOn=!1,e.differences.push([t,n])),e},{same:[],countOn:!0,differences:[]}),u=i.same.join(""),a=i.differences.length,l=null==n?void 0:n.replace(u,"");y.includes(e.key)||n!==t||eB(!(!a&&e.key===l))}_(e.keyCode,e)}};f(function(){var e,n;eD&&(null==eM||null==(n=eM.current)||null==(e=n.focus)||e.call(n))},[eD,eC]),f(function(){eA(null!=x&&x)},[x]),f(function(){eQ&&eF&&(eB(null),eR(!0),setTimeout(function(){eR(!1)},en||100))},[eF]),f(function(){(null==eM?void 0:eM.current)&&"boolean"==typeof er&&eP(er),eA(er)},[eM,er]);var eZ=(s=N(L),eW?s.split("").map(function(){return"•"}).join(""):((null==R?void 0:R.isNoEmptyValues)&&(s=eX.correctMinMax(s,"min")),eJ&&(s=v(s,R)),s)),e0=t({name:eb||ev||eg,className:c("input",z,{"input--with-icon":W,"input--with-delete":V}),placeholder:$,value:eZ,inputMode:void 0!==eu&&eu?"decimal":"text",disabled:U,onChange:eX.change,onFocus:eX.focus,onBlur:eX.blur,onKeyUp:eX.keyUp,onKeyDown:eX.keyDown},G?{maskChar:G}:{},J?{formatChars:J}:{});return l("div",{"data-testid":void 0===ec?"input":ec,className:c("input__wrap",n({},"input__wrap_focus",eC),n({},"input__wrap_error",Q||eT),n({},"input__wrap--disabled",U||ey)),onMouseEnter:function(){return eL(!0)},onMouseLeave:function(){return eL(!1)},children:[a("input",r(t(r(t({readOnly:void 0!==em&&em},e0),{ref:eM,type:T||eW?"text":Y,autoComplete:eW||void 0===S?"off":S}),eN),{onFocus:function(){for(var e,n=arguments.length,t=Array(n),r=0;r<n;r++)t[r]=arguments[r];null==eN||null==(e=eN.onFocus)||e.call.apply(e,[eN].concat(i(t))),ep&&eM.current.select(),e0.onFocus&&e0.onFocus.apply(e0,i(t))},onBlur:function(){for(var e,n=arguments.length,t=Array(n),r=0;r<n;r++)t[r]=arguments[r];null==eN||null==(e=eN.onBlur)||e.call.apply(e,[eN].concat(i(t))),e0.onBlur&&e0.onBlur.apply(e0,i(t))}})),null!=eS?eS:W,es,V&&eV&&a("span",{className:c("input__close",{hidden:!N(L)}),onClick:eX.toggleEdit}),ey&&a(w,{size:"small"})]})});export default k;
|
|
@@ -1,161 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import cn from "classnames";
|
|
4
|
-
import moment from "moment-timezone";
|
|
5
|
-
import InputMask from "react-input-mask";
|
|
6
|
-
|
|
7
|
-
import { useClickOutside } from "../../../Functions/useClickOutside";
|
|
8
|
-
import Calendar from "../Calendar/Calendar";
|
|
9
|
-
|
|
10
|
-
import "./InputCalendar.scss";
|
|
11
|
-
|
|
12
|
-
const InputCalendar = ({
|
|
13
|
-
value,
|
|
14
|
-
minDate,
|
|
15
|
-
maxDate,
|
|
16
|
-
format = "MM/DD/YYYY",
|
|
17
|
-
isDontLimitFuture,
|
|
18
|
-
onChange,
|
|
19
|
-
className = "",
|
|
20
|
-
placeholder = "mm/dd/yyyy",
|
|
21
|
-
mask = "99/99/9999",
|
|
22
|
-
isListTop,
|
|
23
|
-
disabled,
|
|
24
|
-
disabledFormattedMaxDate = false,
|
|
25
|
-
testId = "input-calendar",
|
|
26
|
-
|
|
27
|
-
onKeyDown: onKeyDownProp = (e) => {},
|
|
28
|
-
onKeyUp: onKeyUpProp = (e) => {},
|
|
29
|
-
onBlur: onBlurProp = (e) => {},
|
|
30
|
-
}) => {
|
|
31
|
-
const [isOpened, setIsOpened] = useState(null);
|
|
32
|
-
const [isOpenedByEnter, setOpenedByEnter] = useState(false);
|
|
33
|
-
const calendarRef = useRef(null);
|
|
34
|
-
const inputRef = useRef(null);
|
|
35
|
-
|
|
36
|
-
const formattedMinDate =
|
|
37
|
-
moment(minDate, format).format(format) !== "Invalid date"
|
|
38
|
-
? moment(minDate, format).format(format)
|
|
39
|
-
: null;
|
|
40
|
-
const formattedMaxDate =
|
|
41
|
-
moment(maxDate, format).format(format) !== "Invalid date"
|
|
42
|
-
? moment(maxDate, format).format(format)
|
|
43
|
-
: null;
|
|
44
|
-
|
|
45
|
-
const momentMinDate = moment(formattedMinDate, format).startOf("day");
|
|
46
|
-
const momentMaxDate = moment(formattedMaxDate, format).startOf("day");
|
|
47
|
-
|
|
48
|
-
useClickOutside(calendarRef, () => setIsOpened(false));
|
|
49
|
-
|
|
50
|
-
const changeInputValue = (val) => {
|
|
51
|
-
if (onChange) onChange(val);
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
const changeCalendarDay = (val) => {
|
|
55
|
-
if (onChange) onChange(val);
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
const getCalendarValue = (value) => {
|
|
59
|
-
const date = moment(value).format("L");
|
|
60
|
-
|
|
61
|
-
if (date !== "Invalid date") return date;
|
|
62
|
-
|
|
63
|
-
return moment(new Date()).format("L");
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
useEffect(() => {
|
|
67
|
-
if (typeof isOpened === "boolean" && !isOpened) {
|
|
68
|
-
handleBlur();
|
|
69
|
-
}
|
|
70
|
-
}, [isOpened]);
|
|
71
|
-
|
|
72
|
-
const handleBlur = (e) => {
|
|
73
|
-
let value = inputRef?.current?.value;
|
|
74
|
-
if (
|
|
75
|
-
moment(value, format).format(format) === "Invalid date" ||
|
|
76
|
-
value.indexOf("_") > -1
|
|
77
|
-
)
|
|
78
|
-
value = "";
|
|
79
|
-
|
|
80
|
-
if (
|
|
81
|
-
value &&
|
|
82
|
-
typeof isOpened === "boolean" &&
|
|
83
|
-
moment(value, format).startOf("day").isBefore(momentMinDate, "days")
|
|
84
|
-
)
|
|
85
|
-
onChange(formattedMinDate);
|
|
86
|
-
else if (
|
|
87
|
-
value &&
|
|
88
|
-
typeof isOpened === "boolean" &&
|
|
89
|
-
moment(value, format).endOf("day").isAfter(momentMaxDate, "days")
|
|
90
|
-
)
|
|
91
|
-
onChange(formattedMaxDate);
|
|
92
|
-
else if (value) onChange(moment(value, format).format(format));
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
const onKeyDown = (e) => {
|
|
96
|
-
if (isOpened && [9, 13].includes(e.keyCode)) {
|
|
97
|
-
setIsOpened(false);
|
|
98
|
-
setOpenedByEnter(true);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
onKeyDownProp(e);
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
const onKeyUp = (e) => {
|
|
105
|
-
const isValidLenght = e.target.value?.replace(/[^0-9]/g, "").length === 8;
|
|
106
|
-
|
|
107
|
-
if ([9, 13].includes(e.keyCode)) {
|
|
108
|
-
setIsOpened(true);
|
|
109
|
-
setOpenedByEnter(true);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
if (isValidLenght) {
|
|
113
|
-
setIsOpened(false);
|
|
114
|
-
handleBlur();
|
|
115
|
-
} else {
|
|
116
|
-
setIsOpened(true);
|
|
117
|
-
}
|
|
118
|
-
onKeyUpProp(e);
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
return (
|
|
122
|
-
<div
|
|
123
|
-
data-testid={testId}
|
|
124
|
-
className={cn("input__wrap calendar-container", className, {
|
|
125
|
-
"calendar-container_disabled": disabled,
|
|
126
|
-
})}
|
|
127
|
-
ref={calendarRef}
|
|
128
|
-
>
|
|
129
|
-
<InputMask
|
|
130
|
-
mask={mask}
|
|
131
|
-
placeholder={placeholder}
|
|
132
|
-
value={value}
|
|
133
|
-
onChange={(e) => changeInputValue(e.target.value)}
|
|
134
|
-
className="calendar-dropdown"
|
|
135
|
-
onClick={() => setIsOpened(true)}
|
|
136
|
-
onKeyUp={onKeyUp}
|
|
137
|
-
onKeyDown={onKeyDown}
|
|
138
|
-
onBlur={onBlurProp}
|
|
139
|
-
ref={inputRef}
|
|
140
|
-
/>
|
|
141
|
-
{isOpened ? (
|
|
142
|
-
<Calendar
|
|
143
|
-
date={getCalendarValue(value)}
|
|
144
|
-
setDate={(newDate) => changeCalendarDay(newDate)}
|
|
145
|
-
params={{
|
|
146
|
-
format,
|
|
147
|
-
minDate: formattedMinDate,
|
|
148
|
-
maxDate: formattedMaxDate,
|
|
149
|
-
momentMinDate,
|
|
150
|
-
momentMaxDate,
|
|
151
|
-
isDontLimitFuture,
|
|
152
|
-
}}
|
|
153
|
-
isListTop={isListTop}
|
|
154
|
-
setIsOpened={setIsOpened}
|
|
155
|
-
/>
|
|
156
|
-
) : null}
|
|
157
|
-
</div>
|
|
158
|
-
);
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
export default InputCalendar;
|
|
1
|
+
function t(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,r=Array(n);e<n;e++)r[e]=t[e];return r}function n(n,e){return function(t){if(Array.isArray(t))return t}(n)||function(t,n){var e,r,a=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=a){var o=[],i=!0,l=!1;try{for(a=a.call(t);!(i=(e=a.next()).done)&&(o.push(e.value),!n||o.length!==n);i=!0);}catch(t){l=!0,r=t}finally{try{i||null==a.return||a.return()}finally{if(l)throw r}}return o}}(n,e)||function(n,e){if(n){if("string"==typeof n)return t(n,e);var r=Object.prototype.toString.call(n).slice(8,-1);if("Object"===r&&n.constructor&&(r=n.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return t(n,e)}}(n,e)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}import{jsx as e,jsxs as r}from"react/jsx-runtime";import{useEffect as a,useRef as o,useState as i}from"react";import l from"classnames";import u from"moment-timezone";import d from"react-input-mask";import{useClickOutside as f}from"../../../Functions/useClickOutside";import m from"../Calendar/Calendar";import"./InputCalendar.scss";export default function(t){var s,c=t.value,p=t.minDate,y=t.maxDate,v=t.format,b=void 0===v?"MM/DD/YYYY":v,h=t.isDontLimitFuture,D=t.onChange,g=t.className,x=t.placeholder,C=t.mask,I=t.isListTop,O=t.disabled,k=(t.disabledFormattedMaxDate,t.testId),w=t.onKeyDown,A=void 0===w?function(t){}:w,j=t.onKeyUp,L=void 0===j?function(t){}:j,M=t.onBlur,S=n(i(null),2),F=S[0],K=S[1],Y=n(i(!1),2),_=(Y[0],Y[1]),B=o(null),N=o(null),T="Invalid date"!==u(p,b).format(b)?u(p,b).format(b):null,U="Invalid date"!==u(y,b).format(b)?u(y,b).format(b):null,z=u(T,b).startOf("day"),E=u(U,b).startOf("day");f(B,function(){return K(!1)});var $=function(t){D&&D(t)},q=function(t){D&&D(t)};a(function(){"boolean"!=typeof F||F||G()},[F]);var G=function(t){var n,e=null==N||null==(n=N.current)?void 0:n.value;("Invalid date"===u(e,b).format(b)||e.indexOf("_")>-1)&&(e=""),e&&"boolean"==typeof F&&u(e,b).startOf("day").isBefore(z,"days")?D(T):e&&"boolean"==typeof F&&u(e,b).endOf("day").isAfter(E,"days")?D(U):e&&D(u(e,b).format(b))};return r("div",{"data-testid":void 0===k?"input-calendar":k,className:l("input__wrap calendar-container",void 0===g?"":g,{"calendar-container_disabled":O}),ref:B,children:[e(d,{mask:void 0===C?"99/99/9999":C,placeholder:void 0===x?"mm/dd/yyyy":x,value:c,onChange:function(t){return $(t.target.value)},className:"calendar-dropdown",onClick:function(){return K(!0)},onKeyUp:function(t){var n,e=(null==(n=t.target.value)?void 0:n.replace(/[^0-9]/g,"").length)===8;[9,13].includes(t.keyCode)&&(K(!0),_(!0)),e?(K(!1),G()):K(!0),L(t)},onKeyDown:function(t){F&&[9,13].includes(t.keyCode)&&(K(!1),_(!0)),A(t)},onBlur:void 0===M?function(t){}:M,ref:N}),F?e(m,{date:"Invalid date"!==(s=u(c).format("L"))?s:u(new Date).format("L"),setDate:function(t){return q(t)},params:{format:b,minDate:T,maxDate:U,momentMinDate:z,momentMaxDate:E,isDontLimitFuture:h},isListTop:I,setIsOpened:K}):null]})}
|