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":"InputDateRange.js","names":[],"sources":["../../../../../src/Atomic/FormElements/InputDateRange/InputDateRange.tsx"],"sourcesContent":["import type { Moment } from 'moment-timezone';\nimport type { LegacyRef } from 'react';\n\nimport type { IInputDateRange, IInputDateRangeProps } from './InputDateRange.interface';\nimport cn from 'classnames';\nimport moment from 'moment-timezone';\n\nimport React, { useLayoutEffect, useRef, useState } from 'react';\nimport useIsMobile from '../../../Functions/useIsMobile/useIsMobile';\n\nimport Arrow from '../../UI/Arrow/Arrow';\nimport OpenedPart from './components/OpenedPart';\n\nimport {\n ALL_TIME_KEY,\n CUSTOM_INTERVAL_KEY_TEXT,\n getActualDateRange,\n INTERVALS,\n MAIN_FORMAT,\n MAIN_TIME_FORMAT,\n useClickOutside,\n useToggle,\n} from './dependencies';\nimport './InputDateRange.scss';\n\nfunction checkFormat(date: Date | Moment | string | undefined, format: string): string | null {\n const momentObj = moment(date, format);\n return momentObj.isValid() ? momentObj.format(format) : null;\n}\n\nconst InputDateRange: React.FC<IInputDateRangeProps> = (props) => {\n const {\n txt,\n id,\n label,\n subLabel,\n className,\n value,\n onChange,\n error,\n disabled,\n isHoverable,\n isCompact = false,\n hideArrows = false,\n isOptionsRight,\n isUseAbs,\n testId = 'input-date-range',\n minDate,\n maxDate,\n minMaxDateParseFormat = 'MM/DD/YYYY',\n isDontLimitFuture,\n isListTop,\n isAltArrows,\n renderIntervals,\n isDoNotPullOutListOfMainContainer,\n } = props;\n\n const { isMobile } = useIsMobile();\n\n const formatedMinDate = checkFormat(minDate, minMaxDateParseFormat);\n const formatedMaxDate = checkFormat(maxDate, minMaxDateParseFormat);\n\n const momentMinDate = moment(formatedMinDate, minMaxDateParseFormat).startOf(\n 'day',\n );\n const momentMaxDate = moment(formatedMaxDate, minMaxDateParseFormat).startOf(\n 'day',\n );\n\n const actualValues = getActualDateRange(value);\n const { isToggled, toggle, toggleOn, toggleOff } = useToggle(false);\n const [current, setCurrent] = useState(actualValues?.intervalKey);\n const [isCompare, setIsCompare] = useState(actualValues?.compare);\n\n const dropdownContainers = document.getElementsByClassName(\n 'dropdown__container',\n );\n const ref = useClickOutside(toggleOff, dropdownContainers, !(!isUseAbs && !isMobile));\n const internalContainerRef = useRef(null);\n\n const [dateRangeContainerId] = useState(\n Math.random().toString(16).slice(2),\n );\n\n const handleChange = (input: IInputDateRange): IInputDateRange => {\n const newValue = getActualDateRange(input);\n const formatedValue = {\n intervalKey: newValue.intervalKey,\n start: newValue.start\n ? moment(newValue.start).format(MAIN_FORMAT)\n : newValue.start,\n end: newValue.end\n ? moment(newValue.end).format(MAIN_FORMAT)\n : newValue.end,\n ...(newValue.compare ? { compare: newValue.compare } : {}),\n ...(newValue.startPrevDate\n ? { startPrevDate: moment(newValue.startPrevDate).format(MAIN_FORMAT) }\n : {}),\n ...(newValue.endPrevDate\n ? { endPrevDate: moment(newValue.endPrevDate).format(MAIN_FORMAT) }\n : {}),\n };\n\n onChange(formatedValue);\n return formatedValue;\n };\n\n const Range = (): JSX.Element | null => {\n const SYMBOLS_QUANTITY_IF_TIME_ADDED = 13;\n if (!actualValues.start && value.start) {\n actualValues.start = value.start;\n actualValues.end = value.end || '';\n }\n const { start, end } = actualValues;\n if (!start || !end) return null;\n\n const startTime = moment(start).format(MAIN_TIME_FORMAT);\n const endTime = moment(end).format(MAIN_TIME_FORMAT);\n\n const firstPart = `${moment(start).format('ll')} ${startTime !== '00:00' ? `(${startTime})` : ''}`;\n const secondPart = `${(endTime !== '00:00' ? moment(end) : moment(end).subtract(1, 'days')).format('ll')} ${\n endTime !== '00:00' ? `(${endTime})` : ''\n }`;\n\n const getClasses = (base: string): string =>\n cn('date-range-input__range-text', {\n 'date-range-input__range-text_little':\n base.length > SYMBOLS_QUANTITY_IF_TIME_ADDED,\n });\n\n return (\n <>\n <span className={getClasses(firstPart)}>\n {firstPart}\n {endTime === '00:00'\n && moment(end).isSame(moment(start).add(1, 'days'), 'day')\n ? ''\n : ` - `}\n </span>\n {endTime === '00:00'\n && moment(end).isSame(moment(start).add(1, 'days'), 'day')\n ? null\n : (\n <span className={getClasses(secondPart)}>{secondPart}</span>\n )}\n </>\n );\n };\n\n const slideInterval = (direction = 'forward'): void => {\n const { start, end } = actualValues;\n const intervalHoursCount = moment(end).diff(start, 'hours');\n let newEnd;\n let newStart;\n const endHours = moment(end).hours();\n const startHours = moment(start).hours();\n if (direction === 'forward') {\n newStart = moment(end)\n .add(endHours === 0 ? 0 : 1, 'day')\n .hours(startHours)\n .toDate();\n newEnd = moment(newStart).add(intervalHoursCount, 'hours');\n }\n else {\n newEnd = moment(start)\n .subtract(endHours === 0 ? 0 : 1, 'day')\n .hours(endHours)\n .toDate();\n newStart = moment(newEnd).subtract(intervalHoursCount, 'hours');\n }\n const startPrevDate = moment(newStart)\n .subtract(intervalHoursCount, 'hours')\n .subtract(1, 'seconds');\n const endPrevDate = moment(newEnd).subtract(1, 'seconds');\n handleChange({\n ...value,\n intervalKey: getActualDateRange({\n start: newStart,\n end: newEnd,\n })?.intervalKey,\n start: newStart,\n end: newEnd,\n startPrevDate,\n endPrevDate,\n });\n };\n\n const handleArrowClick = (type: string): void => {\n slideInterval(type === 'right' ? 'forward' : 'back');\n toggleOff();\n };\n\n const getParentNode = (): Element | null => {\n return (\n document.querySelector('div#root') ?? document.querySelector('div#app')\n );\n };\n const initDateRangeContainer = (): void => {\n document.getElementById(dateRangeContainerId)?.remove();\n\n const dateRangeContainer = document.createElement('div');\n\n dateRangeContainer.setAttribute('id', dateRangeContainerId);\n dateRangeContainer.classList.add('input-date-range__mobile-container');\n\n getParentNode()?.append(dateRangeContainer);\n };\n\n const getDateRangeContainer = (): HTMLElement | null => {\n return document.getElementById(dateRangeContainerId);\n };\n\n useLayoutEffect(() => {\n initDateRangeContainer();\n return () => {\n getDateRangeContainer()?.remove();\n };\n }, []);\n\n return (\n <div\n data-testid={testId}\n ref={internalContainerRef}\n className={cn('date-range-input', className, {\n 'date-range-input_compact': isCompact,\n 'date-range-input_hide-arrows': hideArrows,\n 'date-range-input_focused': isToggled,\n 'date-range-input_error': error,\n 'date-range-input_disabled': disabled,\n })}\n >\n <span className=\"date-range-input__label\">{label}</span>\n <div\n className=\"date-range-input__wraper\"\n ref={ref as LegacyRef<HTMLDivElement>}\n onMouseEnter={isHoverable ? toggleOn : () => null}\n onMouseLeave={isHoverable ? toggleOff : () => null}\n >\n <div\n className={cn('date-range-input__absolut-wraper', {\n 'date-range-input__absolut-wraper_right-position': isOptionsRight,\n })}\n >\n <div className={cn('date-range-input__static-part')}>\n <button\n type=\"button\"\n id={id}\n className={cn('date-range-input__toggle-button')}\n disabled={disabled}\n onClick={!disabled && !isHoverable ? toggle : undefined}\n >\n <div className=\"date-range-input__interval-key\">\n {subLabel && (\n <span className=\"date-range-input__label\">\n {subLabel}\n :\n {' '}\n </span>\n )}\n <span>\n {(txt?.labels && actualValues?.intervalKey && txt.labels[actualValues?.intervalKey])\n ?? (actualValues?.intervalKey && INTERVALS[actualValues?.intervalKey]\n ? INTERVALS[actualValues?.intervalKey]?.label\n : CUSTOM_INTERVAL_KEY_TEXT)}\n </span>\n {current !== ALL_TIME_KEY && <span>:</span>}\n </div>\n {!isCompact && (\n <div className={cn('date-range-input__range', {})}>\n <Range />\n </div>\n )}\n </button>\n {!isCompact && !hideArrows && (\n <div className={cn('date-range-input__arrows-block')}>\n <Arrow\n testId={testId}\n type=\"left\"\n className=\"date-range-input__arrow\"\n onClick={() => handleArrowClick('left')}\n disabled={\n disabled\n || actualValues?.intervalKey === ALL_TIME_KEY\n || (formatedMinDate\n && moment(actualValues?.start)\n .subtract(\n moment(actualValues?.end).diff(\n actualValues?.start,\n 'hours',\n ),\n 'hours',\n )\n .isBefore(momentMinDate))\n }\n isAlt={isAltArrows}\n />\n <Arrow\n testId={testId}\n type=\"right\"\n className=\"date-range-input__arrow\"\n onClick={() => handleArrowClick('right')}\n disabled={\n disabled\n || actualValues?.intervalKey === ALL_TIME_KEY\n || (!isDontLimitFuture\n && (formatedMaxDate\n ? moment(actualValues?.end)\n .endOf('day')\n .subtract(\n moment(actualValues?.end).diff(\n actualValues?.start,\n 'hours',\n ),\n 'hours',\n )\n .isAfter(momentMaxDate.startOf('day'))\n : moment(actualValues?.end)\n .add(\n moment(actualValues?.end).diff(\n actualValues?.start,\n 'hours',\n ),\n 'hours',\n )\n .isAfter(moment().add(1, 'day').startOf('day'))))\n }\n isAlt={isAltArrows}\n />\n </div>\n )}\n </div>\n {isToggled && !isUseAbs && (\n <OpenedPart\n {...props}\n dateRangeContainerId={dateRangeContainerId}\n mainId={id as string}\n testId={testId}\n actualValues={actualValues}\n current={current as string}\n setCurrent={setCurrent}\n isCompare={isCompare}\n setIsCompare={setIsCompare}\n toggleOff={toggleOff}\n onChange={handleChange}\n minDate={formatedMinDate as string}\n maxDate={formatedMaxDate as string}\n momentMinDate={momentMinDate}\n momentMaxDate={momentMaxDate}\n isDontLimitFuture={isDontLimitFuture}\n isListTop={isListTop}\n renderIntervals={renderIntervals}\n isDoNotPullOutListOfMainContainer={isDoNotPullOutListOfMainContainer}\n />\n )}\n </div>\n </div>\n {error && <span className=\"date-range-input__error-block\">{error}</span>}\n </div>\n );\n};\n\nexport default React.memo(InputDateRange);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InputDateRange.js","names":[],"sources":["../../../../../src/Atomic/FormElements/InputDateRange/InputDateRange.tsx"],"sourcesContent":["import type { Moment } from 'moment-timezone';\nimport type { LegacyRef } from 'react';\n\nimport type { IInputDateRange, IInputDateRangeProps } from './InputDateRange.interface';\nimport cn from 'classnames';\nimport moment from 'moment-timezone';\n\nimport React, { useLayoutEffect, useRef, useState } from 'react';\nimport useIsMobile from '../../../Functions/useIsMobile/useIsMobile';\n\nimport Arrow from '../../UI/Arrow/Arrow';\nimport OpenedPart from './components/OpenedPart';\n\nimport {\n ALL_TIME_KEY,\n CUSTOM_INTERVAL_KEY_TEXT,\n getActualDateRange,\n INTERVALS,\n MAIN_FORMAT,\n MAIN_TIME_FORMAT,\n useClickOutside,\n useToggle,\n} from './dependencies';\nimport './InputDateRange.scss';\n\nfunction checkFormat(date: Date | Moment | string | undefined, format: string): string | null {\n const momentObj = moment(date, format);\n return momentObj.isValid() ? momentObj.format(format) : null;\n}\n\nconst InputDateRange: React.FC<IInputDateRangeProps> = (props) => {\n const {\n txt,\n id,\n label,\n subLabel,\n className,\n value,\n onChange,\n error,\n disabled,\n isHoverable,\n isCompact = false,\n hideArrows = false,\n isOptionsRight,\n isUseAbs,\n testId = 'input-date-range',\n minDate,\n maxDate,\n minMaxDateParseFormat = 'MM/DD/YYYY',\n isDontLimitFuture,\n isListTop,\n isAltArrows,\n renderIntervals,\n isDoNotPullOutListOfMainContainer,\n } = props;\n\n const { isMobile } = useIsMobile();\n\n const formatedMinDate = checkFormat(minDate, minMaxDateParseFormat);\n const formatedMaxDate = checkFormat(maxDate, minMaxDateParseFormat);\n\n const momentMinDate = moment(formatedMinDate, minMaxDateParseFormat).startOf(\n 'day',\n );\n const momentMaxDate = moment(formatedMaxDate, minMaxDateParseFormat).startOf(\n 'day',\n );\n\n const actualValues = getActualDateRange(value);\n const { isToggled, toggle, toggleOn, toggleOff } = useToggle(false);\n const [current, setCurrent] = useState(actualValues?.intervalKey);\n const [isCompare, setIsCompare] = useState(actualValues?.compare);\n\n const dropdownContainers = document.getElementsByClassName(\n 'dropdown__container',\n );\n const ref = useClickOutside(toggleOff, dropdownContainers, !(!isUseAbs && !isMobile));\n const internalContainerRef = useRef(null);\n\n const [dateRangeContainerId] = useState(\n Math.random().toString(16).slice(2),\n );\n\n const handleChange = (input: IInputDateRange): IInputDateRange => {\n const newValue = getActualDateRange(input);\n const formatedValue = {\n intervalKey: newValue.intervalKey,\n start: newValue.start\n ? moment(newValue.start).format(MAIN_FORMAT)\n : newValue.start,\n end: newValue.end\n ? moment(newValue.end).format(MAIN_FORMAT)\n : newValue.end,\n ...(newValue.compare ? { compare: newValue.compare } : {}),\n ...(newValue.startPrevDate\n ? { startPrevDate: moment(newValue.startPrevDate).format(MAIN_FORMAT) }\n : {}),\n ...(newValue.endPrevDate\n ? { endPrevDate: moment(newValue.endPrevDate).format(MAIN_FORMAT) }\n : {}),\n };\n\n onChange(formatedValue);\n return formatedValue;\n };\n\n const Range = (): JSX.Element | null => {\n const SYMBOLS_QUANTITY_IF_TIME_ADDED = 13;\n if (!actualValues.start && value.start) {\n actualValues.start = value.start;\n actualValues.end = value.end || '';\n }\n const { start, end } = actualValues;\n if (!start || !end) return null;\n\n const startTime = moment(start).format(MAIN_TIME_FORMAT);\n const endTime = moment(end).format(MAIN_TIME_FORMAT);\n\n const firstPart = `${moment(start).format('ll')} ${startTime !== '00:00' ? `(${startTime})` : ''}`;\n const secondPart = `${(endTime !== '00:00' ? moment(end) : moment(end).subtract(1, 'days')).format('ll')} ${\n endTime !== '00:00' ? `(${endTime})` : ''\n }`;\n\n const getClasses = (base: string): string =>\n cn('date-range-input__range-text', {\n 'date-range-input__range-text_little':\n base.length > SYMBOLS_QUANTITY_IF_TIME_ADDED,\n });\n\n return (\n <>\n <span className={getClasses(firstPart)}>\n {firstPart}\n {endTime === '00:00'\n && moment(end).isSame(moment(start).add(1, 'days'), 'day')\n ? ''\n : ` - `}\n </span>\n {endTime === '00:00'\n && moment(end).isSame(moment(start).add(1, 'days'), 'day')\n ? null\n : (\n <span className={getClasses(secondPart)}>{secondPart}</span>\n )}\n </>\n );\n };\n\n const slideInterval = (direction = 'forward'): void => {\n const { start, end } = actualValues;\n const intervalHoursCount = moment(end).diff(start, 'hours');\n let newEnd;\n let newStart;\n const endHours = moment(end).hours();\n const startHours = moment(start).hours();\n if (direction === 'forward') {\n newStart = moment(end)\n .add(endHours === 0 ? 0 : 1, 'day')\n .hours(startHours)\n .toDate();\n newEnd = moment(newStart).add(intervalHoursCount, 'hours');\n }\n else {\n newEnd = moment(start)\n .subtract(endHours === 0 ? 0 : 1, 'day')\n .hours(endHours)\n .toDate();\n newStart = moment(newEnd).subtract(intervalHoursCount, 'hours');\n }\n const startPrevDate = moment(newStart)\n .subtract(intervalHoursCount, 'hours')\n .subtract(1, 'seconds');\n const endPrevDate = moment(newEnd).subtract(1, 'seconds');\n handleChange({\n ...value,\n intervalKey: getActualDateRange({\n start: newStart,\n end: newEnd,\n })?.intervalKey,\n start: newStart,\n end: newEnd,\n startPrevDate,\n endPrevDate,\n });\n };\n\n const handleArrowClick = (type: string): void => {\n slideInterval(type === 'right' ? 'forward' : 'back');\n toggleOff();\n };\n\n const getParentNode = (): Element | null => {\n return (\n document.querySelector('div#root') ?? document.querySelector('div#app')\n );\n };\n const initDateRangeContainer = (): void => {\n document.getElementById(dateRangeContainerId)?.remove();\n\n const dateRangeContainer = document.createElement('div');\n\n dateRangeContainer.setAttribute('id', dateRangeContainerId);\n dateRangeContainer.classList.add('input-date-range__mobile-container');\n\n getParentNode()?.append(dateRangeContainer);\n };\n\n const getDateRangeContainer = (): HTMLElement | null => {\n return document.getElementById(dateRangeContainerId);\n };\n\n useLayoutEffect(() => {\n initDateRangeContainer();\n return () => {\n getDateRangeContainer()?.remove();\n };\n }, []);\n\n return (\n <div\n data-testid={testId}\n ref={internalContainerRef}\n className={cn('date-range-input', className, {\n 'date-range-input_compact': isCompact,\n 'date-range-input_hide-arrows': hideArrows,\n 'date-range-input_focused': isToggled,\n 'date-range-input_error': error,\n 'date-range-input_disabled': disabled,\n })}\n >\n <span className=\"date-range-input__label\">{label}</span>\n <div\n className=\"date-range-input__wraper\"\n ref={ref as LegacyRef<HTMLDivElement>}\n onMouseEnter={isHoverable ? toggleOn : () => null}\n onMouseLeave={isHoverable ? toggleOff : () => null}\n >\n <div\n className={cn('date-range-input__absolut-wraper', {\n 'date-range-input__absolut-wraper_right-position': isOptionsRight,\n })}\n >\n <div className={cn('date-range-input__static-part')}>\n <button\n type=\"button\"\n id={id}\n className={cn('date-range-input__toggle-button')}\n disabled={disabled}\n onClick={!disabled && !isHoverable ? toggle : undefined}\n >\n <div className=\"date-range-input__interval-key\">\n {subLabel && (\n <span className=\"date-range-input__label\">\n {subLabel}\n :\n {' '}\n </span>\n )}\n <span>\n {(txt?.labels && actualValues?.intervalKey && txt.labels[actualValues?.intervalKey])\n ?? (actualValues?.intervalKey && INTERVALS[actualValues?.intervalKey]\n ? INTERVALS[actualValues?.intervalKey]?.label\n : CUSTOM_INTERVAL_KEY_TEXT)}\n </span>\n {current !== ALL_TIME_KEY && <span>:</span>}\n </div>\n {!isCompact && (\n <div className={cn('date-range-input__range', {})}>\n <Range />\n </div>\n )}\n </button>\n {!isCompact && !hideArrows && (\n <div className={cn('date-range-input__arrows-block')}>\n <Arrow\n testId={testId}\n type=\"left\"\n className=\"date-range-input__arrow\"\n onClick={() => handleArrowClick('left')}\n disabled={\n disabled\n || actualValues?.intervalKey === ALL_TIME_KEY\n || (formatedMinDate\n && moment(actualValues?.start)\n .subtract(\n moment(actualValues?.end).diff(\n actualValues?.start,\n 'hours',\n ),\n 'hours',\n )\n .isBefore(momentMinDate))\n }\n isAlt={isAltArrows}\n />\n <Arrow\n testId={testId}\n type=\"right\"\n className=\"date-range-input__arrow\"\n onClick={() => handleArrowClick('right')}\n disabled={\n disabled\n || actualValues?.intervalKey === ALL_TIME_KEY\n || (!isDontLimitFuture\n && (formatedMaxDate\n ? moment(actualValues?.end)\n .endOf('day')\n .subtract(\n moment(actualValues?.end).diff(\n actualValues?.start,\n 'hours',\n ),\n 'hours',\n )\n .isAfter(momentMaxDate.startOf('day'))\n : moment(actualValues?.end)\n .add(\n moment(actualValues?.end).diff(\n actualValues?.start,\n 'hours',\n ),\n 'hours',\n )\n .isAfter(moment().add(1, 'day').startOf('day'))))\n }\n isAlt={isAltArrows}\n />\n </div>\n )}\n </div>\n {isToggled && !isUseAbs && (\n <OpenedPart\n {...props}\n dateRangeContainerId={dateRangeContainerId}\n mainId={id as string}\n testId={testId}\n actualValues={actualValues}\n current={current as string}\n setCurrent={setCurrent}\n isCompare={isCompare}\n setIsCompare={setIsCompare}\n toggleOff={toggleOff}\n onChange={handleChange}\n minDate={formatedMinDate as string}\n maxDate={formatedMaxDate as string}\n momentMinDate={momentMinDate}\n momentMaxDate={momentMaxDate}\n isDontLimitFuture={isDontLimitFuture}\n isListTop={isListTop}\n renderIntervals={renderIntervals}\n isDoNotPullOutListOfMainContainer={isDoNotPullOutListOfMainContainer}\n />\n )}\n </div>\n </div>\n {error && <span className=\"date-range-input__error-block\">{error}</span>}\n </div>\n );\n};\n\nexport default React.memo(InputDateRange);\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateInput.js","names":[],"sources":["../../../../../../src/Atomic/FormElements/InputDateRange/components/DateInput.tsx"],"sourcesContent":["import type { Moment } from 'moment-timezone';\n\nimport type { ReactElement } from 'react';\nimport type { IDateInputProps } from '../InputDateRange.interface';\n\nimport cn from 'classnames';\nimport moment from 'moment-timezone';\nimport React from 'react';\nimport { NUMERIC_KEYBOARD } from '../../../../Functions/presets/mobileKeyboardTypesPresets';\nimport TextInput from '../../Input/Input';\n\nfunction handleDateInputOnChange(value: string): string {\n const replace = (val: string): string => val?.replace(/[^0-9/]/g, '');\n\n const input = replace(value);\n const lastSymbol = input ? input.slice(-1) : '';\n const previousValue = input ? input.slice(0, input.length - 1) : '';\n\n if (value.length > 10 || lastSymbol === '/') return previousValue;\n return previousValue.length === 2 || previousValue.length === 5\n ? `${previousValue}/${lastSymbol}`\n : input;\n}\n\nfunction DateInput({ ref, ...props }: IDateInputProps & { ref?: React.RefObject<Omit<HTMLInputElement, 'value'> | null> }): ReactElement {\n const {\n RC,\n className,\n testId,\n isFocused,\n disabled,\n value,\n date,\n prepareDate,\n onChange,\n onFocus,\n onBlur,\n onKeyUp,\n } = props;\n const preparedDate = (() => {\n const prepareDateDefault = (date: Date | Moment | string): string => moment(date).format('MM/DD/YYYY');\n\n const output = prepareDate?.(date) ?? prepareDateDefault(date);\n return (output?.toString?.().toLowerCase() || '') !== 'invalid date'\n ? output\n : '';\n })();\n\n return isFocused\n ? (\n <TextInput\n ref={ref}\n testId={testId}\n className={cn(className, `${RC}-interactive`)}\n value={value}\n disabled={disabled}\n onChange={(value: string) => onChange(handleDateInputOnChange(value))}\n onBlur={onBlur}\n onKeyUp={onKeyUp}\n {...NUMERIC_KEYBOARD}\n />\n )\n : (\n <div\n className={cn(className, `${RC}-emulation`, {\n [`${RC}-emulation_disabled`]: disabled,\n })}\n onClick={disabled ? undefined : onFocus}\n >\n <span className={cn('')}>{preparedDate}</span>\n </div>\n );\n}\n\nexport default DateInput;\n"],"mappings":";;;;;;;AAWA,SAAS,wBAAwB,OAAuB;CACtD,MAAM,WAAW,QAAwB,KAAK,QAAQ,YAAY,EAAE;CAEpE,MAAM,QAAQ,QAAQ,KAAK;CAC3B,MAAM,aAAa,QAAQ,MAAM,MAAM,EAAE,IAAI;CAC7C,MAAM,gBAAgB,QAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI;CAEjE,IAAI,MAAM,SAAS,MAAM,eAAe,KAAK,OAAO;CACpD,OAAO,cAAc,WAAW,KAAK,cAAc,WAAW,IAC1D,GAAG,cAAc,GAAG,eACpB;AACN;AAEA,SAAS,UAAU,EAAE,KAAK,GAAG,SAA4G;CACvI,MAAM,EACJ,IACA,WACA,QACA,WACA,UACA,OACA,MACA,aACA,UACA,SACA,QACA,YACE;CACJ,MAAM,sBAAsB;EAC1B,MAAM,sBAAsB,SAAyC,OAAO,IAAI,CAAC,CAAC,OAAO,YAAY;EAErG,MAAM,SAAS,cAAc,IAAI,KAAK,mBAAmB,IAAI;EAC7D,QAAQ,QAAQ,WAAW,CAAC,CAAC,YAAY,KAAK,QAAQ,iBAClD,SACA;CACN,EAAA,CAAG;CAEH,OAAO,YAED,oBAAC,OAAD;EACO;EACG;EACR,WAAW,GAAG,WAAW,GAAG,GAAG,aAAa;EACrC;EACG;EACV,WAAW,UAAkB,SAAS,wBAAwB,KAAK,CAAC;EAC5D;EACC;EACT,GAAI;CACL,CAAA,IAGD,oBAAC,OAAD;EACE,WAAW,GAAG,WAAW,GAAG,GAAG,aAAa,GACzC,GAAG,GAAG,uBAAuB,SAChC,CAAC;EACD,SAAS,WAAW,KAAA,IAAY;
|
|
1
|
+
{"version":3,"file":"DateInput.js","names":[],"sources":["../../../../../../src/Atomic/FormElements/InputDateRange/components/DateInput.tsx"],"sourcesContent":["import type { Moment } from 'moment-timezone';\n\nimport type { ReactElement } from 'react';\nimport type { IDateInputProps } from '../InputDateRange.interface';\n\nimport cn from 'classnames';\nimport moment from 'moment-timezone';\nimport React from 'react';\nimport { NUMERIC_KEYBOARD } from '../../../../Functions/presets/mobileKeyboardTypesPresets';\nimport TextInput from '../../Input/Input';\n\nfunction handleDateInputOnChange(value: string): string {\n const replace = (val: string): string => val?.replace(/[^0-9/]/g, '');\n\n const input = replace(value);\n const lastSymbol = input ? input.slice(-1) : '';\n const previousValue = input ? input.slice(0, input.length - 1) : '';\n\n if (value.length > 10 || lastSymbol === '/') return previousValue;\n return previousValue.length === 2 || previousValue.length === 5\n ? `${previousValue}/${lastSymbol}`\n : input;\n}\n\nfunction DateInput({ ref, ...props }: IDateInputProps & { ref?: React.RefObject<Omit<HTMLInputElement, 'value'> | null> }): ReactElement {\n const {\n RC,\n className,\n testId,\n isFocused,\n disabled,\n value,\n date,\n prepareDate,\n onChange,\n onFocus,\n onBlur,\n onKeyUp,\n } = props;\n const preparedDate = (() => {\n const prepareDateDefault = (date: Date | Moment | string): string => moment(date).format('MM/DD/YYYY');\n\n const output = prepareDate?.(date) ?? prepareDateDefault(date);\n return (output?.toString?.().toLowerCase() || '') !== 'invalid date'\n ? output\n : '';\n })();\n\n return isFocused\n ? (\n <TextInput\n ref={ref}\n testId={testId}\n className={cn(className, `${RC}-interactive`)}\n value={value}\n disabled={disabled}\n onChange={(value: string) => onChange(handleDateInputOnChange(value))}\n onBlur={onBlur}\n onKeyUp={onKeyUp}\n {...NUMERIC_KEYBOARD}\n />\n )\n : (\n <div\n className={cn(className, `${RC}-emulation`, {\n [`${RC}-emulation_disabled`]: disabled,\n })}\n onClick={disabled ? undefined : onFocus}\n >\n <span className={cn('')}>{preparedDate}</span>\n </div>\n );\n}\n\nexport default DateInput;\n"],"mappings":";;;;;;;AAWA,SAAS,wBAAwB,OAAuB;CACtD,MAAM,WAAW,QAAwB,KAAK,QAAQ,YAAY,EAAE;CAEpE,MAAM,QAAQ,QAAQ,KAAK;CAC3B,MAAM,aAAa,QAAQ,MAAM,MAAM,EAAE,IAAI;CAC7C,MAAM,gBAAgB,QAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI;CAEjE,IAAI,MAAM,SAAS,MAAM,eAAe,KAAK,OAAO;CACpD,OAAO,cAAc,WAAW,KAAK,cAAc,WAAW,IAC1D,GAAG,cAAc,GAAG,eACpB;AACN;AAEA,SAAS,UAAU,EAAE,KAAK,GAAG,SAA4G;CACvI,MAAM,EACJ,IACA,WACA,QACA,WACA,UACA,OACA,MACA,aACA,UACA,SACA,QACA,YACE;CACJ,MAAM,sBAAsB;EAC1B,MAAM,sBAAsB,SAAyC,OAAO,IAAI,CAAC,CAAC,OAAO,YAAY;EAErG,MAAM,SAAS,cAAc,IAAI,KAAK,mBAAmB,IAAI;EAC7D,QAAQ,QAAQ,WAAW,CAAC,CAAC,YAAY,KAAK,QAAQ,iBAClD,SACA;CACN,EAAA,CAAG;CAEH,OAAO,YAED,oBAAC,OAAD;EACO;EACG;EACR,WAAW,GAAG,WAAW,GAAG,GAAG,aAAa;EACrC;EACG;EACV,WAAW,UAAkB,SAAS,wBAAwB,KAAK,CAAC;EAC5D;EACC;EACT,GAAI;CACL,CAAA,IAGD,oBAAC,OAAD;EACE,WAAW,GAAG,WAAW,GAAG,GAAG,aAAa,GACzC,GAAG,GAAG,uBAAuB,SAChC,CAAC;EACD,SAAS,WAAW,KAAA,IAAY;EAEhC,UAAA,oBAAC,QAAD;GAAM,WAAW,GAAG,EAAE;GAAI,UAAA;EAAmB,CAAA;CAC1C,CAAA;AAEb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Datepicker.js","names":[],"sources":["../../../../../../src/Atomic/FormElements/InputDateRange/components/Datepicker.tsx"],"sourcesContent":["import type { Moment } from 'moment-timezone';\n\nimport type { FocusEvent, KeyboardEvent, ReactElement, ReactNode, RefObject } from 'react';\n\nimport type { IDatepickerProps } from '../InputDateRange.interface';\nimport cn from 'classnames';\nimport moment from 'moment-timezone';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport Btn from '../../../UI/Button/Button';\n\nimport SelectInput from '../../Dropdown/Dropdown';\nimport Calendar from '../../RangeCalendar/RangeCalendar';\nimport Switcher from '../../Switcher/Switcher';\nimport {\n getActualDateRange,\n getIsDateValid,\n MAIN_FORMAT,\n MAIN_TIME_FORMAT,\n} from '../dependencies';\nimport DateInput from './DateInput';\n\nconst DATE_INPUT_FORMAT = 'MM/DD/YYYY';\n\nfunction padTime(time: number | string): string {\n return `${time.toString().padStart(2, '0')}:00`;\n}\n\nconst Datepicker: React.FC<IDatepickerProps> = (props): ReactElement => {\n const {\n txt,\n className,\n buttonsTypes = {},\n values = {},\n onChange,\n onChangeMobile,\n onChangeCompare,\n onCancel,\n getSelectedMode,\n onChangeInterval,\n isCompareHidden,\n limitRange,\n setActiveInterval,\n isShortWeekNames,\n minDate,\n maxDate,\n momentMinDate,\n momentMaxDate,\n isDontLimitFuture,\n testId,\n mainId,\n withMobileLogic,\n isDoNotPullOutListOfMainContainer,\n } = props;\n const { start = null, end = null, compare = false } = values;\n\n const startDateInputRef = useRef<Omit<HTMLInputElement, 'value'> | null>(null);\n const endDateInputRef = useRef<Omit<HTMLInputElement, 'value'> | null>(null);\n\n const [startDate, setStartDate] = useState<Moment | string>(\n getIsDateValid(start) ? moment(start) : '',\n );\n const [endDate, setEndDate] = useState<Moment | string>(\n getIsDateValid(end) ? moment(end) : '',\n );\n const dateInterval = getSelectedMode({ start: startDate, end: endDate });\n\n const [startDateInput, setStartDateInput] = useState<string | null>(null);\n const [endDateInput, setEndDateInput] = useState<string | null>(null);\n const [isStartFocused, setIsStartFocused] = useState<boolean>(false);\n const [isEndFocused, setIsEndFocused] = useState<boolean>(false);\n\n const [startHour, setStartHour] = useState<number>(start ? moment(start).hour() : 0);\n const [endHour, setEndHour] = useState<number>(end ? moment(end).hour() : 0);\n\n const [isCompare, setIsCompare] = useState<boolean>(compare);\n\n const [date1, setDate1] = useState<Moment>(\n start ? moment(start) : moment().subtract(1, 'month'),\n );\n const [date2, setDate2] = useState<Moment>(end ? moment(end) : moment());\n\n // ********************\n // Constants\n // ********************\n\n const isNearby = useMemo<boolean>(\n () => moment(date2).subtract(1, 'month').isSame(moment(date1), 'month'),\n [date1, date2],\n );\n\n const isPreviousPeriodShowed = useMemo<string | false | moment.Moment>(\n () => isCompare && !isCompareHidden && startDate && endDate,\n [startDate, endDate, isCompare],\n );\n\n const prevEndHour = useRef<number>(endHour);\n\n const startPrevDate = useMemo<Date | Moment | null>(() => {\n if (isPreviousPeriodShowed) {\n const intervalHoursCount = moment(endDate).diff(startDate, 'hours');\n return moment(startDate).subtract(intervalHoursCount, 'hours').toDate();\n }\n else {\n return null;\n }\n }, [startDate, endDate, isCompare]);\n\n const endPrevDate = useMemo<Date | Moment | string | null>(() => {\n if (isPreviousPeriodShowed) {\n return startDate;\n }\n else {\n return null;\n }\n }, [startDate, endDate, isCompare]);\n\n const title = useMemo<string>(() => {\n if (isCompare && !isCompareHidden && startDate && endDate) {\n return `${moment(startPrevDate).format('ll')} (${moment(startPrevDate).format(MAIN_TIME_FORMAT)}) - ${moment(\n endPrevDate,\n ).format('ll')} (${moment(endPrevDate).format(MAIN_TIME_FORMAT)})`;\n }\n else {\n return '';\n }\n }, [startDate, endDate, isCompare]);\n\n // ********************\n // Methods\n // ********************\n\n const subtractDay = (date: Date | Moment | string): Moment =>\n endHour === 0 ? moment(date).subtract(1, 'days') : moment(date);\n const addDay = (date: Date | Moment | string): Moment =>\n endHour === 0 ? moment(date).add(1, 'days') : moment(date);\n\n const getCorrectedDateForDateInput = (key: string, date: Date | Moment | string): Moment => {\n if (key === 'startDateInput') return moment(date);\n return subtractDay(moment(date));\n };\n\n const setInterval = (): void => {\n setActiveInterval?.(\n getActualDateRange({ start: startDate, end: endDate }).intervalKey as string,\n );\n };\n\n // ********************\n // Handlers\n // ********************\n\n const handleClick = (date: Date | Moment | string): void => {\n prevEndHour.current = 0;\n if (\n !startDate\n || (startDate\n && endDate\n && !(\n moment(startDate).add(1, 'd').isSame(endDate, 'day') && endHour === 0\n ))\n ) {\n setStartDate(moment(date).startOf('day'));\n setEndDate(moment(date).add(1, 'd').startOf('day'));\n setStartHour(0);\n setEndHour(0);\n }\n else if (moment(date).isBefore(moment(startDate), 'day')) {\n setEndDate(moment(startDate).add(1, 'd').startOf('day'));\n setStartDate(moment(date).set('hour', Number.parseInt(startHour.toString(), 10)));\n }\n else if (moment(date).isAfter(moment(startDate), 'day')) {\n setEndDate(moment(date).add(1, 'd').startOf('day'));\n }\n };\n\n const handleChangeStartHour = (val: string | number): void => {\n setStartHour(Number(val));\n setStartDate(moment(startDate || moment()).set('hour', Number(val)));\n };\n\n const handleChangeEndHour = (val: string | number): void => {\n const newHour = Number(val);\n setEndHour(newHour);\n let newEndDate = moment();\n\n if (endDate) {\n if (prevEndHour.current === 0 && newHour !== 0) {\n newEndDate = moment(endDate).subtract(1, 'days');\n }\n else if (prevEndHour.current !== 0 && newHour === 0) {\n newEndDate = moment(endDate).add(1, 'days');\n }\n }\n\n prevEndHour.current = newHour;\n setEndDate(moment(newEndDate).set('hour', newHour));\n };\n\n const handleDateInputFocus = (key: string, e: React.MouseEvent<HTMLDivElement, MouseEvent>): void => {\n const changeFlag\n = key === 'startDateInput' ? setIsStartFocused : setIsEndFocused;\n const set = key === 'startDateInput' ? setStartDateInput : setEndDateInput;\n const date = key === 'startDateInput' ? startDate : endDate;\n\n changeFlag(true);\n set(date ? getCorrectedDateForDateInput(key, date).format('L') : '');\n setTimeout(() => {\n const defaultTarget\n = key === 'startDateInput'\n ? startDateInputRef.current\n : endDateInputRef.current;\n const target = e?.target ?? defaultTarget;\n (target as HTMLInputElement).select?.();\n }, 0);\n };\n\n const doBlur = (type: string, e: React.MouseEvent<HTMLDivElement, MouseEvent>): void => {\n const executor\n = type === 'startDateInput' ? setIsStartFocused : setIsEndFocused;\n\n (e.target as HTMLElement).blur();\n executor(false);\n };\n\n const processOverflow = (newDateAsString: string, valueForRollback: string | Moment, key: string): string | Moment => {\n const newDateAsMomentObj = moment(newDateAsString, DATE_INPUT_FORMAT);\n\n // ? Если значение не валидно...\n if (!newDateAsMomentObj.isValid()) {\n // ? ... то откатываем к дате до набора руками\n return valueForRollback;\n }\n else {\n const beforeOfFuture = moment().endOf('day');\n const hour = key === 'startDateInput' ? startHour : endHour;\n\n let output;\n\n // ? Если есть минимальная дата и введенная меньше минимальной, то ставим минимальную\n if (minDate && newDateAsMomentObj.isBefore(momentMinDate)) {\n output = momentMinDate;\n }\n // ? Если есть максимальная дата и введенная больше максимальной, то ставим максимальную\n else if (maxDate && newDateAsMomentObj.isAfter(momentMaxDate)) {\n output = momentMaxDate;\n }\n // ? Если нет установки не ограничивать дату по будущему...\n else if (\n !isDontLimitFuture\n && newDateAsMomentObj.isAfter(beforeOfFuture)\n ) {\n output = beforeOfFuture.startOf('day');\n }\n else {\n output = newDateAsMomentObj;\n }\n\n if (key === 'endDateInput') {\n output = addDay(output as Moment);\n }\n\n return (output as Moment).set('hour', Number.parseInt(hour.toString(), 10));\n }\n };\n\n const handleDateInputBlur = (key: string, e: FocusEvent<HTMLInputElement>): void => {\n const reserveValue\n = key === 'startDateInput' ? startDateInput : endDateInput;\n const valueForRollback = key === 'startDateInput' ? startDate : endDate;\n\n const execute = key === 'startDateInput' ? setStartDate : setEndDate;\n const executeForCalendar = key === 'startDateInput' ? setDate1 : setDate2;\n const prepareValueForCalendar = (newDate: Moment): Moment => {\n if (key === 'endDateInput') return newDate;\n return moment(newDate).isSameOrAfter(moment(date2), 'month')\n ? moment(date2).subtract(1, 'month')\n : moment(newDate);\n };\n\n const newDateValue = (e?.target as HTMLInputElement)?.value ?? reserveValue;\n const processedNewDate = processOverflow(\n newDateValue,\n valueForRollback,\n key,\n );\n execute(processedNewDate);\n executeForCalendar(prepareValueForCalendar(processedNewDate as Moment));\n doBlur(key, e as any);\n };\n\n const handleKeyPressed = (code: number, e: KeyboardEvent<HTMLInputElement>, type: string): void => {\n if (code === 13) {\n const syntheticEvent = {\n target: e.target,\n relatedTarget: null,\n } as unknown as FocusEvent<HTMLInputElement>;\n handleDateInputBlur(type, syntheticEvent);\n }\n if (code === 27) doBlur(type, e as any);\n };\n\n // ********************\n // Render Functions\n // ********************\n\n const getStartHourItems = (): { label: string; value: number; disabled: boolean }[] =>\n [...Array.from({ length: 24 }).keys()].map(hour => ({\n label: padTime(hour),\n value: hour,\n disabled: moment(startDate).isSame(endDate, 'day') && endHour <= hour,\n }));\n const getEndHourItems = (): { label: string; value: number; disabled: boolean }[] =>\n [...Array.from({ length: 24 }).keys()].map(hour => ({\n label: padTime(hour + 1),\n value: hour === 23 ? 0 : hour + 1,\n disabled:\n (moment(startDate).isSame(endDate, 'day')\n || (moment(startDate).isSame(\n moment(endDate).subtract(1, 'days'),\n 'day',\n )\n && endHour === 0))\n && hour < startHour,\n }));\n\n const renderButtons = (): ReactNode => (\n <>\n <Btn\n className=\"date-picker__button\"\n onClick={() => onCancel?.()}\n variant={buttonsTypes?.cancel}\n >\n {txt?.buttons?.cancel || 'Cancel'}\n </Btn>\n <Btn\n className=\"date-picker__button\"\n variant={buttonsTypes?.apply}\n disabled={!startDate || !endDate}\n onClick={() =>\n onChange?.({\n start: moment(startDate).format(MAIN_FORMAT),\n end: moment(endDate).format(MAIN_FORMAT),\n startPrevDate: moment(startPrevDate).format(MAIN_FORMAT),\n endPrevDate: moment(endPrevDate).format(MAIN_FORMAT),\n compare: isCompare,\n })}\n >\n {txt?.buttons?.apply || 'apply'}\n </Btn>\n </>\n );\n\n const renderPreviousPeriod = (): ReactNode => (\n <>\n {txt?.labels?.previousPeriod || ''}\n :\n {' '}\n <span className=\"date-picker__previous-period-interval\">{title}</span>\n </>\n );\n\n // ********************\n // useEffects\n // ********************\n\n useEffect(() => {\n if (moment(startDate).isSameOrAfter(endDate)) {\n setStartDate(moment(endDate).subtract(1, 'd'));\n setDate1(moment(endDate).subtract(1, 'd'));\n }\n }, [startDate]);\n\n useEffect(() => {\n if (moment(endDate).isSameOrBefore(startDate)) {\n setEndDate(moment(startDate).add(1, 'd'));\n setDate2(moment(startDate).add(1, 'd'));\n }\n }, [endDate]);\n\n useEffect(() => {\n if (moment(startDate).isBefore(moment(endDate), 'month')) {\n setDate1(moment(startDate));\n setDate2(moment(endDate));\n }\n setInterval();\n }, [startDate, endDate]);\n\n useEffect(() => {\n if (\n moment(date1).isSameOrAfter(moment(date2), 'month')\n && !withMobileLogic\n ) {\n setDate1(moment(date2).subtract(1, 'month'));\n }\n }, [date1, date2]);\n\n useEffect(() => {\n onChangeInterval(dateInterval);\n }, [dateInterval]);\n\n useEffect(() => {\n if (typeof onChangeMobile === 'function') {\n onChangeMobile({\n start: moment(startDate).format(MAIN_FORMAT),\n end: moment(endDate).format(MAIN_FORMAT),\n startPrevDate: moment(startPrevDate).format(MAIN_FORMAT),\n endPrevDate: moment(endPrevDate).format(MAIN_FORMAT),\n compare: isCompare,\n });\n }\n }, [startDate, endDate, startPrevDate, endPrevDate, isCompare]);\n\n const renderRowStart = (): ReactNode => {\n return (\n <div className=\"date-picker__date-row\">\n <DateInput\n ref={startDateInputRef as RefObject<Omit<HTMLInputElement, 'value'>>}\n testId={`datepicker-${testId}_start-date-input`}\n RC=\"date-picker__date-input\"\n className={cn('date-picker__date-input')}\n isFocused={isStartFocused}\n value={startDateInput as string}\n date={getCorrectedDateForDateInput('startDateInput', startDate)}\n disabled={!startDate}\n onChange={setStartDateInput}\n onFocus={e => handleDateInputFocus('startDateInput', e)}\n onBlur={e => handleDateInputBlur('startDateInput', e)}\n onKeyUp={(code, e) => handleKeyPressed(+code, e, 'startDateInput')}\n />\n <SelectInput\n testId={testId}\n id={`datepicker-id-${mainId}_start-hour-select-input`}\n className={cn('date-picker__hour-select-input')}\n onChange={value => handleChangeStartHour(value)}\n value={startHour}\n options={getStartHourItems()}\n disabled={!startDate}\n isDoNotPullOutListOfMainContainer={isDoNotPullOutListOfMainContainer}\n withMobileLogic={withMobileLogic}\n />\n </div>\n );\n };\n const renderRowEnd = (): ReactNode => {\n return (\n <div className=\"date-picker__date-row\">\n <DateInput\n ref={endDateInputRef as RefObject<Omit<HTMLInputElement, 'value'>>}\n testId={`datepicker-${testId}_start-date-input`}\n RC=\"date-picker__date-input\"\n className={cn('date-picker__date-input')}\n isFocused={isEndFocused}\n value={endDateInput as string}\n date={getCorrectedDateForDateInput('endDateInput', endDate)}\n disabled={!endDate}\n onChange={setEndDateInput}\n onFocus={e => handleDateInputFocus('endDateInput', e)}\n onBlur={e => handleDateInputBlur('endDateInput', e)}\n onKeyUp={(code, e) => handleKeyPressed(+code, e, 'endDateInput')}\n />\n <SelectInput\n testId={testId}\n id={`datepicker-id-${mainId}_end-hour-select-input`}\n className={cn('date-picker__hour-select-input')}\n onChange={value => handleChangeEndHour(value)}\n value={endHour}\n options={getEndHourItems()}\n disabled={!endDate}\n isDoNotPullOutListOfMainContainer={isDoNotPullOutListOfMainContainer}\n withMobileLogic={withMobileLogic}\n />\n </div>\n );\n };\n\n const renderCalendarStart = (): ReactNode => {\n return (\n <Calendar\n testId={testId}\n className=\"date-picker__calendar\"\n date={date1}\n setDate={setDate1}\n allowNext={\n withMobileLogic\n ? !moment(date1)\n .startOf('month')\n .isSameOrAfter(moment().startOf('day'), 'months')\n : !isNearby\n }\n startDate={startDate}\n endDate={endDate}\n startPrevDate={startPrevDate}\n endPrevDate={endPrevDate}\n onClick={handleClick}\n limitRange={limitRange}\n isShortWeekNames={isShortWeekNames}\n minDate={minDate}\n maxDate={maxDate}\n momentMinDate={momentMinDate}\n momentMaxDate={momentMaxDate}\n />\n );\n };\n const renderCalendarEnd = (): ReactNode => {\n return (\n <Calendar\n className=\"date-picker__calendar\"\n date={date2}\n setDate={setDate2}\n allowPrev={!isNearby}\n startDate={startDate}\n endDate={endDate}\n startPrevDate={startPrevDate}\n endPrevDate={endPrevDate}\n onClick={handleClick}\n isShortWeekNames={isShortWeekNames}\n minDate={minDate}\n maxDate={maxDate}\n momentMinDate={momentMinDate}\n momentMaxDate={momentMaxDate}\n isDontLimitFuture={isDontLimitFuture}\n />\n );\n };\n\n const render = (): ReactElement => {\n return (\n <div className={cn('date-picker', className)}>\n <div className=\"date-picker__header\">\n <div className=\"date-picker__inputs-block\">\n {renderRowStart()}\n <div className=\"date-picker__inputs-separator date-picker__header--gray\">\n —\n </div>\n {renderRowEnd()}\n </div>\n {isCompare && !isCompareHidden && startDate && endDate && (\n <div className=\"date-picker__previous-period\">\n {renderPreviousPeriod()}\n </div>\n )}\n </div>\n\n <div className=\"date-picker__calendars\">\n <div className=\"date-picker__calendars-wrapper\">\n {renderCalendarStart()}\n {renderCalendarEnd()}\n </div>\n </div>\n <div\n className={cn('date-picker__footer', {\n 'date-picker__footer_once-element': isCompareHidden,\n })}\n >\n {!isCompareHidden\n ? (\n <div className=\"date-picker__compare-block\">\n <div className=\"mr5\">\n <Switcher\n label={txt?.labels?.compare || 'Compare'}\n isActive={isCompare}\n onChange={() => {\n onChangeCompare?.(!isCompare);\n setIsCompare(state => !state);\n }}\n />\n </div>\n </div>\n )\n : (\n <div />\n )}\n <div className=\"date-picker__buttons-block\">{renderButtons()}</div>\n </div>\n </div>\n );\n };\n const renderMobile = (): ReactElement => {\n return (\n <div className={cn('date-picker', className)}>\n <div className=\"date-picker__header\">\n <div className=\"date-picker__inputs-block\">\n {renderRowStart()}\n <div className=\"date-picker__inputs-separator date-picker__header--gray\">\n —\n </div>\n {renderRowEnd()}\n </div>\n {isCompare && !isCompareHidden && startDate && endDate && (\n <div className=\"date-picker__previous-period\">\n {renderPreviousPeriod()}\n </div>\n )}\n </div>\n\n <div className=\"date-picker__calendars\">\n <div className=\"date-picker__calendars-wrapper\">\n {renderCalendarStart()}\n </div>\n </div>\n </div>\n );\n };\n return withMobileLogic ? renderMobile() : render();\n}\n\nexport default Datepicker;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Datepicker.js","names":[],"sources":["../../../../../../src/Atomic/FormElements/InputDateRange/components/Datepicker.tsx"],"sourcesContent":["import type { Moment } from 'moment-timezone';\n\nimport type { FocusEvent, KeyboardEvent, ReactElement, ReactNode, RefObject } from 'react';\n\nimport type { IDatepickerProps } from '../InputDateRange.interface';\nimport cn from 'classnames';\nimport moment from 'moment-timezone';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport Btn from '../../../UI/Button/Button';\n\nimport SelectInput from '../../Dropdown/Dropdown';\nimport Calendar from '../../RangeCalendar/RangeCalendar';\nimport Switcher from '../../Switcher/Switcher';\nimport {\n getActualDateRange,\n getIsDateValid,\n MAIN_FORMAT,\n MAIN_TIME_FORMAT,\n} from '../dependencies';\nimport DateInput from './DateInput';\n\nconst DATE_INPUT_FORMAT = 'MM/DD/YYYY';\n\nfunction padTime(time: number | string): string {\n return `${time.toString().padStart(2, '0')}:00`;\n}\n\nconst Datepicker: React.FC<IDatepickerProps> = (props): ReactElement => {\n const {\n txt,\n className,\n buttonsTypes = {},\n values = {},\n onChange,\n onChangeMobile,\n onChangeCompare,\n onCancel,\n getSelectedMode,\n onChangeInterval,\n isCompareHidden,\n limitRange,\n setActiveInterval,\n isShortWeekNames,\n minDate,\n maxDate,\n momentMinDate,\n momentMaxDate,\n isDontLimitFuture,\n testId,\n mainId,\n withMobileLogic,\n isDoNotPullOutListOfMainContainer,\n } = props;\n const { start = null, end = null, compare = false } = values;\n\n const startDateInputRef = useRef<Omit<HTMLInputElement, 'value'> | null>(null);\n const endDateInputRef = useRef<Omit<HTMLInputElement, 'value'> | null>(null);\n\n const [startDate, setStartDate] = useState<Moment | string>(\n getIsDateValid(start) ? moment(start) : '',\n );\n const [endDate, setEndDate] = useState<Moment | string>(\n getIsDateValid(end) ? moment(end) : '',\n );\n const dateInterval = getSelectedMode({ start: startDate, end: endDate });\n\n const [startDateInput, setStartDateInput] = useState<string | null>(null);\n const [endDateInput, setEndDateInput] = useState<string | null>(null);\n const [isStartFocused, setIsStartFocused] = useState<boolean>(false);\n const [isEndFocused, setIsEndFocused] = useState<boolean>(false);\n\n const [startHour, setStartHour] = useState<number>(start ? moment(start).hour() : 0);\n const [endHour, setEndHour] = useState<number>(end ? moment(end).hour() : 0);\n\n const [isCompare, setIsCompare] = useState<boolean>(compare);\n\n const [date1, setDate1] = useState<Moment>(\n start ? moment(start) : moment().subtract(1, 'month'),\n );\n const [date2, setDate2] = useState<Moment>(end ? moment(end) : moment());\n\n // ********************\n // Constants\n // ********************\n\n const isNearby = useMemo<boolean>(\n () => moment(date2).subtract(1, 'month').isSame(moment(date1), 'month'),\n [date1, date2],\n );\n\n const isPreviousPeriodShowed = useMemo<string | false | moment.Moment>(\n () => isCompare && !isCompareHidden && startDate && endDate,\n [startDate, endDate, isCompare],\n );\n\n const prevEndHour = useRef<number>(endHour);\n\n const startPrevDate = useMemo<Date | Moment | null>(() => {\n if (isPreviousPeriodShowed) {\n const intervalHoursCount = moment(endDate).diff(startDate, 'hours');\n return moment(startDate).subtract(intervalHoursCount, 'hours').toDate();\n }\n else {\n return null;\n }\n }, [startDate, endDate, isCompare]);\n\n const endPrevDate = useMemo<Date | Moment | string | null>(() => {\n if (isPreviousPeriodShowed) {\n return startDate;\n }\n else {\n return null;\n }\n }, [startDate, endDate, isCompare]);\n\n const title = useMemo<string>(() => {\n if (isCompare && !isCompareHidden && startDate && endDate) {\n return `${moment(startPrevDate).format('ll')} (${moment(startPrevDate).format(MAIN_TIME_FORMAT)}) - ${moment(\n endPrevDate,\n ).format('ll')} (${moment(endPrevDate).format(MAIN_TIME_FORMAT)})`;\n }\n else {\n return '';\n }\n }, [startDate, endDate, isCompare]);\n\n // ********************\n // Methods\n // ********************\n\n const subtractDay = (date: Date | Moment | string): Moment =>\n endHour === 0 ? moment(date).subtract(1, 'days') : moment(date);\n const addDay = (date: Date | Moment | string): Moment =>\n endHour === 0 ? moment(date).add(1, 'days') : moment(date);\n\n const getCorrectedDateForDateInput = (key: string, date: Date | Moment | string): Moment => {\n if (key === 'startDateInput') return moment(date);\n return subtractDay(moment(date));\n };\n\n const setInterval = (): void => {\n setActiveInterval?.(\n getActualDateRange({ start: startDate, end: endDate }).intervalKey as string,\n );\n };\n\n // ********************\n // Handlers\n // ********************\n\n const handleClick = (date: Date | Moment | string): void => {\n prevEndHour.current = 0;\n if (\n !startDate\n || (startDate\n && endDate\n && !(\n moment(startDate).add(1, 'd').isSame(endDate, 'day') && endHour === 0\n ))\n ) {\n setStartDate(moment(date).startOf('day'));\n setEndDate(moment(date).add(1, 'd').startOf('day'));\n setStartHour(0);\n setEndHour(0);\n }\n else if (moment(date).isBefore(moment(startDate), 'day')) {\n setEndDate(moment(startDate).add(1, 'd').startOf('day'));\n setStartDate(moment(date).set('hour', Number.parseInt(startHour.toString(), 10)));\n }\n else if (moment(date).isAfter(moment(startDate), 'day')) {\n setEndDate(moment(date).add(1, 'd').startOf('day'));\n }\n };\n\n const handleChangeStartHour = (val: string | number): void => {\n setStartHour(Number(val));\n setStartDate(moment(startDate || moment()).set('hour', Number(val)));\n };\n\n const handleChangeEndHour = (val: string | number): void => {\n const newHour = Number(val);\n setEndHour(newHour);\n let newEndDate = moment();\n\n if (endDate) {\n if (prevEndHour.current === 0 && newHour !== 0) {\n newEndDate = moment(endDate).subtract(1, 'days');\n }\n else if (prevEndHour.current !== 0 && newHour === 0) {\n newEndDate = moment(endDate).add(1, 'days');\n }\n }\n\n prevEndHour.current = newHour;\n setEndDate(moment(newEndDate).set('hour', newHour));\n };\n\n const handleDateInputFocus = (key: string, e: React.MouseEvent<HTMLDivElement, MouseEvent>): void => {\n const changeFlag\n = key === 'startDateInput' ? setIsStartFocused : setIsEndFocused;\n const set = key === 'startDateInput' ? setStartDateInput : setEndDateInput;\n const date = key === 'startDateInput' ? startDate : endDate;\n\n changeFlag(true);\n set(date ? getCorrectedDateForDateInput(key, date).format('L') : '');\n setTimeout(() => {\n const defaultTarget\n = key === 'startDateInput'\n ? startDateInputRef.current\n : endDateInputRef.current;\n const target = e?.target ?? defaultTarget;\n (target as HTMLInputElement).select?.();\n }, 0);\n };\n\n const doBlur = (type: string, e: React.MouseEvent<HTMLDivElement, MouseEvent>): void => {\n const executor\n = type === 'startDateInput' ? setIsStartFocused : setIsEndFocused;\n\n (e.target as HTMLElement).blur();\n executor(false);\n };\n\n const processOverflow = (newDateAsString: string, valueForRollback: string | Moment, key: string): string | Moment => {\n const newDateAsMomentObj = moment(newDateAsString, DATE_INPUT_FORMAT);\n\n // ? Если значение не валидно...\n if (!newDateAsMomentObj.isValid()) {\n // ? ... то откатываем к дате до набора руками\n return valueForRollback;\n }\n else {\n const beforeOfFuture = moment().endOf('day');\n const hour = key === 'startDateInput' ? startHour : endHour;\n\n let output;\n\n // ? Если есть минимальная дата и введенная меньше минимальной, то ставим минимальную\n if (minDate && newDateAsMomentObj.isBefore(momentMinDate)) {\n output = momentMinDate;\n }\n // ? Если есть максимальная дата и введенная больше максимальной, то ставим максимальную\n else if (maxDate && newDateAsMomentObj.isAfter(momentMaxDate)) {\n output = momentMaxDate;\n }\n // ? Если нет установки не ограничивать дату по будущему...\n else if (\n !isDontLimitFuture\n && newDateAsMomentObj.isAfter(beforeOfFuture)\n ) {\n output = beforeOfFuture.startOf('day');\n }\n else {\n output = newDateAsMomentObj;\n }\n\n if (key === 'endDateInput') {\n output = addDay(output as Moment);\n }\n\n return (output as Moment).set('hour', Number.parseInt(hour.toString(), 10));\n }\n };\n\n const handleDateInputBlur = (key: string, e: FocusEvent<HTMLInputElement>): void => {\n const reserveValue\n = key === 'startDateInput' ? startDateInput : endDateInput;\n const valueForRollback = key === 'startDateInput' ? startDate : endDate;\n\n const execute = key === 'startDateInput' ? setStartDate : setEndDate;\n const executeForCalendar = key === 'startDateInput' ? setDate1 : setDate2;\n const prepareValueForCalendar = (newDate: Moment): Moment => {\n if (key === 'endDateInput') return newDate;\n return moment(newDate).isSameOrAfter(moment(date2), 'month')\n ? moment(date2).subtract(1, 'month')\n : moment(newDate);\n };\n\n const newDateValue = (e?.target as HTMLInputElement)?.value ?? reserveValue;\n const processedNewDate = processOverflow(\n newDateValue,\n valueForRollback,\n key,\n );\n execute(processedNewDate);\n executeForCalendar(prepareValueForCalendar(processedNewDate as Moment));\n doBlur(key, e as any);\n };\n\n const handleKeyPressed = (code: number, e: KeyboardEvent<HTMLInputElement>, type: string): void => {\n if (code === 13) {\n const syntheticEvent = {\n target: e.target,\n relatedTarget: null,\n } as unknown as FocusEvent<HTMLInputElement>;\n handleDateInputBlur(type, syntheticEvent);\n }\n if (code === 27) doBlur(type, e as any);\n };\n\n // ********************\n // Render Functions\n // ********************\n\n const getStartHourItems = (): { label: string; value: number; disabled: boolean }[] =>\n [...Array.from({ length: 24 }).keys()].map(hour => ({\n label: padTime(hour),\n value: hour,\n disabled: moment(startDate).isSame(endDate, 'day') && endHour <= hour,\n }));\n const getEndHourItems = (): { label: string; value: number; disabled: boolean }[] =>\n [...Array.from({ length: 24 }).keys()].map(hour => ({\n label: padTime(hour + 1),\n value: hour === 23 ? 0 : hour + 1,\n disabled:\n (moment(startDate).isSame(endDate, 'day')\n || (moment(startDate).isSame(\n moment(endDate).subtract(1, 'days'),\n 'day',\n )\n && endHour === 0))\n && hour < startHour,\n }));\n\n const renderButtons = (): ReactNode => (\n <>\n <Btn\n className=\"date-picker__button\"\n onClick={() => onCancel?.()}\n variant={buttonsTypes?.cancel}\n >\n {txt?.buttons?.cancel || 'Cancel'}\n </Btn>\n <Btn\n className=\"date-picker__button\"\n variant={buttonsTypes?.apply}\n disabled={!startDate || !endDate}\n onClick={() =>\n onChange?.({\n start: moment(startDate).format(MAIN_FORMAT),\n end: moment(endDate).format(MAIN_FORMAT),\n startPrevDate: moment(startPrevDate).format(MAIN_FORMAT),\n endPrevDate: moment(endPrevDate).format(MAIN_FORMAT),\n compare: isCompare,\n })}\n >\n {txt?.buttons?.apply || 'apply'}\n </Btn>\n </>\n );\n\n const renderPreviousPeriod = (): ReactNode => (\n <>\n {txt?.labels?.previousPeriod || ''}\n :\n {' '}\n <span className=\"date-picker__previous-period-interval\">{title}</span>\n </>\n );\n\n // ********************\n // useEffects\n // ********************\n\n useEffect(() => {\n if (moment(startDate).isSameOrAfter(endDate)) {\n setStartDate(moment(endDate).subtract(1, 'd'));\n setDate1(moment(endDate).subtract(1, 'd'));\n }\n }, [startDate]);\n\n useEffect(() => {\n if (moment(endDate).isSameOrBefore(startDate)) {\n setEndDate(moment(startDate).add(1, 'd'));\n setDate2(moment(startDate).add(1, 'd'));\n }\n }, [endDate]);\n\n useEffect(() => {\n if (moment(startDate).isBefore(moment(endDate), 'month')) {\n setDate1(moment(startDate));\n setDate2(moment(endDate));\n }\n setInterval();\n }, [startDate, endDate]);\n\n useEffect(() => {\n if (\n moment(date1).isSameOrAfter(moment(date2), 'month')\n && !withMobileLogic\n ) {\n setDate1(moment(date2).subtract(1, 'month'));\n }\n }, [date1, date2]);\n\n useEffect(() => {\n onChangeInterval(dateInterval);\n }, [dateInterval]);\n\n useEffect(() => {\n if (typeof onChangeMobile === 'function') {\n onChangeMobile({\n start: moment(startDate).format(MAIN_FORMAT),\n end: moment(endDate).format(MAIN_FORMAT),\n startPrevDate: moment(startPrevDate).format(MAIN_FORMAT),\n endPrevDate: moment(endPrevDate).format(MAIN_FORMAT),\n compare: isCompare,\n });\n }\n }, [startDate, endDate, startPrevDate, endPrevDate, isCompare]);\n\n const renderRowStart = (): ReactNode => {\n return (\n <div className=\"date-picker__date-row\">\n <DateInput\n ref={startDateInputRef as RefObject<Omit<HTMLInputElement, 'value'>>}\n testId={`datepicker-${testId}_start-date-input`}\n RC=\"date-picker__date-input\"\n className={cn('date-picker__date-input')}\n isFocused={isStartFocused}\n value={startDateInput as string}\n date={getCorrectedDateForDateInput('startDateInput', startDate)}\n disabled={!startDate}\n onChange={setStartDateInput}\n onFocus={e => handleDateInputFocus('startDateInput', e)}\n onBlur={e => handleDateInputBlur('startDateInput', e)}\n onKeyUp={(code, e) => handleKeyPressed(+code, e, 'startDateInput')}\n />\n <SelectInput\n testId={testId}\n id={`datepicker-id-${mainId}_start-hour-select-input`}\n className={cn('date-picker__hour-select-input')}\n onChange={value => handleChangeStartHour(value)}\n value={startHour}\n options={getStartHourItems()}\n disabled={!startDate}\n isDoNotPullOutListOfMainContainer={isDoNotPullOutListOfMainContainer}\n withMobileLogic={withMobileLogic}\n />\n </div>\n );\n };\n const renderRowEnd = (): ReactNode => {\n return (\n <div className=\"date-picker__date-row\">\n <DateInput\n ref={endDateInputRef as RefObject<Omit<HTMLInputElement, 'value'>>}\n testId={`datepicker-${testId}_start-date-input`}\n RC=\"date-picker__date-input\"\n className={cn('date-picker__date-input')}\n isFocused={isEndFocused}\n value={endDateInput as string}\n date={getCorrectedDateForDateInput('endDateInput', endDate)}\n disabled={!endDate}\n onChange={setEndDateInput}\n onFocus={e => handleDateInputFocus('endDateInput', e)}\n onBlur={e => handleDateInputBlur('endDateInput', e)}\n onKeyUp={(code, e) => handleKeyPressed(+code, e, 'endDateInput')}\n />\n <SelectInput\n testId={testId}\n id={`datepicker-id-${mainId}_end-hour-select-input`}\n className={cn('date-picker__hour-select-input')}\n onChange={value => handleChangeEndHour(value)}\n value={endHour}\n options={getEndHourItems()}\n disabled={!endDate}\n isDoNotPullOutListOfMainContainer={isDoNotPullOutListOfMainContainer}\n withMobileLogic={withMobileLogic}\n />\n </div>\n );\n };\n\n const renderCalendarStart = (): ReactNode => {\n return (\n <Calendar\n testId={testId}\n className=\"date-picker__calendar\"\n date={date1}\n setDate={setDate1}\n allowNext={\n withMobileLogic\n ? !moment(date1)\n .startOf('month')\n .isSameOrAfter(moment().startOf('day'), 'months')\n : !isNearby\n }\n startDate={startDate}\n endDate={endDate}\n startPrevDate={startPrevDate}\n endPrevDate={endPrevDate}\n onClick={handleClick}\n limitRange={limitRange}\n isShortWeekNames={isShortWeekNames}\n minDate={minDate}\n maxDate={maxDate}\n momentMinDate={momentMinDate}\n momentMaxDate={momentMaxDate}\n />\n );\n };\n const renderCalendarEnd = (): ReactNode => {\n return (\n <Calendar\n className=\"date-picker__calendar\"\n date={date2}\n setDate={setDate2}\n allowPrev={!isNearby}\n startDate={startDate}\n endDate={endDate}\n startPrevDate={startPrevDate}\n endPrevDate={endPrevDate}\n onClick={handleClick}\n isShortWeekNames={isShortWeekNames}\n minDate={minDate}\n maxDate={maxDate}\n momentMinDate={momentMinDate}\n momentMaxDate={momentMaxDate}\n isDontLimitFuture={isDontLimitFuture}\n />\n );\n };\n\n const render = (): ReactElement => {\n return (\n <div className={cn('date-picker', className)}>\n <div className=\"date-picker__header\">\n <div className=\"date-picker__inputs-block\">\n {renderRowStart()}\n <div className=\"date-picker__inputs-separator date-picker__header--gray\">\n —\n </div>\n {renderRowEnd()}\n </div>\n {isCompare && !isCompareHidden && startDate && endDate && (\n <div className=\"date-picker__previous-period\">\n {renderPreviousPeriod()}\n </div>\n )}\n </div>\n\n <div className=\"date-picker__calendars\">\n <div className=\"date-picker__calendars-wrapper\">\n {renderCalendarStart()}\n {renderCalendarEnd()}\n </div>\n </div>\n <div\n className={cn('date-picker__footer', {\n 'date-picker__footer_once-element': isCompareHidden,\n })}\n >\n {!isCompareHidden\n ? (\n <div className=\"date-picker__compare-block\">\n <div className=\"mr5\">\n <Switcher\n label={txt?.labels?.compare || 'Compare'}\n isActive={isCompare}\n onChange={() => {\n onChangeCompare?.(!isCompare);\n setIsCompare(state => !state);\n }}\n />\n </div>\n </div>\n )\n : (\n <div />\n )}\n <div className=\"date-picker__buttons-block\">{renderButtons()}</div>\n </div>\n </div>\n );\n };\n const renderMobile = (): ReactElement => {\n return (\n <div className={cn('date-picker', className)}>\n <div className=\"date-picker__header\">\n <div className=\"date-picker__inputs-block\">\n {renderRowStart()}\n <div className=\"date-picker__inputs-separator date-picker__header--gray\">\n —\n </div>\n {renderRowEnd()}\n </div>\n {isCompare && !isCompareHidden && startDate && endDate && (\n <div className=\"date-picker__previous-period\">\n {renderPreviousPeriod()}\n </div>\n )}\n </div>\n\n <div className=\"date-picker__calendars\">\n <div className=\"date-picker__calendars-wrapper\">\n {renderCalendarStart()}\n </div>\n </div>\n </div>\n );\n };\n return withMobileLogic ? renderMobile() : render();\n}\n\nexport default Datepicker;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenedPart.js","names":[],"sources":["../../../../../../src/Atomic/FormElements/InputDateRange/components/OpenedPart.tsx"],"sourcesContent":["import type { Moment } from 'moment-timezone';\nimport type { LegacyRef, ReactElement, ReactNode } from 'react';\n\nimport type { IIntervalItem, IOpenedPartProps } from '../InputDateRange.interface';\nimport cn from 'classnames';\nimport moment from 'moment-timezone';\nimport React, { useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport useIsMobile from '../../../../Functions/useIsMobile/useIsMobile';\nimport { useResize } from '../../../../Functions/useResize';\n\nimport { capitalized } from '../../../../Functions/utils';\n\nimport Modal from '../../../UI/Modal/Modal';\nimport Dropdown from '../../Dropdown/Dropdown';\n\nimport {\n CUSTOM_INTERVAL_KEY_TEXT,\n CUSTOM_INTERVAL_KEY as customKey,\n INTERVALS as intervals,\n} from '../dependencies';\nimport Datepicker from './Datepicker';\nimport SelectItem from './SelectItem';\n\nconst OpenedPart: React.FC<IOpenedPartProps> = (props): ReactElement => {\n const {\n dateRangeContainerId,\n txt,\n buttonsTypes,\n actualValues,\n onChange = () => {},\n isCompact = false,\n isIntervalsHidden = false,\n isCompareHidden = false,\n limitRange,\n isOptionsRight,\n current,\n setCurrent,\n isCompare,\n setIsCompare,\n toggleOff,\n isShortWeekNames,\n minDate,\n maxDate,\n momentMinDate,\n momentMaxDate,\n isDontLimitFuture,\n isListTop,\n mainId,\n testId,\n withMobileLogic,\n isDoNotPullOutListOfMainContainer,\n renderIntervals = ['today', 'yesterday', 'thisWeek', 'lastWeek', 'last7Days', 'last14Days', 'last30Days', 'thisMonth', 'lastMonth', 'last6Months', 'thisYear', 'lastYear', 'allTime'],\n } = props;\n const { isMobile } = useIsMobile();\n\n const boxRef = useRef<HTMLDivElement>();\n const { elemPosition } = useResize(boxRef);\n const [mobileChange, setMobileChange] = useState({});\n\n const openedPartClass = cn(\n 'date-range-input__opened-part',\n 'opened-part',\n { [`opened-part--${elemPosition}`]: elemPosition },\n { 'opened-part--top': isListTop },\n );\n const openedPartWrapperClass = cn('opened-part__wrapper', {\n 'opened-part__wrapper_right-position-once-element':\n isOptionsRight && (isCompact || isIntervalsHidden),\n });\n\n const filteredIntervals: { [key: string]: IIntervalItem } = renderIntervals\n ? Object.keys(intervals).filter(key => renderIntervals.includes(key)).reduce((result, key) => {\n return {\n ...result,\n [key]: intervals?.[key],\n }\n }, {})\n : intervals;\n\n const items = isCompact\n ? [...Object.keys(filteredIntervals)]\n : [...Object.keys(filteredIntervals), customKey];\n\n const [activeInterval, setActiveInterval] = useState<string>(\n actualValues?.intervalKey ?? '',\n );\n\n const handleItemClick = (item: string): void => {\n if (item !== customKey) {\n onChange({\n intervalKey: item,\n compare: isCompare,\n });\n setTimeout(() => toggleOff(), 0);\n }\n setCurrent(item);\n };\n\n const getSelectedMode = (newValues: { start: Moment | Date | string; end: Moment | Date | string; }): string => {\n const { start, end } = newValues;\n if (moment(start).get('hour') !== 0 || moment(end).get('hour') !== 0) {\n return customKey;\n }\n for (const [key, interval] of Object.entries(filteredIntervals)) {\n if (\n moment(start).isSame((interval as IIntervalItem).start())\n && moment(end).isSame((interval as IIntervalItem).end())\n ) {\n return key;\n }\n }\n return customKey;\n };\n\n const renderDatepicker = (): ReactElement => {\n return (\n <Datepicker\n mainId={mainId}\n testId={testId}\n className={cn('opened-part__date-picker')}\n buttonsTypes={buttonsTypes}\n values={actualValues}\n onChangeMobile={setMobileChange}\n onChange={(data) => {\n onChange({\n intervalKey: current,\n ...data,\n });\n toggleOff();\n }}\n getSelectedMode={getSelectedMode}\n onChangeInterval={val => setCurrent(val)}\n onChangeCompare={data => setIsCompare?.(data)}\n onCancel={toggleOff}\n isCompareHidden={isCompareHidden}\n limitRange={limitRange}\n setActiveInterval={setActiveInterval}\n isShortWeekNames={isShortWeekNames}\n minDate={minDate}\n maxDate={maxDate}\n momentMinDate={momentMinDate}\n momentMaxDate={momentMaxDate}\n isDontLimitFuture={isDontLimitFuture}\n withMobileLogic={withMobileLogic && isMobile}\n isDoNotPullOutListOfMainContainer={isDoNotPullOutListOfMainContainer}\n />\n );\n };\n\n const renderOpenedPart = (): JSX.Element => {\n return (\n <div className={openedPartClass} ref={boxRef as LegacyRef<HTMLDivElement>}>\n <div className={openedPartWrapperClass}>\n {!isIntervalsHidden && (\n <div className={cn('opened-part__intervals-list')}>\n {items.map((item, index) => {\n if (filteredIntervals[item]?.isHidden) return null;\n return (\n <SelectItem\n testId={testId}\n key={index}\n item={item}\n label={\n (txt?.labels && txt?.labels[item])\n || filteredIntervals[item]?.label\n || (item === customKey ? CUSTOM_INTERVAL_KEY_TEXT : item)\n }\n isActive={activeInterval === item}\n onItemClick={() => handleItemClick(item)}\n disabled={\n !!(item === customKey\n || (minDate\n && filteredIntervals[item]?.start?.()?.isBefore?.(momentMinDate)))\n }\n />\n );\n })}\n </div>\n )}\n {!isCompact && renderDatepicker()}\n </div>\n </div>\n );\n };\n\n const renderMobileOpenedPart = (): ReactNode => {\n return (\n <Modal\n zIndex={101}\n variant=\"title\"\n className=\"modal-fin date-picker-modal\"\n isOpen\n title=\"Select Interval\"\n onlyTitle\n confirmBtnLabel=\"Apply\"\n onConfirm={() => {\n onChange({\n intervalKey: current,\n ...mobileChange,\n });\n setMobileChange({});\n toggleOff();\n }}\n closeModal={() => {\n setMobileChange({});\n toggleOff();\n }}\n onDecline={() => {\n setMobileChange({});\n toggleOff();\n }}\n withMobileLogic={withMobileLogic}\n >\n <Dropdown\n label=\"Select Interval\"\n value={activeInterval}\n className=\"dropdown-fin\"\n onChange={v => handleItemClick(v.toString())}\n options={items\n ?.filter(item => !filteredIntervals[item]?.isHidden)\n ?.map((item) => {\n return {\n label: capitalized(\n (txt?.labels && txt?.labels[item])\n || filteredIntervals[item]?.label\n || (item === customKey ? CUSTOM_INTERVAL_KEY_TEXT : item),\n ),\n value: item,\n };\n })}\n withMobileLogic={withMobileLogic}\n sortAlphabetical={false}\n />\n {renderDatepicker()}\n </Modal>\n );\n };\n\n const getDateRangeContainer = (): HTMLElement | null => {\n return document.getElementById(dateRangeContainerId);\n };\n const renderDateRangeMobileContainer = (): JSX.Element => {\n const dateRangeContainer = getDateRangeContainer();\n\n if (!dateRangeContainer) return <></>;\n\n return createPortal(renderMobileOpenedPart(), dateRangeContainer);\n };\n\n return withMobileLogic && isMobile\n ? renderDateRangeMobileContainer()\n : renderOpenedPart();\n}\nexport default OpenedPart;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OpenedPart.js","names":[],"sources":["../../../../../../src/Atomic/FormElements/InputDateRange/components/OpenedPart.tsx"],"sourcesContent":["import type { Moment } from 'moment-timezone';\nimport type { LegacyRef, ReactElement, ReactNode } from 'react';\n\nimport type { IIntervalItem, IOpenedPartProps } from '../InputDateRange.interface';\nimport cn from 'classnames';\nimport moment from 'moment-timezone';\nimport React, { useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport useIsMobile from '../../../../Functions/useIsMobile/useIsMobile';\nimport { useResize } from '../../../../Functions/useResize';\n\nimport { capitalized } from '../../../../Functions/utils';\n\nimport Modal from '../../../UI/Modal/Modal';\nimport Dropdown from '../../Dropdown/Dropdown';\n\nimport {\n CUSTOM_INTERVAL_KEY_TEXT,\n CUSTOM_INTERVAL_KEY as customKey,\n INTERVALS as intervals,\n} from '../dependencies';\nimport Datepicker from './Datepicker';\nimport SelectItem from './SelectItem';\n\nconst OpenedPart: React.FC<IOpenedPartProps> = (props): ReactElement => {\n const {\n dateRangeContainerId,\n txt,\n buttonsTypes,\n actualValues,\n onChange = () => {},\n isCompact = false,\n isIntervalsHidden = false,\n isCompareHidden = false,\n limitRange,\n isOptionsRight,\n current,\n setCurrent,\n isCompare,\n setIsCompare,\n toggleOff,\n isShortWeekNames,\n minDate,\n maxDate,\n momentMinDate,\n momentMaxDate,\n isDontLimitFuture,\n isListTop,\n mainId,\n testId,\n withMobileLogic,\n isDoNotPullOutListOfMainContainer,\n renderIntervals = ['today', 'yesterday', 'thisWeek', 'lastWeek', 'last7Days', 'last14Days', 'last30Days', 'thisMonth', 'lastMonth', 'last6Months', 'thisYear', 'lastYear', 'allTime'],\n } = props;\n const { isMobile } = useIsMobile();\n\n const boxRef = useRef<HTMLDivElement>();\n const { elemPosition } = useResize(boxRef);\n const [mobileChange, setMobileChange] = useState({});\n\n const openedPartClass = cn(\n 'date-range-input__opened-part',\n 'opened-part',\n { [`opened-part--${elemPosition}`]: elemPosition },\n { 'opened-part--top': isListTop },\n );\n const openedPartWrapperClass = cn('opened-part__wrapper', {\n 'opened-part__wrapper_right-position-once-element':\n isOptionsRight && (isCompact || isIntervalsHidden),\n });\n\n const filteredIntervals: { [key: string]: IIntervalItem } = renderIntervals\n ? Object.keys(intervals).filter(key => renderIntervals.includes(key)).reduce((result, key) => {\n return {\n ...result,\n [key]: intervals?.[key],\n }\n }, {})\n : intervals;\n\n const items = isCompact\n ? [...Object.keys(filteredIntervals)]\n : [...Object.keys(filteredIntervals), customKey];\n\n const [activeInterval, setActiveInterval] = useState<string>(\n actualValues?.intervalKey ?? '',\n );\n\n const handleItemClick = (item: string): void => {\n if (item !== customKey) {\n onChange({\n intervalKey: item,\n compare: isCompare,\n });\n setTimeout(() => toggleOff(), 0);\n }\n setCurrent(item);\n };\n\n const getSelectedMode = (newValues: { start: Moment | Date | string; end: Moment | Date | string; }): string => {\n const { start, end } = newValues;\n if (moment(start).get('hour') !== 0 || moment(end).get('hour') !== 0) {\n return customKey;\n }\n for (const [key, interval] of Object.entries(filteredIntervals)) {\n if (\n moment(start).isSame((interval as IIntervalItem).start())\n && moment(end).isSame((interval as IIntervalItem).end())\n ) {\n return key;\n }\n }\n return customKey;\n };\n\n const renderDatepicker = (): ReactElement => {\n return (\n <Datepicker\n mainId={mainId}\n testId={testId}\n className={cn('opened-part__date-picker')}\n buttonsTypes={buttonsTypes}\n values={actualValues}\n onChangeMobile={setMobileChange}\n onChange={(data) => {\n onChange({\n intervalKey: current,\n ...data,\n });\n toggleOff();\n }}\n getSelectedMode={getSelectedMode}\n onChangeInterval={val => setCurrent(val)}\n onChangeCompare={data => setIsCompare?.(data)}\n onCancel={toggleOff}\n isCompareHidden={isCompareHidden}\n limitRange={limitRange}\n setActiveInterval={setActiveInterval}\n isShortWeekNames={isShortWeekNames}\n minDate={minDate}\n maxDate={maxDate}\n momentMinDate={momentMinDate}\n momentMaxDate={momentMaxDate}\n isDontLimitFuture={isDontLimitFuture}\n withMobileLogic={withMobileLogic && isMobile}\n isDoNotPullOutListOfMainContainer={isDoNotPullOutListOfMainContainer}\n />\n );\n };\n\n const renderOpenedPart = (): JSX.Element => {\n return (\n <div className={openedPartClass} ref={boxRef as LegacyRef<HTMLDivElement>}>\n <div className={openedPartWrapperClass}>\n {!isIntervalsHidden && (\n <div className={cn('opened-part__intervals-list')}>\n {items.map((item, index) => {\n if (filteredIntervals[item]?.isHidden) return null;\n return (\n <SelectItem\n testId={testId}\n key={index}\n item={item}\n label={\n (txt?.labels && txt?.labels[item])\n || filteredIntervals[item]?.label\n || (item === customKey ? CUSTOM_INTERVAL_KEY_TEXT : item)\n }\n isActive={activeInterval === item}\n onItemClick={() => handleItemClick(item)}\n disabled={\n !!(item === customKey\n || (minDate\n && filteredIntervals[item]?.start?.()?.isBefore?.(momentMinDate)))\n }\n />\n );\n })}\n </div>\n )}\n {!isCompact && renderDatepicker()}\n </div>\n </div>\n );\n };\n\n const renderMobileOpenedPart = (): ReactNode => {\n return (\n <Modal\n zIndex={101}\n variant=\"title\"\n className=\"modal-fin date-picker-modal\"\n isOpen\n title=\"Select Interval\"\n onlyTitle\n confirmBtnLabel=\"Apply\"\n onConfirm={() => {\n onChange({\n intervalKey: current,\n ...mobileChange,\n });\n setMobileChange({});\n toggleOff();\n }}\n closeModal={() => {\n setMobileChange({});\n toggleOff();\n }}\n onDecline={() => {\n setMobileChange({});\n toggleOff();\n }}\n withMobileLogic={withMobileLogic}\n >\n <Dropdown\n label=\"Select Interval\"\n value={activeInterval}\n className=\"dropdown-fin\"\n onChange={v => handleItemClick(v.toString())}\n options={items\n ?.filter(item => !filteredIntervals[item]?.isHidden)\n ?.map((item) => {\n return {\n label: capitalized(\n (txt?.labels && txt?.labels[item])\n || filteredIntervals[item]?.label\n || (item === customKey ? CUSTOM_INTERVAL_KEY_TEXT : item),\n ),\n value: item,\n };\n })}\n withMobileLogic={withMobileLogic}\n sortAlphabetical={false}\n />\n {renderDatepicker()}\n </Modal>\n );\n };\n\n const getDateRangeContainer = (): HTMLElement | null => {\n return document.getElementById(dateRangeContainerId);\n };\n const renderDateRangeMobileContainer = (): JSX.Element => {\n const dateRangeContainer = getDateRangeContainer();\n\n if (!dateRangeContainer) return <></>;\n\n return createPortal(renderMobileOpenedPart(), dateRangeContainer);\n };\n\n return withMobileLogic && isMobile\n ? renderDateRangeMobileContainer()\n : renderOpenedPart();\n}\nexport default OpenedPart;\n"],"mappings":";;;;;;;;;;;;;;AAyBA,IAAM,cAA0C,UAAwB;CACtE,MAAM,EACJ,sBACA,KACA,cACA,cACA,iBAAiB,CAAC,GAClB,YAAY,OACZ,oBAAoB,OACpB,kBAAkB,OAClB,YACA,gBACA,SACA,YACA,WACA,cACA,WACA,kBACA,SACA,SACA,eACA,eACA,mBACA,WACA,QACA,QACA,iBACA,mCACA,kBAAkB;EAAC;EAAS;EAAa;EAAY;EAAY;EAAa;EAAc;EAAc;EAAa;EAAa;EAAe;EAAY;EAAY;CAAS,MAClL;CACJ,MAAM,EAAE,aAAa,YAAY;CAEjC,MAAM,SAAS,OAAuB;CACtC,MAAM,EAAE,iBAAiB,UAAU,MAAM;CACzC,MAAM,CAAC,cAAc,mBAAmB,SAAS,CAAC,CAAC;CAEnD,MAAM,kBAAkB,GACtB,iCACA,eACA,GAAG,gBAAgB,iBAAiB,aAAa,GACjD,EAAE,oBAAoB,UAAU,CAClC;CACA,MAAM,yBAAyB,GAAG,wBAAwB,EACxD,oDACE,mBAAmB,aAAa,mBACpC,CAAC;CAED,MAAM,oBAAsD,kBACxD,OAAO,KAAK,SAAS,CAAC,CAAC,QAAO,QAAO,gBAAgB,SAAS,GAAG,CAAC,CAAC,CAAC,QAAQ,QAAQ,QAAQ;EAC1F,OAAO;GACL,GAAG;IACF,MAAM,YAAY;EACrB;CACF,GAAG,CAAC,CAAC,IACL;CAEJ,MAAM,QAAQ,YACV,CAAC,GAAG,OAAO,KAAK,iBAAiB,CAAC,IAClC,CAAC,GAAG,OAAO,KAAK,iBAAiB,GAAG,mBAAS;CAEjD,MAAM,CAAC,gBAAgB,qBAAqB,SAC1C,cAAc,eAAe,EAC/B;CAEA,MAAM,mBAAmB,SAAuB;EAC9C,IAAI,SAAA,cAAoB;GACtB,SAAS;IACP,aAAa;IACb,SAAS;GACX,CAAC;GACD,iBAAiB,UAAU,GAAG,CAAC;EACjC;EACA,WAAW,IAAI;CACjB;CAEA,MAAM,mBAAmB,cAAuF;EAC9G,MAAM,EAAE,OAAO,QAAQ;EACvB,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,MAAM,MAAM,KAAK,OAAO,GAAG,CAAC,CAAC,IAAI,MAAM,MAAM,GACjE,OAAO;EAET,KAAK,MAAM,CAAC,KAAK,aAAa,OAAO,QAAQ,iBAAiB,GAC5D,IACE,OAAO,KAAK,CAAC,CAAC,OAAQ,SAA2B,MAAM,CAAC,KACrD,OAAO,GAAG,CAAC,CAAC,OAAQ,SAA2B,IAAI,CAAC,GAEvD,OAAO;EAGX,OAAO;CACT;CAEA,MAAM,yBAAuC;EAC3C,OACE,oBAAC,YAAD;GACU;GACA;GACR,WAAW,GAAG,0BAA0B;GAC1B;GACd,QAAQ;GACR,gBAAgB;GAChB,WAAW,SAAS;IAClB,SAAS;KACP,aAAa;KACb,GAAG;IACL,CAAC;IACD,UAAU;GACZ;GACiB;GACjB,mBAAkB,QAAO,WAAW,GAAG;GACvC,kBAAiB,SAAQ,eAAe,IAAI;GAC5C,UAAU;GACO;GACL;GACO;GACD;GACT;GACA;GACM;GACA;GACI;GACnB,iBAAiB,mBAAmB;GACD;EACpC,CAAA;CAEL;CAEA,MAAM,yBAAsC;EAC1C,OACE,oBAAC,OAAD;GAAK,WAAW;GAAiB,KAAK;GACpC,UAAA,qBAAC,OAAD;IAAK,WAAW;IAAhB,UAAA,CACG,CAAC,qBACA,oBAAC,OAAD;KAAK,WAAW,GAAG,6BAA6B;KAC7C,UAAA,MAAM,KAAK,MAAM,UAAU;MAC1B,IAAI,kBAAkB,KAAK,EAAE,UAAU,OAAO;MAC9C,OACE,oBAAC,YAAD;OACU;OAEF;OACN,OACG,KAAK,UAAU,KAAK,OAAO,SACzB,kBAAkB,KAAK,EAAE,UACxB,SAAA,eAAA,gBAAgD;OAEtD,UAAU,mBAAmB;OAC7B,mBAAmB,gBAAgB,IAAI;OACvC,UACE,CAAC,EAAE,SAAA,gBACG,WACC,kBAAkB,KAAK,EAAE,QAAQ,CAAC,EAAE,WAAW,aAAa;MAEtE,GAdM,KAcN;KAEL,CAAC;IACE,CAAA,GAEN,CAAC,aAAa,iBAAiB,CAC7B;;EACF,CAAA;CAET;CAEA,MAAM,+BAA0C;EAC9C,OACE,qBAAC,OAAD;GACE,QAAQ;GACR,SAAQ;GACR,WAAU;GACV,QAAA;GACA,OAAM;GACN,WAAA;GACA,iBAAgB;GAChB,iBAAiB;IACf,SAAS;KACP,aAAa;KACb,GAAG;IACL,CAAC;IACD,gBAAgB,CAAC,CAAC;IAClB,UAAU;GACZ;GACA,kBAAkB;IAChB,gBAAgB,CAAC,CAAC;IAClB,UAAU;GACZ;GACA,iBAAiB;IACf,gBAAgB,CAAC,CAAC;IAClB,UAAU;GACZ;GACiB;GAxBnB,UAAA,CA0BE,oBAAC,UAAD;IACE,OAAM;IACN,OAAO;IACP,WAAU;IACV,WAAU,MAAK,gBAAgB,EAAE,SAAS,CAAC;IAC3C,SAAS,OACL,QAAO,SAAQ,CAAC,kBAAkB,KAAK,EAAE,QAAQ,CAAC,EAClD,KAAK,SAAS;KACd,OAAO;MACL,OAAO,YACJ,KAAK,UAAU,KAAK,OAAO,SACzB,kBAAkB,KAAK,EAAE,UACxB,SAAA,eAAA,gBAAgD,KACtD;MACA,OAAO;KACT;IACF,CAAC;IACc;IACjB,kBAAkB;GACnB,CAAA,GACA,iBAAiB,CACb;;CAEX;CAEA,MAAM,8BAAkD;EACtD,OAAO,SAAS,eAAe,oBAAoB;CACrD;CACA,MAAM,uCAAoD;EACxD,MAAM,qBAAqB,sBAAsB;EAEjD,IAAI,CAAC,oBAAoB,OAAO,oBAAA,UAAA,CAAI,CAAA;EAEpC,OAAO,aAAa,uBAAuB,GAAG,kBAAkB;CAClE;CAEA,OAAO,mBAAmB,WACtB,+BAA+B,IAC/B,iBAAiB;AACvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectItem.js","names":[],"sources":["../../../../../../src/Atomic/FormElements/InputDateRange/components/SelectItem.tsx"],"sourcesContent":["import type { ISelectItemProps } from '../InputDateRange.interface';\n\nimport cn from 'classnames';\nimport React from 'react';\nimport { Check2 } from '../../../../Molecular/CustomIcons';\n\nconst SelectItem: React.FC<ISelectItemProps> = ({\n item,\n label,\n isActive,\n onItemClick,\n onMouseEnter,\n disabled,\n testId = 'select-item',\n}) => {\n return (\n <div\n className={cn('opened-part__intervals-item', {\n 'opened-part__intervals-item_active': isActive,\n 'opened-part__intervals-item_disabled': disabled,\n })}\n onClick={onItemClick}\n onMouseEnter={onMouseEnter}\n data-item={item}\n data-testid={testId}\n >\n {isActive && (\n <Check2 className={cn('opened-part__intervals-item-icon-active')} />\n )}\n {label}\n </div>\n )\n}\nexport default SelectItem;\n"],"mappings":";;;;;AAMA,IAAM,cAA0C,EAC9C,MACA,OACA,UACA,aACA,cACA,UACA,SAAS,oBACL;CACJ,OACE,qBAAC,OAAD;EACE,WAAW,GAAG,+BAA+B;GAC3C,sCAAsC;GACtC,wCAAwC;EAC1C,CAAC;EACD,SAAS;EACK;EACd,aAAW;EACX,eAAa;
|
|
1
|
+
{"version":3,"file":"SelectItem.js","names":[],"sources":["../../../../../../src/Atomic/FormElements/InputDateRange/components/SelectItem.tsx"],"sourcesContent":["import type { ISelectItemProps } from '../InputDateRange.interface';\n\nimport cn from 'classnames';\nimport React from 'react';\nimport { Check2 } from '../../../../Molecular/CustomIcons';\n\nconst SelectItem: React.FC<ISelectItemProps> = ({\n item,\n label,\n isActive,\n onItemClick,\n onMouseEnter,\n disabled,\n testId = 'select-item',\n}) => {\n return (\n <div\n className={cn('opened-part__intervals-item', {\n 'opened-part__intervals-item_active': isActive,\n 'opened-part__intervals-item_disabled': disabled,\n })}\n onClick={onItemClick}\n onMouseEnter={onMouseEnter}\n data-item={item}\n data-testid={testId}\n >\n {isActive && (\n <Check2 className={cn('opened-part__intervals-item-icon-active')} />\n )}\n {label}\n </div>\n )\n}\nexport default SelectItem;\n"],"mappings":";;;;;AAMA,IAAM,cAA0C,EAC9C,MACA,OACA,UACA,aACA,cACA,UACA,SAAS,oBACL;CACJ,OACE,qBAAC,OAAD;EACE,WAAW,GAAG,+BAA+B;GAC3C,sCAAsC;GACtC,wCAAwC;EAC1C,CAAC;EACD,SAAS;EACK;EACd,aAAW;EACX,eAAa;EARf,UAAA,CAUG,YACC,oBAAC,QAAD,EAAQ,WAAW,GAAG,yCAAyC,EAAI,CAAA,GAEpE,KACE;;AAET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputLink.js","names":[],"sources":["../../../../../src/Atomic/FormElements/InputLink/InputLink.tsx"],"sourcesContent":["import type { ChangeEvent } from 'react';\nimport type { IInputLinkProps } from './InputLink.interface';\n\nimport cn from 'classnames';\nimport React, { useRef } from 'react';\n\nimport { ExternalLink } from 'react-feather';\nimport {\n formatToOnlyASCIICodeText,\n formatToReplaceAllWhiteSpace,\n} from '../../../Functions/fieldValueFormatters';\n\nimport Input from '../Input/Input';\n\nimport './InputLink.scss';\n\nconst InputLink: React.FC<IInputLinkProps> = ({\n icon,\n value,\n withHttpsPrefix = {\n isTurnOn: true,\n isSecure: true,\n },\n onRedirect,\n testId = '',\n onChange,\n withDelete,\n ...args\n}) => {\n const { isSecure, isTurnOn: isPrefix } = withHttpsPrefix || {};\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handle = {\n redirect: () => {\n window.open(\n `http${isSecure ? 's' : ''}://${value.replace(/https?:\\/\\/?/g, '')}`,\n '_blank',\n );\n onRedirect?.();\n },\n change: (e: ChangeEvent<HTMLInputElement> | string) => {\n let inputValue\n = typeof e === 'string'\n ? formatToOnlyASCIICodeText(e)\n : formatToOnlyASCIICodeText(e.target.value);\n\n let cursorPosition = inputRef.current?.selectionStart || 0;\n\n if ((isSecure && cursorPosition <= 8) || (!isSecure && cursorPosition <= 7)) {\n cursorPosition++;\n }\n\n setTimeout(() => {\n inputRef.current?.setSelectionRange(cursorPosition, cursorPosition);\n }, 0);\n\n if (isPrefix) {\n inputValue = formatToReplaceAllWhiteSpace(\n inputValue.replace(/https?:\\/\\/?/g, ''),\n );\n }\n\n onChange?.(inputValue.toString());\n },\n };\n\n return (\n <div\n className={cn('inputLink', {\n 'inputLink--withDelete': withDelete && value && value.length > 0,\n })}\n >\n {isPrefix && (\n <div className={cn('inputColor__prefix')}>\n {isSecure && value?.length > 0 && 'https://'}\n {!isSecure && value?.length > 0 && 'http://'}\n </div>\n )}\n <Input\n {...args}\n withDelete={withDelete}\n value={value}\n onChange={handle.change}\n testId={`inputLink--key-${testId}`}\n type=\"text\"\n ref={inputRef}\n className={cn({\n 'prefix-gutter--secured': isPrefix && isSecure && value?.length > 0,\n 'prefix-gutter--no-secured': isPrefix && !isSecure && value?.length > 0,\n })}\n />\n\n <div\n onClick={handle.redirect}\n className={cn('inputLink__icon pointer')}\n data-testid={`inputLink--redirect-icon-${testId}`}\n >\n {value && (icon || <ExternalLink />)}\n </div>\n </div>\n );\n};\n\nexport default InputLink;\n"],"mappings":";;;;;;;;AAgBA,IAAM,aAAwC,EAC5C,MACA,OACA,kBAAkB;CAChB,UAAU;CACV,UAAU;AACZ,GACA,YACA,SAAS,IACT,UACA,YACA,GAAG,WACC;CACJ,MAAM,EAAE,UAAU,UAAU,aAAa,mBAAmB,CAAC;CAC7D,MAAM,WAAW,OAAyB,IAAI;CAE9C,MAAM,SAAS;EACb,gBAAgB;GACd,OAAO,KACL,OAAO,WAAW,MAAM,GAAG,KAAK,MAAM,QAAQ,iBAAiB,EAAE,KACjE,QACF;GACA,aAAa;EACf;EACA,SAAS,MAA8C;GACrD,IAAI,aACA,OAAO,MAAM,WACX,0BAA0B,CAAC,IAC3B,0BAA0B,EAAE,OAAO,KAAK;GAE9C,IAAI,iBAAiB,SAAS,SAAS,kBAAkB;GAEzD,IAAK,YAAY,kBAAkB,KAAO,CAAC,YAAY,kBAAkB,GACvE;GAGF,iBAAiB;IACf,SAAS,SAAS,kBAAkB,gBAAgB,cAAc;GACpE,GAAG,CAAC;GAEJ,IAAI,UACF,aAAa,6BACX,WAAW,QAAQ,iBAAiB,EAAE,CACxC;GAGF,WAAW,WAAW,SAAS,CAAC;EAClC;CACF;CAEA,OACE,qBAAC,OAAD;EACE,WAAW,GAAG,aAAa,EACzB,yBAAyB,cAAc,SAAS,MAAM,SAAS,EACjE,CAAC;
|
|
1
|
+
{"version":3,"file":"InputLink.js","names":[],"sources":["../../../../../src/Atomic/FormElements/InputLink/InputLink.tsx"],"sourcesContent":["import type { ChangeEvent } from 'react';\nimport type { IInputLinkProps } from './InputLink.interface';\n\nimport cn from 'classnames';\nimport React, { useRef } from 'react';\n\nimport { ExternalLink } from 'react-feather';\nimport {\n formatToOnlyASCIICodeText,\n formatToReplaceAllWhiteSpace,\n} from '../../../Functions/fieldValueFormatters';\n\nimport Input from '../Input/Input';\n\nimport './InputLink.scss';\n\nconst InputLink: React.FC<IInputLinkProps> = ({\n icon,\n value,\n withHttpsPrefix = {\n isTurnOn: true,\n isSecure: true,\n },\n onRedirect,\n testId = '',\n onChange,\n withDelete,\n ...args\n}) => {\n const { isSecure, isTurnOn: isPrefix } = withHttpsPrefix || {};\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handle = {\n redirect: () => {\n window.open(\n `http${isSecure ? 's' : ''}://${value.replace(/https?:\\/\\/?/g, '')}`,\n '_blank',\n );\n onRedirect?.();\n },\n change: (e: ChangeEvent<HTMLInputElement> | string) => {\n let inputValue\n = typeof e === 'string'\n ? formatToOnlyASCIICodeText(e)\n : formatToOnlyASCIICodeText(e.target.value);\n\n let cursorPosition = inputRef.current?.selectionStart || 0;\n\n if ((isSecure && cursorPosition <= 8) || (!isSecure && cursorPosition <= 7)) {\n cursorPosition++;\n }\n\n setTimeout(() => {\n inputRef.current?.setSelectionRange(cursorPosition, cursorPosition);\n }, 0);\n\n if (isPrefix) {\n inputValue = formatToReplaceAllWhiteSpace(\n inputValue.replace(/https?:\\/\\/?/g, ''),\n );\n }\n\n onChange?.(inputValue.toString());\n },\n };\n\n return (\n <div\n className={cn('inputLink', {\n 'inputLink--withDelete': withDelete && value && value.length > 0,\n })}\n >\n {isPrefix && (\n <div className={cn('inputColor__prefix')}>\n {isSecure && value?.length > 0 && 'https://'}\n {!isSecure && value?.length > 0 && 'http://'}\n </div>\n )}\n <Input\n {...args}\n withDelete={withDelete}\n value={value}\n onChange={handle.change}\n testId={`inputLink--key-${testId}`}\n type=\"text\"\n ref={inputRef}\n className={cn({\n 'prefix-gutter--secured': isPrefix && isSecure && value?.length > 0,\n 'prefix-gutter--no-secured': isPrefix && !isSecure && value?.length > 0,\n })}\n />\n\n <div\n onClick={handle.redirect}\n className={cn('inputLink__icon pointer')}\n data-testid={`inputLink--redirect-icon-${testId}`}\n >\n {value && (icon || <ExternalLink />)}\n </div>\n </div>\n );\n};\n\nexport default InputLink;\n"],"mappings":";;;;;;;;AAgBA,IAAM,aAAwC,EAC5C,MACA,OACA,kBAAkB;CAChB,UAAU;CACV,UAAU;AACZ,GACA,YACA,SAAS,IACT,UACA,YACA,GAAG,WACC;CACJ,MAAM,EAAE,UAAU,UAAU,aAAa,mBAAmB,CAAC;CAC7D,MAAM,WAAW,OAAyB,IAAI;CAE9C,MAAM,SAAS;EACb,gBAAgB;GACd,OAAO,KACL,OAAO,WAAW,MAAM,GAAG,KAAK,MAAM,QAAQ,iBAAiB,EAAE,KACjE,QACF;GACA,aAAa;EACf;EACA,SAAS,MAA8C;GACrD,IAAI,aACA,OAAO,MAAM,WACX,0BAA0B,CAAC,IAC3B,0BAA0B,EAAE,OAAO,KAAK;GAE9C,IAAI,iBAAiB,SAAS,SAAS,kBAAkB;GAEzD,IAAK,YAAY,kBAAkB,KAAO,CAAC,YAAY,kBAAkB,GACvE;GAGF,iBAAiB;IACf,SAAS,SAAS,kBAAkB,gBAAgB,cAAc;GACpE,GAAG,CAAC;GAEJ,IAAI,UACF,aAAa,6BACX,WAAW,QAAQ,iBAAiB,EAAE,CACxC;GAGF,WAAW,WAAW,SAAS,CAAC;EAClC;CACF;CAEA,OACE,qBAAC,OAAD;EACE,WAAW,GAAG,aAAa,EACzB,yBAAyB,cAAc,SAAS,MAAM,SAAS,EACjE,CAAC;EAHH,UAAA;GAKG,YACC,qBAAC,OAAD;IAAK,WAAW,GAAG,oBAAoB;IAAvC,UAAA,CACG,YAAY,OAAO,SAAS,KAAK,YACjC,CAAC,YAAY,OAAO,SAAS,KAAK,SAChC;;GAEP,oBAAC,OAAD;IACE,GAAI;IACQ;IACL;IACP,UAAU,OAAO;IACjB,QAAQ,kBAAkB;IAC1B,MAAK;IACL,KAAK;IACL,WAAW,GAAG;KACZ,0BAA0B,YAAY,YAAY,OAAO,SAAS;KAClE,6BAA6B,YAAY,CAAC,YAAY,OAAO,SAAS;IACxE,CAAC;GACF,CAAA;GAED,oBAAC,OAAD;IACE,SAAS,OAAO;IAChB,WAAW,GAAG,yBAAyB;IACvC,eAAa,4BAA4B;IAExC,UAAA,UAAU,QAAQ,oBAAC,cAAD,CAAe,CAAA;GAC/B,CAAA;EACF;;AAET"}
|
|
@@ -121,9 +121,10 @@ var InputMask3 = ({ autocomplete = "off", maskPattern, maskPatternPlaceholder, m
|
|
|
121
121
|
let isValid = true;
|
|
122
122
|
const lastTyppedCharIndex = innerValue.reduce((result, { char, isSpecialSymbol }, i) => char !== "" && !isSpecialSymbol ? i : result, 0);
|
|
123
123
|
const value = innerValue.reduce((result, { char, isSpecialSymbol }, i) => {
|
|
124
|
-
if (char !== "" && isValid && (!noLastTyppedCharIndexCheck ? i <= lastTyppedCharIndex : true))
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
if (char !== "" && isValid && (!noLastTyppedCharIndexCheck ? i <= lastTyppedCharIndex : true)) {
|
|
125
|
+
if (isValueHidden && !isSpecialSymbol && !noHide && (maxHiddenIndex === -1 || i <= maxHiddenIndex)) result += hiddenChar;
|
|
126
|
+
else result += char;
|
|
127
|
+
} else isValid = false;
|
|
127
128
|
return result;
|
|
128
129
|
}, "");
|
|
129
130
|
if (getClearInnerValueAsString(value)?.length === 0) return "";
|
|
@@ -197,17 +198,18 @@ var InputMask3 = ({ autocomplete = "off", maskPattern, maskPatternPlaceholder, m
|
|
|
197
198
|
setValue(value);
|
|
198
199
|
const caretOffset = value.length - (caretPos ?? 0);
|
|
199
200
|
if (!value.lastIndexEqualsTo((caretPos ?? 0) - 1)) {
|
|
200
|
-
if (value.longerThan(inputValue))
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
201
|
+
if (value.longerThan(inputValue)) {
|
|
202
|
+
if (!isValidChar({
|
|
203
|
+
char,
|
|
204
|
+
i: (caretPos ?? 0) - 1
|
|
205
|
+
})) {
|
|
206
|
+
disableDefaultBehavior(e);
|
|
207
|
+
setCaret((caretPos ?? 0) - 1);
|
|
208
|
+
} else {
|
|
209
|
+
const newCaretPos = value.length - caretOffset;
|
|
210
|
+
setCaret(isSpecialSymbol(newCaretPos) ? newCaretPos + 1 : newCaretPos);
|
|
211
|
+
}
|
|
212
|
+
} else if (inputValue.longerThan(value)) switch (getKeyDown()) {
|
|
211
213
|
case KEYBOARD_KEY_CODES.Backspace:
|
|
212
214
|
if (isSpecialSymbol(caretPos ?? 0)) disableDefaultBehavior(e);
|
|
213
215
|
setCaret(caretPos ?? 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputMask3.js","names":[],"sources":["../../../../../src/Atomic/FormElements/InputMask3/InputMask3.tsx"],"sourcesContent":["/* eslint-disable react-web-api/no-leaked-timeout */\n/* eslint-disable ts/no-use-before-define */\nimport type { KeyboardEventHandler, LegacyRef, MouseEventHandler, ReactElement, ReactNode } from 'react';\n\nimport type { IInputMask3CharObj, IInputMask3Props } from './InputMask3.interface';\nimport cn from 'classnames';\nimport React, { createRef, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { Eye, EyeOff, X } from 'react-feather';\nimport { KEYBOARD_KEY_CODES as KEY_CODES } from '../../../Constants/index.constants';\nimport { disableDefaultBehavior } from '../../../Functions/utils/disableDefaultBehavior/disableDefaultBehavior';\n\nimport Spinner from '../../Layout/Spinner/Spinner';\n\nimport Hint from '../../UI/Hint/Hint';\nimport {\n DEFAULT_ERRORS,\n DIGIT_MASK_CHAR,\n LOWERCASE_LETTER_MASK_CHAR,\n SPACE_CHAR,\n UPPERCASE_LETTER_MASK_CHAR,\n} from './config';\nimport {\n isDigit,\n isDigitMaskChar,\n isLetter,\n isLetterMaskChar,\n isLowerCaseLetter,\n isUpperCaseLetter,\n} from './functions';\nimport './InputMask3.scss';\n\nconst InputMask3: React.FC<IInputMask3Props> = ({\n autocomplete = 'off',\n maskPattern,\n maskPatternPlaceholder,\n maskPlaceholder,\n maskDigitPlaceholder,\n maskLetterPlaceholder,\n usePatternPlaceholder,\n\n maxEditableIndex = -1,\n\n isClearable,\n isCaseSensitive,\n adaptTextCase,\n isUseAutoSelect = true,\n isLoading = false,\n\n // Включает/отключает режим скрытия в принциепе.\n withHiddenMode = false,\n // Символ которым скрывааеются символы\n hiddenChar = '*',\n // Индекс последнего скрываемогосимвола\n // Индекс нужно передавать с УЧЕТОМ не значащих символов маски,\n // при этом не значащие символы скрываться НЕ будут\n maxHiddenIndex = -1,\n // Инициализационнное значение положения \"скрыть\" (если НЕ управляется сверху)\n isValueHiddenDefault = false,\n\n // ? Если передана как булева, то режим скрытия управляется ей, здешний триггер (глазик) НЕ рендерится\n // ? Если НЕ передана ка булева, то режим скрытия обеспечиватся своим внутренним стором, здешний триггер (глазик) рендерится\n isHide, // булева пропа для управления сверху\n\n icon,\n showIcon,\n isIconLeft,\n isIconRight,\n value,\n blinkErrors = true,\n blinkDuration = 100,\n showErrors = false,\n\n className = '',\n errors: customErrors = DEFAULT_ERRORS,\n error: customError = '',\n\n onChange: onChangeProp,\n onFocus: onFocusProp,\n onBlur: onBlurProp,\n onKeyDown: onKeyDownProp,\n onFilled: onFilledProp,\n\n showHint = false,\n hintText = '',\n hintClassName = '',\n isHintRight = true,\n isHintLeft = false,\n hintPosition = 'right',\n\n hideMaskOnBlur = true,\n returnMaskedValue = false,\n\n name,\n fieldKey,\n id,\n disabled,\n testId = 'input-mask',\n\n attributesOfNativeInput = {},\n}) => {\n const errors = {\n ...DEFAULT_ERRORS,\n ...customErrors,\n };\n\n if (maxEditableIndex === -1) maxEditableIndex = maskPattern?.length ?? 0;\n\n const [isMaskRendered, setMaskRendered] = useState(false);\n const [isFocused, setFocused] = useState(false);\n const [isInitValue, setIsInitValue] = useState(false);\n const [selectedLength, setSelectedLength] = useState(0);\n // ? Если управляется сверху, то инициируемся текущим внешним значением\n const [isValueHidden, setIsValueHidden] = useState(\n typeof isHide === 'boolean' ? isHide : isValueHiddenDefault,\n );\n const [isHiddenLogicInit, setIsHiddenLogicInit] = useState(false);\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const keyDownRef = useRef<null | number>(null);\n const setKeyDown = (keyCode: number | null): number | null => (keyDownRef.current = keyCode);\n const getKeyDown = (): number => (keyDownRef.current ?? 0) as number;\n\n const setCaret = (caret: number): void => {\n if (caret < 0) caret = 0;\n const input = inputRef.current;\n if (input) setTimeout(() => input.setSelectionRange(caret, caret), 0);\n };\n\n // ERRORS MANAGEMENT FUNCTIONS | START //\n const [isError, setError] = useState(false);\n const [blinkError, setBlinkError] = useState(false);\n\n const [errorMessage, setErrorMessage] = useState(errors.default);\n const clearErrorMessage = (): void => setErrorMessage(errors.default);\n // ERRORS MANAGEMENT FUNCTIONS | END //\n\n // INNER VALUE MANAGEMENT FUNCTIONS | START //\n const [innerValue, setInnerValue] = useState<IInputMask3CharObj[]>([]);\n\n const prevValueRef = useRef<string[]>([]);\n\n const addInnerValueChar = ({ char, data = {} }: { char: string, data: object }): void => {\n setInnerValue((state) => {\n const stateCopy = [...state];\n const charObj = getCharObj(char, data);\n\n stateCopy.push(charObj);\n\n return stateCopy;\n });\n };\n const updateInnerValueChar = ({ char = null }: { char: string | null }, i: number): void => {\n setInnerValue((state) => {\n if (!state[i]) return state;\n\n const stateCopy = [...state];\n\n if (!stateCopy[i].isSpecialSymbol && char !== null)\n stateCopy[i].char = char;\n\n return stateCopy;\n });\n };\n const resetInnerValue = (): void => {\n setInnerValue(innerValue =>\n innerValue.map((item) => {\n if (!item.isSpecialSymbol && item.char !== null) item.char = '';\n return item;\n }),\n );\n };\n const setValue = (value?: null | string | number, disableErrors = true): void => {\n value = value === null || value === undefined ? '' : value.toString();\n\n resetInnerValue();\n const staticLength = maskPattern.length - maxEditableIndex;\n\n if (value.length > maxEditableIndex)\n value = value.slice(0, value.length - staticLength);\n else if (maxEditableIndex !== maskPattern?.length - 1)\n value = value.slice(0, maxEditableIndex);\n let valueCharIndex = 0;\n setInnerValue((innerValue) => {\n const newValue = innerValue.map((item, i) => {\n const { isSpecialSymbol } = item;\n if (isSpecialSymbol) return item;\n let char = value[valueCharIndex];\n let whileLimit = maskPattern?.length || 0;\n\n while (\n whileLimit\n && (isSpecialSymbolChar({ char: value[valueCharIndex] })\n || !isValidChar({ char, i, disableErrors: true }))\n ) {\n whileLimit--;\n char = value[++valueCharIndex];\n }\n\n // If Valid\n if (isValidChar({ char, i, disableErrors })) {\n item.char = char;\n }\n\n ++valueCharIndex;\n\n return item;\n });\n\n return newValue;\n });\n };\n // INNER VALUE MANAGEMENT FUNCTIONS | END //\n\n // GETTERS | START //\n const getCharObj = (char: string, data = {}): IInputMask3CharObj => {\n const isSpecialSymbol = isSpecialSymbolChar({ char });\n const isSpecialSymbolMask = isSpecialSymbolMaskChar({ char });\n\n if (char === ' ') char = SPACE_CHAR;\n\n return {\n char: isSpecialSymbolMask ? char : '',\n maskChar: char,\n isSpecialSymbol: isSpecialSymbolMask,\n isCharSymbol: !isSpecialSymbol && char !== '' && isSpecialSymbolMask,\n ref: createRef(),\n ...data,\n };\n };\n const getCharByIndex = (i: number): IInputMask3CharObj | undefined => {\n return innerValue[i] ? { ...innerValue[i] } : undefined;\n };\n const getMaskCharByIndex = (i: number): string | undefined => {\n return innerValue[i]?.maskChar || undefined;\n };\n const getPlaceholderCharByIndex = (i: number): string | undefined => {\n const { maskChar } = getCharByIndex(i) as IInputMask3CharObj;\n\n if (usePatternPlaceholder) {\n return maskPatternPlaceholder?.[i] || maskPlaceholder;\n }\n if (isDigitMaskChar(maskChar) && maskDigitPlaceholder)\n return maskDigitPlaceholder;\n if (isLetterMaskChar(maskChar) && maskLetterPlaceholder)\n return maskLetterPlaceholder;\n return maskPlaceholder;\n };\n const getInputValue = ({\n noLastTyppedCharIndexCheck = false,\n noHide = false,\n } = {}): string => {\n let isValid = true;\n\n const lastTyppedCharIndex = innerValue.reduce(\n (result, { char, isSpecialSymbol }, i) =>\n char !== '' && !isSpecialSymbol ? i : result,\n 0,\n );\n\n const value = innerValue.reduce((result, { char, isSpecialSymbol }, i) => {\n if (\n char !== ''\n && isValid\n && (!noLastTyppedCharIndexCheck ? i <= lastTyppedCharIndex : true)\n ) {\n if (\n isValueHidden\n && !isSpecialSymbol\n && !noHide\n && (maxHiddenIndex === -1 || i <= maxHiddenIndex)\n ) {\n result += hiddenChar;\n }\n else {\n result += char;\n }\n }\n else {\n isValid = false;\n }\n\n return result;\n }, '');\n\n if (getClearInnerValueAsString(value)?.length === 0) return '';\n\n return value;\n };\n const getClearInnerValueAsString = (valueProp?: string): string => {\n const symbolsInfo = innerValue?.map(\n ({ isSpecialSymbol, isCharSymbol }) => ({\n isSpecialSymbol,\n isCharSymbol,\n }),\n );\n const clearValue = (\n valueProp\n ?? getInputValue({ noLastTyppedCharIndexCheck: true, noHide: true })\n )\n ?.split('')\n ?.reduce((resultStr, symbol, i) => {\n if (!symbolsInfo[i].isSpecialSymbol || symbolsInfo[i].isCharSymbol)\n resultStr += symbol;\n return resultStr;\n }, '');\n\n return clearValue;\n };\n const inputValue = useMemo(getInputValue, [innerValue, isValueHidden]);\n // GETTERS | END //\n\n // CHECKERS | START //\n const isValidChar = ({ char: key, i, disableErrors = false }: { char: string, i: number, disableErrors?: boolean }): boolean => {\n const maskChar = getMaskCharByIndex(i);\n\n switch (maskChar) {\n case DIGIT_MASK_CHAR:\n if (!isDigit(key)) {\n if (!disableErrors) {\n setErrorMessage(errors.onlyDigit);\n }\n return false;\n }\n break;\n\n case UPPERCASE_LETTER_MASK_CHAR:\n if (adaptTextCase) key = key.toUpperCase();\n\n if (!isLetter(key) && !isCaseSensitive) {\n if (!disableErrors) setErrorMessage(errors.onlyLetter);\n return false;\n }\n\n if (isCaseSensitive && !isUpperCaseLetter(key)) {\n if (!disableErrors) setErrorMessage(errors.onlyUpperCase);\n return false;\n }\n break;\n case LOWERCASE_LETTER_MASK_CHAR:\n if (adaptTextCase) key = key.toLowerCase();\n\n if (!isLetter(key) && !isCaseSensitive) {\n if (!disableErrors) setErrorMessage(errors.onlyLetter);\n return false;\n }\n\n if (isCaseSensitive && !isLowerCaseLetter(key)) {\n if (!disableErrors) setErrorMessage(errors.onlyLowerCase);\n return false;\n }\n break;\n\n default:\n return false;\n }\n\n return true;\n };\n const isSpecialSymbolMaskChar = ({ char }: { char: string }): boolean => {\n return !isDigitMaskChar(char) && !isLetterMaskChar(char);\n };\n const isSpecialSymbolChar = ({ char }: { char: string }): boolean => {\n return !isDigit(char) && !isLetter(char);\n };\n const isSpecialSymbol = (i: number): boolean | undefined => getCharByIndex(i)?.isSpecialSymbol;\n // CHECKERS | END //\n\n /// --- Event Handlers ---///\n\n // GENERAL EVENT HANDLERS | START //\n const onVisibleChange: React.ChangeEventHandler<HTMLInputElement> | undefined = (e): void => {\n clearErrorMessage();\n\n const {\n target: { value, selectionStart: caretPos },\n nativeEvent,\n } = e;\n\n // @ts-ignore\n const { data: char } = nativeEvent;\n\n if (caretPos && caretPos > maxEditableIndex) {\n disableDefaultBehavior(e);\n setCaret(maxEditableIndex);\n setBlinkError(true);\n return;\n }\n\n setValue(value);\n\n const caretOffset = value.length - (caretPos ?? 0);\n\n // Correct Caret Position\n if (!value.lastIndexEqualsTo((caretPos ?? 0) - 1)) {\n if (value.longerThan(inputValue)) {\n if (!isValidChar({ char, i: (caretPos ?? 0) - 1 })) {\n disableDefaultBehavior(e);\n setCaret((caretPos ?? 0) - 1);\n }\n else {\n const newCaretPos = value.length - caretOffset;\n setCaret(\n isSpecialSymbol(newCaretPos) ? newCaretPos + 1 : newCaretPos,\n );\n }\n }\n else if (inputValue.longerThan(value)) {\n switch (getKeyDown()) {\n case KEY_CODES.Backspace:\n if (isSpecialSymbol((caretPos ?? 0))) {\n disableDefaultBehavior(e);\n }\n setCaret((caretPos ?? 0));\n break;\n case KEY_CODES.Delete:\n if (isSpecialSymbol((caretPos ?? 0))) {\n disableDefaultBehavior(e);\n setCaret((caretPos ?? 0) + 1);\n }\n else {\n setCaret((caretPos ?? 0));\n }\n break;\n default:\n if (selectedLength > 0) {\n setCaret((caretPos ?? 0));\n }\n }\n }\n }\n\n /* Checking if the character is a special symbol and if it is not, it is checking if the character\n is valid or not. If it is not valid, it will blink the error. */\n if (blinkErrors) {\n setTimeout(() => {\n if (\n ((value.longerThan(inputValue) && !isSpecialSymbol((caretPos ?? 0) - 1))\n || (inputValue.longerThan(value) && !isSpecialSymbol((caretPos ?? 0))))\n && ((char && !isValidChar({ char, i: (caretPos ?? 0) - 1 }))\n || (inputValue === getInputValue()\n && getInputValue()[(caretPos ?? 0) - 1] !== char))\n ) {\n disableDefaultBehavior(e);\n setBlinkError(true);\n }\n }, 0);\n }\n };\n const onHiddenChange: React.ChangeEventHandler<HTMLInputElement> | undefined = (e): void => {\n const SSN = getInputValue({ noHide: true });\n\n const {\n target: { value },\n } = e;\n\n if (value.replace(/-/g, '').length < SSN.replace(/-/g, '').length) {\n const last = SSN.length - 1;\n setValue(SSN.slice(0, last));\n return;\n }\n\n const numValue = value.replace(/\\D/g, '');\n let newSSN = '';\n\n // ! maxHiddenIndex - это индекс, НЕ length. Поэтому нужно добавить 1\n const staticLength\n = maxHiddenIndex !== -1 ? maxHiddenIndex + 1 : maskPattern?.length;\n\n if (SSN.length > staticLength) {\n newSSN = SSN.slice(0, staticLength) + numValue;\n }\n else {\n newSSN = SSN + numValue;\n }\n\n if (newSSN.length > maskPattern?.length) {\n return;\n }\n setValue(newSSN);\n };\n const onChange = isValueHidden ? onHiddenChange : onVisibleChange;\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (e) => {\n onKeyDownProp?.(e);\n\n const { keyCode } = e;\n setKeyDown(keyCode);\n };\n const onKeyUp: KeyboardEventHandler<HTMLInputElement> | undefined = (e): void => {\n setKeyDown(null);\n // On Filled Callback\n if (\n getInputValue({ noLastTyppedCharIndexCheck: true }).length\n === maskPattern.length\n && ((e.target as HTMLInputElement).selectionStart ?? 0) >= maxEditableIndex\n ) {\n onFilledProp?.();\n }\n };\n const onClearClick: MouseEventHandler<SVGElement> = (e): void => {\n e.stopPropagation();\n e.preventDefault();\n\n resetInnerValue();\n\n inputRef?.current?.focus();\n setCaret(0);\n clearErrorMessage();\n };\n const onHiddenToggle = (value: boolean | string): void => {\n // ? Добавлена возможность принудительной установки велью (опционально)\n const newValue = typeof value === 'boolean' ? value : !isValueHidden;\n setIsValueHidden(newValue);\n if (isHiddenLogicInit) inputRef?.current?.focus();\n };\n const onFocus: React.FocusEventHandler<HTMLInputElement> | undefined = (): void => {\n setFocused(true);\n onFocusProp?.();\n };\n const onBlur = (): void => {\n setFocused(false);\n onBlurProp?.();\n };\n const onClick: React.MouseEventHandler<HTMLInputElement> | undefined = (e): void => {\n const cursor = (e.target as HTMLInputElement).selectionStart;\n if (cursor && cursor >= maxEditableIndex) setCaret(maxEditableIndex);\n };\n const onSelect = (e: React.SyntheticEvent<HTMLDivElement, Event>): void => {\n const { selectionStart, selectionEnd } = e.target as HTMLInputElement ?? {};\n setSelectedLength((selectionEnd ?? 0) - (selectionStart ?? 0));\n if (selectionStart && selectionStart >= maxEditableIndex) setCaret(maxEditableIndex);\n };\n // GENERAL EVENT HANDLERS | END //\n\n /// --- OBSERVERS ---///\n // Render Mask\n useEffect(() => {\n setIsInitValue(false);\n setInnerValue([]);\n setMaskRendered(false);\n\n if (!maskPattern) maskPattern = '';\n\n maskPattern.split('').map((char, id) => {\n addInnerValueChar({\n char,\n data: { id, isReadOnly: id === maskPattern.length },\n });\n if (value?.[id]) updateInnerValueChar({ char: value?.[id] }, id);\n return char;\n });\n setMaskRendered(true);\n }, [maskPattern]);\n\n useEffect(() => {\n if (\n (isMaskRendered && !isInitValue)\n || (isInitValue\n && ![getInputValue(), getClearInnerValueAsString()].includes(value as string))\n ) {\n setValue(value);\n setIsInitValue(true);\n }\n }, [isMaskRendered, value, isInitValue]);\n\n // OnChange Observer\n useEffect(() => {\n if (isMaskRendered && isInitValue) {\n setError(false);\n const values = [\n getClearInnerValueAsString(),\n getInputValue({ noLastTyppedCharIndexCheck: true, noHide: true }),\n ];\n if (returnMaskedValue) values.reverse();\n\n if (\n prevValueRef?.current?.[0] !== values[0]\n && prevValueRef?.current?.[1] !== values[1]\n && value !== getClearInnerValueAsString()\n ) {\n prevValueRef.current = values;\n onChangeProp?.(...(values as []));\n }\n }\n }, [innerValue, isMaskRendered, isInitValue]);\n\n // Blink Error\n useEffect(() => {\n if (blinkError) {\n setTimeout(() => {\n setBlinkError(false);\n }, blinkDuration);\n }\n }, [blinkError]);\n\n useEffect(() => {\n setError(customError !== '');\n setErrorMessage(customError === '' ? errors.default : customError);\n }, [customError, isError]);\n\n useEffect(() => {\n if (typeof isHide === 'boolean') {\n onHiddenToggle(isHide);\n if (!isHiddenLogicInit) setIsHiddenLogicInit(true);\n }\n }, [isHide]);\n\n /// --- RENDER ---///\n\n const renderChar = (obj: IInputMask3CharObj, i: number, className: string = ''): ReactNode => {\n const { char, ref, maskChar, isSpecialSymbol } = obj;\n\n return (\n <span\n tabIndex={-1}\n key={i}\n attr-char-id={i}\n className={cn('input-mask_value_item', className, {\n 'input-mask_value_item--digit': isDigitMaskChar(obj.maskChar),\n 'input-mask_value_item--letter': isLetterMaskChar(obj.maskChar),\n 'input-mask_value_item--spec': obj.isSpecialSymbol,\n 'input-mask_value_item--hidden': i < inputValue.length,\n })}\n ref={ref as LegacyRef<HTMLSpanElement>}\n >\n {!isFocused\n && hideMaskOnBlur\n && getClearInnerValueAsString().length === 0\n ? SPACE_CHAR\n : isSpecialSymbol\n ? maskChar\n : char === ''\n ? getPlaceholderCharByIndex(i)\n : char}\n </span>\n );\n };\n const renderMaskChar = (obj: IInputMask3CharObj, i: number): ReactNode =>\n renderChar(obj, i, 'input-mask_value_item_mask-char');\n const renderValueChar = (obj: IInputMask3CharObj, i: number): ReactNode =>\n isValueHidden && (maxHiddenIndex === -1 || i <= maxHiddenIndex)\n ? renderChar(\n { ...obj, char: hiddenChar },\n i,\n 'input-mask_value_item_value-hidden-char',\n )\n : renderChar(obj, i, 'input-mask_value_item_value-char');\n const renderSpecialChar = (obj: IInputMask3CharObj, i: number): ReactNode =>\n renderChar(obj, i, 'input-mask_value_item_spec-char');\n const renderInputValue = (): ReactNode => {\n return innerValue.map((obj, i) => {\n const { char, isSpecialSymbol } = obj;\n\n if (isSpecialSymbol) {\n return renderSpecialChar(obj, i);\n }\n\n const isMaskItem = (() => char === '')();\n return isMaskItem ? renderMaskChar(obj, i) : renderValueChar(obj, i);\n });\n };\n const renderMask = (): ReactNode => {\n return <div className=\"input-mask_value\">{renderInputValue()}</div>;\n };\n const renderInput = (): ReactNode => {\n return (\n <input\n tabIndex={disabled || isLoading ? -1 : 0}\n readOnly={disabled || isLoading}\n name={name || fieldKey || id || testId || ''}\n className={`input-mask_input ${className}`}\n ref={inputRef}\n value={inputValue}\n onChange={onChange}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onBlur={onBlur}\n onClick={onClick}\n autoComplete={autocomplete}\n onFocus={(...params) => {\n if (isUseAutoSelect) inputRef.current?.select();\n if (onFocus) onFocus(...params);\n }}\n onDragStart={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n onDragEnd={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n onSelect={onSelect}\n {...attributesOfNativeInput}\n />\n );\n };\n const renderHideToggler = (): ReactNode => {\n return (\n <span className=\"formatted-raw-ssn-eye-holder\" onClick={() => onHiddenToggle(value as string)}>\n {' '}\n {isValueHidden\n ? (\n <Eye strokeWidth={1} className=\"password-icon\" />\n )\n : (\n <EyeOff strokeWidth={1} className=\"password-icon\" />\n )}\n </span>\n );\n };\n const renderClearButton = (): ReactNode => {\n return (\n <div className=\"input-mask_clear\">\n <X onClick={onClearClick} />\n </div>\n );\n };\n const renderHint = (): ReactNode => {\n return (\n <div className={`input-mask_hint input-mask_hint--${hintPosition}`}>\n <Hint hint={hintText} className={hintClassName} side={hintPosition} />\n </div>\n );\n };\n const renderIcon = (position: 'left' | 'right' = 'left'): ReactNode => {\n return (\n <div className={`input-mask_icon input-mask_icon--${position}`}>\n {icon}\n </div>\n );\n };\n const render = (): ReactElement => {\n return (\n <div\n data-testid={testId}\n className={cn(\n 'input-mask3_wrapper',\n className,\n { 'input-mask_error': isError },\n { 'input-mask_focus': isFocused },\n { 'input-mask_blink-error': blinkError },\n { disabled: disabled || isLoading },\n )}\n tabIndex={-1}\n >\n <div\n className={`\n input-mask\n ${isError ? 'input-mask_error' : ''}\n ${isFocused ? 'input-mask_focus' : ''}\n ${blinkError ? 'input-mask_blink-error' : ''}\n `}\n >\n {showHint && isHintLeft && renderHint()}\n {isIconLeft && showIcon && renderIcon('left')}\n {renderMask()}\n {renderInput()}\n {/* Если isHide булева, значит будем управлять сверху, значит там свой триггер */}\n {withHiddenMode && typeof isHide !== 'boolean' && renderHideToggler()}\n {isClearable && renderClearButton()}\n {isIconRight && showIcon && renderIcon('right')}\n {showHint && isHintRight && renderHint()}\n </div>\n {showErrors && errorMessage && (\n <div className=\"input-mask_error-text\">{errorMessage}</div>\n )}\n {isLoading && <Spinner size=\"small\" />}\n </div>\n );\n };\n\n return render();\n}\n\nexport default InputMask3;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InputMask3.js","names":[],"sources":["../../../../../src/Atomic/FormElements/InputMask3/InputMask3.tsx"],"sourcesContent":["/* eslint-disable react-web-api/no-leaked-timeout */\n/* eslint-disable ts/no-use-before-define */\nimport type { KeyboardEventHandler, LegacyRef, MouseEventHandler, ReactElement, ReactNode } from 'react';\n\nimport type { IInputMask3CharObj, IInputMask3Props } from './InputMask3.interface';\nimport cn from 'classnames';\nimport React, { createRef, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { Eye, EyeOff, X } from 'react-feather';\nimport { KEYBOARD_KEY_CODES as KEY_CODES } from '../../../Constants/index.constants';\nimport { disableDefaultBehavior } from '../../../Functions/utils/disableDefaultBehavior/disableDefaultBehavior';\n\nimport Spinner from '../../Layout/Spinner/Spinner';\n\nimport Hint from '../../UI/Hint/Hint';\nimport {\n DEFAULT_ERRORS,\n DIGIT_MASK_CHAR,\n LOWERCASE_LETTER_MASK_CHAR,\n SPACE_CHAR,\n UPPERCASE_LETTER_MASK_CHAR,\n} from './config';\nimport {\n isDigit,\n isDigitMaskChar,\n isLetter,\n isLetterMaskChar,\n isLowerCaseLetter,\n isUpperCaseLetter,\n} from './functions';\nimport './InputMask3.scss';\n\nconst InputMask3: React.FC<IInputMask3Props> = ({\n autocomplete = 'off',\n maskPattern,\n maskPatternPlaceholder,\n maskPlaceholder,\n maskDigitPlaceholder,\n maskLetterPlaceholder,\n usePatternPlaceholder,\n\n maxEditableIndex = -1,\n\n isClearable,\n isCaseSensitive,\n adaptTextCase,\n isUseAutoSelect = true,\n isLoading = false,\n\n // Включает/отключает режим скрытия в принциепе.\n withHiddenMode = false,\n // Символ которым скрывааеются символы\n hiddenChar = '*',\n // Индекс последнего скрываемогосимвола\n // Индекс нужно передавать с УЧЕТОМ не значащих символов маски,\n // при этом не значащие символы скрываться НЕ будут\n maxHiddenIndex = -1,\n // Инициализационнное значение положения \"скрыть\" (если НЕ управляется сверху)\n isValueHiddenDefault = false,\n\n // ? Если передана как булева, то режим скрытия управляется ей, здешний триггер (глазик) НЕ рендерится\n // ? Если НЕ передана ка булева, то режим скрытия обеспечиватся своим внутренним стором, здешний триггер (глазик) рендерится\n isHide, // булева пропа для управления сверху\n\n icon,\n showIcon,\n isIconLeft,\n isIconRight,\n value,\n blinkErrors = true,\n blinkDuration = 100,\n showErrors = false,\n\n className = '',\n errors: customErrors = DEFAULT_ERRORS,\n error: customError = '',\n\n onChange: onChangeProp,\n onFocus: onFocusProp,\n onBlur: onBlurProp,\n onKeyDown: onKeyDownProp,\n onFilled: onFilledProp,\n\n showHint = false,\n hintText = '',\n hintClassName = '',\n isHintRight = true,\n isHintLeft = false,\n hintPosition = 'right',\n\n hideMaskOnBlur = true,\n returnMaskedValue = false,\n\n name,\n fieldKey,\n id,\n disabled,\n testId = 'input-mask',\n\n attributesOfNativeInput = {},\n}) => {\n const errors = {\n ...DEFAULT_ERRORS,\n ...customErrors,\n };\n\n if (maxEditableIndex === -1) maxEditableIndex = maskPattern?.length ?? 0;\n\n const [isMaskRendered, setMaskRendered] = useState(false);\n const [isFocused, setFocused] = useState(false);\n const [isInitValue, setIsInitValue] = useState(false);\n const [selectedLength, setSelectedLength] = useState(0);\n // ? Если управляется сверху, то инициируемся текущим внешним значением\n const [isValueHidden, setIsValueHidden] = useState(\n typeof isHide === 'boolean' ? isHide : isValueHiddenDefault,\n );\n const [isHiddenLogicInit, setIsHiddenLogicInit] = useState(false);\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const keyDownRef = useRef<null | number>(null);\n const setKeyDown = (keyCode: number | null): number | null => (keyDownRef.current = keyCode);\n const getKeyDown = (): number => (keyDownRef.current ?? 0) as number;\n\n const setCaret = (caret: number): void => {\n if (caret < 0) caret = 0;\n const input = inputRef.current;\n if (input) setTimeout(() => input.setSelectionRange(caret, caret), 0);\n };\n\n // ERRORS MANAGEMENT FUNCTIONS | START //\n const [isError, setError] = useState(false);\n const [blinkError, setBlinkError] = useState(false);\n\n const [errorMessage, setErrorMessage] = useState(errors.default);\n const clearErrorMessage = (): void => setErrorMessage(errors.default);\n // ERRORS MANAGEMENT FUNCTIONS | END //\n\n // INNER VALUE MANAGEMENT FUNCTIONS | START //\n const [innerValue, setInnerValue] = useState<IInputMask3CharObj[]>([]);\n\n const prevValueRef = useRef<string[]>([]);\n\n const addInnerValueChar = ({ char, data = {} }: { char: string, data: object }): void => {\n setInnerValue((state) => {\n const stateCopy = [...state];\n const charObj = getCharObj(char, data);\n\n stateCopy.push(charObj);\n\n return stateCopy;\n });\n };\n const updateInnerValueChar = ({ char = null }: { char: string | null }, i: number): void => {\n setInnerValue((state) => {\n if (!state[i]) return state;\n\n const stateCopy = [...state];\n\n if (!stateCopy[i].isSpecialSymbol && char !== null)\n stateCopy[i].char = char;\n\n return stateCopy;\n });\n };\n const resetInnerValue = (): void => {\n setInnerValue(innerValue =>\n innerValue.map((item) => {\n if (!item.isSpecialSymbol && item.char !== null) item.char = '';\n return item;\n }),\n );\n };\n const setValue = (value?: null | string | number, disableErrors = true): void => {\n value = value === null || value === undefined ? '' : value.toString();\n\n resetInnerValue();\n const staticLength = maskPattern.length - maxEditableIndex;\n\n if (value.length > maxEditableIndex)\n value = value.slice(0, value.length - staticLength);\n else if (maxEditableIndex !== maskPattern?.length - 1)\n value = value.slice(0, maxEditableIndex);\n let valueCharIndex = 0;\n setInnerValue((innerValue) => {\n const newValue = innerValue.map((item, i) => {\n const { isSpecialSymbol } = item;\n if (isSpecialSymbol) return item;\n let char = value[valueCharIndex];\n let whileLimit = maskPattern?.length || 0;\n\n while (\n whileLimit\n && (isSpecialSymbolChar({ char: value[valueCharIndex] })\n || !isValidChar({ char, i, disableErrors: true }))\n ) {\n whileLimit--;\n char = value[++valueCharIndex];\n }\n\n // If Valid\n if (isValidChar({ char, i, disableErrors })) {\n item.char = char;\n }\n\n ++valueCharIndex;\n\n return item;\n });\n\n return newValue;\n });\n };\n // INNER VALUE MANAGEMENT FUNCTIONS | END //\n\n // GETTERS | START //\n const getCharObj = (char: string, data = {}): IInputMask3CharObj => {\n const isSpecialSymbol = isSpecialSymbolChar({ char });\n const isSpecialSymbolMask = isSpecialSymbolMaskChar({ char });\n\n if (char === ' ') char = SPACE_CHAR;\n\n return {\n char: isSpecialSymbolMask ? char : '',\n maskChar: char,\n isSpecialSymbol: isSpecialSymbolMask,\n isCharSymbol: !isSpecialSymbol && char !== '' && isSpecialSymbolMask,\n ref: createRef(),\n ...data,\n };\n };\n const getCharByIndex = (i: number): IInputMask3CharObj | undefined => {\n return innerValue[i] ? { ...innerValue[i] } : undefined;\n };\n const getMaskCharByIndex = (i: number): string | undefined => {\n return innerValue[i]?.maskChar || undefined;\n };\n const getPlaceholderCharByIndex = (i: number): string | undefined => {\n const { maskChar } = getCharByIndex(i) as IInputMask3CharObj;\n\n if (usePatternPlaceholder) {\n return maskPatternPlaceholder?.[i] || maskPlaceholder;\n }\n if (isDigitMaskChar(maskChar) && maskDigitPlaceholder)\n return maskDigitPlaceholder;\n if (isLetterMaskChar(maskChar) && maskLetterPlaceholder)\n return maskLetterPlaceholder;\n return maskPlaceholder;\n };\n const getInputValue = ({\n noLastTyppedCharIndexCheck = false,\n noHide = false,\n } = {}): string => {\n let isValid = true;\n\n const lastTyppedCharIndex = innerValue.reduce(\n (result, { char, isSpecialSymbol }, i) =>\n char !== '' && !isSpecialSymbol ? i : result,\n 0,\n );\n\n const value = innerValue.reduce((result, { char, isSpecialSymbol }, i) => {\n if (\n char !== ''\n && isValid\n && (!noLastTyppedCharIndexCheck ? i <= lastTyppedCharIndex : true)\n ) {\n if (\n isValueHidden\n && !isSpecialSymbol\n && !noHide\n && (maxHiddenIndex === -1 || i <= maxHiddenIndex)\n ) {\n result += hiddenChar;\n }\n else {\n result += char;\n }\n }\n else {\n isValid = false;\n }\n\n return result;\n }, '');\n\n if (getClearInnerValueAsString(value)?.length === 0) return '';\n\n return value;\n };\n const getClearInnerValueAsString = (valueProp?: string): string => {\n const symbolsInfo = innerValue?.map(\n ({ isSpecialSymbol, isCharSymbol }) => ({\n isSpecialSymbol,\n isCharSymbol,\n }),\n );\n const clearValue = (\n valueProp\n ?? getInputValue({ noLastTyppedCharIndexCheck: true, noHide: true })\n )\n ?.split('')\n ?.reduce((resultStr, symbol, i) => {\n if (!symbolsInfo[i].isSpecialSymbol || symbolsInfo[i].isCharSymbol)\n resultStr += symbol;\n return resultStr;\n }, '');\n\n return clearValue;\n };\n const inputValue = useMemo(getInputValue, [innerValue, isValueHidden]);\n // GETTERS | END //\n\n // CHECKERS | START //\n const isValidChar = ({ char: key, i, disableErrors = false }: { char: string, i: number, disableErrors?: boolean }): boolean => {\n const maskChar = getMaskCharByIndex(i);\n\n switch (maskChar) {\n case DIGIT_MASK_CHAR:\n if (!isDigit(key)) {\n if (!disableErrors) {\n setErrorMessage(errors.onlyDigit);\n }\n return false;\n }\n break;\n\n case UPPERCASE_LETTER_MASK_CHAR:\n if (adaptTextCase) key = key.toUpperCase();\n\n if (!isLetter(key) && !isCaseSensitive) {\n if (!disableErrors) setErrorMessage(errors.onlyLetter);\n return false;\n }\n\n if (isCaseSensitive && !isUpperCaseLetter(key)) {\n if (!disableErrors) setErrorMessage(errors.onlyUpperCase);\n return false;\n }\n break;\n case LOWERCASE_LETTER_MASK_CHAR:\n if (adaptTextCase) key = key.toLowerCase();\n\n if (!isLetter(key) && !isCaseSensitive) {\n if (!disableErrors) setErrorMessage(errors.onlyLetter);\n return false;\n }\n\n if (isCaseSensitive && !isLowerCaseLetter(key)) {\n if (!disableErrors) setErrorMessage(errors.onlyLowerCase);\n return false;\n }\n break;\n\n default:\n return false;\n }\n\n return true;\n };\n const isSpecialSymbolMaskChar = ({ char }: { char: string }): boolean => {\n return !isDigitMaskChar(char) && !isLetterMaskChar(char);\n };\n const isSpecialSymbolChar = ({ char }: { char: string }): boolean => {\n return !isDigit(char) && !isLetter(char);\n };\n const isSpecialSymbol = (i: number): boolean | undefined => getCharByIndex(i)?.isSpecialSymbol;\n // CHECKERS | END //\n\n /// --- Event Handlers ---///\n\n // GENERAL EVENT HANDLERS | START //\n const onVisibleChange: React.ChangeEventHandler<HTMLInputElement> | undefined = (e): void => {\n clearErrorMessage();\n\n const {\n target: { value, selectionStart: caretPos },\n nativeEvent,\n } = e;\n\n // @ts-ignore\n const { data: char } = nativeEvent;\n\n if (caretPos && caretPos > maxEditableIndex) {\n disableDefaultBehavior(e);\n setCaret(maxEditableIndex);\n setBlinkError(true);\n return;\n }\n\n setValue(value);\n\n const caretOffset = value.length - (caretPos ?? 0);\n\n // Correct Caret Position\n if (!value.lastIndexEqualsTo((caretPos ?? 0) - 1)) {\n if (value.longerThan(inputValue)) {\n if (!isValidChar({ char, i: (caretPos ?? 0) - 1 })) {\n disableDefaultBehavior(e);\n setCaret((caretPos ?? 0) - 1);\n }\n else {\n const newCaretPos = value.length - caretOffset;\n setCaret(\n isSpecialSymbol(newCaretPos) ? newCaretPos + 1 : newCaretPos,\n );\n }\n }\n else if (inputValue.longerThan(value)) {\n switch (getKeyDown()) {\n case KEY_CODES.Backspace:\n if (isSpecialSymbol((caretPos ?? 0))) {\n disableDefaultBehavior(e);\n }\n setCaret((caretPos ?? 0));\n break;\n case KEY_CODES.Delete:\n if (isSpecialSymbol((caretPos ?? 0))) {\n disableDefaultBehavior(e);\n setCaret((caretPos ?? 0) + 1);\n }\n else {\n setCaret((caretPos ?? 0));\n }\n break;\n default:\n if (selectedLength > 0) {\n setCaret((caretPos ?? 0));\n }\n }\n }\n }\n\n /* Checking if the character is a special symbol and if it is not, it is checking if the character\n is valid or not. If it is not valid, it will blink the error. */\n if (blinkErrors) {\n setTimeout(() => {\n if (\n ((value.longerThan(inputValue) && !isSpecialSymbol((caretPos ?? 0) - 1))\n || (inputValue.longerThan(value) && !isSpecialSymbol((caretPos ?? 0))))\n && ((char && !isValidChar({ char, i: (caretPos ?? 0) - 1 }))\n || (inputValue === getInputValue()\n && getInputValue()[(caretPos ?? 0) - 1] !== char))\n ) {\n disableDefaultBehavior(e);\n setBlinkError(true);\n }\n }, 0);\n }\n };\n const onHiddenChange: React.ChangeEventHandler<HTMLInputElement> | undefined = (e): void => {\n const SSN = getInputValue({ noHide: true });\n\n const {\n target: { value },\n } = e;\n\n if (value.replace(/-/g, '').length < SSN.replace(/-/g, '').length) {\n const last = SSN.length - 1;\n setValue(SSN.slice(0, last));\n return;\n }\n\n const numValue = value.replace(/\\D/g, '');\n let newSSN = '';\n\n // ! maxHiddenIndex - это индекс, НЕ length. Поэтому нужно добавить 1\n const staticLength\n = maxHiddenIndex !== -1 ? maxHiddenIndex + 1 : maskPattern?.length;\n\n if (SSN.length > staticLength) {\n newSSN = SSN.slice(0, staticLength) + numValue;\n }\n else {\n newSSN = SSN + numValue;\n }\n\n if (newSSN.length > maskPattern?.length) {\n return;\n }\n setValue(newSSN);\n };\n const onChange = isValueHidden ? onHiddenChange : onVisibleChange;\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (e) => {\n onKeyDownProp?.(e);\n\n const { keyCode } = e;\n setKeyDown(keyCode);\n };\n const onKeyUp: KeyboardEventHandler<HTMLInputElement> | undefined = (e): void => {\n setKeyDown(null);\n // On Filled Callback\n if (\n getInputValue({ noLastTyppedCharIndexCheck: true }).length\n === maskPattern.length\n && ((e.target as HTMLInputElement).selectionStart ?? 0) >= maxEditableIndex\n ) {\n onFilledProp?.();\n }\n };\n const onClearClick: MouseEventHandler<SVGElement> = (e): void => {\n e.stopPropagation();\n e.preventDefault();\n\n resetInnerValue();\n\n inputRef?.current?.focus();\n setCaret(0);\n clearErrorMessage();\n };\n const onHiddenToggle = (value: boolean | string): void => {\n // ? Добавлена возможность принудительной установки велью (опционально)\n const newValue = typeof value === 'boolean' ? value : !isValueHidden;\n setIsValueHidden(newValue);\n if (isHiddenLogicInit) inputRef?.current?.focus();\n };\n const onFocus: React.FocusEventHandler<HTMLInputElement> | undefined = (): void => {\n setFocused(true);\n onFocusProp?.();\n };\n const onBlur = (): void => {\n setFocused(false);\n onBlurProp?.();\n };\n const onClick: React.MouseEventHandler<HTMLInputElement> | undefined = (e): void => {\n const cursor = (e.target as HTMLInputElement).selectionStart;\n if (cursor && cursor >= maxEditableIndex) setCaret(maxEditableIndex);\n };\n const onSelect = (e: React.SyntheticEvent<HTMLDivElement, Event>): void => {\n const { selectionStart, selectionEnd } = e.target as HTMLInputElement ?? {};\n setSelectedLength((selectionEnd ?? 0) - (selectionStart ?? 0));\n if (selectionStart && selectionStart >= maxEditableIndex) setCaret(maxEditableIndex);\n };\n // GENERAL EVENT HANDLERS | END //\n\n /// --- OBSERVERS ---///\n // Render Mask\n useEffect(() => {\n setIsInitValue(false);\n setInnerValue([]);\n setMaskRendered(false);\n\n if (!maskPattern) maskPattern = '';\n\n maskPattern.split('').map((char, id) => {\n addInnerValueChar({\n char,\n data: { id, isReadOnly: id === maskPattern.length },\n });\n if (value?.[id]) updateInnerValueChar({ char: value?.[id] }, id);\n return char;\n });\n setMaskRendered(true);\n }, [maskPattern]);\n\n useEffect(() => {\n if (\n (isMaskRendered && !isInitValue)\n || (isInitValue\n && ![getInputValue(), getClearInnerValueAsString()].includes(value as string))\n ) {\n setValue(value);\n setIsInitValue(true);\n }\n }, [isMaskRendered, value, isInitValue]);\n\n // OnChange Observer\n useEffect(() => {\n if (isMaskRendered && isInitValue) {\n setError(false);\n const values = [\n getClearInnerValueAsString(),\n getInputValue({ noLastTyppedCharIndexCheck: true, noHide: true }),\n ];\n if (returnMaskedValue) values.reverse();\n\n if (\n prevValueRef?.current?.[0] !== values[0]\n && prevValueRef?.current?.[1] !== values[1]\n && value !== getClearInnerValueAsString()\n ) {\n prevValueRef.current = values;\n onChangeProp?.(...(values as []));\n }\n }\n }, [innerValue, isMaskRendered, isInitValue]);\n\n // Blink Error\n useEffect(() => {\n if (blinkError) {\n setTimeout(() => {\n setBlinkError(false);\n }, blinkDuration);\n }\n }, [blinkError]);\n\n useEffect(() => {\n setError(customError !== '');\n setErrorMessage(customError === '' ? errors.default : customError);\n }, [customError, isError]);\n\n useEffect(() => {\n if (typeof isHide === 'boolean') {\n onHiddenToggle(isHide);\n if (!isHiddenLogicInit) setIsHiddenLogicInit(true);\n }\n }, [isHide]);\n\n /// --- RENDER ---///\n\n const renderChar = (obj: IInputMask3CharObj, i: number, className: string = ''): ReactNode => {\n const { char, ref, maskChar, isSpecialSymbol } = obj;\n\n return (\n <span\n tabIndex={-1}\n key={i}\n attr-char-id={i}\n className={cn('input-mask_value_item', className, {\n 'input-mask_value_item--digit': isDigitMaskChar(obj.maskChar),\n 'input-mask_value_item--letter': isLetterMaskChar(obj.maskChar),\n 'input-mask_value_item--spec': obj.isSpecialSymbol,\n 'input-mask_value_item--hidden': i < inputValue.length,\n })}\n ref={ref as LegacyRef<HTMLSpanElement>}\n >\n {!isFocused\n && hideMaskOnBlur\n && getClearInnerValueAsString().length === 0\n ? SPACE_CHAR\n : isSpecialSymbol\n ? maskChar\n : char === ''\n ? getPlaceholderCharByIndex(i)\n : char}\n </span>\n );\n };\n const renderMaskChar = (obj: IInputMask3CharObj, i: number): ReactNode =>\n renderChar(obj, i, 'input-mask_value_item_mask-char');\n const renderValueChar = (obj: IInputMask3CharObj, i: number): ReactNode =>\n isValueHidden && (maxHiddenIndex === -1 || i <= maxHiddenIndex)\n ? renderChar(\n { ...obj, char: hiddenChar },\n i,\n 'input-mask_value_item_value-hidden-char',\n )\n : renderChar(obj, i, 'input-mask_value_item_value-char');\n const renderSpecialChar = (obj: IInputMask3CharObj, i: number): ReactNode =>\n renderChar(obj, i, 'input-mask_value_item_spec-char');\n const renderInputValue = (): ReactNode => {\n return innerValue.map((obj, i) => {\n const { char, isSpecialSymbol } = obj;\n\n if (isSpecialSymbol) {\n return renderSpecialChar(obj, i);\n }\n\n const isMaskItem = (() => char === '')();\n return isMaskItem ? renderMaskChar(obj, i) : renderValueChar(obj, i);\n });\n };\n const renderMask = (): ReactNode => {\n return <div className=\"input-mask_value\">{renderInputValue()}</div>;\n };\n const renderInput = (): ReactNode => {\n return (\n <input\n tabIndex={disabled || isLoading ? -1 : 0}\n readOnly={disabled || isLoading}\n name={name || fieldKey || id || testId || ''}\n className={`input-mask_input ${className}`}\n ref={inputRef}\n value={inputValue}\n onChange={onChange}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onBlur={onBlur}\n onClick={onClick}\n autoComplete={autocomplete}\n onFocus={(...params) => {\n if (isUseAutoSelect) inputRef.current?.select();\n if (onFocus) onFocus(...params);\n }}\n onDragStart={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n onDragEnd={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n onSelect={onSelect}\n {...attributesOfNativeInput}\n />\n );\n };\n const renderHideToggler = (): ReactNode => {\n return (\n <span className=\"formatted-raw-ssn-eye-holder\" onClick={() => onHiddenToggle(value as string)}>\n {' '}\n {isValueHidden\n ? (\n <Eye strokeWidth={1} className=\"password-icon\" />\n )\n : (\n <EyeOff strokeWidth={1} className=\"password-icon\" />\n )}\n </span>\n );\n };\n const renderClearButton = (): ReactNode => {\n return (\n <div className=\"input-mask_clear\">\n <X onClick={onClearClick} />\n </div>\n );\n };\n const renderHint = (): ReactNode => {\n return (\n <div className={`input-mask_hint input-mask_hint--${hintPosition}`}>\n <Hint hint={hintText} className={hintClassName} side={hintPosition} />\n </div>\n );\n };\n const renderIcon = (position: 'left' | 'right' = 'left'): ReactNode => {\n return (\n <div className={`input-mask_icon input-mask_icon--${position}`}>\n {icon}\n </div>\n );\n };\n const render = (): ReactElement => {\n return (\n <div\n data-testid={testId}\n className={cn(\n 'input-mask3_wrapper',\n className,\n { 'input-mask_error': isError },\n { 'input-mask_focus': isFocused },\n { 'input-mask_blink-error': blinkError },\n { disabled: disabled || isLoading },\n )}\n tabIndex={-1}\n >\n <div\n className={`\n input-mask\n ${isError ? 'input-mask_error' : ''}\n ${isFocused ? 'input-mask_focus' : ''}\n ${blinkError ? 'input-mask_blink-error' : ''}\n `}\n >\n {showHint && isHintLeft && renderHint()}\n {isIconLeft && showIcon && renderIcon('left')}\n {renderMask()}\n {renderInput()}\n {/* Если isHide булева, значит будем управлять сверху, значит там свой триггер */}\n {withHiddenMode && typeof isHide !== 'boolean' && renderHideToggler()}\n {isClearable && renderClearButton()}\n {isIconRight && showIcon && renderIcon('right')}\n {showHint && isHintRight && renderHint()}\n </div>\n {showErrors && errorMessage && (\n <div className=\"input-mask_error-text\">{errorMessage}</div>\n )}\n {isLoading && <Spinner size=\"small\" />}\n </div>\n );\n };\n\n return render();\n}\n\nexport default InputMask3;\n"],"mappings":"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"}
|