intelicoreact 2.0.20 → 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 +5 -4
- 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.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 +4 -6
- 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 +8 -6
- 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/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 +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputWithAction.js","names":[],"sources":["../../../../../src/Atomic/FormElements/InputWithAction/InputWithAction.tsx"],"sourcesContent":["import type {\n ForwardedRef,\n ForwardRefRenderFunction,\n RefObject,\n} from 'react';\nimport type { IInputWithActionProps } from './InputWithAction.interface';\nimport cn from 'classnames';\n\nimport React, {\n useEffect,\n useState,\n} from 'react';\nimport Spinner from '../../Layout/Spinner/Spinner';\nimport Button from '../../UI/Button/Button';\n\nimport Input from '../Input/Input';\n\nimport './InputWithAction.scss';\n\nconst RC = 'input-with-action';\n\nconst InputWithAction: ForwardRefRenderFunction<any, IInputWithActionProps> = (\n props,\n ref: ForwardedRef<any>,\n) => {\n const {\n className,\n inputClassName,\n\n isHideAction = false,\n actionLabel = 'Generate',\n doAction,\n actionContent,\n actionProps,\n isNoChangeAfterAction = false,\n\n isWithCopy = true,\n copyLabel = 'Copy',\n copy,\n copyIcon,\n isNoCopyIcon,\n isCopyIconRight,\n copyButtonVariant = 'dark-outline',\n\n disabled,\n isInputZoneDisabled,\n isInputDisabled,\n\n isLodaing,\n\n onChange,\n value,\n\n testId,\n ...inputProps\n } = props;\n\n const [isLocalLoading, setIsLocalLoading] = useState(false);\n\n const handle = {\n doAction: async () => {\n setIsLocalLoading(true);\n const result = await doAction?.(value, actionProps);\n if (!isNoChangeAfterAction) onChange(result);\n setIsLocalLoading(false);\n return result;\n },\n copy: () => {\n if (typeof copy === 'function') copy(value);\n },\n };\n\n useEffect(() => {\n if (isLocalLoading !== isLodaing) setIsLocalLoading(!!isLodaing);\n }, [isLodaing]);\n\n return (\n <div className={cn(RC, className, { [`${RC}_disabled`]: disabled })}>\n <div\n className={cn(`${RC}__input-zone`, {\n [`${RC}__input-zone_disabled`]: isInputZoneDisabled,\n [`${RC}__input-zone_input-disabled`]: isInputDisabled,\n })}\n >\n <Input\n {...inputProps}\n // @ts-ignore\n testId={`${testId}-input`}\n ref={ref as RefObject<Omit<HTMLInputElement, 'value'>>}\n value={value}\n disabled={isInputDisabled}\n onChange={onChange}\n className={cn(`${RC}__input`, inputClassName)}\n />\n {!isHideAction && actionContent}\n\n {!isHideAction && !actionContent && (\n <div className={cn(`${RC}__action-container`)}>\n <span\n className={cn(`${RC}__action-label`)}\n onClick={() => handle.doAction()}\n data-testid={`${testId}-action-label`}\n >\n {actionLabel}\n </span>\n </div>\n )}\n {isLocalLoading && <Spinner size=\"small\" />}\n </div>\n {isWithCopy && (\n <Button\n data-testid={`${testId}-copy-button`}\n className={`${RC}__coppy-button`}\n onClick={() => handle.copy()}\n icon={copyIcon}\n noIcon={isNoCopyIcon}\n isIconRight={isCopyIconRight}\n variant={copyButtonVariant}\n >\n {copyLabel}\n </Button>\n )}\n </div>\n );\n};\n\nexport default React.forwardRef(InputWithAction);\n"],"mappings":";;;;;;;;AAmBA,IAAM,KAAK;AAEX,IAAM,mBACJ,OACA,QACG;CACH,MAAM,EACJ,WACA,gBAEA,eAAe,OACf,cAAc,YACd,UACA,eACA,aACA,wBAAwB,OAExB,aAAa,MACb,YAAY,QACZ,MACA,UACA,cACA,iBACA,oBAAoB,gBAEpB,UACA,qBACA,iBAEA,WAEA,UACA,OAEA,QACA,GAAG,eACD;CAEJ,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,KAAK;CAE1D,MAAM,SAAS;EACb,UAAU,YAAY;GACpB,kBAAkB,IAAI;GACtB,MAAM,SAAS,MAAM,WAAW,OAAO,WAAW;GAClD,IAAI,CAAC,uBAAuB,SAAS,MAAM;GAC3C,kBAAkB,KAAK;GACvB,OAAO;EACT;EACA,YAAY;GACV,IAAI,OAAO,SAAS,YAAY,KAAK,KAAK;EAC5C;CACF;CAEA,gBAAgB;EACd,IAAI,mBAAmB,WAAW,kBAAkB,CAAC,CAAC,SAAS;CACjE,GAAG,CAAC,SAAS,CAAC;CAEd,OACE,qBAAC,OAAD;EAAK,WAAW,GAAG,IAAI,WAAW,GAAG,GAAG,GAAG,aAAa,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"InputWithAction.js","names":[],"sources":["../../../../../src/Atomic/FormElements/InputWithAction/InputWithAction.tsx"],"sourcesContent":["import type {\n ForwardedRef,\n ForwardRefRenderFunction,\n RefObject,\n} from 'react';\nimport type { IInputWithActionProps } from './InputWithAction.interface';\nimport cn from 'classnames';\n\nimport React, {\n useEffect,\n useState,\n} from 'react';\nimport Spinner from '../../Layout/Spinner/Spinner';\nimport Button from '../../UI/Button/Button';\n\nimport Input from '../Input/Input';\n\nimport './InputWithAction.scss';\n\nconst RC = 'input-with-action';\n\nconst InputWithAction: ForwardRefRenderFunction<any, IInputWithActionProps> = (\n props,\n ref: ForwardedRef<any>,\n) => {\n const {\n className,\n inputClassName,\n\n isHideAction = false,\n actionLabel = 'Generate',\n doAction,\n actionContent,\n actionProps,\n isNoChangeAfterAction = false,\n\n isWithCopy = true,\n copyLabel = 'Copy',\n copy,\n copyIcon,\n isNoCopyIcon,\n isCopyIconRight,\n copyButtonVariant = 'dark-outline',\n\n disabled,\n isInputZoneDisabled,\n isInputDisabled,\n\n isLodaing,\n\n onChange,\n value,\n\n testId,\n ...inputProps\n } = props;\n\n const [isLocalLoading, setIsLocalLoading] = useState(false);\n\n const handle = {\n doAction: async () => {\n setIsLocalLoading(true);\n const result = await doAction?.(value, actionProps);\n if (!isNoChangeAfterAction) onChange(result);\n setIsLocalLoading(false);\n return result;\n },\n copy: () => {\n if (typeof copy === 'function') copy(value);\n },\n };\n\n useEffect(() => {\n if (isLocalLoading !== isLodaing) setIsLocalLoading(!!isLodaing);\n }, [isLodaing]);\n\n return (\n <div className={cn(RC, className, { [`${RC}_disabled`]: disabled })}>\n <div\n className={cn(`${RC}__input-zone`, {\n [`${RC}__input-zone_disabled`]: isInputZoneDisabled,\n [`${RC}__input-zone_input-disabled`]: isInputDisabled,\n })}\n >\n <Input\n {...inputProps}\n // @ts-ignore\n testId={`${testId}-input`}\n ref={ref as RefObject<Omit<HTMLInputElement, 'value'>>}\n value={value}\n disabled={isInputDisabled}\n onChange={onChange}\n className={cn(`${RC}__input`, inputClassName)}\n />\n {!isHideAction && actionContent}\n\n {!isHideAction && !actionContent && (\n <div className={cn(`${RC}__action-container`)}>\n <span\n className={cn(`${RC}__action-label`)}\n onClick={() => handle.doAction()}\n data-testid={`${testId}-action-label`}\n >\n {actionLabel}\n </span>\n </div>\n )}\n {isLocalLoading && <Spinner size=\"small\" />}\n </div>\n {isWithCopy && (\n <Button\n data-testid={`${testId}-copy-button`}\n className={`${RC}__coppy-button`}\n onClick={() => handle.copy()}\n icon={copyIcon}\n noIcon={isNoCopyIcon}\n isIconRight={isCopyIconRight}\n variant={copyButtonVariant}\n >\n {copyLabel}\n </Button>\n )}\n </div>\n );\n};\n\nexport default React.forwardRef(InputWithAction);\n"],"mappings":";;;;;;;;AAmBA,IAAM,KAAK;AAEX,IAAM,mBACJ,OACA,QACG;CACH,MAAM,EACJ,WACA,gBAEA,eAAe,OACf,cAAc,YACd,UACA,eACA,aACA,wBAAwB,OAExB,aAAa,MACb,YAAY,QACZ,MACA,UACA,cACA,iBACA,oBAAoB,gBAEpB,UACA,qBACA,iBAEA,WAEA,UACA,OAEA,QACA,GAAG,eACD;CAEJ,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,KAAK;CAE1D,MAAM,SAAS;EACb,UAAU,YAAY;GACpB,kBAAkB,IAAI;GACtB,MAAM,SAAS,MAAM,WAAW,OAAO,WAAW;GAClD,IAAI,CAAC,uBAAuB,SAAS,MAAM;GAC3C,kBAAkB,KAAK;GACvB,OAAO;EACT;EACA,YAAY;GACV,IAAI,OAAO,SAAS,YAAY,KAAK,KAAK;EAC5C;CACF;CAEA,gBAAgB;EACd,IAAI,mBAAmB,WAAW,kBAAkB,CAAC,CAAC,SAAS;CACjE,GAAG,CAAC,SAAS,CAAC;CAEd,OACE,qBAAC,OAAD;EAAK,WAAW,GAAG,IAAI,WAAW,GAAG,GAAG,GAAG,aAAa,SAAS,CAAC;EAAlE,UAAA,CACE,qBAAC,OAAD;GACE,WAAW,GAAG,GAAG,GAAG,eAAe;KAChC,GAAG,GAAG,yBAAyB;KAC/B,GAAG,GAAG,+BAA+B;GACxC,CAAC;GAJH,UAAA;IAME,oBAAC,OAAD;KACE,GAAI;KAEJ,QAAQ,GAAG,OAAO;KACb;KACE;KACP,UAAU;KACA;KACV,WAAW,GAAG,GAAG,GAAG,UAAU,cAAc;IAC7C,CAAA;IACA,CAAC,gBAAgB;IAEjB,CAAC,gBAAgB,CAAC,iBACjB,oBAAC,OAAD;KAAK,WAAW,GAAG,GAAG,GAAG,mBAAmB;KAC1C,UAAA,oBAAC,QAAD;MACE,WAAW,GAAG,GAAG,GAAG,eAAe;MACnC,eAAe,OAAO,SAAS;MAC/B,eAAa,GAAG,OAAO;MAEtB,UAAA;KACG,CAAA;IACH,CAAA;IAEN,kBAAkB,oBAAC,SAAD,EAAS,MAAK,QAAS,CAAA;GACvC;EACJ,CAAA,GAAA,cACC,oBAAC,QAAD;GACE,eAAa,GAAG,OAAO;GACvB,WAAW,GAAG,GAAG;GACjB,eAAe,OAAO,KAAK;GAC3B,MAAM;GACN,QAAQ;GACR,aAAa;GACb,SAAS;GAER,UAAA;EACK,CAAA,CAEP;;AAET;AAEA,IAAA,0BAAe,MAAM,WAAW,eAAe"}
|
|
@@ -8,7 +8,7 @@ import { Trash2 } from "react-feather";
|
|
|
8
8
|
import { v4 } from "uuid";
|
|
9
9
|
//#region src/Atomic/FormElements/InputsRow/InputsRow.tsx
|
|
10
10
|
var InputsRow = ({ items, title, paramPlaceholder = "", valuePlaceholder = "", descriptionPlaceholder = "", onChange = () => {} }) => {
|
|
11
|
-
const
|
|
11
|
+
const initialRows = items || [{
|
|
12
12
|
param: "",
|
|
13
13
|
value: "",
|
|
14
14
|
description: "",
|
|
@@ -18,7 +18,8 @@ var InputsRow = ({ items, title, paramPlaceholder = "", valuePlaceholder = "", d
|
|
|
18
18
|
value: "",
|
|
19
19
|
description: "",
|
|
20
20
|
rowId: v4()
|
|
21
|
-
}]
|
|
21
|
+
}];
|
|
22
|
+
const [rows, setRows] = useState(initialRows);
|
|
22
23
|
const updateRows = (newRows) => {
|
|
23
24
|
setRows(newRows);
|
|
24
25
|
onChange(newRows);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputsRow.js","names":[],"sources":["../../../../../src/Atomic/FormElements/InputsRow/InputsRow.tsx"],"sourcesContent":["import type { IInputRow, IInputsRowProps } from './InputsRow.interface';\nimport React, { useEffect, useState } from 'react';\nimport { Trash2 } from 'react-feather';\n\nimport { v4 as uuid } from 'uuid';\nimport Button from '../../UI/Button/Button';\n\nimport Input from '../Input/Input';\n\nimport './InputsRow.scss';\n\nconst InputsRow: React.FC<IInputsRowProps> = ({\n items,\n title,\n paramPlaceholder = '',\n valuePlaceholder = '',\n descriptionPlaceholder = '',\n onChange = () => {},\n}) => {\n const initialRows: IInputRow[] = items || [\n { param: '', value: '', description: '', rowId: uuid() },\n { param: '', value: '', description: '', rowId: uuid() },\n ];\n\n const [rows, setRows] = useState<IInputRow[]>(initialRows);\n\n const updateRows = (newRows: IInputRow[]): void => {\n setRows(newRows);\n onChange(newRows);\n };\n\n const handle = {\n addRow: () => {\n const newRows = [\n ...rows,\n { param: '', value: '', description: '', rowId: uuid() },\n ];\n updateRows(newRows);\n },\n\n change: (\n valueOrEvent: React.ChangeEvent<HTMLInputElement> | string,\n id: string,\n prop: keyof Omit<IInputRow, 'rowId'>,\n ) => {\n const value\n = typeof valueOrEvent === 'object' && 'target' in valueOrEvent\n ? valueOrEvent.target.value\n : valueOrEvent;\n\n const newRows = rows.map(row =>\n row.rowId === id ? { ...row, [prop]: value } : row,\n );\n\n updateRows(newRows);\n },\n\n delete: (id: string) => {\n const newRows = rows.filter(row => row.rowId !== id);\n updateRows(newRows);\n },\n };\n\n useEffect(() => {\n if (items) {\n setRows(items);\n }\n }, [items]);\n\n return (\n <div>\n {title && <div className=\"mb5\">{title}</div>}\n\n <div className=\"df\">\n <div className=\"inputs-row--param-label\">Parameter name(key)</div>\n <div className=\"inputs-row--value-label\">Value</div>\n <div className=\"inputs-row--description-label\">Description</div>\n </div>\n\n {rows.map(item => (\n <div className=\"j4 mb5\" key={item.rowId}>\n <div className=\"inputs-row--input mr10\">\n <Input\n // @ts-ignore\n onChange={e => handle.change(e, item.rowId, 'param')}\n value={item.param}\n placeholder={paramPlaceholder}\n />\n </div>\n\n <div className=\"inputs-row--input mr10\">\n <Input\n // @ts-ignore\n onChange={e => handle.change(e, item.rowId, 'value')}\n value={item.value}\n placeholder={valuePlaceholder}\n />\n </div>\n\n <div className=\"inputs-row--input mr10\">\n <Input\n // @ts-ignore\n onChange={e => handle.change(e, item.rowId, 'description')}\n value={item.description}\n placeholder={descriptionPlaceholder}\n />\n </div>\n\n {rows.length > 1 && (\n <div\n onClick={() => handle.delete(item.rowId)}\n className=\"inputs-row--trash\"\n >\n <Trash2 data-testid=\"trash-icon\" />\n </div>\n )}\n </div>\n ))}\n\n {rows.length < 10 && (\n <Button\n onClick={handle.addRow}\n label=\"Add row\"\n className=\"inputs-row--add-btn\"\n />\n )}\n </div>\n );\n};\n\nexport default InputsRow;\n"],"mappings":";;;;;;;;AAWA,IAAM,aAAwC,EAC5C,OACA,OACA,mBAAmB,IACnB,mBAAmB,IACnB,yBAAyB,IACzB,iBAAiB,CAAC,QACd;
|
|
1
|
+
{"version":3,"file":"InputsRow.js","names":[],"sources":["../../../../../src/Atomic/FormElements/InputsRow/InputsRow.tsx"],"sourcesContent":["import type { IInputRow, IInputsRowProps } from './InputsRow.interface';\nimport React, { useEffect, useState } from 'react';\nimport { Trash2 } from 'react-feather';\n\nimport { v4 as uuid } from 'uuid';\nimport Button from '../../UI/Button/Button';\n\nimport Input from '../Input/Input';\n\nimport './InputsRow.scss';\n\nconst InputsRow: React.FC<IInputsRowProps> = ({\n items,\n title,\n paramPlaceholder = '',\n valuePlaceholder = '',\n descriptionPlaceholder = '',\n onChange = () => {},\n}) => {\n const initialRows: IInputRow[] = items || [\n { param: '', value: '', description: '', rowId: uuid() },\n { param: '', value: '', description: '', rowId: uuid() },\n ];\n\n const [rows, setRows] = useState<IInputRow[]>(initialRows);\n\n const updateRows = (newRows: IInputRow[]): void => {\n setRows(newRows);\n onChange(newRows);\n };\n\n const handle = {\n addRow: () => {\n const newRows = [\n ...rows,\n { param: '', value: '', description: '', rowId: uuid() },\n ];\n updateRows(newRows);\n },\n\n change: (\n valueOrEvent: React.ChangeEvent<HTMLInputElement> | string,\n id: string,\n prop: keyof Omit<IInputRow, 'rowId'>,\n ) => {\n const value\n = typeof valueOrEvent === 'object' && 'target' in valueOrEvent\n ? valueOrEvent.target.value\n : valueOrEvent;\n\n const newRows = rows.map(row =>\n row.rowId === id ? { ...row, [prop]: value } : row,\n );\n\n updateRows(newRows);\n },\n\n delete: (id: string) => {\n const newRows = rows.filter(row => row.rowId !== id);\n updateRows(newRows);\n },\n };\n\n useEffect(() => {\n if (items) {\n setRows(items);\n }\n }, [items]);\n\n return (\n <div>\n {title && <div className=\"mb5\">{title}</div>}\n\n <div className=\"df\">\n <div className=\"inputs-row--param-label\">Parameter name(key)</div>\n <div className=\"inputs-row--value-label\">Value</div>\n <div className=\"inputs-row--description-label\">Description</div>\n </div>\n\n {rows.map(item => (\n <div className=\"j4 mb5\" key={item.rowId}>\n <div className=\"inputs-row--input mr10\">\n <Input\n // @ts-ignore\n onChange={e => handle.change(e, item.rowId, 'param')}\n value={item.param}\n placeholder={paramPlaceholder}\n />\n </div>\n\n <div className=\"inputs-row--input mr10\">\n <Input\n // @ts-ignore\n onChange={e => handle.change(e, item.rowId, 'value')}\n value={item.value}\n placeholder={valuePlaceholder}\n />\n </div>\n\n <div className=\"inputs-row--input mr10\">\n <Input\n // @ts-ignore\n onChange={e => handle.change(e, item.rowId, 'description')}\n value={item.description}\n placeholder={descriptionPlaceholder}\n />\n </div>\n\n {rows.length > 1 && (\n <div\n onClick={() => handle.delete(item.rowId)}\n className=\"inputs-row--trash\"\n >\n <Trash2 data-testid=\"trash-icon\" />\n </div>\n )}\n </div>\n ))}\n\n {rows.length < 10 && (\n <Button\n onClick={handle.addRow}\n label=\"Add row\"\n className=\"inputs-row--add-btn\"\n />\n )}\n </div>\n );\n};\n\nexport default InputsRow;\n"],"mappings":";;;;;;;;AAWA,IAAM,aAAwC,EAC5C,OACA,OACA,mBAAmB,IACnB,mBAAmB,IACnB,yBAAyB,IACzB,iBAAiB,CAAC,QACd;CACJ,MAAM,cAA2B,SAAS,CACxC;EAAE,OAAO;EAAI,OAAO;EAAI,aAAa;EAAI,OAAO,GAAK;CAAE,GACvD;EAAE,OAAO;EAAI,OAAO;EAAI,aAAa;EAAI,OAAO,GAAK;CAAE,CACzD;CAEA,MAAM,CAAC,MAAM,WAAW,SAAsB,WAAW;CAEzD,MAAM,cAAc,YAA+B;EACjD,QAAQ,OAAO;EACf,SAAS,OAAO;CAClB;CAEA,MAAM,SAAS;EACb,cAAc;GACZ,MAAM,UAAU,CACd,GAAG,MACH;IAAE,OAAO;IAAI,OAAO;IAAI,aAAa;IAAI,OAAO,GAAK;GAAE,CACzD;GACA,WAAW,OAAO;EACpB;EAEA,SACE,cACA,IACA,SACG;GACH,MAAM,QACF,OAAO,iBAAiB,YAAY,YAAY,eAC9C,aAAa,OAAO,QACpB;GAEN,MAAM,UAAU,KAAK,KAAI,QACvB,IAAI,UAAU,KAAK;IAAE,GAAG;KAAM,OAAO;GAAM,IAAI,GACjD;GAEA,WAAW,OAAO;EACpB;EAEA,SAAS,OAAe;GACtB,MAAM,UAAU,KAAK,QAAO,QAAO,IAAI,UAAU,EAAE;GACnD,WAAW,OAAO;EACpB;CACF;CAEA,gBAAgB;EACd,IAAI,OACF,QAAQ,KAAK;CAEjB,GAAG,CAAC,KAAK,CAAC;CAEV,OACE,qBAAC,OAAD,EAAA,UAAA;EACG,SAAS,oBAAC,OAAD;GAAK,WAAU;GAAO,UAAA;EAAW,CAAA;EAE3C,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,oBAAC,OAAD;KAAK,WAAU;KAA0B,UAAA;IAAwB,CAAA;IACjE,oBAAC,OAAD;KAAK,WAAU;KAA0B,UAAA;IAAU,CAAA;IACnD,oBAAC,OAAD;KAAK,WAAU;KAAgC,UAAA;IAAgB,CAAA;GAC5D;;EAEJ,KAAK,KAAI,SACR,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,oBAAC,OAAD;KAAK,WAAU;KACb,UAAA,oBAAC,OAAD;MAEE,WAAU,MAAK,OAAO,OAAO,GAAG,KAAK,OAAO,OAAO;MACnD,OAAO,KAAK;MACZ,aAAa;KACd,CAAA;IACE,CAAA;IAEL,oBAAC,OAAD;KAAK,WAAU;KACb,UAAA,oBAAC,OAAD;MAEE,WAAU,MAAK,OAAO,OAAO,GAAG,KAAK,OAAO,OAAO;MACnD,OAAO,KAAK;MACZ,aAAa;KACd,CAAA;IACE,CAAA;IAEL,oBAAC,OAAD;KAAK,WAAU;KACb,UAAA,oBAAC,OAAD;MAEE,WAAU,MAAK,OAAO,OAAO,GAAG,KAAK,OAAO,aAAa;MACzD,OAAO,KAAK;MACZ,aAAa;KACd,CAAA;IACE,CAAA;IAEJ,KAAK,SAAS,KACb,oBAAC,OAAD;KACE,eAAe,OAAO,OAAO,KAAK,KAAK;KACvC,WAAU;KAEV,UAAA,oBAAC,QAAD,EAAQ,eAAY,aAAc,CAAA;IAC/B,CAAA;GAEJ;EApCwB,GAAA,KAAK,KAoC7B,CACN;EAEA,KAAK,SAAS,MACb,oBAAC,QAAD;GACE,SAAS,OAAO;GAChB,OAAM;GACN,WAAU;EACX,CAAA;CAEA,EAAA,CAAA;AAET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Label.js","names":[],"sources":["../../../../../src/Atomic/FormElements/Label/Label.tsx"],"sourcesContent":["import type { ILabelProps } from './Label.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport Hint from '../../UI/Hint/Hint';\n\nimport './Label.scss';\n\nconst CN = 'label';\n\nconst Label: React.FC<ILabelProps> = ({\n className = '',\n label = '',\n note,\n hint,\n isRequired,\n isLabelBolt,\n onClickHintCallback,\n error = null,\n isAccessability = false,\n isAccessabilityHint = false,\n testId = CN,\n}) => {\n const correctLabel = isRequired\n ? (\n <>\n {label}\n {' '}\n <span className=\"label_asterisk\">*</span>\n {' '}\n {note && <span className=\"label_note\">{note}</span>}\n {hint && (\n <Hint\n key={`hint-${label}`}\n id={`hint-${label}`}\n children={null}\n isLoading={false}\n isAccessability={isAccessabilityHint}\n hint={hint.text}\n icon={hint.icon}\n variant={hint.variant}\n side={hint.hintSide}\n className=\"label-hint\"\n onClickCallback={onClickHintCallback}\n />\n )}\n </>\n )\n : (\n <>\n {label}\n {' '}\n {note && <span className=\"label_note\">{note}</span>}\n {hint && (\n <Hint\n isAccessability={isAccessabilityHint}\n hint={hint.text}\n icon={hint.icon}\n variant={hint.variant}\n side={hint.hintSide}\n className=\"label-hint\"\n onClickCallback={onClickHintCallback}\n key={undefined}\n id={undefined}\n children={undefined}\n isLoading={undefined}\n />\n )}\n </>\n );\n\n return (\n <span\n tabIndex={isAccessability ? 0 : -1}\n aria-label={label}\n className={cn(CN, { label_bold: isLabelBolt, error, isRequired }, className)}\n data-testid={testId}\n >\n <span className=\"label_text\" data-testid=\"label-text\">\n {correctLabel}\n </span>\n </span>\n );\n};\n\nexport default Label;\n"],"mappings":";;;;;;AASA,IAAM,KAAK;AAEX,IAAM,SAAgC,EACpC,YAAY,IACZ,QAAQ,IACR,MACA,MACA,YACA,aACA,qBACA,QAAQ,MACR,kBAAkB,OAClB,sBAAsB,OACtB,SAAS,SACL;CACJ,MAAM,eAAe,aAEf,qBAAA,UAAA,EAAA,UAAA;EACG;EACA;EACD,oBAAC,QAAD;GAAM,WAAU;
|
|
1
|
+
{"version":3,"file":"Label.js","names":[],"sources":["../../../../../src/Atomic/FormElements/Label/Label.tsx"],"sourcesContent":["import type { ILabelProps } from './Label.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport Hint from '../../UI/Hint/Hint';\n\nimport './Label.scss';\n\nconst CN = 'label';\n\nconst Label: React.FC<ILabelProps> = ({\n className = '',\n label = '',\n note,\n hint,\n isRequired,\n isLabelBolt,\n onClickHintCallback,\n error = null,\n isAccessability = false,\n isAccessabilityHint = false,\n testId = CN,\n}) => {\n const correctLabel = isRequired\n ? (\n <>\n {label}\n {' '}\n <span className=\"label_asterisk\">*</span>\n {' '}\n {note && <span className=\"label_note\">{note}</span>}\n {hint && (\n <Hint\n key={`hint-${label}`}\n id={`hint-${label}`}\n children={null}\n isLoading={false}\n isAccessability={isAccessabilityHint}\n hint={hint.text}\n icon={hint.icon}\n variant={hint.variant}\n side={hint.hintSide}\n className=\"label-hint\"\n onClickCallback={onClickHintCallback}\n />\n )}\n </>\n )\n : (\n <>\n {label}\n {' '}\n {note && <span className=\"label_note\">{note}</span>}\n {hint && (\n <Hint\n isAccessability={isAccessabilityHint}\n hint={hint.text}\n icon={hint.icon}\n variant={hint.variant}\n side={hint.hintSide}\n className=\"label-hint\"\n onClickCallback={onClickHintCallback}\n key={undefined}\n id={undefined}\n children={undefined}\n isLoading={undefined}\n />\n )}\n </>\n );\n\n return (\n <span\n tabIndex={isAccessability ? 0 : -1}\n aria-label={label}\n className={cn(CN, { label_bold: isLabelBolt, error, isRequired }, className)}\n data-testid={testId}\n >\n <span className=\"label_text\" data-testid=\"label-text\">\n {correctLabel}\n </span>\n </span>\n );\n};\n\nexport default Label;\n"],"mappings":";;;;;;AASA,IAAM,KAAK;AAEX,IAAM,SAAgC,EACpC,YAAY,IACZ,QAAQ,IACR,MACA,MACA,YACA,aACA,qBACA,QAAQ,MACR,kBAAkB,OAClB,sBAAsB,OACtB,SAAS,SACL;CACJ,MAAM,eAAe,aAEf,qBAAA,UAAA,EAAA,UAAA;EACG;EACA;EACD,oBAAC,QAAD;GAAM,WAAU;GAAiB,UAAA;EAAO,CAAA;EACvC;EACA,QAAQ,oBAAC,QAAD;GAAM,WAAU;GAAc,UAAA;EAAW,CAAA;EACjD,QACC,oBAAC,MAAD;GAEE,IAAI,QAAQ;GACZ,UAAU;GACV,WAAW;GACX,iBAAiB;GACjB,MAAM,KAAK;GACX,MAAM,KAAK;GACX,SAAS,KAAK;GACd,MAAM,KAAK;GACX,WAAU;GACV,iBAAiB;EAClB,GAXM,QAAQ,OAWd;CAEH,EAAA,CAAA,IAGF,qBAAA,UAAA,EAAA,UAAA;EACG;EACA;EACA,QAAQ,oBAAC,QAAD;GAAM,WAAU;GAAc,UAAA;EAAW,CAAA;EACjD,QACC,oBAAC,MAAD;GACE,iBAAiB;GACjB,MAAM,KAAK;GACX,MAAM,KAAK;GACX,SAAS,KAAK;GACd,MAAM,KAAK;GACX,WAAU;GACV,iBAAiB;GAEjB,IAAI,KAAA;GACJ,UAAU,KAAA;GACV,WAAW,KAAA;EACZ,GAJM,KAAA,CAIN;CAEH,EAAA,CAAA;CAGR,OACE,oBAAC,QAAD;EACE,UAAU,kBAAkB,IAAI;EAChC,cAAY;EACZ,WAAW,GAAG,IAAI;GAAE,YAAY;GAAa;GAAO;EAAW,GAAG,SAAS;EAC3E,eAAa;EAEb,UAAA,oBAAC,QAAD;GAAM,WAAU;GAAa,eAAY;GACtC,UAAA;EACG,CAAA;CACF,CAAA;AAEV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileCalendar.js","names":[],"sources":["../../../../../src/Atomic/FormElements/MobileCalendar/MobileCalendar.tsx"],"sourcesContent":["import type { DurationInputArg2, Moment } from 'moment';\n\nimport type { ReactElement, ReactNode, SetStateAction } from 'react';\nimport type { IMobileCalendarProps } from './MobileCalendar.interface';\nimport moment from 'moment';\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { ChevronDown, ChevronUp } from 'react-feather';\nimport './MobileCalendar.scss';\n\nconst defaultClasses = {\n wrapper: '',\n label: '',\n body: '',\n\n yearsBlock: '',\n yearsList: '',\n yearsListItem: '',\n\n monthsBlock: '',\n monthsList: '',\n monthsListItem: '',\n\n daysBlock: '',\n daysList: '',\n daysListItem: '',\n\n prevItem: '',\n nextItem: '',\n activeItem: '',\n};\n\nfunction MobileCalendar({\n min = moment().subtract('10', 'years'),\n max = moment().add('10', 'years'),\n value = moment(),\n rows = 5,\n label = '',\n timeout = 75,\n isMobile = true,\n showSelectedDate = false,\n listItemHeight = 32,\n\n classes = defaultClasses,\n onChange = () => {},\n onMinDateReached = () => {},\n onMaxDateReached = () => {},\n}: IMobileCalendarProps): ReactElement {\n const [date, setDate] = useState(value ? (moment.isMoment(value) ? value.clone() : moment(value)) : moment());\n const [minDate, _setMinDate] = useState(moment.isMoment(min) ? min.clone() : moment(min));\n const [maxDate, _setMaxDate] = useState(moment.isMoment(max) ? max.clone() : moment(max));\n\n const [_isMouseDown, setIsMouseDown] = useState(false);\n const [_mouseDownOn, setMouseDownOn] = useState<SetStateAction<{ type: string; value: number } | null>>(null);\n\n const [touchY, setTouchY] = useState<SetStateAction<number | null>>(null);\n const [touchType, setTouchType] = useState<SetStateAction<string | null>>(null);\n const [_touchTimestamp, setTouchTimestamp] = useState<SetStateAction<number | null>>(null);\n\n const [scrollDirection, setScrollDirection] = useState(0);\n\n const monthsListRef = useRef<HTMLDivElement | null>(null);\n const daysListRef = useRef<HTMLDivElement | null>(null);\n const yearsListRef = useRef(null);\n\n const dateRef = useRef<Moment | null>(null);\n const intervalRef = useRef<null | ReturnType<typeof setInterval>>(null);\n\n // --HANDLERS--//\n const changeItem = (type: string, value: number): void => {\n setScrollDirection(value);\n setDate((date) => {\n const newDate = moment(date).add(value, (type as DurationInputArg2));\n\n if (moment(newDate).isBefore(minDate)) return minDate;\n if (moment(newDate).isAfter(maxDate)) return maxDate;\n\n return newDate;\n });\n setTimeout(() => {\n setScrollDirection(0);\n }, 50);\n };\n\n const checkAvailability = (type: string, value: number): boolean => {\n if (!dateRef?.current) return false;\n\n const newDate = moment(dateRef?.current).add(value, (type as DurationInputArg2));\n\n if (moment(newDate).isBefore(minDate)) return false;\n if (moment(newDate).isAfter(maxDate)) return false;\n\n return true;\n };\n const onArrowMouseDown = (type: string, value: number): void => {\n setIsMouseDown(true);\n\n setMouseDownOn({ type, value });\n };\n const onArrowMouseUp = (): void => {\n setIsMouseDown(false);\n setMouseDownOn(null);\n };\n const onWheel = (e: WheelEvent, type?: string): void => {\n e.preventDefault();\n\n const { deltaY } = e;\n const top = window.scrollX;\n const left = window.scrollY;\n\n window.scrollTo({ top, left });\n if (type) {\n changeItem(type, deltaY < 0 ? -1 : 1);\n }\n };\n\n const onTouchEnd = (e: TouchEvent, startY: number, startTime: number, touchType: string): void => {\n const { timeStamp, changedTouches } = e;\n const { pageY } = changedTouches[0];\n\n const path = Math.abs(startY - pageY); // in px\n const time = timeStamp - startTime; // ms\n const pxPerMs = path / time;\n\n if (pxPerMs > 0.65)\n innertionScroll({ startY, pageY, timeStamp, startTime, touchType });\n else setTouchType(null);\n\n setTouchY(null);\n };\n\n const onTouchStart = (e: TouchEvent, type: string): void => {\n e.preventDefault();\n\n if (intervalRef?.current) {\n clearInterval(intervalRef?.current);\n intervalRef.current = null;\n }\n\n const { timeStamp, changedTouches } = e;\n const { pageY } = changedTouches[0];\n\n setTouchY(pageY);\n setTouchTimestamp(timeStamp);\n setTouchType(type);\n\n window.addEventListener(\n 'touchend',\n e => onTouchEnd(e, pageY, timeStamp, type),\n { once: true },\n );\n };\n const onTouchMove = (e: React.TouchEvent<HTMLDivElement>): void => {\n if (!touchY || !touchType) return;\n\n const { timeStamp, changedTouches } = e;\n const { pageY } = changedTouches[0];\n\n const deltaY = Number(touchY) - pageY;\n\n if (Math.abs(deltaY) < listItemHeight) return;\n\n const direction = deltaY < 0 ? -1 : 1;\n\n setScrollDirection(direction);\n\n changeItem(String(touchType), direction);\n setTouchY(pageY);\n setTouchTimestamp(timeStamp);\n };\n\n function innertionScroll({\n startY,\n pageY,\n timeStamp,\n startTime,\n touchType,\n }: {\n startY: number;\n pageY: number;\n timeStamp: number;\n startTime: number;\n touchType: string;\n }): void {\n const path = Math.abs(startY - pageY); // in px\n const time = timeStamp - startTime; // ms\n const pxPerMs = Math.ceil(path / time); // speed\n\n const S = (pxPerMs / 2) * time;\n const blocks = Math.ceil((S / listItemHeight) * pxPerMs);\n\n let i = 1;\n\n intervalRef.current = setInterval(() => {\n if (\n checkAvailability(touchType, startY - pageY < 0 ? -1 : 1)\n && i <= blocks\n ) {\n changeItem(touchType, startY - pageY < 0 ? -1 : 1);\n }\n else {\n setTouchType(null);\n if (intervalRef?.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n intervalRef.current = null;\n }\n\n ++i;\n }, timeout);\n\n // for(let i = 1; i <= blocks; ++i){\n // // timeout = i*pxPerMs+Math.pow(i,2)*10;\n // timeout += 80;\n // if(checkAvailability(touchType, startY-pageY < 0 ? -1 : 1, date)){\n // setTimeout(() => {\n // console.log({timeout})\n // changeItem(touchType, startY-pageY < 0 ? -1 : 1);\n // }, timeout)\n // }\n\n // }\n };\n\n // --FUNCTIONS--//\n // const intervalWorker = (): void => {\n // if (!mouseDownOn) return;\n\n // const { type, value } = mouseDownOn;\n // changeItem(type, value);\n // };\n const getList = (type: string, format: string): string[] => {\n const list: string[] = [];\n\n const renderRows = rows;\n\n for (let i = (renderRows - 1) / 2; i >= ((renderRows - 1) / 2) * -1; --i) {\n list.push(moment(date).subtract(i, (type as DurationInputArg2)).format(format));\n }\n\n return list;\n };\n const getMonthList = (): string[] => getList('months', 'MMMM');\n const getDaysList = (): string[] => getList('days', 'D');\n const getYearsList = (): string[] => getList('years', 'YYYY');\n\n // --OBSERVERS--//\n useEffect(() => {\n if (moment(date.format('L'), 'L', true).isBefore(minDate.format('L'), 'day'))\n setDate(minDate);\n if (moment(date.format('L'), 'L', true).isAfter(maxDate.format('L'), 'day')) setDate(maxDate);\n }, []);\n\n // Events Observer\n useEffect(() => {\n document.addEventListener('mouseup', onArrowMouseUp);\n return () => {\n document.removeEventListener('mouseup', onArrowMouseUp);\n };\n }, []);\n\n useEffect(() => {\n onChange(date);\n dateRef.current = date;\n\n if (moment(date.format('L'), 'L', true).isSame(minDate.format('L'), 'day'))\n onMinDateReached(minDate);\n if (moment(date.format('L'), 'L', true).isSame(maxDate.format('L'), 'day'))\n onMaxDateReached(maxDate);\n }, [date]);\n\n // monthList Events\n useEffect(() => {\n if (!monthsListRef?.current) return;\n\n const handleWheel = (e: Event): void => onWheel(e as WheelEvent, 'months');\n const handleTouchStart = (e: Event): void => onTouchStart(e as TouchEvent, 'months');\n\n monthsListRef.current.addEventListener('wheel', handleWheel, { passive: false });\n monthsListRef.current.addEventListener('touchstart', handleTouchStart, { passive: false });\n\n return () => {\n monthsListRef.current?.removeEventListener('wheel', handleWheel);\n monthsListRef.current?.removeEventListener('touchstart', handleTouchStart);\n };\n }, [monthsListRef]);\n\n // daysList Events\n useEffect(() => {\n if (!daysListRef?.current) return;\n\n const handleWheel = (e: Event): void => onWheel(e as WheelEvent, 'days');\n const handleTouchStart = (e: Event): void => onTouchStart(e as TouchEvent, 'days');\n\n const el = daysListRef.current;\n\n el.addEventListener('wheel', handleWheel, { passive: false });\n el.addEventListener('touchstart', handleTouchStart, { passive: false });\n\n return () => {\n el.removeEventListener('wheel', handleWheel);\n el.removeEventListener('touchstart', handleTouchStart);\n };\n }, [daysListRef]);\n\n // yearsList Events\n useEffect(() => {\n if (!yearsListRef?.current) return;\n\n const handleWheel = (e: Event): void => onWheel(e as WheelEvent, 'years');\n const handleTouchStart = (e: Event): void => onTouchStart(e as TouchEvent, 'years');\n\n const el = yearsListRef.current as HTMLElement;\n\n el.addEventListener('wheel', handleWheel, { passive: false });\n el.addEventListener('touchstart', handleTouchStart, { passive: false });\n\n return () => {\n el.removeEventListener('wheel', handleWheel);\n el.removeEventListener('touchstart', handleTouchStart);\n };\n }, [yearsListRef]);\n\n // --RENDER--//\n const renderMonthsList = (): ReactNode => {\n const half = (rows - 1) / 2;\n return getMonthList().map((month, i) => (\n <div\n className={`mobile-calendar_wrapper_body_months-list--item ${i === half ? 'active' : ''} ${\n i === 0 || i === rows - 1 ? 'transparent' : ''\n } ${classes?.monthsListItem} ${i === half ? classes?.activeItem : ''}`}\n key={`month-${month}`}\n onClick={\n touchY\n ? undefined\n : () => (i - half === 0 ? {} : changeItem('months', i - half))\n }\n attr-scroll-direction={touchType === 'months' ? scrollDirection : 0}\n attr-is-scrolling={touchType === 'months' ? 1 : 0}\n >\n {month}\n </div>\n ));\n };\n const renderDaysList = (): ReactNode => {\n const half = (rows - 1) / 2;\n return getDaysList().map((day, i) => (\n <div\n className={`mobile-calendar_wrapper_body_days-list--item ${i === half ? 'active' : ''} ${\n i === 0 || i === rows - 1 ? 'transparent' : ''\n } ${classes?.daysListItem} ${i === half ? classes?.activeItem : ''}`}\n key={`day-${day}`}\n onClick={() => (i - half === 0 ? {} : changeItem('days', i - half))}\n attr-scroll-direction={touchType === 'days' ? scrollDirection : 0}\n attr-is-scrolling={touchType === 'days' ? 1 : 0}\n >\n {day}\n </div>\n ));\n };\n const renderYearsList = (): ReactNode => {\n const half = (rows - 1) / 2;\n return getYearsList().map((year, i) => (\n <div\n className={`mobile-calendar_wrapper_body_years-list--item ${i === half ? 'active' : ''} ${\n i === 0 || i === rows - 1 ? 'transparent' : ''\n } ${classes?.yearsListItem} ${i === half ? classes?.activeItem : ''}`}\n key={`year-${year}`}\n onClick={() => (i - half === 0 ? {} : changeItem('years', i - half))}\n attr-scroll-direction={touchType === 'years' ? scrollDirection : 0}\n attr-is-scrolling={touchType === 'years' ? 1 : 0}\n >\n {year}\n </div>\n ));\n };\n\n const renderMonthsBlock = (): ReactNode => {\n return (\n <div\n className={`mobile-calendar_wrapper_body_months ${classes?.monthsBlock}`}\n >\n <div\n className={`mobile-calendar_wrapper_body_months--prev ${classes?.prevItem}`}\n >\n <ChevronUp\n onClick={() => changeItem('months', -1)}\n onMouseDown={() => onArrowMouseDown('months', -1)}\n onMouseUp={onArrowMouseUp}\n />\n </div>\n <div\n className={`mobile-calendar_wrapper_body_months-list ${classes?.monthsList}`}\n ref={monthsListRef}\n >\n {renderMonthsList()}\n {isMobile && (\n <div className=\"mobile-calendar_wrapper_body_months-list_touch-zone\"></div>\n )}\n </div>\n <div\n className={`mobile-calendar_wrapper_body_months--next ${classes?.nextItem}`}\n >\n <ChevronDown\n onClick={() => changeItem('months', 1)}\n onMouseDown={() => onArrowMouseDown('months', 1)}\n onMouseUp={onArrowMouseUp}\n />\n </div>\n </div>\n );\n };\n const renderDaysBlock = (): ReactNode => {\n return (\n <div\n className={`mobile-calendar_wrapper_body_days ${classes?.daysBlock}`}\n >\n <div\n className={`mobile-calendar_wrapper_body_days--prev ${classes?.prevItem}`}\n >\n <ChevronUp\n onClick={() => changeItem('days', -1)}\n onMouseDown={() => onArrowMouseDown('days', -1)}\n onMouseUp={onArrowMouseUp}\n />\n </div>\n <div\n className={`mobile-calendar_wrapper_body_days-list ${classes?.daysList}`}\n ref={daysListRef}\n >\n {renderDaysList()}\n {isMobile && (\n <div className=\"mobile-calendar_wrapper_body_days-list_touch-zone\"></div>\n )}\n </div>\n <div\n className={`mobile-calendar_wrapper_body_days--next ${classes?.nextItem}`}\n >\n <ChevronDown\n onClick={() => changeItem('days', 1)}\n onMouseDown={() => onArrowMouseDown('days', 1)}\n onMouseUp={onArrowMouseUp}\n />\n </div>\n </div>\n );\n };\n const renderYearsBlock = (): ReactNode => {\n return (\n <div\n className={`mobile-calendar_wrapper_body_years ${classes?.yearsBlock}`}\n >\n <div\n className={`mobile-calendar_wrapper_body_years--prev ${classes?.prevItem}`}\n >\n <ChevronUp\n onClick={() => changeItem('years', -1)}\n onMouseDown={() => onArrowMouseDown('years', -1)}\n onMouseUp={onArrowMouseUp}\n />\n </div>\n <div\n className={`mobile-calendar_wrapper_body_years-list ${classes?.yearsList}`}\n ref={yearsListRef}\n >\n {renderYearsList()}\n {isMobile && (\n <div className=\"mobile-calendar_wrapper_body_years-list_touch-zone\"></div>\n )}\n </div>\n <div\n className={`mobile-calendar_wrapper_body_years--next ${classes?.nextItem}`}\n >\n <ChevronDown\n onClick={() => changeItem('years', 1)}\n onMouseDown={() => onArrowMouseDown('years', 1)}\n onMouseUp={onArrowMouseUp}\n />\n </div>\n </div>\n );\n };\n\n return (\n <div\n className={`mobile-calendar_wrapper ${classes?.wrapper}`}\n onTouchMove={(e: React.TouchEvent<HTMLDivElement>) => onTouchMove(e)}\n >\n <div className={`mobile-calendar_wrapper_label ${classes?.label}`}>\n {label}\n </div>\n {showSelectedDate && (\n <div className={`mobile-calendar_wrapper_label ${classes?.label}`}>\n {moment(date).format('LL')}\n </div>\n )}\n <div className={`mobile-calendar_wrapper_body ${classes?.body}`}>\n {renderMonthsBlock()}\n {renderDaysBlock()}\n {renderYearsBlock()}\n </div>\n </div>\n );\n}\n\nexport default MobileCalendar;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MobileCalendar.js","names":[],"sources":["../../../../../src/Atomic/FormElements/MobileCalendar/MobileCalendar.tsx"],"sourcesContent":["import type { DurationInputArg2, Moment } from 'moment';\n\nimport type { ReactElement, ReactNode, SetStateAction } from 'react';\nimport type { IMobileCalendarProps } from './MobileCalendar.interface';\nimport moment from 'moment';\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { ChevronDown, ChevronUp } from 'react-feather';\nimport './MobileCalendar.scss';\n\nconst defaultClasses = {\n wrapper: '',\n label: '',\n body: '',\n\n yearsBlock: '',\n yearsList: '',\n yearsListItem: '',\n\n monthsBlock: '',\n monthsList: '',\n monthsListItem: '',\n\n daysBlock: '',\n daysList: '',\n daysListItem: '',\n\n prevItem: '',\n nextItem: '',\n activeItem: '',\n};\n\nfunction MobileCalendar({\n min = moment().subtract('10', 'years'),\n max = moment().add('10', 'years'),\n value = moment(),\n rows = 5,\n label = '',\n timeout = 75,\n isMobile = true,\n showSelectedDate = false,\n listItemHeight = 32,\n\n classes = defaultClasses,\n onChange = () => {},\n onMinDateReached = () => {},\n onMaxDateReached = () => {},\n}: IMobileCalendarProps): ReactElement {\n const [date, setDate] = useState(value ? (moment.isMoment(value) ? value.clone() : moment(value)) : moment());\n const [minDate, _setMinDate] = useState(moment.isMoment(min) ? min.clone() : moment(min));\n const [maxDate, _setMaxDate] = useState(moment.isMoment(max) ? max.clone() : moment(max));\n\n const [_isMouseDown, setIsMouseDown] = useState(false);\n const [_mouseDownOn, setMouseDownOn] = useState<SetStateAction<{ type: string; value: number } | null>>(null);\n\n const [touchY, setTouchY] = useState<SetStateAction<number | null>>(null);\n const [touchType, setTouchType] = useState<SetStateAction<string | null>>(null);\n const [_touchTimestamp, setTouchTimestamp] = useState<SetStateAction<number | null>>(null);\n\n const [scrollDirection, setScrollDirection] = useState(0);\n\n const monthsListRef = useRef<HTMLDivElement | null>(null);\n const daysListRef = useRef<HTMLDivElement | null>(null);\n const yearsListRef = useRef(null);\n\n const dateRef = useRef<Moment | null>(null);\n const intervalRef = useRef<null | ReturnType<typeof setInterval>>(null);\n\n // --HANDLERS--//\n const changeItem = (type: string, value: number): void => {\n setScrollDirection(value);\n setDate((date) => {\n const newDate = moment(date).add(value, (type as DurationInputArg2));\n\n if (moment(newDate).isBefore(minDate)) return minDate;\n if (moment(newDate).isAfter(maxDate)) return maxDate;\n\n return newDate;\n });\n setTimeout(() => {\n setScrollDirection(0);\n }, 50);\n };\n\n const checkAvailability = (type: string, value: number): boolean => {\n if (!dateRef?.current) return false;\n\n const newDate = moment(dateRef?.current).add(value, (type as DurationInputArg2));\n\n if (moment(newDate).isBefore(minDate)) return false;\n if (moment(newDate).isAfter(maxDate)) return false;\n\n return true;\n };\n const onArrowMouseDown = (type: string, value: number): void => {\n setIsMouseDown(true);\n\n setMouseDownOn({ type, value });\n };\n const onArrowMouseUp = (): void => {\n setIsMouseDown(false);\n setMouseDownOn(null);\n };\n const onWheel = (e: WheelEvent, type?: string): void => {\n e.preventDefault();\n\n const { deltaY } = e;\n const top = window.scrollX;\n const left = window.scrollY;\n\n window.scrollTo({ top, left });\n if (type) {\n changeItem(type, deltaY < 0 ? -1 : 1);\n }\n };\n\n const onTouchEnd = (e: TouchEvent, startY: number, startTime: number, touchType: string): void => {\n const { timeStamp, changedTouches } = e;\n const { pageY } = changedTouches[0];\n\n const path = Math.abs(startY - pageY); // in px\n const time = timeStamp - startTime; // ms\n const pxPerMs = path / time;\n\n if (pxPerMs > 0.65)\n innertionScroll({ startY, pageY, timeStamp, startTime, touchType });\n else setTouchType(null);\n\n setTouchY(null);\n };\n\n const onTouchStart = (e: TouchEvent, type: string): void => {\n e.preventDefault();\n\n if (intervalRef?.current) {\n clearInterval(intervalRef?.current);\n intervalRef.current = null;\n }\n\n const { timeStamp, changedTouches } = e;\n const { pageY } = changedTouches[0];\n\n setTouchY(pageY);\n setTouchTimestamp(timeStamp);\n setTouchType(type);\n\n window.addEventListener(\n 'touchend',\n e => onTouchEnd(e, pageY, timeStamp, type),\n { once: true },\n );\n };\n const onTouchMove = (e: React.TouchEvent<HTMLDivElement>): void => {\n if (!touchY || !touchType) return;\n\n const { timeStamp, changedTouches } = e;\n const { pageY } = changedTouches[0];\n\n const deltaY = Number(touchY) - pageY;\n\n if (Math.abs(deltaY) < listItemHeight) return;\n\n const direction = deltaY < 0 ? -1 : 1;\n\n setScrollDirection(direction);\n\n changeItem(String(touchType), direction);\n setTouchY(pageY);\n setTouchTimestamp(timeStamp);\n };\n\n function innertionScroll({\n startY,\n pageY,\n timeStamp,\n startTime,\n touchType,\n }: {\n startY: number;\n pageY: number;\n timeStamp: number;\n startTime: number;\n touchType: string;\n }): void {\n const path = Math.abs(startY - pageY); // in px\n const time = timeStamp - startTime; // ms\n const pxPerMs = Math.ceil(path / time); // speed\n\n const S = (pxPerMs / 2) * time;\n const blocks = Math.ceil((S / listItemHeight) * pxPerMs);\n\n let i = 1;\n\n intervalRef.current = setInterval(() => {\n if (\n checkAvailability(touchType, startY - pageY < 0 ? -1 : 1)\n && i <= blocks\n ) {\n changeItem(touchType, startY - pageY < 0 ? -1 : 1);\n }\n else {\n setTouchType(null);\n if (intervalRef?.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n intervalRef.current = null;\n }\n\n ++i;\n }, timeout);\n\n // for(let i = 1; i <= blocks; ++i){\n // // timeout = i*pxPerMs+Math.pow(i,2)*10;\n // timeout += 80;\n // if(checkAvailability(touchType, startY-pageY < 0 ? -1 : 1, date)){\n // setTimeout(() => {\n // console.log({timeout})\n // changeItem(touchType, startY-pageY < 0 ? -1 : 1);\n // }, timeout)\n // }\n\n // }\n };\n\n // --FUNCTIONS--//\n // const intervalWorker = (): void => {\n // if (!mouseDownOn) return;\n\n // const { type, value } = mouseDownOn;\n // changeItem(type, value);\n // };\n const getList = (type: string, format: string): string[] => {\n const list: string[] = [];\n\n const renderRows = rows;\n\n for (let i = (renderRows - 1) / 2; i >= ((renderRows - 1) / 2) * -1; --i) {\n list.push(moment(date).subtract(i, (type as DurationInputArg2)).format(format));\n }\n\n return list;\n };\n const getMonthList = (): string[] => getList('months', 'MMMM');\n const getDaysList = (): string[] => getList('days', 'D');\n const getYearsList = (): string[] => getList('years', 'YYYY');\n\n // --OBSERVERS--//\n useEffect(() => {\n if (moment(date.format('L'), 'L', true).isBefore(minDate.format('L'), 'day'))\n setDate(minDate);\n if (moment(date.format('L'), 'L', true).isAfter(maxDate.format('L'), 'day')) setDate(maxDate);\n }, []);\n\n // Events Observer\n useEffect(() => {\n document.addEventListener('mouseup', onArrowMouseUp);\n return () => {\n document.removeEventListener('mouseup', onArrowMouseUp);\n };\n }, []);\n\n useEffect(() => {\n onChange(date);\n dateRef.current = date;\n\n if (moment(date.format('L'), 'L', true).isSame(minDate.format('L'), 'day'))\n onMinDateReached(minDate);\n if (moment(date.format('L'), 'L', true).isSame(maxDate.format('L'), 'day'))\n onMaxDateReached(maxDate);\n }, [date]);\n\n // monthList Events\n useEffect(() => {\n if (!monthsListRef?.current) return;\n\n const handleWheel = (e: Event): void => onWheel(e as WheelEvent, 'months');\n const handleTouchStart = (e: Event): void => onTouchStart(e as TouchEvent, 'months');\n\n monthsListRef.current.addEventListener('wheel', handleWheel, { passive: false });\n monthsListRef.current.addEventListener('touchstart', handleTouchStart, { passive: false });\n\n return () => {\n monthsListRef.current?.removeEventListener('wheel', handleWheel);\n monthsListRef.current?.removeEventListener('touchstart', handleTouchStart);\n };\n }, [monthsListRef]);\n\n // daysList Events\n useEffect(() => {\n if (!daysListRef?.current) return;\n\n const handleWheel = (e: Event): void => onWheel(e as WheelEvent, 'days');\n const handleTouchStart = (e: Event): void => onTouchStart(e as TouchEvent, 'days');\n\n const el = daysListRef.current;\n\n el.addEventListener('wheel', handleWheel, { passive: false });\n el.addEventListener('touchstart', handleTouchStart, { passive: false });\n\n return () => {\n el.removeEventListener('wheel', handleWheel);\n el.removeEventListener('touchstart', handleTouchStart);\n };\n }, [daysListRef]);\n\n // yearsList Events\n useEffect(() => {\n if (!yearsListRef?.current) return;\n\n const handleWheel = (e: Event): void => onWheel(e as WheelEvent, 'years');\n const handleTouchStart = (e: Event): void => onTouchStart(e as TouchEvent, 'years');\n\n const el = yearsListRef.current as HTMLElement;\n\n el.addEventListener('wheel', handleWheel, { passive: false });\n el.addEventListener('touchstart', handleTouchStart, { passive: false });\n\n return () => {\n el.removeEventListener('wheel', handleWheel);\n el.removeEventListener('touchstart', handleTouchStart);\n };\n }, [yearsListRef]);\n\n // --RENDER--//\n const renderMonthsList = (): ReactNode => {\n const half = (rows - 1) / 2;\n return getMonthList().map((month, i) => (\n <div\n className={`mobile-calendar_wrapper_body_months-list--item ${i === half ? 'active' : ''} ${\n i === 0 || i === rows - 1 ? 'transparent' : ''\n } ${classes?.monthsListItem} ${i === half ? classes?.activeItem : ''}`}\n key={`month-${month}`}\n onClick={\n touchY\n ? undefined\n : () => (i - half === 0 ? {} : changeItem('months', i - half))\n }\n attr-scroll-direction={touchType === 'months' ? scrollDirection : 0}\n attr-is-scrolling={touchType === 'months' ? 1 : 0}\n >\n {month}\n </div>\n ));\n };\n const renderDaysList = (): ReactNode => {\n const half = (rows - 1) / 2;\n return getDaysList().map((day, i) => (\n <div\n className={`mobile-calendar_wrapper_body_days-list--item ${i === half ? 'active' : ''} ${\n i === 0 || i === rows - 1 ? 'transparent' : ''\n } ${classes?.daysListItem} ${i === half ? classes?.activeItem : ''}`}\n key={`day-${day}`}\n onClick={() => (i - half === 0 ? {} : changeItem('days', i - half))}\n attr-scroll-direction={touchType === 'days' ? scrollDirection : 0}\n attr-is-scrolling={touchType === 'days' ? 1 : 0}\n >\n {day}\n </div>\n ));\n };\n const renderYearsList = (): ReactNode => {\n const half = (rows - 1) / 2;\n return getYearsList().map((year, i) => (\n <div\n className={`mobile-calendar_wrapper_body_years-list--item ${i === half ? 'active' : ''} ${\n i === 0 || i === rows - 1 ? 'transparent' : ''\n } ${classes?.yearsListItem} ${i === half ? classes?.activeItem : ''}`}\n key={`year-${year}`}\n onClick={() => (i - half === 0 ? {} : changeItem('years', i - half))}\n attr-scroll-direction={touchType === 'years' ? scrollDirection : 0}\n attr-is-scrolling={touchType === 'years' ? 1 : 0}\n >\n {year}\n </div>\n ));\n };\n\n const renderMonthsBlock = (): ReactNode => {\n return (\n <div\n className={`mobile-calendar_wrapper_body_months ${classes?.monthsBlock}`}\n >\n <div\n className={`mobile-calendar_wrapper_body_months--prev ${classes?.prevItem}`}\n >\n <ChevronUp\n onClick={() => changeItem('months', -1)}\n onMouseDown={() => onArrowMouseDown('months', -1)}\n onMouseUp={onArrowMouseUp}\n />\n </div>\n <div\n className={`mobile-calendar_wrapper_body_months-list ${classes?.monthsList}`}\n ref={monthsListRef}\n >\n {renderMonthsList()}\n {isMobile && (\n <div className=\"mobile-calendar_wrapper_body_months-list_touch-zone\"></div>\n )}\n </div>\n <div\n className={`mobile-calendar_wrapper_body_months--next ${classes?.nextItem}`}\n >\n <ChevronDown\n onClick={() => changeItem('months', 1)}\n onMouseDown={() => onArrowMouseDown('months', 1)}\n onMouseUp={onArrowMouseUp}\n />\n </div>\n </div>\n );\n };\n const renderDaysBlock = (): ReactNode => {\n return (\n <div\n className={`mobile-calendar_wrapper_body_days ${classes?.daysBlock}`}\n >\n <div\n className={`mobile-calendar_wrapper_body_days--prev ${classes?.prevItem}`}\n >\n <ChevronUp\n onClick={() => changeItem('days', -1)}\n onMouseDown={() => onArrowMouseDown('days', -1)}\n onMouseUp={onArrowMouseUp}\n />\n </div>\n <div\n className={`mobile-calendar_wrapper_body_days-list ${classes?.daysList}`}\n ref={daysListRef}\n >\n {renderDaysList()}\n {isMobile && (\n <div className=\"mobile-calendar_wrapper_body_days-list_touch-zone\"></div>\n )}\n </div>\n <div\n className={`mobile-calendar_wrapper_body_days--next ${classes?.nextItem}`}\n >\n <ChevronDown\n onClick={() => changeItem('days', 1)}\n onMouseDown={() => onArrowMouseDown('days', 1)}\n onMouseUp={onArrowMouseUp}\n />\n </div>\n </div>\n );\n };\n const renderYearsBlock = (): ReactNode => {\n return (\n <div\n className={`mobile-calendar_wrapper_body_years ${classes?.yearsBlock}`}\n >\n <div\n className={`mobile-calendar_wrapper_body_years--prev ${classes?.prevItem}`}\n >\n <ChevronUp\n onClick={() => changeItem('years', -1)}\n onMouseDown={() => onArrowMouseDown('years', -1)}\n onMouseUp={onArrowMouseUp}\n />\n </div>\n <div\n className={`mobile-calendar_wrapper_body_years-list ${classes?.yearsList}`}\n ref={yearsListRef}\n >\n {renderYearsList()}\n {isMobile && (\n <div className=\"mobile-calendar_wrapper_body_years-list_touch-zone\"></div>\n )}\n </div>\n <div\n className={`mobile-calendar_wrapper_body_years--next ${classes?.nextItem}`}\n >\n <ChevronDown\n onClick={() => changeItem('years', 1)}\n onMouseDown={() => onArrowMouseDown('years', 1)}\n onMouseUp={onArrowMouseUp}\n />\n </div>\n </div>\n );\n };\n\n return (\n <div\n className={`mobile-calendar_wrapper ${classes?.wrapper}`}\n onTouchMove={(e: React.TouchEvent<HTMLDivElement>) => onTouchMove(e)}\n >\n <div className={`mobile-calendar_wrapper_label ${classes?.label}`}>\n {label}\n </div>\n {showSelectedDate && (\n <div className={`mobile-calendar_wrapper_label ${classes?.label}`}>\n {moment(date).format('LL')}\n </div>\n )}\n <div className={`mobile-calendar_wrapper_body ${classes?.body}`}>\n {renderMonthsBlock()}\n {renderDaysBlock()}\n {renderYearsBlock()}\n </div>\n </div>\n );\n}\n\nexport default MobileCalendar;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelect.js","names":[],"sources":["../../../../../src/Atomic/FormElements/MultiSelect/MultiSelect.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport CheckboxInput from '../CheckboxInput/CheckboxInput';\nimport Input from '../Input/Input';\nimport './MultiSelect.scss';\n\nexport interface MultiSelectOption {\n label: string;\n value: string;\n id: string | number;\n}\n\nexport interface MultiSelectProps {\n options: MultiSelectOption[];\n chosenOptions: string[];\n onChange: (values: string[]) => void;\n}\n\nconst MultiSelect: React.FC<MultiSelectProps> = ({ options, chosenOptions, onChange }) => {\n const [searchValue, setSearchValue] = useState('');\n\n const checkHandler = (state: boolean, value: string): void => {\n if (state) {\n onChange([...chosenOptions, value]);\n }\n else {\n onChange(chosenOptions.filter(item => item !== value));\n }\n };\n\n const filteredOptions = options.filter(({ label }) =>\n label.toLowerCase().includes(searchValue.toLowerCase()),\n );\n\n return (\n <div className=\"multiselect\" data-testid=\"multiselect-root\">\n <Input\n value={searchValue}\n onChange={(value: string) => setSearchValue(value)}\n placeholder=\"Search\"\n testId=\"multiselect-search\"\n />\n <div className=\"multiselect__list\" data-testid=\"multiselect-list\">\n {filteredOptions.map(({ label, value, id }) => (\n <CheckboxInput\n key={id}\n id={id}\n value={chosenOptions.includes(value)}\n label={label}\n onChange={(state: boolean) => checkHandler(state, value)}\n className=\"multiselect__item\"\n testId={`multiselect-item-${id}`}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport default MultiSelect;\n"],"mappings":";;;;;;AAiBA,IAAM,eAA2C,EAAE,SAAS,eAAe,eAAe;CACxF,MAAM,CAAC,aAAa,kBAAkB,SAAS,EAAE;CAEjD,MAAM,gBAAgB,OAAgB,UAAwB;EAC5D,IAAI,OACF,SAAS,CAAC,GAAG,eAAe,KAAK,CAAC;OAGlC,SAAS,cAAc,QAAO,SAAQ,SAAS,KAAK,CAAC;CAEzD;CAEA,MAAM,kBAAkB,QAAQ,QAAQ,EAAE,YACxC,MAAM,YAAY,CAAC,CAAC,SAAS,YAAY,YAAY,CAAC,CACxD;CAEA,OACE,qBAAC,OAAD;EAAK,WAAU;EAAc,eAAY;
|
|
1
|
+
{"version":3,"file":"MultiSelect.js","names":[],"sources":["../../../../../src/Atomic/FormElements/MultiSelect/MultiSelect.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport CheckboxInput from '../CheckboxInput/CheckboxInput';\nimport Input from '../Input/Input';\nimport './MultiSelect.scss';\n\nexport interface MultiSelectOption {\n label: string;\n value: string;\n id: string | number;\n}\n\nexport interface MultiSelectProps {\n options: MultiSelectOption[];\n chosenOptions: string[];\n onChange: (values: string[]) => void;\n}\n\nconst MultiSelect: React.FC<MultiSelectProps> = ({ options, chosenOptions, onChange }) => {\n const [searchValue, setSearchValue] = useState('');\n\n const checkHandler = (state: boolean, value: string): void => {\n if (state) {\n onChange([...chosenOptions, value]);\n }\n else {\n onChange(chosenOptions.filter(item => item !== value));\n }\n };\n\n const filteredOptions = options.filter(({ label }) =>\n label.toLowerCase().includes(searchValue.toLowerCase()),\n );\n\n return (\n <div className=\"multiselect\" data-testid=\"multiselect-root\">\n <Input\n value={searchValue}\n onChange={(value: string) => setSearchValue(value)}\n placeholder=\"Search\"\n testId=\"multiselect-search\"\n />\n <div className=\"multiselect__list\" data-testid=\"multiselect-list\">\n {filteredOptions.map(({ label, value, id }) => (\n <CheckboxInput\n key={id}\n id={id}\n value={chosenOptions.includes(value)}\n label={label}\n onChange={(state: boolean) => checkHandler(state, value)}\n className=\"multiselect__item\"\n testId={`multiselect-item-${id}`}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport default MultiSelect;\n"],"mappings":";;;;;;AAiBA,IAAM,eAA2C,EAAE,SAAS,eAAe,eAAe;CACxF,MAAM,CAAC,aAAa,kBAAkB,SAAS,EAAE;CAEjD,MAAM,gBAAgB,OAAgB,UAAwB;EAC5D,IAAI,OACF,SAAS,CAAC,GAAG,eAAe,KAAK,CAAC;OAGlC,SAAS,cAAc,QAAO,SAAQ,SAAS,KAAK,CAAC;CAEzD;CAEA,MAAM,kBAAkB,QAAQ,QAAQ,EAAE,YACxC,MAAM,YAAY,CAAC,CAAC,SAAS,YAAY,YAAY,CAAC,CACxD;CAEA,OACE,qBAAC,OAAD;EAAK,WAAU;EAAc,eAAY;EAAzC,UAAA,CACE,oBAAC,OAAD;GACE,OAAO;GACP,WAAW,UAAkB,eAAe,KAAK;GACjD,aAAY;GACZ,QAAO;EACR,CAAA,GACD,oBAAC,OAAD;GAAK,WAAU;GAAoB,eAAY;GAC5C,UAAA,gBAAgB,KAAK,EAAE,OAAO,OAAO,SACpC,oBAAC,eAAD;IAEM;IACJ,OAAO,cAAc,SAAS,KAAK;IAC5B;IACP,WAAW,UAAmB,aAAa,OAAO,KAAK;IACvD,WAAU;IACV,QAAQ,oBAAoB;GAC7B,GAPM,EAON,CACF;EACE,CAAA,CACF;;AAET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioGroup.js","names":[],"sources":["../../../../../src/Atomic/FormElements/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\n\nimport type { IRadioGroupProps } from './RadioGroup.interface';\n\nimport cn from 'classnames';\nimport { useLayoutEffect, useState } from 'react';\n\nimport RadioInput from '../RadioInput/RadioInput';\nimport './RadioGroup.scss';\n\nfunction RadioGroup({\n className,\n disabled,\n value,\n onChange = () => {},\n direction = 'row',\n options = [],\n}: IRadioGroupProps): ReactElement {\n const [values, setValues] = useState(options);\n\n useLayoutEffect(\n () =>\n setValues(\n options.map(item =>\n item.value === value ? { ...item, checked: value } : item,\n ),\n ),\n [options, value],\n );\n\n const handle = {\n change: (value: string | number | boolean) => {\n const newValues = values.map((item) => {\n if (item.value === value) {\n return {\n ...item,\n checked: value,\n };\n }\n return {\n id: item.id,\n label: item.label,\n value: item.value,\n };\n });\n setValues(newValues);\n onChange(value);\n },\n };\n return (\n <div\n data-testid=\"radio-group\"\n className={cn('radio-group', className, `radio-group--${direction}`, {\n 'radio-group--disabled': disabled,\n })}\n >\n {values.map(item => (\n <RadioInput\n key={item.id}\n {...item}\n value={item.value}\n onChange={handle.change}\n testId={`radio-input-${item.id}`}\n checked={item.checked}\n />\n ))}\n </div>\n );\n}\n\nexport default RadioGroup;\n"],"mappings":";;;;;;AAUA,SAAS,WAAW,EAClB,WACA,UACA,OACA,iBAAiB,CAAC,GAClB,YAAY,OACZ,UAAU,CAAC,KACsB;CACjC,MAAM,CAAC,QAAQ,aAAa,SAAS,OAAO;CAE5C,sBAEI,UACE,QAAQ,KAAI,SACV,KAAK,UAAU,QAAQ;EAAE,GAAG;EAAM,SAAS;CAAM,IAAI,IACvD,CACF,GACF,CAAC,SAAS,KAAK,CACjB;CAEA,MAAM,SAAS,EACb,SAAS,UAAqC;EAC5C,MAAM,YAAY,OAAO,KAAK,SAAS;GACrC,IAAI,KAAK,UAAU,OACjB,OAAO;IACL,GAAG;IACH,SAAS;GACX;GAEF,OAAO;IACL,IAAI,KAAK;IACT,OAAO,KAAK;IACZ,OAAO,KAAK;GACd;EACF,CAAC;EACD,UAAU,SAAS;EACnB,SAAS,KAAK;CAChB,EACF;CACA,OACE,oBAAC,OAAD;EACE,eAAY;EACZ,WAAW,GAAG,eAAe,WAAW,gBAAgB,aAAa,EACnE,yBAAyB,SAC3B,CAAC;
|
|
1
|
+
{"version":3,"file":"RadioGroup.js","names":[],"sources":["../../../../../src/Atomic/FormElements/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\n\nimport type { IRadioGroupProps } from './RadioGroup.interface';\n\nimport cn from 'classnames';\nimport { useLayoutEffect, useState } from 'react';\n\nimport RadioInput from '../RadioInput/RadioInput';\nimport './RadioGroup.scss';\n\nfunction RadioGroup({\n className,\n disabled,\n value,\n onChange = () => {},\n direction = 'row',\n options = [],\n}: IRadioGroupProps): ReactElement {\n const [values, setValues] = useState(options);\n\n useLayoutEffect(\n () =>\n setValues(\n options.map(item =>\n item.value === value ? { ...item, checked: value } : item,\n ),\n ),\n [options, value],\n );\n\n const handle = {\n change: (value: string | number | boolean) => {\n const newValues = values.map((item) => {\n if (item.value === value) {\n return {\n ...item,\n checked: value,\n };\n }\n return {\n id: item.id,\n label: item.label,\n value: item.value,\n };\n });\n setValues(newValues);\n onChange(value);\n },\n };\n return (\n <div\n data-testid=\"radio-group\"\n className={cn('radio-group', className, `radio-group--${direction}`, {\n 'radio-group--disabled': disabled,\n })}\n >\n {values.map(item => (\n <RadioInput\n key={item.id}\n {...item}\n value={item.value}\n onChange={handle.change}\n testId={`radio-input-${item.id}`}\n checked={item.checked}\n />\n ))}\n </div>\n );\n}\n\nexport default RadioGroup;\n"],"mappings":";;;;;;AAUA,SAAS,WAAW,EAClB,WACA,UACA,OACA,iBAAiB,CAAC,GAClB,YAAY,OACZ,UAAU,CAAC,KACsB;CACjC,MAAM,CAAC,QAAQ,aAAa,SAAS,OAAO;CAE5C,sBAEI,UACE,QAAQ,KAAI,SACV,KAAK,UAAU,QAAQ;EAAE,GAAG;EAAM,SAAS;CAAM,IAAI,IACvD,CACF,GACF,CAAC,SAAS,KAAK,CACjB;CAEA,MAAM,SAAS,EACb,SAAS,UAAqC;EAC5C,MAAM,YAAY,OAAO,KAAK,SAAS;GACrC,IAAI,KAAK,UAAU,OACjB,OAAO;IACL,GAAG;IACH,SAAS;GACX;GAEF,OAAO;IACL,IAAI,KAAK;IACT,OAAO,KAAK;IACZ,OAAO,KAAK;GACd;EACF,CAAC;EACD,UAAU,SAAS;EACnB,SAAS,KAAK;CAChB,EACF;CACA,OACE,oBAAC,OAAD;EACE,eAAY;EACZ,WAAW,GAAG,eAAe,WAAW,gBAAgB,aAAa,EACnE,yBAAyB,SAC3B,CAAC;EAEA,UAAA,OAAO,KAAI,SACV,oBAAC,YAAD;GAEE,GAAI;GACJ,OAAO,KAAK;GACZ,UAAU,OAAO;GACjB,QAAQ,eAAe,KAAK;GAC5B,SAAS,KAAK;EACf,GANM,KAAK,EAMX,CACF;CACE,CAAA;AAET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioGroupWithInput.js","names":[],"sources":["../../../../../src/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.tsx"],"sourcesContent":["import type { IOption, IRadioGroupWithInputProps } from './RadioGroupWithInput.interface';\n\nimport cn from 'classnames';\n\nimport React from 'react';\nimport FormElement from '../../../Molecular/FormElement/FormElement';\n\nimport Alert from '../../UI/Alert/Alert';\nimport Input from '../Input/Input';\n\nimport RadioInput from '../RadioInput/RadioInput';\nimport './RadioGroupWithInput.scss';\n\nfunction RadioGroupWithInput({\n alert,\n className,\n disabled,\n onChange = () => {},\n direction = 'row',\n options = [],\n}: IRadioGroupWithInputProps): React.ReactElement {\n const handle = {\n changeRadio: (_: string, el: { value: string }) => {\n const newOptions = options.map((item) => {\n return {\n ...item,\n checked: el.value === item.value ? item.value : '',\n };\n });\n onChange(newOptions);\n },\n changeInput: (value: string, el: IOption) => {\n if (el.input) {\n el.input.value = value;\n }\n onChange(options);\n },\n };\n\n return (\n <div className=\"radio-group-input-box\">\n {alert && <Alert className=\"mb10\" {...alert} />}\n <div\n className={cn(\n 'radio-group-input',\n className,\n `radio-group-input--${direction}`,\n {\n 'radio-group-input--disabled': disabled,\n },\n )}\n >\n {options?.map((item) => {\n return (\n <div\n key={item.id}\n className={cn(\n 'radio-group-input-item',\n `radio-group-input-item-${item.id}`,\n )}\n >\n <RadioInput\n {...item}\n id={String(item.id)}\n onChange={value => handle.changeRadio(String(value), item)}\n checked={item.checked}\n />\n {item.input && item.checked && (\n <FormElement {...item.input}>\n <Input\n onChange={value => handle.changeInput(value, item)}\n {...item.input}\n testId={`${item.id}-input`}\n />\n </FormElement>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport default RadioGroupWithInput;\n"],"mappings":";;;;;;;;;AAaA,SAAS,oBAAoB,EAC3B,OACA,WACA,UACA,iBAAiB,CAAC,GAClB,YAAY,OACZ,UAAU,CAAC,KACqC;CAChD,MAAM,SAAS;EACb,cAAc,GAAW,OAA0B;GAOjD,SANmB,QAAQ,KAAK,SAAS;IACvC,OAAO;KACL,GAAG;KACH,SAAS,GAAG,UAAU,KAAK,QAAQ,KAAK,QAAQ;IAClD;GACF,CACS,CAAU;EACrB;EACA,cAAc,OAAe,OAAgB;GAC3C,IAAI,GAAG,OACL,GAAG,MAAM,QAAQ;GAEnB,SAAS,OAAO;EAClB;CACF;CAEA,OACE,qBAAC,OAAD;EAAK,WAAU;
|
|
1
|
+
{"version":3,"file":"RadioGroupWithInput.js","names":[],"sources":["../../../../../src/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.tsx"],"sourcesContent":["import type { IOption, IRadioGroupWithInputProps } from './RadioGroupWithInput.interface';\n\nimport cn from 'classnames';\n\nimport React from 'react';\nimport FormElement from '../../../Molecular/FormElement/FormElement';\n\nimport Alert from '../../UI/Alert/Alert';\nimport Input from '../Input/Input';\n\nimport RadioInput from '../RadioInput/RadioInput';\nimport './RadioGroupWithInput.scss';\n\nfunction RadioGroupWithInput({\n alert,\n className,\n disabled,\n onChange = () => {},\n direction = 'row',\n options = [],\n}: IRadioGroupWithInputProps): React.ReactElement {\n const handle = {\n changeRadio: (_: string, el: { value: string }) => {\n const newOptions = options.map((item) => {\n return {\n ...item,\n checked: el.value === item.value ? item.value : '',\n };\n });\n onChange(newOptions);\n },\n changeInput: (value: string, el: IOption) => {\n if (el.input) {\n el.input.value = value;\n }\n onChange(options);\n },\n };\n\n return (\n <div className=\"radio-group-input-box\">\n {alert && <Alert className=\"mb10\" {...alert} />}\n <div\n className={cn(\n 'radio-group-input',\n className,\n `radio-group-input--${direction}`,\n {\n 'radio-group-input--disabled': disabled,\n },\n )}\n >\n {options?.map((item) => {\n return (\n <div\n key={item.id}\n className={cn(\n 'radio-group-input-item',\n `radio-group-input-item-${item.id}`,\n )}\n >\n <RadioInput\n {...item}\n id={String(item.id)}\n onChange={value => handle.changeRadio(String(value), item)}\n checked={item.checked}\n />\n {item.input && item.checked && (\n <FormElement {...item.input}>\n <Input\n onChange={value => handle.changeInput(value, item)}\n {...item.input}\n testId={`${item.id}-input`}\n />\n </FormElement>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport default RadioGroupWithInput;\n"],"mappings":";;;;;;;;;AAaA,SAAS,oBAAoB,EAC3B,OACA,WACA,UACA,iBAAiB,CAAC,GAClB,YAAY,OACZ,UAAU,CAAC,KACqC;CAChD,MAAM,SAAS;EACb,cAAc,GAAW,OAA0B;GAOjD,SANmB,QAAQ,KAAK,SAAS;IACvC,OAAO;KACL,GAAG;KACH,SAAS,GAAG,UAAU,KAAK,QAAQ,KAAK,QAAQ;IAClD;GACF,CACS,CAAU;EACrB;EACA,cAAc,OAAe,OAAgB;GAC3C,IAAI,GAAG,OACL,GAAG,MAAM,QAAQ;GAEnB,SAAS,OAAO;EAClB;CACF;CAEA,OACE,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACG,SAAS,oBAAC,OAAD;GAAO,WAAU;GAAO,GAAI;EAAQ,CAAA,GAC9C,oBAAC,OAAD;GACE,WAAW,GACT,qBACA,WACA,sBAAsB,aACtB,EACE,+BAA+B,SACjC,CACF;GAEC,UAAA,SAAS,KAAK,SAAS;IACtB,OACE,qBAAC,OAAD;KAEE,WAAW,GACT,0BACA,0BAA0B,KAAK,IACjC;KALF,UAAA,CAOE,oBAAC,YAAD;MACE,GAAI;MACJ,IAAI,OAAO,KAAK,EAAE;MAClB,WAAU,UAAS,OAAO,YAAY,OAAO,KAAK,GAAG,IAAI;MACzD,SAAS,KAAK;KACf,CAAA,GACA,KAAK,SAAS,KAAK,WAClB,oBAAC,aAAD;MAAa,GAAI,KAAK;MACpB,UAAA,oBAAC,OAAD;OACE,WAAU,UAAS,OAAO,YAAY,OAAO,IAAI;OACjD,GAAI,KAAK;OACT,QAAQ,GAAG,KAAK,GAAG;MACpB,CAAA;KACU,CAAA,CAEZ;IArBE,GAAA,KAAK,EAqBP;GAET,CAAC;EACE,CAAA,CACF;;AAET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioInput.js","names":[],"sources":["../../../../../src/Atomic/FormElements/RadioInput/RadioInput.tsx"],"sourcesContent":["import type { IRadioInputProps } from './RadioInput.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport './RadioInput.scss';\n\nconst RC = 'radio-input';\n\nconst RadioInput: React.FC<IRadioInputProps> = ({\n label,\n id,\n checked,\n name,\n disabled,\n className,\n value,\n testId = 'radio-input',\n onChange,\n attributesOfNativeInput,\n}) => {\n return (\n <label\n data-testid={testId}\n className={cn(RC, className, { [`${RC}_disabled`]: disabled })}\n htmlFor={id}\n >\n <div\n className={cn(`${RC}__input`, {\n [`${RC}__input--checked`]: checked === value,\n })}\n >\n <input\n id={id}\n data-testid={`${testId}-input`}\n type=\"radio\"\n checked={checked === value}\n className={`${RC}__radio`}\n onChange={() => onChange?.(value)}\n name={name}\n disabled={disabled}\n {...attributesOfNativeInput}\n />\n <div className={`${RC}__mark`} />\n </div>\n {label && <div className={`${RC}__label`}>{label}</div>}\n </label>\n );\n};\n\nexport default RadioInput;\n"],"mappings":";;;;;AAOA,IAAM,KAAK;AAEX,IAAM,cAA0C,EAC9C,OACA,IACA,SACA,MACA,UACA,WACA,OACA,SAAS,eACT,UACA,8BACI;CACJ,OACE,qBAAC,SAAD;EACE,eAAa;EACb,WAAW,GAAG,IAAI,WAAW,GAAG,GAAG,GAAG,aAAa,SAAS,CAAC;EAC7D,SAAS;
|
|
1
|
+
{"version":3,"file":"RadioInput.js","names":[],"sources":["../../../../../src/Atomic/FormElements/RadioInput/RadioInput.tsx"],"sourcesContent":["import type { IRadioInputProps } from './RadioInput.interface';\nimport cn from 'classnames';\n\nimport React from 'react';\n\nimport './RadioInput.scss';\n\nconst RC = 'radio-input';\n\nconst RadioInput: React.FC<IRadioInputProps> = ({\n label,\n id,\n checked,\n name,\n disabled,\n className,\n value,\n testId = 'radio-input',\n onChange,\n attributesOfNativeInput,\n}) => {\n return (\n <label\n data-testid={testId}\n className={cn(RC, className, { [`${RC}_disabled`]: disabled })}\n htmlFor={id}\n >\n <div\n className={cn(`${RC}__input`, {\n [`${RC}__input--checked`]: checked === value,\n })}\n >\n <input\n id={id}\n data-testid={`${testId}-input`}\n type=\"radio\"\n checked={checked === value}\n className={`${RC}__radio`}\n onChange={() => onChange?.(value)}\n name={name}\n disabled={disabled}\n {...attributesOfNativeInput}\n />\n <div className={`${RC}__mark`} />\n </div>\n {label && <div className={`${RC}__label`}>{label}</div>}\n </label>\n );\n};\n\nexport default RadioInput;\n"],"mappings":";;;;;AAOA,IAAM,KAAK;AAEX,IAAM,cAA0C,EAC9C,OACA,IACA,SACA,MACA,UACA,WACA,OACA,SAAS,eACT,UACA,8BACI;CACJ,OACE,qBAAC,SAAD;EACE,eAAa;EACb,WAAW,GAAG,IAAI,WAAW,GAAG,GAAG,GAAG,aAAa,SAAS,CAAC;EAC7D,SAAS;EAHX,UAAA,CAKE,qBAAC,OAAD;GACE,WAAW,GAAG,GAAG,GAAG,UAAU,GAC3B,GAAG,GAAG,oBAAoB,YAAY,MACzC,CAAC;GAHH,UAAA,CAKE,oBAAC,SAAD;IACM;IACJ,eAAa,GAAG,OAAO;IACvB,MAAK;IACL,SAAS,YAAY;IACrB,WAAW,GAAG,GAAG;IACjB,gBAAgB,WAAW,KAAK;IAC1B;IACI;IACV,GAAI;GACL,CAAA,GACD,oBAAC,OAAD,EAAK,WAAW,GAAG,GAAG,QAAU,CAAA,CAC7B;EACJ,CAAA,GAAA,SAAS,oBAAC,OAAD;GAAK,WAAW,GAAG,GAAG;GAAW,UAAA;EAAW,CAAA,CACjD;;AAEX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioRowSwitcher.js","names":[],"sources":["../../../../../src/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport React from 'react';\nimport './RadioRowSwitcher.scss';\n\nexport interface RadioRowSwitcherItem {\n key: string;\n label: React.ReactNode;\n}\n\nexport interface RadioRowSwitcherProps {\n onChange: (value: string) => void;\n radios: RadioRowSwitcherItem[];\n label?: string;\n value?: string;\n}\n\nconst RadioRowSwitcher: React.FC<RadioRowSwitcherProps> = ({ onChange, radios, label = '', value = '' }) => {\n const handle = {\n change: (newValue: string) => {\n if (newValue === value) onChange('');\n else onChange(newValue);\n },\n };\n\n const itemClass = (key: string): string =>\n classNames('radio-row-switcher__item', {\n 'radio-row-switcher__item--active': key === value,\n });\n const sliderClass = (key: string): string =>\n classNames(\n 'radio-row-switcher__slider',\n `radio-row-switcher__slider--${key}`,\n );\n\n return (\n <div className=\"radio-row-switcher\" data-testid=\"radio-row-switcher-root\">\n {label && <div className=\"radio-row-switcher__label\" data-testid=\"radio-row-switcher-label\">{label}</div>}\n\n <div className=\"radio-row-switcher__items-box\" data-testid=\"radio-row-switcher-items-box\">\n {radios.map((item) => {\n return (\n <React.Fragment key={item.key}>\n <div\n onClick={() => handle.change(item.key)}\n className={itemClass(item.key)}\n data-testid={`radio-row-switcher-item-${item.key}`}\n >\n {item.label}\n </div>\n </React.Fragment>\n );\n })}\n\n {value && (\n <div\n onClick={() => handle.change('')}\n className={sliderClass(value)}\n data-testid=\"radio-row-switcher-slider\"\n />\n )}\n </div>\n </div>\n );\n};\n\nexport default RadioRowSwitcher;\n"],"mappings":";;;;;AAgBA,IAAM,oBAAqD,EAAE,UAAU,QAAQ,QAAQ,IAAI,QAAQ,SAAS;CAC1G,MAAM,SAAS,EACb,SAAS,aAAqB;EAC5B,IAAI,aAAa,OAAO,SAAS,EAAE;OAC9B,SAAS,QAAQ;CACxB,EACF;CAEA,MAAM,aAAa,QACjB,GAAW,4BAA4B,EACrC,oCAAoC,QAAQ,MAC9C,CAAC;CACH,MAAM,eAAe,QACnB,GACE,8BACA,+BAA+B,KACjC;CAEF,OACE,qBAAC,OAAD;EAAK,WAAU;EAAqB,eAAY;
|
|
1
|
+
{"version":3,"file":"RadioRowSwitcher.js","names":[],"sources":["../../../../../src/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport React from 'react';\nimport './RadioRowSwitcher.scss';\n\nexport interface RadioRowSwitcherItem {\n key: string;\n label: React.ReactNode;\n}\n\nexport interface RadioRowSwitcherProps {\n onChange: (value: string) => void;\n radios: RadioRowSwitcherItem[];\n label?: string;\n value?: string;\n}\n\nconst RadioRowSwitcher: React.FC<RadioRowSwitcherProps> = ({ onChange, radios, label = '', value = '' }) => {\n const handle = {\n change: (newValue: string) => {\n if (newValue === value) onChange('');\n else onChange(newValue);\n },\n };\n\n const itemClass = (key: string): string =>\n classNames('radio-row-switcher__item', {\n 'radio-row-switcher__item--active': key === value,\n });\n const sliderClass = (key: string): string =>\n classNames(\n 'radio-row-switcher__slider',\n `radio-row-switcher__slider--${key}`,\n );\n\n return (\n <div className=\"radio-row-switcher\" data-testid=\"radio-row-switcher-root\">\n {label && <div className=\"radio-row-switcher__label\" data-testid=\"radio-row-switcher-label\">{label}</div>}\n\n <div className=\"radio-row-switcher__items-box\" data-testid=\"radio-row-switcher-items-box\">\n {radios.map((item) => {\n return (\n <React.Fragment key={item.key}>\n <div\n onClick={() => handle.change(item.key)}\n className={itemClass(item.key)}\n data-testid={`radio-row-switcher-item-${item.key}`}\n >\n {item.label}\n </div>\n </React.Fragment>\n );\n })}\n\n {value && (\n <div\n onClick={() => handle.change('')}\n className={sliderClass(value)}\n data-testid=\"radio-row-switcher-slider\"\n />\n )}\n </div>\n </div>\n );\n};\n\nexport default RadioRowSwitcher;\n"],"mappings":";;;;;AAgBA,IAAM,oBAAqD,EAAE,UAAU,QAAQ,QAAQ,IAAI,QAAQ,SAAS;CAC1G,MAAM,SAAS,EACb,SAAS,aAAqB;EAC5B,IAAI,aAAa,OAAO,SAAS,EAAE;OAC9B,SAAS,QAAQ;CACxB,EACF;CAEA,MAAM,aAAa,QACjB,GAAW,4BAA4B,EACrC,oCAAoC,QAAQ,MAC9C,CAAC;CACH,MAAM,eAAe,QACnB,GACE,8BACA,+BAA+B,KACjC;CAEF,OACE,qBAAC,OAAD;EAAK,WAAU;EAAqB,eAAY;EAAhD,UAAA,CACG,SAAS,oBAAC,OAAD;GAAK,WAAU;GAA4B,eAAY;GAA4B,UAAA;EAAW,CAAA,GAExG,qBAAC,OAAD;GAAK,WAAU;GAAgC,eAAY;GAA3D,UAAA,CACG,OAAO,KAAK,SAAS;IACpB,OACE,oBAAC,MAAM,UAAP,EAAA,UACE,oBAAC,OAAD;KACE,eAAe,OAAO,OAAO,KAAK,GAAG;KACrC,WAAW,UAAU,KAAK,GAAG;KAC7B,eAAa,2BAA2B,KAAK;KAE5C,UAAA,KAAK;IACH,CAAA,EACS,GARK,KAAK,GAQV;GAEpB,CAAC,GAEA,SACC,oBAAC,OAAD;IACE,eAAe,OAAO,OAAO,EAAE;IAC/B,WAAW,YAAY,KAAK;IAC5B,eAAY;GACb,CAAA,CAEA;EACF,CAAA,CAAA;;AAET"}
|
|
@@ -33,8 +33,9 @@ var RangeCalendar = (props) => {
|
|
|
33
33
|
const isRangeInside = day && startDate && endDate && moment(day.date).isAfter(startDate, "day") && moment(day.date).isBefore(moment(endDate).subtract(1, "hour"), "day");
|
|
34
34
|
const isPrevRangeEnd = day && (moment(day.date).isSame(startPrevDate, "day") || moment(day.date).isSame(moment(endPrevDate).subtract(1, "day"), "day"));
|
|
35
35
|
const isPrevRangeInside = day && startPrevDate && endPrevDate && moment(day.date).isAfter(startPrevDate, "day") && moment(day.date).isBefore(moment(endPrevDate).subtract(1, "day"), "day");
|
|
36
|
+
const classNames = cn("range-calendar__day", { "range-calendar__day--clickable": day }, { "range-calendar__day--disabled": isPastDay || minDate && moment(day?.date).isBefore(momentMinDate, "day") || !isDontLimitFuture && (maxDate ? moment(day?.date).isAfter(momentMaxDate) : isFutureDay) }, { "range-calendar__day--range-start": isRangeStart }, { "range-calendar__day--range-end": isRangeEnd }, { "range-calendar__day--range-inside": isRangeInside }, { "range-calendar__day--prev-range-end": isPrevRangeEnd }, { "range-calendar__day--prev-range-inside": isPrevRangeInside });
|
|
36
37
|
return /* @__PURE__ */ jsx("div", {
|
|
37
|
-
className:
|
|
38
|
+
className: classNames,
|
|
38
39
|
onClick: day ? (e) => onClick(day.date, e) : null,
|
|
39
40
|
onMouseOver: day ? () => onHover(day.date) : null,
|
|
40
41
|
onMouseLeave: () => onHover(null),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RangeCalendar.js","names":[],"sources":["../../../../../src/Atomic/FormElements/RangeCalendar/RangeCalendar.js"],"sourcesContent":["import React, { useEffect, useMemo, useState } from \"react\";\n\nimport cn from \"classnames\";\nimport moment from \"moment-timezone\";\n\nimport Arrow from \"../../UI/Arrow/Arrow\";\n\nimport \"./RangeCalendar.scss\";\n\nconst RangeCalendar = (props) => {\n const {\n className,\n date,\n setDate,\n startDate,\n endDate,\n allowPrev = true,\n allowNext = true,\n onClick = () => {},\n onHover = () => {},\n startPrevDate,\n endPrevDate,\n limitRange,\n isShortWeekNames,\n minDate,\n maxDate,\n momentMinDate,\n momentMaxDate,\n isDontLimitFuture,\n testId = \"range-calendar\",\n } = props;\n\n const [days, setDays] = useState({});\n\n const title = useMemo(\n () => `${moment(date).format(\"MMM\")} ${moment(date).format(\"YYYY\")}`,\n [date],\n );\n\n useEffect(() => {\n const result = {};\n const day = moment(date).startOf(\"month\");\n const daysInMonth = day.daysInMonth();\n for (let d = 0; d < daysInMonth; d += 1) {\n let week = day.week();\n if (day.month() === 11 && week === 1) week = 53;\n if (day.month() === 0 && week === 53) week = 0;\n if (!Object.prototype.hasOwnProperty.call(result, week)) {\n result[week] = {};\n }\n result[week][day.weekday()] = { date: day.toDate() };\n day.add(1, \"d\");\n }\n setDays(result);\n }, [date]);\n\n const renderDay = (week, dayOfWeek) => {\n const day = days[week][dayOfWeek];\n const isFutureDay = day && moment(day.date).isAfter(moment(), \"day\");\n const isPastDay = limitRange\n ? day &&\n moment(day.date).isBefore(moment().subtract(limitRange, \"days\"), \"day\")\n : null;\n const isRangeStart = day && moment(day.date).isSame(startDate, \"day\");\n const isRangeEnd =\n day &&\n moment(day.date).isSame(moment(endDate).subtract(1, \"hour\"), \"day\");\n const isRangeInside =\n day &&\n startDate &&\n endDate &&\n moment(day.date).isAfter(startDate, \"day\") &&\n moment(day.date).isBefore(moment(endDate).subtract(1, \"hour\"), \"day\");\n const isPrevRangeEnd =\n day &&\n (moment(day.date).isSame(startPrevDate, \"day\") ||\n moment(day.date).isSame(moment(endPrevDate).subtract(1, \"day\"), \"day\"));\n const isPrevRangeInside =\n day &&\n startPrevDate &&\n endPrevDate &&\n moment(day.date).isAfter(startPrevDate, \"day\") &&\n moment(day.date).isBefore(moment(endPrevDate).subtract(1, \"day\"), \"day\");\n const classNames = cn(\n \"range-calendar__day\",\n { \"range-calendar__day--clickable\": day },\n {\n \"range-calendar__day--disabled\":\n isPastDay ||\n (minDate && moment(day?.date).isBefore(momentMinDate, \"day\")) ||\n (!isDontLimitFuture &&\n (maxDate ? moment(day?.date).isAfter(momentMaxDate) : isFutureDay)),\n },\n { \"range-calendar__day--range-start\": isRangeStart },\n { \"range-calendar__day--range-end\": isRangeEnd },\n { \"range-calendar__day--range-inside\": isRangeInside },\n { \"range-calendar__day--prev-range-end\": isPrevRangeEnd },\n { \"range-calendar__day--prev-range-inside\": isPrevRangeInside },\n );\n\n return (\n <div\n key={`${week}_${dayOfWeek}`}\n className={classNames}\n onClick={day ? (e) => onClick(day.date, e) : null}\n onMouseOver={day ? () => onHover(day.date) : null}\n onMouseLeave={() => onHover(null)}\n >\n <span className=\"calendar__day-num\">{day && day.date.getDate()}</span>\n </div>\n );\n };\n\n const handlePrev = () => {\n setDate(moment(date).subtract(1, \"month\").toDate());\n };\n\n const handleNext = () => {\n setDate(moment(date).add(1, \"month\").toDate());\n };\n\n const getFormatedWeekName = (input) =>\n isShortWeekNames ? input.charAt(0) : input;\n\n return (\n <div className={cn(\"range-calendar\", className)} data-testid={testId}>\n <div className=\"range-calendar-header\">\n <Arrow\n type=\"left\"\n disabled={\n !allowPrev ||\n (minDate &&\n moment(date)\n .startOf(\"month\")\n .isSameOrBefore(momentMinDate, \"months\"))\n }\n onClick={handlePrev}\n className=\"range-calendar-header__prev\"\n />\n\n <div className=\"range-calendar-header__title\">{title}</div>\n\n <Arrow\n type=\"right\"\n disabled={\n !allowNext ||\n (!isDontLimitFuture &&\n moment(date)\n .startOf(\"month\")\n .isSameOrAfter(\n maxDate\n ? momentMaxDate\n : moment().add(1, \"day\").startOf(\"day\"),\n \"months\",\n ))\n }\n onClick={handleNext}\n className=\"range-calendar-header__next\"\n />\n </div>\n\n <div className=\"range-calendar__week range-calendar__week-title\">\n {[...Array(7).keys()].map((dayOfWeek) => {\n return (\n <div\n key={`day-of-week_${dayOfWeek}`}\n className=\"range-calendar__day range-calendar__day--title\"\n >\n {getFormatedWeekName(moment().weekday(dayOfWeek).format(\"dd\"))}\n </div>\n );\n })}\n </div>\n {Object.keys(days).map((week, index) => (\n <div key={`week_${index}`} className=\"range-calendar__week\">\n {[...Array(7).keys()].map((dayOfWeek) => renderDay(week, dayOfWeek))}\n </div>\n ))}\n </div>\n );\n};\n\nexport default RangeCalendar;\n"],"mappings":";;;;;;;AASA,IAAM,iBAAiB,UAAU;CAC/B,MAAM,EACJ,WACA,MACA,SACA,WACA,SACA,YAAY,MACZ,YAAY,MACZ,gBAAgB,CAAC,GACjB,gBAAgB,CAAC,GACjB,eACA,aACA,YACA,kBACA,SACA,SACA,eACA,eACA,mBACA,SAAS,qBACP;CAEJ,MAAM,CAAC,MAAM,WAAW,SAAS,CAAC,CAAC;CAEnC,MAAM,QAAQ,cACN,GAAG,OAAO,IAAI,CAAA,CAAE,OAAO,KAAK,EAAC,GAAI,OAAO,IAAI,CAAA,CAAE,OAAO,MAAM,KACjE,CAAC,IAAI,CACP;CAEA,gBAAgB;EACd,MAAM,SAAS,CAAC;EAChB,MAAM,MAAM,OAAO,IAAI,CAAA,CAAE,QAAQ,OAAO;EACxC,MAAM,cAAc,IAAI,YAAY;EACpC,KAAA,IAAS,IAAI,GAAG,IAAI,aAAa,KAAK,GAAG;GACvC,IAAI,OAAO,IAAI,KAAK;GACpB,IAAI,IAAI,MAAM,MAAM,MAAM,SAAS,GAAG,OAAO;GAC7C,IAAI,IAAI,MAAM,MAAM,KAAK,SAAS,IAAI,OAAO;GAC7C,IAAI,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,IAAI,GACpD,OAAO,QAAQ,CAAC;GAElB,OAAO,KAAI,CAAE,IAAI,QAAQ,KAAK,EAAE,MAAM,IAAI,OAAO,EAAE;GACnD,IAAI,IAAI,GAAG,GAAG;EAChB;EACA,QAAQ,MAAM;CAChB,GAAG,CAAC,IAAI,CAAC;CAET,MAAM,aAAa,MAAM,cAAc;EACrC,MAAM,MAAM,KAAK,KAAI,CAAE;EACvB,MAAM,cAAc,OAAO,OAAO,IAAI,IAAI,CAAA,CAAE,QAAQ,OAAO,GAAG,KAAK;EACnE,MAAM,YAAY,aACd,OACA,OAAO,IAAI,IAAI,CAAA,CAAE,SAAS,OAAO,CAAA,CAAE,SAAS,YAAY,MAAM,GAAG,KAAK,IACtE;EACJ,MAAM,eAAe,OAAO,OAAO,IAAI,IAAI,CAAA,CAAE,OAAO,WAAW,KAAK;EACpE,MAAM,aACJ,OACA,OAAO,IAAI,IAAI,CAAA,CAAE,OAAO,OAAO,OAAO,CAAA,CAAE,SAAS,GAAG,MAAM,GAAG,KAAK;EACpE,MAAM,gBACJ,OACA,aACA,WACA,OAAO,IAAI,IAAI,CAAA,CAAE,QAAQ,WAAW,KAAK,KACzC,OAAO,IAAI,IAAI,CAAA,CAAE,SAAS,OAAO,OAAO,CAAA,CAAE,SAAS,GAAG,MAAM,GAAG,KAAK;EACtE,MAAM,iBACJ,QACC,OAAO,IAAI,IAAI,CAAA,CAAE,OAAO,eAAe,KAAK,KAC3C,OAAO,IAAI,IAAI,CAAA,CAAE,OAAO,OAAO,WAAW,CAAA,CAAE,SAAS,GAAG,KAAK,GAAG,KAAK;EACzE,MAAM,oBACJ,OACA,iBACA,eACA,OAAO,IAAI,IAAI,CAAA,CAAE,QAAQ,eAAe,KAAK,KAC7C,OAAO,IAAI,IAAI,CAAA,CAAE,SAAS,OAAO,WAAW,CAAA,CAAE,SAAS,GAAG,KAAK,GAAG,KAAK;
|
|
1
|
+
{"version":3,"file":"RangeCalendar.js","names":[],"sources":["../../../../../src/Atomic/FormElements/RangeCalendar/RangeCalendar.js"],"sourcesContent":["import React, { useEffect, useMemo, useState } from \"react\";\n\nimport cn from \"classnames\";\nimport moment from \"moment-timezone\";\n\nimport Arrow from \"../../UI/Arrow/Arrow\";\n\nimport \"./RangeCalendar.scss\";\n\nconst RangeCalendar = (props) => {\n const {\n className,\n date,\n setDate,\n startDate,\n endDate,\n allowPrev = true,\n allowNext = true,\n onClick = () => {},\n onHover = () => {},\n startPrevDate,\n endPrevDate,\n limitRange,\n isShortWeekNames,\n minDate,\n maxDate,\n momentMinDate,\n momentMaxDate,\n isDontLimitFuture,\n testId = \"range-calendar\",\n } = props;\n\n const [days, setDays] = useState({});\n\n const title = useMemo(\n () => `${moment(date).format(\"MMM\")} ${moment(date).format(\"YYYY\")}`,\n [date],\n );\n\n useEffect(() => {\n const result = {};\n const day = moment(date).startOf(\"month\");\n const daysInMonth = day.daysInMonth();\n for (let d = 0; d < daysInMonth; d += 1) {\n let week = day.week();\n if (day.month() === 11 && week === 1) week = 53;\n if (day.month() === 0 && week === 53) week = 0;\n if (!Object.prototype.hasOwnProperty.call(result, week)) {\n result[week] = {};\n }\n result[week][day.weekday()] = { date: day.toDate() };\n day.add(1, \"d\");\n }\n setDays(result);\n }, [date]);\n\n const renderDay = (week, dayOfWeek) => {\n const day = days[week][dayOfWeek];\n const isFutureDay = day && moment(day.date).isAfter(moment(), \"day\");\n const isPastDay = limitRange\n ? day &&\n moment(day.date).isBefore(moment().subtract(limitRange, \"days\"), \"day\")\n : null;\n const isRangeStart = day && moment(day.date).isSame(startDate, \"day\");\n const isRangeEnd =\n day &&\n moment(day.date).isSame(moment(endDate).subtract(1, \"hour\"), \"day\");\n const isRangeInside =\n day &&\n startDate &&\n endDate &&\n moment(day.date).isAfter(startDate, \"day\") &&\n moment(day.date).isBefore(moment(endDate).subtract(1, \"hour\"), \"day\");\n const isPrevRangeEnd =\n day &&\n (moment(day.date).isSame(startPrevDate, \"day\") ||\n moment(day.date).isSame(moment(endPrevDate).subtract(1, \"day\"), \"day\"));\n const isPrevRangeInside =\n day &&\n startPrevDate &&\n endPrevDate &&\n moment(day.date).isAfter(startPrevDate, \"day\") &&\n moment(day.date).isBefore(moment(endPrevDate).subtract(1, \"day\"), \"day\");\n const classNames = cn(\n \"range-calendar__day\",\n { \"range-calendar__day--clickable\": day },\n {\n \"range-calendar__day--disabled\":\n isPastDay ||\n (minDate && moment(day?.date).isBefore(momentMinDate, \"day\")) ||\n (!isDontLimitFuture &&\n (maxDate ? moment(day?.date).isAfter(momentMaxDate) : isFutureDay)),\n },\n { \"range-calendar__day--range-start\": isRangeStart },\n { \"range-calendar__day--range-end\": isRangeEnd },\n { \"range-calendar__day--range-inside\": isRangeInside },\n { \"range-calendar__day--prev-range-end\": isPrevRangeEnd },\n { \"range-calendar__day--prev-range-inside\": isPrevRangeInside },\n );\n\n return (\n <div\n key={`${week}_${dayOfWeek}`}\n className={classNames}\n onClick={day ? (e) => onClick(day.date, e) : null}\n onMouseOver={day ? () => onHover(day.date) : null}\n onMouseLeave={() => onHover(null)}\n >\n <span className=\"calendar__day-num\">{day && day.date.getDate()}</span>\n </div>\n );\n };\n\n const handlePrev = () => {\n setDate(moment(date).subtract(1, \"month\").toDate());\n };\n\n const handleNext = () => {\n setDate(moment(date).add(1, \"month\").toDate());\n };\n\n const getFormatedWeekName = (input) =>\n isShortWeekNames ? input.charAt(0) : input;\n\n return (\n <div className={cn(\"range-calendar\", className)} data-testid={testId}>\n <div className=\"range-calendar-header\">\n <Arrow\n type=\"left\"\n disabled={\n !allowPrev ||\n (minDate &&\n moment(date)\n .startOf(\"month\")\n .isSameOrBefore(momentMinDate, \"months\"))\n }\n onClick={handlePrev}\n className=\"range-calendar-header__prev\"\n />\n\n <div className=\"range-calendar-header__title\">{title}</div>\n\n <Arrow\n type=\"right\"\n disabled={\n !allowNext ||\n (!isDontLimitFuture &&\n moment(date)\n .startOf(\"month\")\n .isSameOrAfter(\n maxDate\n ? momentMaxDate\n : moment().add(1, \"day\").startOf(\"day\"),\n \"months\",\n ))\n }\n onClick={handleNext}\n className=\"range-calendar-header__next\"\n />\n </div>\n\n <div className=\"range-calendar__week range-calendar__week-title\">\n {[...Array(7).keys()].map((dayOfWeek) => {\n return (\n <div\n key={`day-of-week_${dayOfWeek}`}\n className=\"range-calendar__day range-calendar__day--title\"\n >\n {getFormatedWeekName(moment().weekday(dayOfWeek).format(\"dd\"))}\n </div>\n );\n })}\n </div>\n {Object.keys(days).map((week, index) => (\n <div key={`week_${index}`} className=\"range-calendar__week\">\n {[...Array(7).keys()].map((dayOfWeek) => renderDay(week, dayOfWeek))}\n </div>\n ))}\n </div>\n );\n};\n\nexport default RangeCalendar;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RangeInputs.js","names":[],"sources":["../../../../../src/Atomic/FormElements/RangeInputs/RangeInputs.tsx"],"sourcesContent":["import type { KeyboardEvent } from 'react';\nimport type { IRangeInputsProps } from './RangeInputs.interface';\n\nimport cn from 'classnames';\nimport React, { useRef, useState } from 'react';\n\nimport {\n filterFloat,\n formatOnlyNumbers,\n} from '../../../Functions/fieldValueFormatters';\nimport { addBitDepthPoints } from '../../../Functions/utils.js';\nimport Input from '../Input/Input';\n\nimport './RangeInputs.scss';\n\nconst RC = 'range-inputs';\n\nconst RangeInputs: React.FC<IRangeInputsProps> = ({\n isColumnPosition,\n className,\n value: valueObj,\n onChange,\n validateErrors,\n type = 'int',\n setError: setInnerError,\n label = '',\n isPrice = false,\n testId,\n withZero = false,\n fromPlaceholder = '',\n toPlaceholder = '',\n disabled,\n isDisabled,\n}) => {\n const [error, setError] = useState<{ from: string; to: string }>({ from: '', to: '' });\n const inputFromRef = useRef<HTMLInputElement | null>(null);\n const inputToRef = useRef<HTMLInputElement | null>(null);\n\n const isFieldDisabled = disabled || isDisabled;\n\n const isValidRange = (from: string, to: string): boolean => {\n const correctFrom = Number.parseFloat(from?.toString()?.replace(/\\D/g, ''));\n const correctTo = Number.parseFloat(to?.toString()?.replace(/\\D/g, ''));\n\n return correctFrom <= correctTo;\n };\n\n const valueFormatter = (value: string | number): string => {\n const valStr = String(value);\n if (type === 'float' && !isPrice) return filterFloat(value, 2);\n else if (type === 'float' && isPrice)\n return addBitDepthPoints(filterFloat(valStr?.replace(/[^\\d.]/g, ''), 2));\n else if (type !== 'float' && isPrice)\n return addBitDepthPoints(valStr?.replace(/\\D/g, ''));\n else return formatOnlyNumbers(value);\n };\n\n const handleChange = (prop: 'from' | 'to', val: string | number): void => {\n onChange({ ...valueObj, [prop]: valueFormatter(val) });\n };\n\n const rangeValidation = (key: 'from' | 'to'): void => {\n const isEmpty = !valueObj?.from && !valueObj?.to;\n const oppositeKey = key === 'from' ? 'to' : 'from';\n const from = valueObj?.from != null ? String(valueObj.from) : '';\n const to = valueObj?.to != null ? String(valueObj.to) : '';\n const validationResult = validateErrors?.(from, to);\n\n if (!withZero && isEmpty) {\n setError({ from: '', to: '' });\n setInnerError?.('');\n }\n else if (!withZero && !valueObj?.[oppositeKey]) {\n const mustToFocus = key === 'from' ? inputToRef.current : inputFromRef.current;\n mustToFocus?.focus();\n }\n else if (!isValidRange(from, to)) {\n if (!valueObj?.from) setError({ ...error, from: 'Invalid range' });\n else setError({ ...error, to: 'Invalid range' });\n setInnerError?.('Invalid range');\n }\n else if (validationResult) {\n // проп validateErrors вернет пустую строку, в случае если ошибок нет\n setError({\n from: validationResult.from ?? '',\n to: validationResult.to ?? '',\n });\n }\n else {\n setError({ from: '', to: '' });\n setInnerError?.('');\n // return e;\n }\n };\n\n return (\n <div\n className={cn(RC, className, {\n [`${RC}_column`]: isColumnPosition,\n })}\n >\n {label && label !== ' ' && <div className={`${RC}__label`}>{label}</div>}\n <div className={`${RC}__wrapper`}>\n <div className={`${RC}__input-from`}>\n <span className={`${RC}__input-label`}>From</span>\n <Input\n testId={`${testId}--from`}\n ref={inputFromRef}\n value={String(valueObj?.from) ?? ''}\n onChange={(val: string) => handleChange('from', val)}\n onBlur={() => rangeValidation('from')}\n error={error.from}\n onKeyUp={(_keyCode: number | string, e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n const from = valueObj?.from != null ? String(valueObj.from) : '';\n const to = valueObj?.to != null ? String(valueObj.to) : '';\n if (isValidRange(from, to)) {\n inputFromRef.current?.blur();\n }\n else {\n inputToRef.current?.focus();\n inputToRef.current?.select();\n }\n }\n }}\n placeholder={fromPlaceholder}\n disabled={isFieldDisabled}\n />\n </div>\n\n <div className={`${RC}__input-to`}>\n <span className={`${RC}__input-label`}>to</span>\n <Input\n testId={`${testId}--to`}\n ref={inputToRef}\n value={String(valueObj?.to) ?? ''}\n onChange={(val: string) => handleChange('to', val)}\n onBlur={() => rangeValidation('to')}\n error={error.to}\n onKeyUp={(_keyCode: number | string, e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') inputToRef.current?.blur();\n }}\n placeholder={toPlaceholder}\n disabled={isFieldDisabled}\n />\n </div>\n </div>\n </div>\n );\n};\n\nexport default RangeInputs;\n"],"mappings":";;;;;;;;AAeA,IAAM,KAAK;AAEX,IAAM,eAA4C,EAChD,kBACA,WACA,OAAO,UACP,UACA,gBACA,OAAO,OACP,UAAU,eACV,QAAQ,IACR,UAAU,OACV,QACA,WAAW,OACX,kBAAkB,IAClB,gBAAgB,IAChB,UACA,iBACI;CACJ,MAAM,CAAC,OAAO,YAAY,SAAuC;EAAE,MAAM;EAAI,IAAI;CAAG,CAAC;CACrF,MAAM,eAAe,OAAgC,IAAI;CACzD,MAAM,aAAa,OAAgC,IAAI;CAEvD,MAAM,kBAAkB,YAAY;CAEpC,MAAM,gBAAgB,MAAc,OAAwB;EAI1D,OAHoB,OAAO,WAAW,MAAM,SAAS,CAAC,EAAE,QAAQ,OAAO,EAAE,CAGlE,KAFW,OAAO,WAAW,IAAI,SAAS,CAAC,EAAE,QAAQ,OAAO,EAAE,CAE/C;CACxB;CAEA,MAAM,kBAAkB,UAAmC;EACzD,MAAM,SAAS,OAAO,KAAK;EAC3B,IAAI,SAAS,WAAW,CAAC,SAAS,OAAO,YAAY,OAAO,CAAC;OACxD,IAAI,SAAS,WAAW,SAC3B,OAAO,kBAAkB,YAAY,QAAQ,QAAQ,WAAW,EAAE,GAAG,CAAC,CAAC;OACpE,IAAI,SAAS,WAAW,SAC3B,OAAO,kBAAkB,QAAQ,QAAQ,OAAO,EAAE,CAAC;OAChD,OAAO,kBAAkB,KAAK;CACrC;CAEA,MAAM,gBAAgB,MAAqB,QAA+B;EACxE,SAAS;GAAE,GAAG;IAAW,OAAO,eAAe,GAAG;EAAE,CAAC;CACvD;CAEA,MAAM,mBAAmB,QAA6B;EACpD,MAAM,UAAU,CAAC,UAAU,QAAQ,CAAC,UAAU;EAC9C,MAAM,cAAc,QAAQ,SAAS,OAAO;EAC5C,MAAM,OAAO,UAAU,QAAQ,OAAO,OAAO,SAAS,IAAI,IAAI;EAC9D,MAAM,KAAK,UAAU,MAAM,OAAO,OAAO,SAAS,EAAE,IAAI;EACxD,MAAM,mBAAmB,iBAAiB,MAAM,EAAE;EAElD,IAAI,CAAC,YAAY,SAAS;GACxB,SAAS;IAAE,MAAM;IAAI,IAAI;GAAG,CAAC;GAC7B,gBAAgB,EAAE;EACpB,OACK,IAAI,CAAC,YAAY,CAAC,WAAW,cAEhC,CADoB,QAAQ,SAAS,WAAW,UAAU,aAAa,QAAA,EAC1D,MAAM;OAEhB,IAAI,CAAC,aAAa,MAAM,EAAE,GAAG;GAChC,IAAI,CAAC,UAAU,MAAM,SAAS;IAAE,GAAG;IAAO,MAAM;GAAgB,CAAC;QAC5D,SAAS;IAAE,GAAG;IAAO,IAAI;GAAgB,CAAC;GAC/C,gBAAgB,eAAe;EACjC,OACK,IAAI,kBAEP,SAAS;GACP,MAAM,iBAAiB,QAAQ;GAC/B,IAAI,iBAAiB,MAAM;EAC7B,CAAC;OAEE;GACH,SAAS;IAAE,MAAM;IAAI,IAAI;GAAG,CAAC;GAC7B,gBAAgB,EAAE;EAEpB;CACF;CAEA,OACE,qBAAC,OAAD;EACE,WAAW,GAAG,IAAI,WAAW,GAC1B,GAAG,GAAG,WAAW,iBACpB,CAAC;
|
|
1
|
+
{"version":3,"file":"RangeInputs.js","names":[],"sources":["../../../../../src/Atomic/FormElements/RangeInputs/RangeInputs.tsx"],"sourcesContent":["import type { KeyboardEvent } from 'react';\nimport type { IRangeInputsProps } from './RangeInputs.interface';\n\nimport cn from 'classnames';\nimport React, { useRef, useState } from 'react';\n\nimport {\n filterFloat,\n formatOnlyNumbers,\n} from '../../../Functions/fieldValueFormatters';\nimport { addBitDepthPoints } from '../../../Functions/utils.js';\nimport Input from '../Input/Input';\n\nimport './RangeInputs.scss';\n\nconst RC = 'range-inputs';\n\nconst RangeInputs: React.FC<IRangeInputsProps> = ({\n isColumnPosition,\n className,\n value: valueObj,\n onChange,\n validateErrors,\n type = 'int',\n setError: setInnerError,\n label = '',\n isPrice = false,\n testId,\n withZero = false,\n fromPlaceholder = '',\n toPlaceholder = '',\n disabled,\n isDisabled,\n}) => {\n const [error, setError] = useState<{ from: string; to: string }>({ from: '', to: '' });\n const inputFromRef = useRef<HTMLInputElement | null>(null);\n const inputToRef = useRef<HTMLInputElement | null>(null);\n\n const isFieldDisabled = disabled || isDisabled;\n\n const isValidRange = (from: string, to: string): boolean => {\n const correctFrom = Number.parseFloat(from?.toString()?.replace(/\\D/g, ''));\n const correctTo = Number.parseFloat(to?.toString()?.replace(/\\D/g, ''));\n\n return correctFrom <= correctTo;\n };\n\n const valueFormatter = (value: string | number): string => {\n const valStr = String(value);\n if (type === 'float' && !isPrice) return filterFloat(value, 2);\n else if (type === 'float' && isPrice)\n return addBitDepthPoints(filterFloat(valStr?.replace(/[^\\d.]/g, ''), 2));\n else if (type !== 'float' && isPrice)\n return addBitDepthPoints(valStr?.replace(/\\D/g, ''));\n else return formatOnlyNumbers(value);\n };\n\n const handleChange = (prop: 'from' | 'to', val: string | number): void => {\n onChange({ ...valueObj, [prop]: valueFormatter(val) });\n };\n\n const rangeValidation = (key: 'from' | 'to'): void => {\n const isEmpty = !valueObj?.from && !valueObj?.to;\n const oppositeKey = key === 'from' ? 'to' : 'from';\n const from = valueObj?.from != null ? String(valueObj.from) : '';\n const to = valueObj?.to != null ? String(valueObj.to) : '';\n const validationResult = validateErrors?.(from, to);\n\n if (!withZero && isEmpty) {\n setError({ from: '', to: '' });\n setInnerError?.('');\n }\n else if (!withZero && !valueObj?.[oppositeKey]) {\n const mustToFocus = key === 'from' ? inputToRef.current : inputFromRef.current;\n mustToFocus?.focus();\n }\n else if (!isValidRange(from, to)) {\n if (!valueObj?.from) setError({ ...error, from: 'Invalid range' });\n else setError({ ...error, to: 'Invalid range' });\n setInnerError?.('Invalid range');\n }\n else if (validationResult) {\n // проп validateErrors вернет пустую строку, в случае если ошибок нет\n setError({\n from: validationResult.from ?? '',\n to: validationResult.to ?? '',\n });\n }\n else {\n setError({ from: '', to: '' });\n setInnerError?.('');\n // return e;\n }\n };\n\n return (\n <div\n className={cn(RC, className, {\n [`${RC}_column`]: isColumnPosition,\n })}\n >\n {label && label !== ' ' && <div className={`${RC}__label`}>{label}</div>}\n <div className={`${RC}__wrapper`}>\n <div className={`${RC}__input-from`}>\n <span className={`${RC}__input-label`}>From</span>\n <Input\n testId={`${testId}--from`}\n ref={inputFromRef}\n value={String(valueObj?.from) ?? ''}\n onChange={(val: string) => handleChange('from', val)}\n onBlur={() => rangeValidation('from')}\n error={error.from}\n onKeyUp={(_keyCode: number | string, e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n const from = valueObj?.from != null ? String(valueObj.from) : '';\n const to = valueObj?.to != null ? String(valueObj.to) : '';\n if (isValidRange(from, to)) {\n inputFromRef.current?.blur();\n }\n else {\n inputToRef.current?.focus();\n inputToRef.current?.select();\n }\n }\n }}\n placeholder={fromPlaceholder}\n disabled={isFieldDisabled}\n />\n </div>\n\n <div className={`${RC}__input-to`}>\n <span className={`${RC}__input-label`}>to</span>\n <Input\n testId={`${testId}--to`}\n ref={inputToRef}\n value={String(valueObj?.to) ?? ''}\n onChange={(val: string) => handleChange('to', val)}\n onBlur={() => rangeValidation('to')}\n error={error.to}\n onKeyUp={(_keyCode: number | string, e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') inputToRef.current?.blur();\n }}\n placeholder={toPlaceholder}\n disabled={isFieldDisabled}\n />\n </div>\n </div>\n </div>\n );\n};\n\nexport default RangeInputs;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RangeList.js","names":[],"sources":["../../../../../src/Atomic/FormElements/RangeList/RangeList.tsx"],"sourcesContent":["import type { IInputOnlyNumbersOptions, IRangeListProps } from './RangeList.interface';\nimport cn from 'classnames';\nimport React, { useRef, useState } from 'react';\n\nimport { addRangeDefault } from '../../../Functions/operations';\nimport Button from '../../UI/Button/Button';\nimport Input from '../Input/Input';\n\nimport RangeListRow, { RangeListCell } from './partial/RangeListRow';\n\nimport './RangeList.scss';\n\nconst RC = 'range-list';\nconst DEFAULT_STATE = { from: '', to: '' };\n\nconst RangeList: React.FC<IRangeListProps> = (props) => {\n const {\n className,\n value = [],\n disabled,\n validateErrors,\n onChange,\n isFloatValues,\n decimalPlaces,\n error,\n defaultErrorText,\n nullValueText,\n isOnlyOneRow = false,\n testId = 'range-list',\n } = props;\n\n const NULL_VALUE_TEXT = nullValueText ?? 'No data';\n\n const [state, setState] = useState<{ from: string; to: string }>(DEFAULT_STATE);\n const [innerError, setInnerError] = useState<string | boolean>('');\n const [outerError, setOuterError] = useState<string | boolean>('');\n\n const inputFromRef = useRef<HTMLInputElement>(null);\n const inputToRef = useRef<HTMLInputElement>(null);\n\n const isValidRange = Boolean(\n state?.from && state?.to && Number(state?.from) <= Number(state?.to),\n );\n const isShowRow = (isOnlyOneRow && value?.length === 0) || !isOnlyOneRow;\n\n const getOnlyNumbersProps = (): IInputOnlyNumbersOptions => {\n return isFloatValues\n ? { type: 'float', decimalPlaces: decimalPlaces || 0 }\n : { type: 'int' };\n };\n\n const handle = {\n inputsChange: (val: string, prop: 'from' | 'to') => setState({ ...state, [prop]: val }),\n addRange: () => {\n const validationError = validateErrors?.(Number(state.from), Number(state.to));\n\n if (isValidRange && !validationError) {\n onChange(\n addRangeDefault(\n Number(state.from),\n Number(state.to),\n value,\n isFloatValues ? decimalPlaces : null,\n ),\n );\n setState(DEFAULT_STATE);\n setInnerError('');\n setOuterError('');\n }\n else if (!isValidRange) {\n setInnerError(defaultErrorText || '');\n }\n else if (validationError) {\n setOuterError(validationError);\n }\n },\n removeRange: (index: number) =>\n onChange(value.filter((_, idx) => idx !== index)),\n rangeValidation: (e: React.FocusEvent, key: 'from' | 'to') => {\n const oppositeKey = key === 'from' ? 'to' : 'from';\n\n if (!state?.from && !state?.to) {\n setInnerError('');\n setOuterError('');\n return e;\n }\n if (!state[oppositeKey]) {\n const mustToFocus\n = key === 'from' ? inputToRef.current : inputFromRef.current;\n mustToFocus?.focus();\n }\n else if (!isValidRange) {\n setInnerError(defaultErrorText || '');\n if (validateErrors)\n setOuterError(validateErrors(Number(state.from), Number(state.to)) || '');\n }\n else {\n setInnerError('');\n if (validateErrors)\n setOuterError(validateErrors(Number(state.from), Number(state.to)) || '');\n }\n return null;\n },\n onKeyUpFromInput: (keyCode: string | number) => {\n if (keyCode === 13) {\n if (isValidRange) inputFromRef.current?.blur();\n else if (!state.to) inputToRef.current?.focus();\n else if (state.from) inputFromRef.current?.select();\n }\n },\n onKeyUpToInput: (keyCode: string | number) => {\n if (keyCode === 13) inputToRef.current?.blur();\n },\n };\n\n const renderInputsAndAddButtonRow = (): React.ReactElement => {\n return (\n <div className={cn(`${RC}__row`, `${RC}__inputs`)}>\n <RangeListCell className={`${RC}__cell-input`}>\n <Input\n ref={inputFromRef}\n onlyNumbers={getOnlyNumbersProps()}\n value={state.from}\n onBlur={(e: React.FocusEvent) => handle.rangeValidation(e, 'from')}\n onChange={(val: string) => handle.inputsChange(val, 'from')}\n onKeyUp={(keyCode: string | number) => handle.onKeyUpFromInput(keyCode)}\n />\n </RangeListCell>\n\n <RangeListCell className={`${RC}__cell-input`}>\n <Input\n ref={inputToRef}\n onlyNumbers={getOnlyNumbersProps()}\n value={state.to}\n onBlur={(e: React.FocusEvent) => handle.rangeValidation(e, 'to')}\n onChange={(val: string) => handle.inputsChange(val, 'to')}\n onKeyUp={(keyCode: string | number) => handle.onKeyUpToInput(keyCode)}\n />\n </RangeListCell>\n\n <RangeListCell className={`${RC}__cell-button`}>\n <Button onClick={handle.addRange}>Add</Button>\n </RangeListCell>\n </div>\n )\n };\n\n return (\n <div\n data-testid={testId}\n className={cn(RC, className, { [`${RC}_disabled`]: disabled })}\n >\n <div className={cn(`${RC}__row`, `${RC}__labels`)}>\n <RangeListCell className={`${RC}__cell-label`}>From</RangeListCell>\n <RangeListCell className={`${RC}__cell-label`}>To</RangeListCell>\n </div>\n {isShowRow && renderInputsAndAddButtonRow()}\n {(innerError || outerError || error) && (\n <span className={`${RC}__error`}>\n {innerError || error || outerError}\n </span>\n )}\n {!value?.length && (\n <div className={cn(`${RC}__row`, `${RC}__values`, `${RC}__null-value`)}>\n {NULL_VALUE_TEXT}\n </div>\n )}\n {value.map((row, idx) => (\n <RangeListRow\n data-testid={`${testId}-row-${idx}`}\n key={`idx-${idx}-from-${row.from}-to${row.to}`}\n {...row}\n idx={idx}\n actionClick={() => handle.removeRange(idx)}\n />\n ))}\n </div>\n );\n};\n\nexport default RangeList;\n"],"mappings":";;;;;;;;;AAYA,IAAM,KAAK;AACX,IAAM,gBAAgB;CAAE,MAAM;CAAI,IAAI;AAAG;AAEzC,IAAM,aAAwC,UAAU;CACtD,MAAM,EACJ,WACA,QAAQ,CAAC,GACT,UACA,gBACA,UACA,eACA,eACA,OACA,kBACA,eACA,eAAe,OACf,SAAS,iBACP;CAEJ,MAAM,kBAAkB,iBAAiB;CAEzC,MAAM,CAAC,OAAO,YAAY,SAAuC,aAAa;CAC9E,MAAM,CAAC,YAAY,iBAAiB,SAA2B,EAAE;CACjE,MAAM,CAAC,YAAY,iBAAiB,SAA2B,EAAE;CAEjE,MAAM,eAAe,OAAyB,IAAI;CAClD,MAAM,aAAa,OAAyB,IAAI;CAEhD,MAAM,eAAe,QACnB,OAAO,QAAQ,OAAO,MAAM,OAAO,OAAO,IAAI,KAAK,OAAO,OAAO,EAAE,CACrE;CACA,MAAM,YAAa,gBAAgB,OAAO,WAAW,KAAM,CAAC;CAE5D,MAAM,4BAAsD;EAC1D,OAAO,gBACH;GAAE,MAAM;GAAS,eAAe,iBAAiB;EAAE,IACnD,EAAE,MAAM,MAAM;CACpB;CAEA,MAAM,SAAS;EACb,eAAe,KAAa,SAAwB,SAAS;GAAE,GAAG;IAAQ,OAAO;EAAI,CAAC;EACtF,gBAAgB;GACd,MAAM,kBAAkB,iBAAiB,OAAO,MAAM,IAAI,GAAG,OAAO,MAAM,EAAE,CAAC;GAE7E,IAAI,gBAAgB,CAAC,iBAAiB;IACpC,SACE,gBACE,OAAO,MAAM,IAAI,GACjB,OAAO,MAAM,EAAE,GACf,OACA,gBAAgB,gBAAgB,IAClC,CACF;IACA,SAAS,aAAa;IACtB,cAAc,EAAE;IAChB,cAAc,EAAE;GAClB,OACK,IAAI,CAAC,cACR,cAAc,oBAAoB,EAAE;QAEjC,IAAI,iBACP,cAAc,eAAe;EAEjC;EACA,cAAc,UACZ,SAAS,MAAM,QAAQ,GAAG,QAAQ,QAAQ,KAAK,CAAC;EAClD,kBAAkB,GAAqB,QAAuB;GAC5D,MAAM,cAAc,QAAQ,SAAS,OAAO;GAE5C,IAAI,CAAC,OAAO,QAAQ,CAAC,OAAO,IAAI;IAC9B,cAAc,EAAE;IAChB,cAAc,EAAE;IAChB,OAAO;GACT;GACA,IAAI,CAAC,MAAM,cAGT,CADI,QAAQ,SAAS,WAAW,UAAU,aAAa,QAAA,EAC1C,MAAM;QAEhB,IAAI,CAAC,cAAc;IACtB,cAAc,oBAAoB,EAAE;IACpC,IAAI,gBACF,cAAc,eAAe,OAAO,MAAM,IAAI,GAAG,OAAO,MAAM,EAAE,CAAC,KAAK,EAAE;GAC5E,OACK;IACH,cAAc,EAAE;IAChB,IAAI,gBACF,cAAc,eAAe,OAAO,MAAM,IAAI,GAAG,OAAO,MAAM,EAAE,CAAC,KAAK,EAAE;GAC5E;GACA,OAAO;EACT;EACA,mBAAmB,YAA6B;GAC9C,IAAI,YAAY;
|
|
1
|
+
{"version":3,"file":"RangeList.js","names":[],"sources":["../../../../../src/Atomic/FormElements/RangeList/RangeList.tsx"],"sourcesContent":["import type { IInputOnlyNumbersOptions, IRangeListProps } from './RangeList.interface';\nimport cn from 'classnames';\nimport React, { useRef, useState } from 'react';\n\nimport { addRangeDefault } from '../../../Functions/operations';\nimport Button from '../../UI/Button/Button';\nimport Input from '../Input/Input';\n\nimport RangeListRow, { RangeListCell } from './partial/RangeListRow';\n\nimport './RangeList.scss';\n\nconst RC = 'range-list';\nconst DEFAULT_STATE = { from: '', to: '' };\n\nconst RangeList: React.FC<IRangeListProps> = (props) => {\n const {\n className,\n value = [],\n disabled,\n validateErrors,\n onChange,\n isFloatValues,\n decimalPlaces,\n error,\n defaultErrorText,\n nullValueText,\n isOnlyOneRow = false,\n testId = 'range-list',\n } = props;\n\n const NULL_VALUE_TEXT = nullValueText ?? 'No data';\n\n const [state, setState] = useState<{ from: string; to: string }>(DEFAULT_STATE);\n const [innerError, setInnerError] = useState<string | boolean>('');\n const [outerError, setOuterError] = useState<string | boolean>('');\n\n const inputFromRef = useRef<HTMLInputElement>(null);\n const inputToRef = useRef<HTMLInputElement>(null);\n\n const isValidRange = Boolean(\n state?.from && state?.to && Number(state?.from) <= Number(state?.to),\n );\n const isShowRow = (isOnlyOneRow && value?.length === 0) || !isOnlyOneRow;\n\n const getOnlyNumbersProps = (): IInputOnlyNumbersOptions => {\n return isFloatValues\n ? { type: 'float', decimalPlaces: decimalPlaces || 0 }\n : { type: 'int' };\n };\n\n const handle = {\n inputsChange: (val: string, prop: 'from' | 'to') => setState({ ...state, [prop]: val }),\n addRange: () => {\n const validationError = validateErrors?.(Number(state.from), Number(state.to));\n\n if (isValidRange && !validationError) {\n onChange(\n addRangeDefault(\n Number(state.from),\n Number(state.to),\n value,\n isFloatValues ? decimalPlaces : null,\n ),\n );\n setState(DEFAULT_STATE);\n setInnerError('');\n setOuterError('');\n }\n else if (!isValidRange) {\n setInnerError(defaultErrorText || '');\n }\n else if (validationError) {\n setOuterError(validationError);\n }\n },\n removeRange: (index: number) =>\n onChange(value.filter((_, idx) => idx !== index)),\n rangeValidation: (e: React.FocusEvent, key: 'from' | 'to') => {\n const oppositeKey = key === 'from' ? 'to' : 'from';\n\n if (!state?.from && !state?.to) {\n setInnerError('');\n setOuterError('');\n return e;\n }\n if (!state[oppositeKey]) {\n const mustToFocus\n = key === 'from' ? inputToRef.current : inputFromRef.current;\n mustToFocus?.focus();\n }\n else if (!isValidRange) {\n setInnerError(defaultErrorText || '');\n if (validateErrors)\n setOuterError(validateErrors(Number(state.from), Number(state.to)) || '');\n }\n else {\n setInnerError('');\n if (validateErrors)\n setOuterError(validateErrors(Number(state.from), Number(state.to)) || '');\n }\n return null;\n },\n onKeyUpFromInput: (keyCode: string | number) => {\n if (keyCode === 13) {\n if (isValidRange) inputFromRef.current?.blur();\n else if (!state.to) inputToRef.current?.focus();\n else if (state.from) inputFromRef.current?.select();\n }\n },\n onKeyUpToInput: (keyCode: string | number) => {\n if (keyCode === 13) inputToRef.current?.blur();\n },\n };\n\n const renderInputsAndAddButtonRow = (): React.ReactElement => {\n return (\n <div className={cn(`${RC}__row`, `${RC}__inputs`)}>\n <RangeListCell className={`${RC}__cell-input`}>\n <Input\n ref={inputFromRef}\n onlyNumbers={getOnlyNumbersProps()}\n value={state.from}\n onBlur={(e: React.FocusEvent) => handle.rangeValidation(e, 'from')}\n onChange={(val: string) => handle.inputsChange(val, 'from')}\n onKeyUp={(keyCode: string | number) => handle.onKeyUpFromInput(keyCode)}\n />\n </RangeListCell>\n\n <RangeListCell className={`${RC}__cell-input`}>\n <Input\n ref={inputToRef}\n onlyNumbers={getOnlyNumbersProps()}\n value={state.to}\n onBlur={(e: React.FocusEvent) => handle.rangeValidation(e, 'to')}\n onChange={(val: string) => handle.inputsChange(val, 'to')}\n onKeyUp={(keyCode: string | number) => handle.onKeyUpToInput(keyCode)}\n />\n </RangeListCell>\n\n <RangeListCell className={`${RC}__cell-button`}>\n <Button onClick={handle.addRange}>Add</Button>\n </RangeListCell>\n </div>\n )\n };\n\n return (\n <div\n data-testid={testId}\n className={cn(RC, className, { [`${RC}_disabled`]: disabled })}\n >\n <div className={cn(`${RC}__row`, `${RC}__labels`)}>\n <RangeListCell className={`${RC}__cell-label`}>From</RangeListCell>\n <RangeListCell className={`${RC}__cell-label`}>To</RangeListCell>\n </div>\n {isShowRow && renderInputsAndAddButtonRow()}\n {(innerError || outerError || error) && (\n <span className={`${RC}__error`}>\n {innerError || error || outerError}\n </span>\n )}\n {!value?.length && (\n <div className={cn(`${RC}__row`, `${RC}__values`, `${RC}__null-value`)}>\n {NULL_VALUE_TEXT}\n </div>\n )}\n {value.map((row, idx) => (\n <RangeListRow\n data-testid={`${testId}-row-${idx}`}\n key={`idx-${idx}-from-${row.from}-to${row.to}`}\n {...row}\n idx={idx}\n actionClick={() => handle.removeRange(idx)}\n />\n ))}\n </div>\n );\n};\n\nexport default RangeList;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RangeListRow.js","names":[],"sources":["../../../../../../src/Atomic/FormElements/RangeList/partial/RangeListRow.tsx"],"sourcesContent":["import type { IRangeListCellProps, IRangeListRowProps } from '../RangeList.interface';\nimport cn from 'classnames';\nimport React from 'react';\n\nimport { Trash2 } from 'react-feather';\n\nconst RC = 'range-list';\n\nexport const RangeListCell: React.FC<IRangeListCellProps> = ({ children, idx, className, onClick }) => {\n return (\n <div\n className={cn(`${RC}__cell`, className, { [`${RC}__cell-${idx}`]: idx })}\n onClick={onClick}\n >\n {children}\n </div>\n );\n};\n\nconst RangeListRow: React.FC<IRangeListRowProps> = ({ from, to, idx, actionClick }) => {\n return (\n <div\n className={cn(`${RC}__row`, `${RC}__values`, {\n [`${RC}__values_first-value`]: idx === 0,\n })}\n >\n <RangeListCell idx={1} className={`${RC}__cell-value`}>\n {from}\n </RangeListCell>\n\n <RangeListCell idx={2} className={`${RC}__cell-value`}>\n {to}\n </RangeListCell>\n\n <RangeListCell\n idx={3}\n className={`${RC}__cell-action`}\n onClick={() => actionClick(idx)}\n >\n <Trash2 />\n </RangeListCell>\n </div>\n );\n};\n\nexport default RangeListRow;\n"],"mappings":";;;;;AAMA,IAAM,KAAK;AAEX,IAAa,iBAAgD,EAAE,UAAU,KAAK,WAAW,cAAc;CACrG,OACE,oBAAC,OAAD;EACE,WAAW,GAAG,GAAG,GAAG,SAAS,WAAW,GAAG,GAAG,GAAG,SAAS,QAAQ,IAAI,CAAC;EAC9D;EAER;CACE,CAAA;AAET;AAEA,IAAM,gBAA8C,EAAE,MAAM,IAAI,KAAK,kBAAkB;CACrF,OACE,qBAAC,OAAD;EACE,WAAW,GAAG,GAAG,GAAG,QAAQ,GAAG,GAAG,WAAW,GAC1C,GAAG,GAAG,wBAAwB,QAAQ,EACzC,CAAC;
|
|
1
|
+
{"version":3,"file":"RangeListRow.js","names":[],"sources":["../../../../../../src/Atomic/FormElements/RangeList/partial/RangeListRow.tsx"],"sourcesContent":["import type { IRangeListCellProps, IRangeListRowProps } from '../RangeList.interface';\nimport cn from 'classnames';\nimport React from 'react';\n\nimport { Trash2 } from 'react-feather';\n\nconst RC = 'range-list';\n\nexport const RangeListCell: React.FC<IRangeListCellProps> = ({ children, idx, className, onClick }) => {\n return (\n <div\n className={cn(`${RC}__cell`, className, { [`${RC}__cell-${idx}`]: idx })}\n onClick={onClick}\n >\n {children}\n </div>\n );\n};\n\nconst RangeListRow: React.FC<IRangeListRowProps> = ({ from, to, idx, actionClick }) => {\n return (\n <div\n className={cn(`${RC}__row`, `${RC}__values`, {\n [`${RC}__values_first-value`]: idx === 0,\n })}\n >\n <RangeListCell idx={1} className={`${RC}__cell-value`}>\n {from}\n </RangeListCell>\n\n <RangeListCell idx={2} className={`${RC}__cell-value`}>\n {to}\n </RangeListCell>\n\n <RangeListCell\n idx={3}\n className={`${RC}__cell-action`}\n onClick={() => actionClick(idx)}\n >\n <Trash2 />\n </RangeListCell>\n </div>\n );\n};\n\nexport default RangeListRow;\n"],"mappings":";;;;;AAMA,IAAM,KAAK;AAEX,IAAa,iBAAgD,EAAE,UAAU,KAAK,WAAW,cAAc;CACrG,OACE,oBAAC,OAAD;EACE,WAAW,GAAG,GAAG,GAAG,SAAS,WAAW,GAAG,GAAG,GAAG,SAAS,QAAQ,IAAI,CAAC;EAC9D;EAER;CACE,CAAA;AAET;AAEA,IAAM,gBAA8C,EAAE,MAAM,IAAI,KAAK,kBAAkB;CACrF,OACE,qBAAC,OAAD;EACE,WAAW,GAAG,GAAG,GAAG,QAAQ,GAAG,GAAG,WAAW,GAC1C,GAAG,GAAG,wBAAwB,QAAQ,EACzC,CAAC;EAHH,UAAA;GAKE,oBAAC,eAAD;IAAe,KAAK;IAAG,WAAW,GAAG,GAAG;IACrC,UAAA;GACY,CAAA;GAEf,oBAAC,eAAD;IAAe,KAAK;IAAG,WAAW,GAAG,GAAG;IACrC,UAAA;GACY,CAAA;GAEf,oBAAC,eAAD;IACE,KAAK;IACL,WAAW,GAAG,GAAG;IACjB,eAAe,YAAY,GAAG;IAE9B,UAAA,oBAAC,QAAD,CAAS,CAAA;GACI,CAAA;EACZ;;AAET"}
|
|
@@ -30,7 +30,10 @@ function RangeSlider({ required, noTrack, rangeSymbol, min = 0, max = 100, decim
|
|
|
30
30
|
const fromTriggerRef = useRef(0);
|
|
31
31
|
const toTriggerRef = useRef(0);
|
|
32
32
|
const prepareValue = (value2) => {
|
|
33
|
-
|
|
33
|
+
const number = parseFloat(value2);
|
|
34
|
+
if (Number.isNaN(number)) return number;
|
|
35
|
+
const factor = 10 ** precision;
|
|
36
|
+
return Math.trunc(Number((number * factor).toPrecision(15))) / factor;
|
|
34
37
|
};
|
|
35
38
|
const [from, setFromValue] = useState(value?.from ?? min);
|
|
36
39
|
const setFrom = (v) => setFromValue(prepareValue(v));
|
|
@@ -111,7 +114,6 @@ function RangeSlider({ required, noTrack, rangeSymbol, min = 0, max = 100, decim
|
|
|
111
114
|
onChange(values);
|
|
112
115
|
setFrezeedValues(values);
|
|
113
116
|
}, DEBOUNCE_TIME)();
|
|
114
|
-
break;
|
|
115
117
|
}
|
|
116
118
|
};
|
|
117
119
|
const onTriggerMouseDown = (e, type) => {
|
|
@@ -279,12 +281,13 @@ function RangeSlider({ required, noTrack, rangeSymbol, min = 0, max = 100, decim
|
|
|
279
281
|
});
|
|
280
282
|
};
|
|
281
283
|
const renderTrackRange = () => {
|
|
284
|
+
const style = {
|
|
285
|
+
width: `${getRangeWidth()}px`,
|
|
286
|
+
left: `${getRangeOffset()}px`
|
|
287
|
+
};
|
|
282
288
|
return /* @__PURE__ */ jsx("div", {
|
|
283
289
|
className: "range-slider__track__range",
|
|
284
|
-
style
|
|
285
|
-
width: `${getRangeWidth()}px`,
|
|
286
|
-
left: `${getRangeOffset()}px`
|
|
287
|
-
}
|
|
290
|
+
style
|
|
288
291
|
});
|
|
289
292
|
};
|
|
290
293
|
const renderTrackTriggers = () => {
|