intelicoreact 2.0.19 → 2.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/Atomic/FormElements/ActionAlert/ActionAlert.js.map +1 -1
- package/dist/es/Atomic/FormElements/AdvancedStatus/AdvancedStatus.js.map +1 -1
- package/dist/es/Atomic/FormElements/Calendar/Calendar.js +2 -1
- package/dist/es/Atomic/FormElements/Calendar/Calendar.js.map +1 -1
- package/dist/es/Atomic/FormElements/CheckboxInput/CheckboxInput.js.map +1 -1
- package/dist/es/Atomic/FormElements/CheckboxesLine/CheckboxesLine.js.map +1 -1
- package/dist/es/Atomic/FormElements/Datepicker/Datepicker.js +6 -5
- package/dist/es/Atomic/FormElements/Datepicker/Datepicker.js.map +1 -1
- package/dist/es/Atomic/FormElements/Datepicker/components/DatepickerCalendar.js +2 -1
- package/dist/es/Atomic/FormElements/Datepicker/components/DatepickerCalendar.js.map +1 -1
- package/dist/es/Atomic/FormElements/Dropdown/Dropdown.js +35 -26
- package/dist/es/Atomic/FormElements/Dropdown/Dropdown.js.map +1 -1
- package/dist/es/Atomic/FormElements/Dropdown/_utils.js +14 -9
- package/dist/es/Atomic/FormElements/Dropdown/_utils.js.map +1 -1
- package/dist/es/Atomic/FormElements/DropdownLiveSearch/DropdownLiveSearch.js.map +1 -1
- package/dist/es/Atomic/FormElements/FileLoader/FileLoader.js.map +1 -1
- package/dist/es/Atomic/FormElements/FileLoader/partial/LoadZone.js +1 -1
- package/dist/es/Atomic/FormElements/FileLoader/partial/LoadZone.js.map +1 -1
- package/dist/es/Atomic/FormElements/FileLoader/partial/LoadedContent.js +15 -13
- package/dist/es/Atomic/FormElements/FileLoader/partial/LoadedContent.js.map +1 -1
- package/dist/es/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.js +1 -1
- package/dist/es/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.js.map +1 -1
- package/dist/es/Atomic/FormElements/FileLoaderLocal/FileLoaderLocal.js +23 -19
- package/dist/es/Atomic/FormElements/FileLoaderLocal/FileLoaderLocal.js.map +1 -1
- package/dist/es/Atomic/FormElements/FileLoaderLocalGroup/FileLoaderLocalGroup.js +1 -1
- package/dist/es/Atomic/FormElements/FileLoaderLocalGroup/FileLoaderLocalGroup.js.map +1 -1
- package/dist/es/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN.js.map +1 -1
- package/dist/es/Atomic/FormElements/Input/Input.js.map +1 -1
- package/dist/es/Atomic/FormElements/Input/hooks/useInputValueProcessing.js +0 -1
- package/dist/es/Atomic/FormElements/Input/hooks/useInputValueProcessing.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputCalendar/InputCalendar.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputColor/InputColor.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputCurrency/InputCurrency.js +28 -25
- package/dist/es/Atomic/FormElements/InputCurrency/InputCurrency.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputDateRange/InputDateRange.js +2 -1
- package/dist/es/Atomic/FormElements/InputDateRange/InputDateRange.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputDateRange/components/DateInput.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputDateRange/components/Datepicker.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputDateRange/components/OpenedPart.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputDateRange/components/SelectItem.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputLink/InputLink.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputMask3/InputMask3.js +16 -14
- package/dist/es/Atomic/FormElements/InputMask3/InputMask3.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputWithAction/InputWithAction.js.map +1 -1
- package/dist/es/Atomic/FormElements/InputsRow/InputsRow.js +3 -2
- package/dist/es/Atomic/FormElements/InputsRow/InputsRow.js.map +1 -1
- package/dist/es/Atomic/FormElements/Label/Label.js.map +1 -1
- package/dist/es/Atomic/FormElements/MobileCalendar/MobileCalendar.js.map +1 -1
- package/dist/es/Atomic/FormElements/MultiSelect/MultiSelect.js.map +1 -1
- package/dist/es/Atomic/FormElements/RadioGroup/RadioGroup.js.map +1 -1
- package/dist/es/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.js.map +1 -1
- package/dist/es/Atomic/FormElements/RadioInput/RadioInput.js.map +1 -1
- package/dist/es/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.js.map +1 -1
- package/dist/es/Atomic/FormElements/RangeCalendar/RangeCalendar.js +2 -1
- package/dist/es/Atomic/FormElements/RangeCalendar/RangeCalendar.js.map +1 -1
- package/dist/es/Atomic/FormElements/RangeInputs/RangeInputs.js.map +1 -1
- package/dist/es/Atomic/FormElements/RangeList/RangeList.js.map +1 -1
- package/dist/es/Atomic/FormElements/RangeList/partial/RangeListRow.js.map +1 -1
- package/dist/es/Atomic/FormElements/RangeSlider/RangeSlider.js +9 -6
- package/dist/es/Atomic/FormElements/RangeSlider/RangeSlider.js.map +1 -1
- package/dist/es/Atomic/FormElements/RangeSlider2/RangeSlider2.js +4 -2
- package/dist/es/Atomic/FormElements/RangeSlider2/RangeSlider2.js.map +1 -1
- package/dist/es/Atomic/FormElements/SwitchableRow/SwitchableRow.js.map +1 -1
- package/dist/es/Atomic/FormElements/Switcher/Switcher.js.map +1 -1
- package/dist/es/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.js.map +1 -1
- package/dist/es/Atomic/FormElements/SwitcherHide/SwitcherHide.js.map +1 -1
- package/dist/es/Atomic/FormElements/SwitcherRadio/SwitcherRadio.js.map +1 -1
- package/dist/es/Atomic/FormElements/SwitcherRange/SwitcherRange.js.map +1 -1
- package/dist/es/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.js +1 -1
- package/dist/es/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.js.map +1 -1
- package/dist/es/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.js.map +1 -1
- package/dist/es/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.js.map +1 -1
- package/dist/es/Atomic/FormElements/TagsDropdown/TagsDropdown.js.map +1 -1
- package/dist/es/Atomic/FormElements/Text/Text.js.map +1 -1
- package/dist/es/Atomic/FormElements/TextSwitcher/TextSwitcher.js.map +1 -1
- package/dist/es/Atomic/FormElements/Textarea/Textarea.js.map +1 -1
- package/dist/es/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js +4 -2
- package/dist/es/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js.map +1 -1
- package/dist/es/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.js.map +1 -1
- package/dist/es/Atomic/FormElements/TimeRange/TimeRange.js.map +1 -1
- package/dist/es/Atomic/FormElements/UserContacts/UserContacts.js.map +1 -1
- package/dist/es/Atomic/Layout/Header/Header.js.map +1 -1
- package/dist/es/Atomic/Layout/MainMenu/MainMenu.js.map +1 -1
- package/dist/es/Atomic/Layout/Spinner/Spinner.js.map +1 -1
- package/dist/es/Atomic/UI/Accordion/Accordion.js.map +1 -1
- package/dist/es/Atomic/UI/Accordion/AccordionItem.js.map +1 -1
- package/dist/es/Atomic/UI/AdvancedTag/AdvTag.js +2 -1
- package/dist/es/Atomic/UI/AdvancedTag/AdvTag.js.map +1 -1
- package/dist/es/Atomic/UI/AdvancedTag/AdvancedTags.js.map +1 -1
- package/dist/es/Atomic/UI/Alert/Alert.js.map +1 -1
- package/dist/es/Atomic/UI/Arrow/Arrow.js.map +1 -1
- package/dist/es/Atomic/UI/Button/Button.js.map +1 -1
- package/dist/es/Atomic/UI/ButtonsBar/ButtonsBar.js.map +1 -1
- package/dist/es/Atomic/UI/Chart/Chart.js +2 -1
- package/dist/es/Atomic/UI/Chart/Chart.js.map +1 -1
- package/dist/es/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.js.map +1 -1
- package/dist/es/Atomic/UI/Chart/partial/utils.js +2 -1
- package/dist/es/Atomic/UI/Chart/partial/utils.js.map +1 -1
- package/dist/es/Atomic/UI/DateTime/DateTime.js.map +1 -1
- package/dist/es/Atomic/UI/DebugContainer/DebugContainer.js.map +1 -1
- package/dist/es/Atomic/UI/DoubleString/DoubleString.js.map +1 -1
- package/dist/es/Atomic/UI/Hint/Hint.js +8 -12
- package/dist/es/Atomic/UI/Hint/Hint.js.map +1 -1
- package/dist/es/Atomic/UI/Hint/partials/_utils.js.map +1 -1
- package/dist/es/Atomic/UI/Modal/Modal.js.map +1 -1
- package/dist/es/Atomic/UI/Modal/ModalHOC.js.map +1 -1
- package/dist/es/Atomic/UI/Modal/partials/ModalTitle.js.map +1 -1
- package/dist/es/Atomic/UI/Modal/partials/_constants.js.map +1 -1
- package/dist/es/Atomic/UI/Modal/partials/_utils.js +1 -4
- package/dist/es/Atomic/UI/Modal/partials/_utils.js.map +1 -1
- package/dist/es/Atomic/UI/Modal/partials/useMobileModal.js +17 -10
- package/dist/es/Atomic/UI/Modal/partials/useMobileModal.js.map +1 -1
- package/dist/es/Atomic/UI/NavLine/NavLine.js.map +1 -1
- package/dist/es/Atomic/UI/PageTitle/PageTitle.js.map +1 -1
- package/dist/es/Atomic/UI/Price/Price.js.map +1 -1
- package/dist/es/Atomic/UI/PriceRange/PriceRange.js.map +1 -1
- package/dist/es/Atomic/UI/ProgressLine/ProgressLine.js.map +1 -1
- package/dist/es/Atomic/UI/Status/Status.js.map +1 -1
- package/dist/es/Atomic/UI/Tag/Tag.js.map +1 -1
- package/dist/es/Atomic/UI/TagList/TagList.js.map +1 -1
- package/dist/es/Atomic/UI/UserBox/UserBox.js.map +1 -1
- package/dist/es/Atomic/UI/WizardStepper/ui/StateIcon/StateIcon.js.map +1 -1
- package/dist/es/Atomic/UI/WizardStepper/ui/StepRow/StepRow.js.map +1 -1
- package/dist/es/Atomic/UI/WizardStepper/ui/StepWrapper/StepWrapper.js.map +1 -1
- package/dist/es/Atomic/UI/WizardStepper/ui/icons.js.map +1 -1
- package/dist/es/Classes/RESTAPI/partials/AbortableFetch.js +9 -2
- package/dist/es/Classes/RESTAPI/partials/AbortableFetch.js.map +1 -1
- package/dist/es/Classes/RESTAPI/partials/CredentialsProcessing.js +4 -2
- package/dist/es/Classes/RESTAPI/partials/CredentialsProcessing.js.map +1 -1
- package/dist/es/Classes/RESTAPI/partials/sse.js +4 -7
- package/dist/es/Classes/RESTAPI/partials/sse.js.map +1 -1
- package/dist/es/Functions/fieldValueFormatters.js +1 -3
- package/dist/es/Functions/fieldValueFormatters.js.map +1 -1
- package/dist/es/Functions/operations.js +22 -20
- package/dist/es/Functions/operations.js.map +1 -1
- package/dist/es/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js +8 -6
- package/dist/es/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js.map +1 -1
- package/dist/es/Functions/useFormTools/functions/General.js +8 -6
- package/dist/es/Functions/useFormTools/functions/General.js.map +1 -1
- package/dist/es/Functions/useFormTools/functions/RenderFields.js +6 -5
- package/dist/es/Functions/useFormTools/functions/RenderFields.js.map +1 -1
- package/dist/es/Functions/useFormTools/index.js +1 -4
- package/dist/es/Functions/useFormTools/index.js.map +1 -1
- package/dist/es/Functions/utils.js +2 -1
- package/dist/es/Functions/utils.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/AffiliateNetworks.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/AlertCircle.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/AppStore.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Arrow.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ArrowDown.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ArrowLeft.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ArrowRight.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ArrowUp.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Bell.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Button.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Campaigns.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Check.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Check2.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ChevronDown.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ChevronDownDisabled.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ChevronLeft.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ChevronRight.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ChevronUp.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ChevronUpDown.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Close.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/ColumnsOrder.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Delete.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Edit.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Email.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/FinturfLogo.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/FinturfLogo2.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Flows.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Gift.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/GoogleAuth.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/GooglePlay.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/HelpCircle.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/HelpCircle2.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/HelpCircleFilled.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Home.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Home2.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Key.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Landers.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Lock.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Mail.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Mastercard.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Minus.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Offers.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Pause.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/PayPal.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/PayPalLightLarge.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Phone.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Play.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Plus.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Profile.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/QRCode.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Rectangle.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Revert.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Star.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Star2.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/TrafficSources.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Trash.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/TrashRed.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Triggers.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/User.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/Visa.js.map +1 -1
- package/dist/es/Molecular/CustomIcons/components/X.js.map +1 -1
- package/dist/es/Molecular/FormElement/FormElement.js.map +1 -1
- package/dist/es/Molecular/InputAddress/InputAddress.js +24 -19
- package/dist/es/Molecular/InputAddress/InputAddress.js.map +1 -1
- package/dist/es/Molecular/InputCustomFetch/InputCustomFetch.js +17 -11
- package/dist/es/Molecular/InputCustomFetch/InputCustomFetch.js.map +1 -1
- package/dist/es/Molecular/InputPassword/InputPassword.js.map +1 -1
- package/package.json +2 -2
- /package/dist/es/Atomic/FormElements/{SwitcherRangeList/SwitcherRangeList.styles.css → Datepicker/Datepicker.styles.css} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropdown.js","names":[],"sources":["../../../../../src/Atomic/FormElements/Dropdown/Dropdown.tsx"],"sourcesContent":["import type {\n KeyboardEventHandler,\n LegacyRef,\n MouseEventHandler,\n ReactNode,\n ReactPortal,\n} from 'react';\n\nimport type { IDependOptions, IDropdownOption, IDropdownProps } from './Dropdown.interface';\nimport cn from 'classnames';\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Check, ChevronDown, ChevronUp, Code, X } from 'react-feather';\nimport { formatToOnlyASCIICodeText } from '../../../Functions/fieldValueFormatters';\nimport Input from '../Input/Input';\n\nimport RadioInput from '../RadioInput/RadioInput';\nimport DropdownLoader from './components/DropdownLoader';\nimport useDropdown from './useDropdown';\nimport './Dropdown.scss';\n\nconst RC = 'dropdown';\n\nexport const MIN_ITEMS_FOR_SHOW_MOBILE_SEARCH = 10;\n\nfunction Dropdown<T extends string | number = string | number>({\n label,\n options,\n value,\n error,\n disabled,\n onChange,\n placeholder,\n className,\n isSearchable: isSearchableProp,\n entity,\n scrollReactionObj,\n isListTop,\n isNotValidateASCII = false,\n testId = 'dropdown',\n\n sortAlphabetical = true,\n\n fieldKey,\n id,\n noOptionsText = 'No options available',\n isDoNotPullOutListOfMainContainer,\n\n withMobileLogic,\n withActions,\n minItemsForShowMobileSearch = MIN_ITEMS_FOR_SHOW_MOBILE_SEARCH,\n customTrigger,\n tabIndex,\n\n onActionConfirmClick,\n onActionCancelClick,\n\n isDefaultOpened,\n isDefaultOpenedMobile,\n\n footerContent,\n\n closeOnSelect = true,\n closeOnSelectMobile = true,\n withApplyLogic = false,\n cancelButtonRef,\n applyButtonRef,\n}: IDropdownProps): React.ReactElement | null {\n const {\n dropdownId,\n isMobile,\n isOpen,\n setIsOpen,\n searchValue,\n setSearchValue,\n initListHeight,\n setInitListHeight,\n isSearchChanged,\n setIsSearchChanged,\n isSearchInputFocused,\n setIsSearchInputFocused,\n isScrollableList,\n setIsScrollableList,\n isFixedMaxHeight,\n setIsFixedMaxHeight,\n scrollTop,\n setScrollTop,\n scrollHeight,\n setScrollHeight,\n maxListContainerHeight,\n setMaxListContainerHeight,\n\n getListContainer,\n getListContainerWrapper,\n getParentNode,\n getPreparedOptionLabel,\n getSortedOptions,\n\n filteredGroups,\n filteredItems,\n filteredOptions,\n selectedLabel,\n postfixText,\n\n dropdownRef,\n dropdownListRef,\n dropdownListWrapperRef,\n dropdownFooterRef,\n searchInputRef,\n wrapperRef,\n\n isSearchable,\n\n valueToApply,\n valueToApplyRef,\n setValueToApply,\n } = useDropdown({ id, fieldKey, value, sortAlphabetical, withMobileLogic, options, isSearchable: isSearchableProp, minItemsForShowMobileSearch, isDoNotPullOutListOfMainContainer });\n\n /// HANDLERS <<<\n const onCancelClick = (): void => {\n setIsOpen(false);\n setValueToApply?.(null);\n onActionCancelClick?.();\n }\n\n const onApplyClick = (): void => {\n if (valueToApplyRef?.current !== null && valueToApplyRef?.current !== undefined) {\n onChange?.(valueToApplyRef.current);\n setTimeout(() => onActionConfirmClick?.(), 1);\n }\n onCancelClick?.();\n }\n\n const onChangeHandler = (item: IDropdownOption): void => {\n if (isMobile ? closeOnSelectMobile : closeOnSelect) {\n setIsOpen(false);\n }\n\n if (withApplyLogic && applyButtonRef?.current) {\n setValueToApply?.(item.value);\n }\n else {\n onChange?.(item.value);\n }\n };\n const onKeyDown: KeyboardEventHandler<Element> = (e): boolean => {\n if (![9, 13].includes(e.keyCode)) return false;\n onCancelClick();\n\n return true;\n };\n const onKeyUp: KeyboardEventHandler<Element> = (e): boolean => {\n if (![9, 13].includes(e.keyCode)) return false;\n setIsOpen(true);\n\n return true;\n };\n const onSearchHandler = (name: string): void => {\n let inputValue = name;\n if (!isNotValidateASCII) inputValue = formatToOnlyASCIICodeText(inputValue);\n setIsSearchChanged(true);\n setSearchValue(inputValue);\n };\n const onWrapperClick: MouseEventHandler<Element> = (e): void => {\n if (e.target === wrapperRef?.current) {\n e.stopPropagation();\n e.preventDefault();\n\n onCancelClick();\n }\n };\n const handleInputChange = (value: string): void => {\n onSearchHandler(value);\n };\n /// HANDLERS >>>\n\n /// FUNCTIONS <<<\n\n const handleClickOutside = (event: Event | MouseEvent): void => {\n if (\n !getListContainer()?.contains(event?.target as Node)\n && dropdownRef?.current !== null\n && !dropdownRef?.current.contains(event?.target as Node)\n ) {\n onCancelClick();\n }\n };\n const doScrollCallback: EventListener = useCallback(\n (e) => {\n const {\n callback,\n isWithAnyScrolling,\n scrollingInaccuracy = 0,\n } = scrollReactionObj || {};\n\n const target = e?.target as HTMLDivElement;\n\n if (callback && typeof callback === 'function') {\n if (isWithAnyScrolling) {\n callback(e);\n }\n else if (\n Math.round(\n target.clientHeight + target.scrollTop + scrollingInaccuracy,\n ) >= target.scrollHeight\n ) {\n callback(e);\n }\n }\n },\n [filteredOptions],\n );\n const initListContainer = (): void => {\n const dropdownList = document.createElement('div');\n\n dropdownList.setAttribute('id', dropdownId);\n dropdownList.classList.add('dropdown__container');\n\n if (isMobile) {\n dropdownList.addEventListener('click', (e) => {\n const { id } = e?.target as HTMLDivElement;\n if (id === dropdownId) {\n onCancelClick();\n }\n });\n }\n\n try {\n getListContainer()?.remove();\n }\n finally {\n if (isMobile) {\n try {\n document.getElementById(`mlw-${dropdownId}`)?.remove();\n }\n catch { }\n\n const dropdownMobileListWrapper = document.createElement('div');\n dropdownMobileListWrapper.classList.add('dropdown-mobile');\n dropdownMobileListWrapper.setAttribute('id', `mlw-${dropdownId}`);\n dropdownMobileListWrapper?.append(dropdownList);\n getParentNode()?.append(dropdownMobileListWrapper);\n }\n else {\n getParentNode()?.append(dropdownList);\n }\n }\n };\n const setListContainerStyles = (): boolean => {\n const lc = getListContainer();\n\n if (!lc || !isOpen) return false;\n\n const windowHeight\n = window.innerHeight\n || document.documentElement.clientHeight\n || document.body.clientHeight;\n\n const { width, height = 0, left, top = 0 }\n = dropdownRef?.current?.getBoundingClientRect() ?? {};\n\n const sw = lc.getElementsByClassName('dropdown__list')[0] as HTMLElement;\n const lh = (dropdownListWrapperRef?.current as HTMLElement)?.getElementsByClassName(\n 'dropdown__list-header',\n )[0];\n const margin = Number.parseInt(\n getComputedStyle(dropdownListWrapperRef?.current as HTMLElement)?.marginTop?.replace(\n 'px',\n '',\n ) ?? '0',\n 10,\n );\n const maxHeight\n = initListHeight\n ?? Number.parseInt(getComputedStyle(sw)?.maxHeight?.replace('px', '') ?? '0', 10);\n\n if (initListHeight === null) setInitListHeight(maxHeight);\n\n const toTop = top - margin;\n const toBottom = windowHeight - top - height - margin * 2;\n\n const swHeight = sw?.getBoundingClientRect()?.height;\n const maxSwHeight = (isMobile\n ? (dropdownListWrapperRef?.current as HTMLElement)?.getBoundingClientRect()?.height\n - lh?.getBoundingClientRect()?.height\n : toTop >= maxHeight || toBottom >= maxHeight\n ? maxHeight - 3 * margin\n : toTop > toBottom\n ? toTop - 3 * margin\n : toBottom - 4 * margin) - (dropdownFooterRef?.current?.getBoundingClientRect()?.height ?? 0);\n\n const listPos = toTop < toBottom || toBottom >= swHeight ? 'bottom' : 'top';\n\n lc.style.minWidth = `${width}px`;\n lc.style.left = `${left}px`;\n lc.style.top = `${listPos === 'bottom' ? top + height : top - margin * 3 - Number.parseInt(getComputedStyle(dropdownListWrapperRef?.current as HTMLElement)?.height?.replace('px', '') ?? '0', 10)}px`;\n\n if (maxListContainerHeight !== maxSwHeight && !isMobile) {\n setMaxListContainerHeight(maxSwHeight);\n }\n\n sw.style.maxHeight = `${maxSwHeight}px`;\n\n return true;\n };\n const toggleList: MouseEventHandler<Element> = (e): void => {\n e?.stopPropagation();\n setIsOpen((isOpen) => {\n return !isOpen;\n });\n };\n const closeList = isOpen ? handleClickOutside : () => { };\n\n const getDepends = (getDependsTrigger: boolean | '' | undefined): IDependOptions => {\n const newOnChange = (e: IDropdownOption): void => {\n if (e.value === 'open_modal') {\n onChange?.('open_modal' as T);\n }\n else {\n onChangeHandler(e);\n }\n };\n\n // add pseudo option\n const newOptions: IDropdownOption[] = [\n {\n label: `New ${entity}`,\n value: 'open_modal' as T,\n className: 'dropdown__list-item--modal',\n },\n ...(filteredOptions as IDropdownOption[] ?? []),\n ];\n\n return {\n onChange: (changeItem: IDropdownOption) => {\n return getDependsTrigger\n ? newOnChange(changeItem)\n : onChangeHandler(changeItem);\n },\n options: getDependsTrigger ? newOptions : options,\n };\n };\n /// FUNCTIONS >>>\n\n const modalBtnTrigger = useMemo(() => entity && entity !== '' && typeof entity === 'string', [entity]);\n const depend = useMemo(() => getDepends(modalBtnTrigger), [modalBtnTrigger, filteredOptions]);\n\n /// RENDER <<<\n const getMarkupForElement = (item: IDropdownOption, _index?: number, optTestId?: string): ReactNode => {\n return (\n <button\n type=\"button\"\n data-testid={`${testId}-${optTestId}-option`}\n key={item.value?.toString()?.replace(/ /g, '_')}\n onMouseDown={() => depend.onChange(item as IDropdownOption)}\n className={cn(\n `${RC}__list-item`,\n {\n [`${RC}__list-item_active`]: item.value === (valueToApply ?? value),\n [`${RC}__list-item_disabled`]: item.disabled,\n },\n item.className,\n )}\n value={item?.value}\n >\n {!isMobile && (\n <span\n className={cn(`${RC}__active-icon`, {\n [`${RC}__active-icon_active`]: item.value === value,\n })}\n >\n <Check />\n </span>\n )}\n <div\n className={cn(`${RC}__list-item-label`, item.labelClassName || '')}\n // eslint-disable-next-line react-dom/no-dangerously-set-innerhtml\n dangerouslySetInnerHTML={{\n __html: getPreparedOptionLabel(\n item.label,\n item.postfix,\n item.description,\n ),\n }}\n />\n {item?.icon || ''}\n {isMobile\n ? item?.customMobileIcon ?? (\n <RadioInput value={item.value} checked={valueToApply ?? value} />\n )\n : ''}\n </button>\n );\n };\n\n const filteredOptionList = (filteredOption: IDropdownOption): ReactNode => {\n return (filteredOption.items?.length ?? 0) > 0\n ? (\n <div\n key={filteredOption.label\n ?.toString()\n ?.replace(/ /g, '_')\n .concat(Date.now()?.toString())}\n className={cn(`${RC}-group`, filteredOption.className)}\n >\n <div className={`${RC}-group__name`}>{filteredOption.label}</div>\n {filteredOption.items?.map((el: IDropdownOption, index: number) =>\n getMarkupForElement(el as IDropdownOption, index, (el?.testId || index)?.toString()),\n )}\n </div>\n )\n : null;\n };\n\n const getListMarkUp = (): ReactNode => {\n return (\n <div\n data-testid={`${testId}-container-wrapper`}\n className={cn(`${RC}__container-wrapper`)}\n ref={wrapperRef as LegacyRef<HTMLDivElement>}\n onClick={isMobile ? onWrapperClick : () => { }}\n >\n <div\n className={cn(`${RC}__list-wrapper`, {\n [`${RC}__list-wrapper--fixed-height`]: isFixedMaxHeight,\n [`${RC}__list-wrapper--with-bottom-shadow`]:\n isScrollableList && isMobile && !footerContent,\n [`${RC}__list-wrapper--with-bottom-shadow-hidden`]:\n scrollTop === scrollHeight && !footerContent,\n })}\n ref={dropdownListWrapperRef as LegacyRef<HTMLDivElement>}\n >\n {isMobile && (\n <div\n className={cn(`${RC}__list-header`, {\n [`${RC}__list-header-with-shadow`]:\n isScrollableList && isMobile,\n [`${RC}__list-header-with-shadow-hidden`]: scrollTop === 0,\n })}\n >\n <div className={cn(`${RC}__list-header-row`)}>\n <div className={cn(`${RC}__list-label`)}>{label}</div>\n <div\n className={cn(`${RC}__list-close-icon`)}\n onClick={onCancelClick}\n >\n <X onClick={onCancelClick} />\n </div>\n </div>\n {isSearchable && (\n <div className={cn(`${RC}__list-header-row`)}>\n <Input\n ref={searchInputRef}\n className={`${RC}__input`}\n value={searchValue || ''}\n onChange={handleInputChange}\n placeholder={placeholder || 'Search'}\n withDelete\n onFocus={() => setIsSearchInputFocused(true)}\n onBlur={() => setIsSearchInputFocused(false)}\n />\n </div>\n )}\n </div>\n )}\n <div\n className={cn(`${RC}__list`, {\n [`${RC}__list-top`]: isListTop,\n [`${RC}__list--with-footer`]: footerContent,\n })}\n ref={dropdownListRef as LegacyRef<HTMLDivElement>}\n >\n {depend.options && getSortedOptions(depend.options)?.map((option, index) => {\n if (option?.items?.length) {\n if (!isSearchable || !isSearchChanged) {\n return filteredOptionList(option as IDropdownOption);\n }\n else {\n const items = option.items\n ?.slice()\n .filter(\n el =>\n el?.label\n ?.toLowerCase()\n .includes(searchValue?.toLowerCase() || '')\n || !el?.value\n || el?.value === '',\n );\n if (items?.length)\n return filteredOptionList({ ...option, items } as IDropdownOption);\n return null;\n }\n }\n else if (\n !isSearchable\n || !isSearchChanged\n || option?.label\n ?.toLowerCase()\n .includes(searchValue?.toLowerCase() || '')\n || !option?.value\n || option?.value === ''\n ) {\n return getMarkupForElement(option as IDropdownOption, index, (option?.testId || index)?.toString());\n }\n return null;\n })}\n {!filteredItems?.length && !filteredGroups?.length && (\n <div className={`${RC}__list-item ${RC}__list-item--no-options`}>\n {noOptionsText}\n </div>\n )}\n {disabled && isOpen && <DropdownLoader />}\n </div>\n {footerContent && (\n <div\n ref={dropdownFooterRef as LegacyRef<HTMLDivElement>}\n className={cn(`${RC}__footer`, {\n [`${RC}__footer-with-shadow`]: isMobile && isScrollableList,\n [`${RC}__footer-with-shadow-hidden`]:\n scrollTop === scrollHeight,\n })}\n >\n {footerContent}\n </div>\n )}\n </div>\n </div>\n );\n };\n const renderListContainer = (): ReactPortal | null => {\n const lc = getListContainer();\n\n if (!lc) return null;\n\n return createPortal(getListMarkUp(), lc);\n };\n /// RENDER >>>\n\n useEffect(() => {\n document.addEventListener('click', handleClickOutside, true);\n\n return () => {\n getListContainer()?.remove();\n getListContainerWrapper()?.remove();\n document.removeEventListener('click', handleClickOutside, true);\n };\n }, []);\n\n useEffect(() => {\n if (!isDoNotPullOutListOfMainContainer || dropdownRef.current) {\n initListContainer();\n if ((isDefaultOpened && !isMobile) || isDefaultOpenedMobile) setIsOpen(true);\n }\n }, [isDoNotPullOutListOfMainContainer, dropdownRef.current]);\n\n useLayoutEffect(() => {\n if (!isMobile) {\n window.addEventListener('resize', setListContainerStyles);\n window.addEventListener('mousewheel', closeList);\n window.addEventListener('scroll', closeList);\n window.addEventListener('touchmove', closeList);\n }\n else {\n window.removeEventListener('resize', setListContainerStyles);\n window.removeEventListener('mousewheel', closeList);\n window.removeEventListener('scroll', closeList);\n window.removeEventListener('touchmove', closeList);\n }\n\n // eslint-disable-next-line react-web-api/no-leaked-event-listener\n getListContainer()?.addEventListener('click', closeList);\n\n return () => {\n window.removeEventListener('resize', setListContainerStyles);\n window.removeEventListener('mousewheel', closeList);\n window.removeEventListener('scroll', closeList);\n window.removeEventListener('touchmove', closeList);\n getListContainer()?.removeEventListener('click', closeList);\n };\n }, [getListContainer]);\n\n useLayoutEffect(() => {\n setListContainerStyles();\n }, [\n maxListContainerHeight,\n isOpen,\n searchValue,\n isMobile,\n isFixedMaxHeight,\n options,\n ]);\n\n useEffect(() => {\n const fn = isOpen ? 'addEventListener' : 'removeEventListener';\n cancelButtonRef?.current?.[fn]('click', onCancelClick, true);\n applyButtonRef?.current?.[fn]('click', onApplyClick, true);\n\n if (!isOpen) {\n setIsSearchChanged(false);\n if (!isMobile) setMaxListContainerHeight(0);\n }\n\n if (\n scrollReactionObj\n && typeof scrollReactionObj === 'object'\n && isOpen\n && dropdownListRef\n && dropdownListRef.current\n ) {\n // eslint-disable-next-line react-web-api/no-leaked-event-listener\n dropdownListRef.current.addEventListener('scroll', doScrollCallback);\n }\n return () => {\n if (scrollReactionObj && typeof scrollReactionObj === 'object')\n removeEventListener('scroll', doScrollCallback);\n };\n }, [isOpen, dropdownListRef]);\n\n useEffect(() => {\n let timeout: NodeJS.Timeout;\n\n if (!searchValue && isSearchInputFocused && !isMobile) {\n setSearchValue(selectedLabel as string);\n\n timeout = setTimeout(() => (searchInputRef.current as HTMLInputElement).select(), 1);\n }\n\n if (!isSearchInputFocused && !isOpen) {\n setSearchValue(null);\n }\n\n return () => {\n clearTimeout(timeout);\n }\n }, [isSearchInputFocused]);\n\n useEffect(() => {\n if (isOpen && !isSearchInputFocused && searchInputRef?.current && !isMobile)\n (searchInputRef.current as HTMLInputElement)?.focus();\n\n if (isOpen) {\n getListContainer()?.classList.add('dropdown__container--opened');\n }\n else {\n (searchInputRef.current as HTMLInputElement)?.blur();\n getListContainer()?.classList.remove('dropdown__container--opened');\n }\n\n if (isOpen && isMobile) {\n // Scroll to selected Element\n const selectedEl = dropdownListRef?.current?.querySelector(`button[value='${valueToApply ?? value}']`);\n if (selectedEl) dropdownListRef?.current?.scrollTo(0, selectedEl?.getBoundingClientRect()?.y - dropdownListRef?.current?.getBoundingClientRect().y - 16);\n }\n\n if (!isOpen && isMobile) {\n setSearchValue(null);\n }\n }, [isOpen]);\n\n useEffect(() => {\n const dropdownListEl = getListContainer()?.getElementsByClassName('dropdown__list')[0] as HTMLElement;\n if (!isMobile && dropdownListEl) {\n const handleWheel = (e: WheelEvent): void => {\n const { scrollTop, scrollHeight, clientHeight } = dropdownListEl;\n\n const isScrollingUp = e.deltaY < 0;\n const isScrollingDown = e.deltaY > 0;\n\n const isAtTop = scrollTop <= 0;\n const isAtBottom = scrollTop + clientHeight >= scrollHeight - 1;\n\n if ((isScrollingUp && isAtTop) || (isScrollingDown && isAtBottom)) {\n e.preventDefault();\n }\n };\n\n if (isOpen) {\n dropdownListEl?.addEventListener('wheel', handleWheel, { passive: false });\n }\n else {\n dropdownListEl?.removeEventListener('wheel', handleWheel);\n }\n\n return () => {\n dropdownListEl?.removeEventListener('wheel', handleWheel);\n };\n }\n\n return () => { };\n }, [isOpen, isMobile, getListContainer()]);\n\n useEffect(() => {\n if (isOpen && isMobile && dropdownListRef?.current && !searchValue) {\n setIsScrollableList(\n dropdownListRef?.current?.scrollHeight\n > dropdownListRef?.current?.clientHeight,\n );\n setIsFixedMaxHeight(\n isScrollableList\n || dropdownListRef?.current?.scrollHeight\n > dropdownListRef?.current?.clientHeight,\n );\n }\n }, [\n isOpen,\n isMobile,\n isScrollableList,\n dropdownListRef?.current,\n dropdownListRef?.current?.scrollHeight,\n dropdownListRef?.current?.clientHeight,\n ]);\n\n useEffect(() => {\n const setScrollTopValue: EventListener = (e): void => {\n setScrollTop(Number.parseInt((e?.target as Element)?.scrollTop?.toString(), 10));\n };\n\n if (isOpen && isMobile && dropdownListRef?.current) {\n // eslint-disable-next-line react-web-api/no-leaked-event-listener\n dropdownListRef?.current?.addEventListener('scroll', setScrollTopValue);\n }\n\n return () => {\n if (dropdownListRef?.current !== null) {\n (dropdownListRef?.current)?.removeEventListener(\n 'scroll',\n setScrollTopValue,\n );\n }\n };\n }, [isOpen, isMobile, dropdownListRef?.current]);\n\n useEffect(() => {\n if (dropdownListRef?.current) {\n setScrollHeight(\n Number.parseInt(\n (dropdownListRef?.current?.scrollHeight\n - dropdownListRef?.current?.clientHeight).toString(),\n 10,\n ),\n );\n }\n }, [scrollTop, dropdownListRef?.current]);\n\n if (!options) return null;\n\n return (\n <div\n className={cn(RC, className, {\n disabled,\n [`${RC}-mobile`]: isMobile,\n [`${RC}--focused`]: isOpen && !isMobile,\n [`${RC}--with-custom-trigger`]: Boolean(customTrigger),\n })}\n ref={dropdownRef as LegacyRef<HTMLDivElement>}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n >\n <button\n type=\"button\"\n data-testid={testId}\n className={cn(`${RC}__trigger`, 'input__wrap', {\n [`${RC}__trigger--with-actions`]: withActions,\n placeholder: value === null || value === undefined || value === '',\n error,\n })}\n onClick={() => setIsOpen(true)}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n tabIndex={tabIndex}\n >\n {customTrigger || (\n <>\n {isSearchable && !isMobile\n ? (\n <input\n ref={searchInputRef as LegacyRef<HTMLInputElement>}\n className={`${RC}__input`}\n value={String(isOpen ? searchValue ?? '' : selectedLabel ?? '')}\n onChange={e => handleInputChange(e.target.value)}\n placeholder={placeholder}\n onFocus={() => setIsSearchInputFocused(true)}\n onBlur={() => setIsSearchInputFocused(false)}\n />\n )\n : (\n <>\n <span className=\"text\">{selectedLabel || placeholder || ''}</span>\n {postfixText && (\n <span className=\"dropdown__list-item-postfix\">\n {postfixText}\n </span>\n )}\n </>\n )}\n <span\n className={cn(`${RC}__arrow`, {\n [`${RC}__arrow_active`]: isOpen,\n })}\n onClick={toggleList}\n >\n {isMobile\n ? (\n <Code className=\"mobile-icon\" />\n )\n : isOpen\n ? (\n <ChevronUp />\n )\n : (\n <ChevronDown />\n )}\n </span>\n </>\n )}\n </button>\n {withActions && (\n <div className={cn(`${RC}__actions`)}>\n <div\n className={cn(`${RC}__actions-item`)}\n onClick={onActionConfirmClick}\n >\n <Check />\n </div>\n <div\n className={cn(`${RC}__actions-item`)}\n onClick={onActionCancelClick}\n >\n <X />\n </div>\n </div>\n )}\n {isOpen && renderListContainer()}\n </div>\n );\n}\n\nexport default Dropdown;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dropdown.js","names":[],"sources":["../../../../../src/Atomic/FormElements/Dropdown/Dropdown.tsx"],"sourcesContent":["import type {\n KeyboardEventHandler,\n LegacyRef,\n MouseEventHandler,\n ReactNode,\n ReactPortal,\n} from 'react';\n\nimport type { IDependOptions, IDropdownOption, IDropdownProps } from './Dropdown.interface';\nimport cn from 'classnames';\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Check, ChevronDown, ChevronUp, Code, X } from 'react-feather';\nimport { formatToOnlyASCIICodeText } from '../../../Functions/fieldValueFormatters';\nimport Input from '../Input/Input';\n\nimport RadioInput from '../RadioInput/RadioInput';\nimport DropdownLoader from './components/DropdownLoader';\nimport useDropdown from './useDropdown';\nimport './Dropdown.scss';\n\nconst RC = 'dropdown';\n\nexport const MIN_ITEMS_FOR_SHOW_MOBILE_SEARCH = 10;\n\nfunction Dropdown<T extends string | number = string | number>({\n label,\n options,\n value,\n error,\n disabled,\n onChange,\n placeholder,\n className,\n isSearchable: isSearchableProp,\n entity,\n scrollReactionObj,\n isListTop,\n isNotValidateASCII = false,\n testId = 'dropdown',\n\n sortAlphabetical = true,\n\n fieldKey,\n id,\n noOptionsText = 'No options available',\n isDoNotPullOutListOfMainContainer,\n\n withMobileLogic,\n withActions,\n minItemsForShowMobileSearch = MIN_ITEMS_FOR_SHOW_MOBILE_SEARCH,\n customTrigger,\n tabIndex,\n\n onActionConfirmClick,\n onActionCancelClick,\n\n isDefaultOpened,\n isDefaultOpenedMobile,\n\n footerContent,\n\n closeOnSelect = true,\n closeOnSelectMobile = true,\n withApplyLogic = false,\n cancelButtonRef,\n applyButtonRef,\n}: IDropdownProps): React.ReactElement | null {\n const {\n dropdownId,\n isMobile,\n isOpen,\n setIsOpen,\n searchValue,\n setSearchValue,\n initListHeight,\n setInitListHeight,\n isSearchChanged,\n setIsSearchChanged,\n isSearchInputFocused,\n setIsSearchInputFocused,\n isScrollableList,\n setIsScrollableList,\n isFixedMaxHeight,\n setIsFixedMaxHeight,\n scrollTop,\n setScrollTop,\n scrollHeight,\n setScrollHeight,\n maxListContainerHeight,\n setMaxListContainerHeight,\n\n getListContainer,\n getListContainerWrapper,\n getParentNode,\n getPreparedOptionLabel,\n getSortedOptions,\n\n filteredGroups,\n filteredItems,\n filteredOptions,\n selectedLabel,\n postfixText,\n\n dropdownRef,\n dropdownListRef,\n dropdownListWrapperRef,\n dropdownFooterRef,\n searchInputRef,\n wrapperRef,\n\n isSearchable,\n\n valueToApply,\n valueToApplyRef,\n setValueToApply,\n } = useDropdown({ id, fieldKey, value, sortAlphabetical, withMobileLogic, options, isSearchable: isSearchableProp, minItemsForShowMobileSearch, isDoNotPullOutListOfMainContainer });\n\n const onChangeRef = useRef(onChange);\n const onActionConfirmClickRef = useRef(onActionConfirmClick);\n const onActionCancelClickRef = useRef(onActionCancelClick);\n const scrollReactionObjRef = useRef(scrollReactionObj);\n\n onChangeRef.current = onChange;\n onActionConfirmClickRef.current = onActionConfirmClick;\n onActionCancelClickRef.current = onActionCancelClick;\n scrollReactionObjRef.current = scrollReactionObj;\n\n /// HANDLERS <<<\n const onCancelClick = useCallback((): void => {\n setIsOpen(false);\n setValueToApply?.(null);\n onActionCancelClickRef.current?.();\n }, []);\n\n const onApplyClick = useCallback((): void => {\n if (valueToApplyRef?.current !== null && valueToApplyRef?.current !== undefined) {\n onChangeRef.current?.(valueToApplyRef.current);\n setTimeout(() => onActionConfirmClickRef.current?.(), 1);\n }\n onCancelClick?.();\n }, [onCancelClick]);\n\n const onChangeHandler = (item: IDropdownOption): void => {\n if (isMobile ? closeOnSelectMobile : closeOnSelect) {\n setIsOpen(false);\n }\n\n if (withApplyLogic && applyButtonRef?.current) {\n setValueToApply?.(item.value);\n }\n else {\n onChangeRef.current?.(item.value);\n }\n };\n const onKeyDown: KeyboardEventHandler<Element> = (e): boolean => {\n if (![9, 13].includes(e.keyCode)) return false;\n onCancelClick();\n\n return true;\n };\n const onKeyUp: KeyboardEventHandler<Element> = (e): boolean => {\n if (![9, 13].includes(e.keyCode)) return false;\n setIsOpen(true);\n\n return true;\n };\n const onSearchHandler = (name: string): void => {\n let inputValue = name;\n if (!isNotValidateASCII) inputValue = formatToOnlyASCIICodeText(inputValue);\n setIsSearchChanged(true);\n setSearchValue(inputValue);\n };\n const onWrapperClick: MouseEventHandler<Element> = (e): void => {\n if (e.target === wrapperRef?.current) {\n e.stopPropagation();\n e.preventDefault();\n\n onCancelClick();\n }\n };\n const handleInputChange = (value: string): void => {\n onSearchHandler(value);\n };\n /// HANDLERS >>>\n\n /// FUNCTIONS <<<\n\n const handleClickOutside = (event: Event | MouseEvent): void => {\n if (\n !getListContainer()?.contains(event?.target as Node)\n && dropdownRef?.current !== null\n && !dropdownRef?.current.contains(event?.target as Node)\n ) {\n onCancelClick();\n }\n };\n const doScrollCallback: EventListener = useCallback(\n (e) => {\n const {\n callback,\n isWithAnyScrolling,\n scrollingInaccuracy = 0,\n } = scrollReactionObjRef.current || {};\n\n const target = e?.target as HTMLDivElement;\n\n if (callback && typeof callback === 'function') {\n if (isWithAnyScrolling) {\n callback(e);\n }\n else if (\n Math.round(\n target.clientHeight + target.scrollTop + scrollingInaccuracy,\n ) >= target.scrollHeight\n ) {\n callback(e);\n }\n }\n },\n [],\n );\n const initListContainer = (): void => {\n const dropdownList = document.createElement('div');\n\n dropdownList.setAttribute('id', dropdownId);\n dropdownList.classList.add('dropdown__container');\n\n if (isMobile) {\n dropdownList.addEventListener('click', (e) => {\n const { id } = e?.target as HTMLDivElement;\n if (id === dropdownId) {\n onCancelClick();\n }\n });\n }\n\n try {\n getListContainer()?.remove();\n }\n finally {\n if (isMobile) {\n try {\n document.getElementById(`mlw-${dropdownId}`)?.remove();\n }\n catch { }\n\n const dropdownMobileListWrapper = document.createElement('div');\n dropdownMobileListWrapper.classList.add('dropdown-mobile');\n dropdownMobileListWrapper.setAttribute('id', `mlw-${dropdownId}`);\n dropdownMobileListWrapper?.append(dropdownList);\n getParentNode()?.append(dropdownMobileListWrapper);\n }\n else {\n getParentNode()?.append(dropdownList);\n }\n }\n };\n const setListContainerStyles = (): boolean => {\n const lc = getListContainer();\n\n if (!lc || !isOpen) return false;\n\n const windowHeight\n = window.innerHeight\n || document.documentElement.clientHeight\n || document.body.clientHeight;\n\n const { width, height = 0, left, top = 0 }\n = dropdownRef?.current?.getBoundingClientRect() ?? {};\n\n const sw = lc.getElementsByClassName('dropdown__list')[0] as HTMLElement;\n const lh = (dropdownListWrapperRef?.current as HTMLElement)?.getElementsByClassName(\n 'dropdown__list-header',\n )[0];\n const margin = Number.parseInt(\n getComputedStyle(dropdownListWrapperRef?.current as HTMLElement)?.marginTop?.replace(\n 'px',\n '',\n ) ?? '0',\n 10,\n );\n const maxHeight\n = initListHeight\n ?? Number.parseInt(getComputedStyle(sw)?.maxHeight?.replace('px', '') ?? '0', 10);\n\n if (initListHeight === null) setInitListHeight(maxHeight);\n\n const toTop = top - margin;\n const toBottom = windowHeight - top - height - margin * 2;\n\n const swHeight = sw?.getBoundingClientRect()?.height;\n const maxSwHeight = (isMobile\n ? (dropdownListWrapperRef?.current as HTMLElement)?.getBoundingClientRect()?.height\n - lh?.getBoundingClientRect()?.height\n : toTop >= maxHeight || toBottom >= maxHeight\n ? maxHeight - 3 * margin\n : toTop > toBottom\n ? toTop - 3 * margin\n : toBottom - 4 * margin) - (dropdownFooterRef?.current?.getBoundingClientRect()?.height ?? 0);\n\n const listPos = toTop < toBottom || toBottom >= swHeight ? 'bottom' : 'top';\n\n lc.style.minWidth = `${width}px`;\n lc.style.left = `${left}px`;\n lc.style.top = `${listPos === 'bottom' ? top + height : top - margin * 3 - Number.parseInt(getComputedStyle(dropdownListWrapperRef?.current as HTMLElement)?.height?.replace('px', '') ?? '0', 10)}px`;\n\n if (maxListContainerHeight !== maxSwHeight && !isMobile) {\n setMaxListContainerHeight(maxSwHeight);\n }\n\n sw.style.maxHeight = `${maxSwHeight}px`;\n\n return true;\n };\n const toggleList: MouseEventHandler<Element> = (e): void => {\n e?.stopPropagation();\n setIsOpen((isOpen) => {\n return !isOpen;\n });\n };\n const closeList = isOpen ? handleClickOutside : () => { };\n\n const getDepends = (getDependsTrigger: boolean | '' | undefined): IDependOptions => {\n const newOnChange = (e: IDropdownOption): void => {\n if (e.value === 'open_modal') {\n onChangeRef.current?.('open_modal' as T);\n }\n else {\n onChangeHandler(e);\n }\n };\n\n // add pseudo option\n const newOptions: IDropdownOption[] = [\n {\n label: `New ${entity}`,\n value: 'open_modal' as T,\n className: 'dropdown__list-item--modal',\n },\n ...(filteredOptions as IDropdownOption[] ?? []),\n ];\n\n return {\n onChange: (changeItem: IDropdownOption) => {\n return getDependsTrigger\n ? newOnChange(changeItem)\n : onChangeHandler(changeItem);\n },\n options: getDependsTrigger ? newOptions : options,\n };\n };\n /// FUNCTIONS >>>\n\n const modalBtnTrigger = useMemo(() => entity && entity !== '' && typeof entity === 'string', [entity]);\n const depend = getDepends(modalBtnTrigger);\n\n /// RENDER <<<\n const getMarkupForElement = (item: IDropdownOption, _index?: number, optTestId?: string): ReactNode => {\n return (\n <button\n type=\"button\"\n data-testid={`${testId}-${optTestId}-option`}\n key={item.value?.toString()?.replace(/ /g, '_')}\n onMouseDown={() => depend.onChange(item as IDropdownOption)}\n className={cn(\n `${RC}__list-item`,\n {\n [`${RC}__list-item_active`]: item.value === (valueToApply ?? value),\n [`${RC}__list-item_disabled`]: item.disabled,\n },\n item.className,\n )}\n value={item?.value}\n >\n {!isMobile && (\n <span\n className={cn(`${RC}__active-icon`, {\n [`${RC}__active-icon_active`]: item.value === value,\n })}\n >\n <Check />\n </span>\n )}\n <div\n className={cn(`${RC}__list-item-label`, item.labelClassName || '')}\n // eslint-disable-next-line react-dom/no-dangerously-set-innerhtml\n dangerouslySetInnerHTML={{\n __html: getPreparedOptionLabel(\n item.label,\n item.postfix,\n item.description,\n ),\n }}\n />\n {item?.icon || ''}\n {isMobile\n ? item?.customMobileIcon ?? (\n <RadioInput value={item.value} checked={valueToApply ?? value} />\n )\n : ''}\n </button>\n );\n };\n\n const filteredOptionList = (filteredOption: IDropdownOption): ReactNode => {\n return (filteredOption.items?.length ?? 0) > 0\n ? (\n <div\n key={filteredOption.label\n ?.toString()\n ?.replace(/ /g, '_')\n .concat(Date.now()?.toString())}\n className={cn(`${RC}-group`, filteredOption.className)}\n >\n <div className={`${RC}-group__name`}>{filteredOption.label}</div>\n {filteredOption.items?.map((el: IDropdownOption, index: number) =>\n getMarkupForElement(el as IDropdownOption, index, (el?.testId || index)?.toString()),\n )}\n </div>\n )\n : null;\n };\n\n const getListMarkUp = (): ReactNode => {\n return (\n <div\n data-testid={`${testId}-container-wrapper`}\n className={cn(`${RC}__container-wrapper`)}\n ref={wrapperRef as LegacyRef<HTMLDivElement>}\n onClick={isMobile ? onWrapperClick : () => { }}\n >\n <div\n className={cn(`${RC}__list-wrapper`, {\n [`${RC}__list-wrapper--fixed-height`]: isFixedMaxHeight,\n [`${RC}__list-wrapper--with-bottom-shadow`]:\n isScrollableList && isMobile && !footerContent,\n [`${RC}__list-wrapper--with-bottom-shadow-hidden`]:\n scrollTop === scrollHeight && !footerContent,\n })}\n ref={dropdownListWrapperRef as LegacyRef<HTMLDivElement>}\n >\n {isMobile && (\n <div\n className={cn(`${RC}__list-header`, {\n [`${RC}__list-header-with-shadow`]:\n isScrollableList && isMobile,\n [`${RC}__list-header-with-shadow-hidden`]: scrollTop === 0,\n })}\n >\n <div className={cn(`${RC}__list-header-row`)}>\n <div className={cn(`${RC}__list-label`)}>{label}</div>\n <div\n className={cn(`${RC}__list-close-icon`)}\n onClick={onCancelClick}\n >\n <X onClick={onCancelClick} />\n </div>\n </div>\n {isSearchable && (\n <div className={cn(`${RC}__list-header-row`)}>\n <Input\n ref={searchInputRef}\n className={`${RC}__input`}\n value={searchValue || ''}\n onChange={handleInputChange}\n placeholder={placeholder || 'Search'}\n withDelete\n onFocus={() => setIsSearchInputFocused(true)}\n onBlur={() => setIsSearchInputFocused(false)}\n />\n </div>\n )}\n </div>\n )}\n <div\n className={cn(`${RC}__list`, {\n [`${RC}__list-top`]: isListTop,\n [`${RC}__list--with-footer`]: footerContent,\n })}\n ref={dropdownListRef as LegacyRef<HTMLDivElement>}\n >\n {depend.options && getSortedOptions(depend.options)?.map((option, index) => {\n if (option?.items?.length) {\n if (!isSearchable || !isSearchChanged) {\n return filteredOptionList(option as IDropdownOption);\n }\n else {\n const items = option.items\n ?.slice()\n .filter(\n el =>\n el?.label\n ?.toLowerCase()\n .includes(searchValue?.toLowerCase() || '')\n || !el?.value\n || el?.value === '',\n );\n if (items?.length)\n return filteredOptionList({ ...option, items } as IDropdownOption);\n return null;\n }\n }\n else if (\n !isSearchable\n || !isSearchChanged\n || option?.label\n ?.toLowerCase()\n .includes(searchValue?.toLowerCase() || '')\n || !option?.value\n || option?.value === ''\n ) {\n return getMarkupForElement(option as IDropdownOption, index, (option?.testId || index)?.toString());\n }\n return null;\n })}\n {!filteredItems?.length && !filteredGroups?.length && (\n <div className={`${RC}__list-item ${RC}__list-item--no-options`}>\n {noOptionsText}\n </div>\n )}\n {disabled && isOpen && <DropdownLoader />}\n </div>\n {footerContent && (\n <div\n ref={dropdownFooterRef as LegacyRef<HTMLDivElement>}\n className={cn(`${RC}__footer`, {\n [`${RC}__footer-with-shadow`]: isMobile && isScrollableList,\n [`${RC}__footer-with-shadow-hidden`]:\n scrollTop === scrollHeight,\n })}\n >\n {footerContent}\n </div>\n )}\n </div>\n </div>\n );\n };\n const renderListContainer = (): ReactPortal | null => {\n const lc = getListContainer();\n\n if (!lc) return null;\n\n return createPortal(getListMarkUp(), lc);\n };\n /// RENDER >>>\n\n useEffect(() => {\n document.addEventListener('click', handleClickOutside, true);\n\n return () => {\n getListContainer()?.remove();\n getListContainerWrapper()?.remove();\n document.removeEventListener('click', handleClickOutside, true);\n };\n }, []);\n\n useEffect(() => {\n if (!isDoNotPullOutListOfMainContainer || dropdownRef.current) {\n initListContainer();\n if ((isDefaultOpened && !isMobile) || isDefaultOpenedMobile) setIsOpen(true);\n }\n }, [isDoNotPullOutListOfMainContainer, dropdownRef.current]);\n\n useLayoutEffect(() => {\n if (!isMobile) {\n window.addEventListener('resize', setListContainerStyles);\n window.addEventListener('mousewheel', closeList);\n window.addEventListener('scroll', closeList);\n window.addEventListener('touchmove', closeList);\n }\n else {\n window.removeEventListener('resize', setListContainerStyles);\n window.removeEventListener('mousewheel', closeList);\n window.removeEventListener('scroll', closeList);\n window.removeEventListener('touchmove', closeList);\n }\n\n // eslint-disable-next-line react-web-api/no-leaked-event-listener\n getListContainer()?.addEventListener('click', closeList);\n\n return () => {\n window.removeEventListener('resize', setListContainerStyles);\n window.removeEventListener('mousewheel', closeList);\n window.removeEventListener('scroll', closeList);\n window.removeEventListener('touchmove', closeList);\n getListContainer()?.removeEventListener('click', closeList);\n };\n }, [getListContainer]);\n\n useLayoutEffect(() => {\n setListContainerStyles();\n }, [\n maxListContainerHeight,\n isOpen,\n searchValue,\n isMobile,\n isFixedMaxHeight,\n options,\n ]);\n\n useEffect(() => {\n const fn = isOpen ? 'addEventListener' : 'removeEventListener';\n cancelButtonRef?.current?.[fn]('click', onCancelClick, true);\n applyButtonRef?.current?.[fn]('click', onApplyClick, true);\n\n if (!isOpen) {\n setIsSearchChanged(false);\n if (!isMobile) setMaxListContainerHeight(0);\n }\n\n const scrollListElement = dropdownListRef?.current;\n\n if (\n scrollReactionObj\n && typeof scrollReactionObj === 'object'\n && isOpen\n && scrollListElement\n ) {\n scrollListElement.addEventListener('scroll', doScrollCallback);\n }\n return () => {\n scrollListElement?.removeEventListener('scroll', doScrollCallback);\n };\n }, [isOpen, dropdownListRef]);\n\n useEffect(() => {\n let timeout: NodeJS.Timeout;\n\n if (!searchValue && isSearchInputFocused && !isMobile) {\n setSearchValue(selectedLabel as string);\n\n timeout = setTimeout(() => (searchInputRef.current as HTMLInputElement).select(), 1);\n }\n\n if (!isSearchInputFocused && !isOpen) {\n setSearchValue(null);\n }\n\n return () => {\n clearTimeout(timeout);\n }\n }, [isSearchInputFocused]);\n\n useEffect(() => {\n if (isOpen && !isSearchInputFocused && searchInputRef?.current && !isMobile)\n (searchInputRef.current as HTMLInputElement)?.focus();\n\n if (isOpen) {\n getListContainer()?.classList.add('dropdown__container--opened');\n }\n else {\n (searchInputRef.current as HTMLInputElement)?.blur();\n getListContainer()?.classList.remove('dropdown__container--opened');\n }\n\n if (isOpen && isMobile) {\n // Scroll to selected Element\n const selectedEl = dropdownListRef?.current?.querySelector(`button[value='${valueToApply ?? value}']`);\n if (selectedEl) dropdownListRef?.current?.scrollTo(0, selectedEl?.getBoundingClientRect()?.y - dropdownListRef?.current?.getBoundingClientRect().y - 16);\n }\n\n if (!isOpen && isMobile) {\n setSearchValue(null);\n }\n }, [isOpen]);\n\n useEffect(() => {\n const dropdownListEl = getListContainer()?.getElementsByClassName('dropdown__list')[0] as HTMLElement;\n if (!isMobile && dropdownListEl) {\n const handleWheel = (e: WheelEvent): void => {\n const { scrollTop, scrollHeight, clientHeight } = dropdownListEl;\n\n const isScrollingUp = e.deltaY < 0;\n const isScrollingDown = e.deltaY > 0;\n\n const isAtTop = scrollTop <= 0;\n const isAtBottom = scrollTop + clientHeight >= scrollHeight - 1;\n\n if ((isScrollingUp && isAtTop) || (isScrollingDown && isAtBottom)) {\n e.preventDefault();\n }\n };\n\n if (isOpen) {\n dropdownListEl?.addEventListener('wheel', handleWheel, { passive: false });\n }\n else {\n dropdownListEl?.removeEventListener('wheel', handleWheel);\n }\n\n return () => {\n dropdownListEl?.removeEventListener('wheel', handleWheel);\n };\n }\n\n return () => { };\n }, [isOpen, isMobile, getListContainer()]);\n\n useEffect(() => {\n if (isOpen && isMobile && dropdownListRef?.current && !searchValue) {\n setIsScrollableList(\n dropdownListRef?.current?.scrollHeight\n > dropdownListRef?.current?.clientHeight,\n );\n setIsFixedMaxHeight(\n isScrollableList\n || dropdownListRef?.current?.scrollHeight\n > dropdownListRef?.current?.clientHeight,\n );\n }\n }, [\n isOpen,\n isMobile,\n isScrollableList,\n dropdownListRef?.current,\n dropdownListRef?.current?.scrollHeight,\n dropdownListRef?.current?.clientHeight,\n ]);\n\n useEffect(() => {\n const setScrollTopValue: EventListener = (e): void => {\n setScrollTop(Number.parseInt((e?.target as Element)?.scrollTop?.toString(), 10));\n };\n\n if (isOpen && isMobile && dropdownListRef?.current) {\n // eslint-disable-next-line react-web-api/no-leaked-event-listener\n dropdownListRef?.current?.addEventListener('scroll', setScrollTopValue);\n }\n\n return () => {\n if (dropdownListRef?.current !== null) {\n (dropdownListRef?.current)?.removeEventListener(\n 'scroll',\n setScrollTopValue,\n );\n }\n };\n }, [isOpen, isMobile, dropdownListRef?.current]);\n\n useEffect(() => {\n if (dropdownListRef?.current) {\n setScrollHeight(\n Number.parseInt(\n (dropdownListRef?.current?.scrollHeight\n - dropdownListRef?.current?.clientHeight).toString(),\n 10,\n ),\n );\n }\n }, [scrollTop, dropdownListRef?.current]);\n\n if (!options) return null;\n\n return (\n <div\n className={cn(RC, className, {\n disabled,\n [`${RC}-mobile`]: isMobile,\n [`${RC}--focused`]: isOpen && !isMobile,\n [`${RC}--with-custom-trigger`]: Boolean(customTrigger),\n })}\n ref={dropdownRef as LegacyRef<HTMLDivElement>}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n >\n <button\n type=\"button\"\n data-testid={testId}\n className={cn(`${RC}__trigger`, 'input__wrap', {\n [`${RC}__trigger--with-actions`]: withActions,\n placeholder: value === null || value === undefined || value === '',\n error,\n })}\n onClick={() => setIsOpen(true)}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n tabIndex={tabIndex}\n >\n {customTrigger || (\n <>\n {isSearchable && !isMobile\n ? (\n <input\n ref={searchInputRef as LegacyRef<HTMLInputElement>}\n className={`${RC}__input`}\n value={String(isOpen ? searchValue ?? '' : selectedLabel ?? '')}\n onChange={e => handleInputChange(e.target.value)}\n placeholder={placeholder}\n onFocus={() => setIsSearchInputFocused(true)}\n onBlur={() => setIsSearchInputFocused(false)}\n />\n )\n : (\n <>\n <span className=\"text\">{selectedLabel || placeholder || ''}</span>\n {postfixText && (\n <span className=\"dropdown__list-item-postfix\">\n {postfixText}\n </span>\n )}\n </>\n )}\n <span\n className={cn(`${RC}__arrow`, {\n [`${RC}__arrow_active`]: isOpen,\n })}\n onClick={toggleList}\n >\n {isMobile\n ? (\n <Code className=\"mobile-icon\" />\n )\n : isOpen\n ? (\n <ChevronUp />\n )\n : (\n <ChevronDown />\n )}\n </span>\n </>\n )}\n </button>\n {withActions && (\n <div className={cn(`${RC}__actions`)}>\n <div\n className={cn(`${RC}__actions-item`)}\n onClick={onActionConfirmClick}\n >\n <Check />\n </div>\n <div\n className={cn(`${RC}__actions-item`)}\n onClick={onActionCancelClick}\n >\n <X />\n </div>\n </div>\n )}\n {isOpen && renderListContainer()}\n </div>\n );\n}\n\nexport default Dropdown;\n"],"mappings":"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"}
|
|
@@ -8,16 +8,18 @@ function getTotalOptions(options) {
|
|
|
8
8
|
}, 0) ?? 0;
|
|
9
9
|
}
|
|
10
10
|
function moveOtherToEnd(options) {
|
|
11
|
-
const
|
|
11
|
+
const newOptions = [...options ?? []];
|
|
12
|
+
const otherIndex = newOptions.findIndex((option) => option?.value === "other");
|
|
12
13
|
if (otherIndex > -1) {
|
|
13
|
-
const other =
|
|
14
|
-
|
|
14
|
+
const other = newOptions.splice(otherIndex, 1);
|
|
15
|
+
newOptions.push(...other);
|
|
15
16
|
}
|
|
16
|
-
return
|
|
17
|
-
if (option.items) {
|
|
18
|
-
option
|
|
19
|
-
|
|
20
|
-
}
|
|
17
|
+
return newOptions.map((option) => {
|
|
18
|
+
if (option.items) return {
|
|
19
|
+
...option,
|
|
20
|
+
items: moveOtherToEnd(option.items)
|
|
21
|
+
};
|
|
22
|
+
else return option;
|
|
21
23
|
});
|
|
22
24
|
}
|
|
23
25
|
function getListContainer(dropdownId) {
|
|
@@ -56,7 +58,10 @@ function getSortedOptions(data, sortAlphabetical = false) {
|
|
|
56
58
|
...emptyOption,
|
|
57
59
|
...restOfOptions
|
|
58
60
|
].map((item) => {
|
|
59
|
-
if (item?.items)
|
|
61
|
+
if (item?.items) return {
|
|
62
|
+
...item,
|
|
63
|
+
items: [...item.items].sort(compareAlphabetical)
|
|
64
|
+
};
|
|
60
65
|
return item;
|
|
61
66
|
});
|
|
62
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_utils.js","names":[],"sources":["../../../../../src/Atomic/FormElements/Dropdown/_utils.ts"],"sourcesContent":["import type { IDropdownOption } from './Dropdown.interface';\nimport { compareAlphabetical } from '../../../Functions/utils';\n\nexport function getTotalOptions(options: IDropdownOption[]): number {\n return options?.reduce((result, item) => {\n if (item?.list || item?.items) {\n result += item?.list?.length || item?.items?.length || 0;\n }\n else {\n ++result;\n }\n\n return result;\n }, 0) ?? 0;\n}\n\nexport function moveOtherToEnd(options: IDropdownOption[]): IDropdownOption[] {\n const otherIndex =
|
|
1
|
+
{"version":3,"file":"_utils.js","names":[],"sources":["../../../../../src/Atomic/FormElements/Dropdown/_utils.ts"],"sourcesContent":["import type { IDropdownOption } from './Dropdown.interface';\nimport { compareAlphabetical } from '../../../Functions/utils';\n\nexport function getTotalOptions(options: IDropdownOption[]): number {\n return options?.reduce((result, item) => {\n if (item?.list || item?.items) {\n result += item?.list?.length || item?.items?.length || 0;\n }\n else {\n ++result;\n }\n\n return result;\n }, 0) ?? 0;\n}\n\nexport function moveOtherToEnd(options: IDropdownOption[]): IDropdownOption[] {\n const newOptions = [...(options ?? [])];\n const otherIndex = newOptions.findIndex(\n option => option?.value === 'other',\n );\n if (otherIndex > -1) {\n const other = newOptions.splice(otherIndex, 1);\n newOptions.push(...other);\n }\n\n return newOptions.map((option: IDropdownOption) => {\n if (option.items) {\n return { ...option, items: moveOtherToEnd(option.items) };\n }\n else {\n return option;\n }\n });\n}\n\nexport function getListContainer(dropdownId: string): HTMLElement | null {\n return document.getElementById(dropdownId);\n}\n\nexport function getListContainerWrapper(dropdownId: string): Element | null {\n return document.getElementById(`mlw-${dropdownId}`);\n}\n\nexport function getParentNode(dropdownRef: React.MutableRefObject<Element | null>, isDoNotPullOutListOfMainContainer?: boolean): Element | null {\n if (isDoNotPullOutListOfMainContainer) return dropdownRef.current;\n return (\n document.querySelector('div#root')\n ?? document.querySelector('div#app')\n ?? document.querySelector('div#storybook-root')\n );\n}\n\nexport function getPreparedOptionLabel(searchValue: string | null | undefined, text: string, isSearchable?: boolean, postfix?: string, description?: string): string {\n const prepare = (text: string): string => text?.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n text = text?.replace(/[\"&<>]/g, (a) => {\n return { '\"': '"', '&': '&', '<': '<', '>': '>' }[a] ?? '';\n });\n const main\n = isSearchable && searchValue\n ? text?.replace(\n\n new RegExp(prepare(searchValue?.toString()), 'i'),\n match => `<span class=\"bg--yellow\">${match}</span>`,\n )\n : text;\n const postfixPart = postfix\n ? `<span class=\"dropdown__list-item-postfix\">${postfix}</span>`\n : '';\n const descriptionPart = description\n ? `<span class=\"dropdown__list-item-description\">${description}</span>`\n : '';\n return main + postfixPart + descriptionPart;\n}\n\nexport function getSortedOptions(data: IDropdownOption[], sortAlphabetical: boolean = false): IDropdownOption[] {\n let newData = [...data];\n\n if (sortAlphabetical) {\n const openModalOption = newData.filter(\n ({ value }) => value === 'open_modal',\n );\n const emptyOption = newData.filter(({ value }) => value === '');\n const restOfOptions = newData\n .filter(({ value }) => value !== 'open_modal' && value !== '')\n .sort(compareAlphabetical);\n\n newData = [...openModalOption, ...emptyOption, ...restOfOptions].map(\n (item) => {\n if (item?.items) {\n return { ...item, items: [...item.items].sort(compareAlphabetical) };\n }\n\n return item;\n },\n );\n }\n\n return newData;\n}\n"],"mappings":";;AAGA,SAAgB,gBAAgB,SAAoC;CAClE,OAAO,SAAS,QAAQ,QAAQ,SAAS;EACvC,IAAI,MAAM,QAAQ,MAAM,OACtB,UAAU,MAAM,MAAM,UAAU,MAAM,OAAO,UAAU;OAGvD,EAAE;EAGJ,OAAO;CACT,GAAG,CAAC,KAAK;AACX;AAEA,SAAgB,eAAe,SAA+C;CAC5E,MAAM,aAAa,CAAC,GAAI,WAAW,CAAC,CAAE;CACtC,MAAM,aAAa,WAAW,WAC5B,WAAU,QAAQ,UAAU,OAC9B;CACA,IAAI,aAAa,IAAI;EACnB,MAAM,QAAQ,WAAW,OAAO,YAAY,CAAC;EAC7C,WAAW,KAAK,GAAG,KAAK;CAC1B;CAEA,OAAO,WAAW,KAAK,WAA4B;EACjD,IAAI,OAAO,OACT,OAAO;GAAE,GAAG;GAAQ,OAAO,eAAe,OAAO,KAAK;EAAE;OAGxD,OAAO;CAEX,CAAC;AACH;AAEA,SAAgB,iBAAiB,YAAwC;CACvE,OAAO,SAAS,eAAe,UAAU;AAC3C;AAEA,SAAgB,wBAAwB,YAAoC;CAC1E,OAAO,SAAS,eAAe,OAAO,YAAY;AACpD;AAEA,SAAgB,cAAc,aAAqD,mCAA6D;CAC9I,IAAI,mCAAmC,OAAO,YAAY;CAC1D,OACE,SAAS,cAAc,UAAU,KAC9B,SAAS,cAAc,SAAS,KAChC,SAAS,cAAc,oBAAoB;AAElD;AAEA,SAAgB,uBAAuB,aAAwC,MAAc,cAAwB,SAAkB,aAA8B;CACnK,MAAM,WAAW,SAAyB,MAAM,QAAQ,uBAAuB,MAAM;CACrF,OAAO,MAAM,QAAQ,YAAY,MAAM;EACrC,OAAO;GAAE,MAAK;GAAU,KAAK;GAAS,KAAK;GAAQ,KAAK;EAAO,EAAE,MAAM;CACzE,CAAC;CACD,MAAM,OACF,gBAAgB,cACd,MAAM,QAEN,IAAI,OAAO,QAAQ,aAAa,SAAS,CAAC,GAAG,GAAG,IAChD,UAAS,4BAA4B,MAAM,QAC7C,IACE;CACN,MAAM,cAAc,UAChB,6CAA6C,QAAQ,WACrD;CACJ,MAAM,kBAAkB,cACpB,iDAAiD,YAAY,WAC7D;CACJ,OAAO,OAAO,cAAc;AAC9B;AAEA,SAAgB,iBAAiB,MAAyB,mBAA4B,OAA0B;CAC9G,IAAI,UAAU,CAAC,GAAG,IAAI;CAEtB,IAAI,kBAAkB;EACpB,MAAM,kBAAkB,QAAQ,QAC7B,EAAE,YAAY,UAAU,YAC3B;EACA,MAAM,cAAc,QAAQ,QAAQ,EAAE,YAAY,UAAU,EAAE;EAC9D,MAAM,gBAAgB,QACnB,QAAQ,EAAE,YAAY,UAAU,gBAAgB,UAAU,EAAE,CAAC,CAC7D,KAAK,mBAAmB;EAE3B,UAAU;GAAC,GAAG;GAAiB,GAAG;GAAa,GAAG;EAAa,CAAC,CAAC,KAC9D,SAAS;GACR,IAAI,MAAM,OACR,OAAO;IAAE,GAAG;IAAM,OAAO,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,KAAK,mBAAmB;GAAE;GAGrE,OAAO;EACT,CACF;CACF;CAEA,OAAO;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownLiveSearch.js","names":[],"sources":["../../../../../src/Atomic/FormElements/DropdownLiveSearch/DropdownLiveSearch.tsx"],"sourcesContent":["/* eslint-disable react-web-api/no-leaked-event-listener */\n/* eslint-disable react-web-api/no-leaked-timeout */\n/* eslint-disable react-dom/no-dangerously-set-innerhtml */\nimport type {\n ChangeEvent,\n FocusEventHandler,\n LegacyRef,\n MouseEventHandler,\n ReactNode,\n} from 'react';\n\nimport type { IDropdownLiveSearchOption, IDropdownLiveSearchProps } from './DropdownLiveSearch.interface';\nimport cn from 'classnames';\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Check, ChevronDown, ChevronUp, Code, X } from 'react-feather';\nimport { formatToOnlyASCIICodeText } from '../../../Functions/fieldValueFormatters';\nimport { useDebounce } from '../../../Functions/useDebounce';\nimport useIsMobile from '../../../Functions/useIsMobile/useIsMobile';\nimport Spinner from '../../Layout/Spinner/Spinner';\n\nimport RadioInput from '../RadioInput/RadioInput';\nimport './DropdownLiveSearch.scss';\n\nconst RC = 'dropdown-live-search';\n\nconst DropdownLiveSearch: React.FC<IDropdownLiveSearchProps> = ({\n label,\n value,\n error,\n disabled,\n onChange,\n placeholder,\n className,\n isSearchable,\n doRequest,\n isLoading,\n options,\n fieldKey,\n id,\n isListTop,\n attributesOfNativeInput,\n withMobileLogic,\n tabIndex,\n isNotValidateASCII = false,\n noOptionsText = 'No options available',\n testId = 'dropdown-live-search',\n}) => {\n const [dropdownId] = useState(\n id || fieldKey || Math.random().toString(16).slice(2),\n );\n const [isOpen, setIsOpenState] = useState(false);\n const [isValueDeleted, setIsValueDeleted] = useState(false);\n const { isMobile: isMobileProp } = useIsMobile();\n const isMobile\n = isMobileProp && withMobileLogic && window.screen.width <= 768;\n\n const labelByValue = useMemo(() => {\n return options?.find(item => item.value === value)?.label ?? '';\n }, [value, options]);\n\n const [searchValue, setSV] = useState<string>('');\n const [isSearchValueChangedAfterOpen, setIsSearchValueChangedAfterOpen]\n = useState(false);\n\n const dropdownLiveSearchRef = useRef<HTMLElement | null>(null);\n const dropdownListBoxRef = useRef<HTMLElement | null>(null);\n const dropdownListRef = useRef<HTMLElement | null>(null);\n const dropdownListHeaderRef = useRef<HTMLElement | null>(null);\n const searchInputRef = useRef<HTMLElement | null>(null);\n const searchInputModalRef = useRef<HTMLElement | null>(null);\n const searchValueRef = useRef<string | null>(null);\n const wrapperRef = useRef<HTMLElement | null>(null);\n\n const [isFocusedByClick, setIsFocusedByClick] = useState(false);\n\n const [isScrollableList, setIsScrollableList] = useState<boolean | null>(null);\n const [isFixedMaxHeight, setIsFixedMaxHeight] = useState(false);\n const [scrollTop, setScrollTop] = useState(0);\n const [scrollHeight, setScrollHeight] = useState(1);\n\n const debouncedSearchTerm = useDebounce({ searchValue, delay: 600 });\n\n const doScrollCallback: EventListener = useCallback(\n (e) => {\n if (doRequest && typeof doRequest === 'function') {\n const target = e?.target as Element;\n\n if (\n Math.round(target.clientHeight + target.scrollTop)\n === target.scrollHeight\n ) {\n doRequest(searchValueRef.current ?? '', true);\n }\n }\n },\n [options],\n );\n\n const setSearchValue = (val: string, isChanged = true): void => {\n if (isChanged) setIsSearchValueChangedAfterOpen(true);\n setSV(val);\n searchValueRef.current = val;\n };\n\n const setIsOpen = (v: boolean): void => {\n setIsOpenState(v);\n setSearchValue('', false);\n if (!v) setIsSearchValueChangedAfterOpen(false);\n };\n\n const getParentNode = (): Element | null => {\n return (\n document.querySelector('div#root')\n ?? document.querySelector('div#app')\n ?? document.querySelector('div#storybook-root')\n );\n };\n\n const getListContainer = (): Element | null => {\n return document.getElementById(dropdownId?.toString());\n };\n\n const onWrapperClick: MouseEventHandler<Element> = (e): void => {\n if (e.target === wrapperRef?.current) {\n e.stopPropagation();\n e.preventDefault();\n\n setIsOpen(false);\n }\n };\n\n const onSearchableInputFocus: FocusEventHandler<HTMLInputElement> = (e): void => {\n if (!isOpen) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n\n const handleClickOutside = (event: Event | MouseEvent): void => {\n if (\n dropdownLiveSearchRef.current\n && !dropdownLiveSearchRef.current.contains(event.target as Node)\n && (!getListContainer() || !getListContainer()?.contains(event.target as Node))\n ) {\n setIsOpen(false);\n }\n };\n\n const closeListViaEsc = (e: KeyboardEvent): void => {\n if ([27].includes(e.keyCode)) setIsOpen(false);\n };\n\n const closeList = isOpen ? handleClickOutside : () => {};\n\n const onInputClick: MouseEventHandler<HTMLInputElement> = (e): void => {\n if (!isOpen) setIsOpen(true);\n\n if (isMobile && withMobileLogic) {\n e.preventDefault();\n e.stopPropagation();\n if (e.target) (e.target as HTMLInputElement)?.blur();\n }\n else {\n if (e.target) (e.target as HTMLInputElement)?.select();\n }\n };\n\n const onInputChange = (e: ChangeEvent): void => {\n let inputValue = (e.target as HTMLInputElement)?.value;\n if (!isNotValidateASCII)\n inputValue = formatToOnlyASCIICodeText(inputValue);\n setSearchValue(inputValue);\n\n if ((searchValue || !isSearchValueChangedAfterOpen) && !(e.target as HTMLInputElement).value) {\n onChange?.('');\n setSearchValue('');\n setIsValueDeleted(true);\n }\n else {\n setIsValueDeleted(false);\n }\n };\n\n const highlightedText = (text: string, postfix?: string): string => {\n if (!isSearchable) {\n return text;\n }\n else {\n const preparedSearchValue\n = isSearchValueChangedAfterOpen || (isMobile && withMobileLogic)\n ? searchValue\n : labelByValue;\n\n const prepare = (text: string): string => text?.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n text = text.replace(/[\"&<>]/g, (a) => {\n return { '\"': '"', '&': '&', '<': '<', '>': '>' }[a] ?? '';\n });\n\n const main = preparedSearchValue\n ? text?.replace(\n\n new RegExp(prepare(preparedSearchValue), 'i'),\n match => `<span class=\"bg--yellow\">${match}</span>`,\n )\n : text;\n const postfixPart = postfix\n ? `<span class=\"dropdown__list-item-postfix\">${postfix}</span>`\n : '';\n\n return main + postfixPart;\n }\n };\n\n const getMarkupForElement = (item: IDropdownLiveSearchOption, index?: number, optTestId?: string): ReactNode => {\n const lowerLabel = item.label.toLowerCase();\n const lowerSearchValue = searchValue?.toLowerCase();\n\n return (\n <button\n type=\"button\"\n data-testid={`${testId}-${optTestId || index}-option`}\n key={item.value?.toString()?.replace(/ /g, '_')}\n onClick={() => {\n onChange?.(item.value);\n setIsOpen(false);\n }}\n className={cn(\n `${RC}__list-item`,\n {\n [`${RC}__list-item_active`]: item.value === value,\n [`${RC}__list-item_disabled`]: item.disabled,\n },\n item.className,\n )}\n >\n {!isMobile\n || (isMobile && !withMobileLogic && (\n <span\n className={cn(`${RC}__active-icon`, {\n [`${RC}__active-icon_active`]: lowerLabel === lowerSearchValue,\n })}\n >\n <Check />\n </span>\n ))}\n\n <p\n title={item.label}\n className={item.labelClassName || ''}\n dangerouslySetInnerHTML={{\n __html: highlightedText(item.label, item.postfix),\n }}\n />\n {isMobile\n ? item?.customMobileIcon ?? (\n <RadioInput value={item.value} checked={value?.toString()} />\n )\n : ''}\n </button>\n );\n };\n\n const getListMarkUp = (): ReactNode => {\n return (\n <div\n className={cn(`${RC}__container-wrapper`)}\n ref={wrapperRef as LegacyRef<HTMLDivElement>}\n onClick={isMobile ? onWrapperClick : () => {}}\n >\n <div\n className={cn(`${RC}__list-wrapper`, {\n [`${RC}__list-wrapper--fixed-height`]: isFixedMaxHeight,\n [`${RC}__list-wrapper--with-bottom-shadow`]:\n isScrollableList && isMobile,\n [`${RC}__list-wrapper--with-bottom-shadow-hidden`]:\n scrollTop === scrollHeight,\n })}\n >\n <div\n id=\"dropdown-live-search-list\"\n className={cn(`${RC}__container`, {\n [`${RC}__list-top`]: isListTop,\n })}\n ref={dropdownListBoxRef as LegacyRef<HTMLDivElement>}\n >\n {isMobile && (\n <div\n ref={dropdownListHeaderRef as LegacyRef<HTMLDivElement>}\n className={cn(`${RC}__list-header`, {\n [`${RC}__list-header-with-shadow`]:\n isScrollableList && isMobile,\n [`${RC}__list-header-with-shadow-hidden`]: scrollTop === 0,\n })}\n >\n <div className={cn(`${RC}__list-header-row`)}>\n <div className={cn(`${RC}__list-label`)}>{label}</div>\n <div\n className={cn(`${RC}__list-close-icon`)}\n onClick={() => setIsOpen(false)}\n >\n <X onClick={() => setIsOpen(false)} />\n </div>\n </div>\n {isSearchable && (\n <input\n ref={searchInputModalRef as LegacyRef<HTMLInputElement>}\n className={`${RC}__input`}\n value={isOpen ? searchValue : labelByValue}\n onChange={onInputChange}\n placeholder={placeholder}\n onFocus={onSearchableInputFocus}\n tabIndex={-1}\n {...attributesOfNativeInput}\n />\n )}\n </div>\n )}\n <div\n className={cn(`${RC}__list`, { disabled: isLoading })}\n ref={dropdownListRef as LegacyRef<HTMLDivElement>}\n >\n {options?.map(option => getMarkupForElement(option))}\n\n {!options?.length && (\n <div\n className={`${RC}__list-item ${RC}__list-item--no-options`}\n >\n {noOptionsText}\n </div>\n )}\n </div>\n\n {isLoading && isOpen && (\n <Spinner size={(options?.length ?? 0) <= 3 ? 'small' : null} />\n )}\n </div>\n </div>\n </div>\n );\n };\n\n const initListContainer = (): void => {\n const dropdownList = document.createElement('div');\n\n dropdownList.setAttribute('id', dropdownId?.toString());\n dropdownList.classList.add('dropdown__container');\n\n if (isMobile) {\n dropdownList.addEventListener('click', (e) => {\n if ((e.target as HTMLElement).id === dropdownId) setIsOpen(false);\n });\n }\n\n try {\n getListContainer()?.remove();\n }\n finally {\n if (isMobile) {\n try {\n document.getElementById(`mlw-${dropdownId}`)?.remove();\n }\n catch {}\n\n const dropdownMobileListWrapper = document.createElement('div');\n dropdownMobileListWrapper.classList.add('dropdown-live-search-mobile');\n dropdownMobileListWrapper.setAttribute('id', `mlw-${dropdownId}`);\n dropdownMobileListWrapper?.append(dropdownList);\n getParentNode()?.append(dropdownMobileListWrapper);\n }\n else {\n getParentNode()?.append(dropdownList);\n }\n }\n };\n\n const renderListContainer = (): React.ReactPortal | null => {\n const lc = getListContainer();\n\n if (!lc) return null;\n\n return createPortal(getListMarkUp(), lc);\n };\n\n useEffect(() => {\n document.addEventListener('click', handleClickOutside, true);\n return () =>\n document.removeEventListener('click', handleClickOutside, true);\n }, []);\n\n useEffect(() => {\n if (options?.length === 1 && searchValue === options[0].label) {\n setSearchValue(options[0].label);\n onChange?.(options[0].value);\n }\n }, [options]);\n\n useEffect(() => {\n if (isSearchable && (debouncedSearchTerm || isValueDeleted)) {\n doRequest?.(debouncedSearchTerm);\n\n if (isValueDeleted) setIsValueDeleted(false);\n }\n }, [debouncedSearchTerm, isValueDeleted]);\n\n useEffect(() => {\n if (isMobile && withMobileLogic) {\n initListContainer();\n }\n }, [isMobile, withMobileLogic]);\n\n useEffect(() => {\n if (isOpen && isMobile && dropdownListRef?.current && !searchValue) {\n setIsScrollableList(\n dropdownListRef?.current?.scrollHeight\n > dropdownListRef?.current?.clientHeight,\n );\n setIsFixedMaxHeight(\n isScrollableList\n || dropdownListRef?.current?.scrollHeight\n > dropdownListRef?.current?.clientHeight,\n );\n }\n }, [\n isOpen,\n isMobile,\n isScrollableList,\n dropdownListRef?.current,\n dropdownListRef?.current?.scrollHeight,\n dropdownListRef?.current?.clientHeight,\n ]);\n\n useLayoutEffect(() => {\n const list = document.getElementById('dropdown-live-search-list');\n\n if ((list || isOpen) && (!withMobileLogic || !isMobile)) {\n const dropdownWidth = dropdownLiveSearchRef?.current?.clientWidth;\n if (list) list.style.minWidth = `${dropdownWidth}px`;\n }\n }, [dropdownLiveSearchRef, isOpen, withMobileLogic]);\n\n useEffect(() => {\n if (!isOpen) {\n setIsFocusedByClick(false);\n if (withMobileLogic && isMobile) setSearchValue('');\n }\n\n if (isOpen && dropdownListRef && dropdownListRef.current) {\n if (isMobile && withMobileLogic) {\n doRequest?.('').then(() => {\n setTimeout(() => {\n if (dropdownListRef.current && dropdownListBoxRef?.current && dropdownListHeaderRef?.current) {\n dropdownListRef.current.style.maxHeight = `${dropdownListBoxRef?.current?.getBoundingClientRect()?.height\n - dropdownListHeaderRef?.current?.getBoundingClientRect()?.height\n }px`;\n }\n }, 1);\n });\n searchInputModalRef?.current?.focus();\n }\n else if (!isMobile) {\n doRequest?.('');\n }\n dropdownListRef.current.addEventListener('scroll', doScrollCallback);\n }\n return () => {\n removeEventListener('scroll', doScrollCallback);\n };\n }, [isOpen, dropdownListRef]);\n\n useLayoutEffect(() => {\n if (!isMobile) {\n window.addEventListener('mousewheel', closeList);\n window.addEventListener('scroll', closeList);\n window.addEventListener('touchmove', closeList);\n }\n else {\n window.removeEventListener('mousewheel', closeList);\n window.removeEventListener('scroll', closeList);\n window.removeEventListener('touchmove', closeList);\n }\n\n getListContainer()?.addEventListener('click', closeList);\n window.addEventListener('keyup', closeListViaEsc);\n\n return () => {\n window.removeEventListener('mousewheel', closeList);\n window.removeEventListener('scroll', closeList);\n window.removeEventListener('touchmove', closeList);\n window.removeEventListener('keyup', closeListViaEsc);\n getListContainer()?.removeEventListener('click', closeList);\n };\n }, [getListContainer]);\n\n useEffect(() => {\n const setScrollTopValue = (e: Event | MouseEvent): void => {\n setScrollTop(Number.parseInt((e.target as HTMLElement)?.scrollTop?.toString(), 10));\n };\n\n if (isOpen && isMobile && dropdownListRef?.current) {\n dropdownListRef?.current?.addEventListener('scroll', setScrollTopValue);\n }\n\n return () => {\n dropdownListRef?.current?.removeEventListener(\n 'scroll',\n setScrollTopValue,\n );\n };\n }, [isOpen, isMobile, dropdownListRef?.current]);\n useEffect(() => {\n if (dropdownListRef?.current) {\n setScrollHeight(\n Number.parseInt(\n (dropdownListRef?.current?.scrollHeight\n - dropdownListRef?.current?.clientHeight)?.toString(),\n 10,\n ),\n );\n }\n }, [scrollTop, dropdownListRef?.current]);\n\n if (!options) return null;\n\n return (\n <div\n className={cn(RC, className, {\n disabled,\n [`${RC}-mobile`]: isMobile,\n [`${RC}--focused`]: isOpen,\n })}\n ref={dropdownLiveSearchRef as LegacyRef<HTMLDivElement>}\n >\n <button\n type=\"button\"\n data-testid={testId}\n className={`${RC}__trigger input__wrap ${isOpen ? 'input__wrap--focus' : ''} ${!value ? 'placeholder' : ''} ${\n error ? 'error' : ''\n }`}\n onClick={() => (!isSearchable ? setIsOpen(!isOpen) : null)}\n onMouseDown={() => setIsFocusedByClick(true)}\n onFocus={() => (!isFocusedByClick ? setIsOpen(true) : null)}\n tabIndex={tabIndex}\n >\n {isSearchable\n ? (\n <input\n ref={searchInputRef as LegacyRef<HTMLInputElement>}\n className={`${RC}__input`}\n value={\n isOpen\n ? (isMobile && withMobileLogic)\n || !isSearchValueChangedAfterOpen\n ? labelByValue\n : searchValue\n : labelByValue\n }\n onChange={onInputChange}\n placeholder={placeholder}\n onFocus={onSearchableInputFocus}\n onClick={onInputClick}\n tabIndex={-1}\n {...attributesOfNativeInput}\n />\n )\n : (\n <span className=\"text\">{labelByValue || placeholder}</span>\n )}\n <span\n className={cn(`${RC}__arrow`, { [`${RC}__arrow_active`]: isOpen })}\n onClick={() => setIsOpen(!isOpen)}\n >\n {isMobile\n ? (\n <Code className=\"mobile-icon\" />\n )\n : isOpen\n ? (\n <ChevronUp />\n )\n : (\n <ChevronDown />\n )}\n </span>\n </button>\n {isOpen\n && (isMobile && withMobileLogic ? renderListContainer() : getListMarkUp())}\n </div>\n );\n};\n\nexport default DropdownLiveSearch;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DropdownLiveSearch.js","names":[],"sources":["../../../../../src/Atomic/FormElements/DropdownLiveSearch/DropdownLiveSearch.tsx"],"sourcesContent":["/* eslint-disable react-web-api/no-leaked-event-listener */\n/* eslint-disable react-web-api/no-leaked-timeout */\n/* eslint-disable react-dom/no-dangerously-set-innerhtml */\nimport type {\n ChangeEvent,\n FocusEventHandler,\n LegacyRef,\n MouseEventHandler,\n ReactNode,\n} from 'react';\n\nimport type { IDropdownLiveSearchOption, IDropdownLiveSearchProps } from './DropdownLiveSearch.interface';\nimport cn from 'classnames';\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Check, ChevronDown, ChevronUp, Code, X } from 'react-feather';\nimport { formatToOnlyASCIICodeText } from '../../../Functions/fieldValueFormatters';\nimport { useDebounce } from '../../../Functions/useDebounce';\nimport useIsMobile from '../../../Functions/useIsMobile/useIsMobile';\nimport Spinner from '../../Layout/Spinner/Spinner';\n\nimport RadioInput from '../RadioInput/RadioInput';\nimport './DropdownLiveSearch.scss';\n\nconst RC = 'dropdown-live-search';\n\nconst DropdownLiveSearch: React.FC<IDropdownLiveSearchProps> = ({\n label,\n value,\n error,\n disabled,\n onChange,\n placeholder,\n className,\n isSearchable,\n doRequest,\n isLoading,\n options,\n fieldKey,\n id,\n isListTop,\n attributesOfNativeInput,\n withMobileLogic,\n tabIndex,\n isNotValidateASCII = false,\n noOptionsText = 'No options available',\n testId = 'dropdown-live-search',\n}) => {\n const [dropdownId] = useState(\n id || fieldKey || Math.random().toString(16).slice(2),\n );\n const [isOpen, setIsOpenState] = useState(false);\n const [isValueDeleted, setIsValueDeleted] = useState(false);\n const { isMobile: isMobileProp } = useIsMobile();\n const isMobile\n = isMobileProp && withMobileLogic && window.screen.width <= 768;\n\n const labelByValue = useMemo(() => {\n return options?.find(item => item.value === value)?.label ?? '';\n }, [value, options]);\n\n const [searchValue, setSV] = useState<string>('');\n const [isSearchValueChangedAfterOpen, setIsSearchValueChangedAfterOpen]\n = useState(false);\n\n const dropdownLiveSearchRef = useRef<HTMLElement | null>(null);\n const dropdownListBoxRef = useRef<HTMLElement | null>(null);\n const dropdownListRef = useRef<HTMLElement | null>(null);\n const dropdownListHeaderRef = useRef<HTMLElement | null>(null);\n const searchInputRef = useRef<HTMLElement | null>(null);\n const searchInputModalRef = useRef<HTMLElement | null>(null);\n const searchValueRef = useRef<string | null>(null);\n const wrapperRef = useRef<HTMLElement | null>(null);\n\n const [isFocusedByClick, setIsFocusedByClick] = useState(false);\n\n const [isScrollableList, setIsScrollableList] = useState<boolean | null>(null);\n const [isFixedMaxHeight, setIsFixedMaxHeight] = useState(false);\n const [scrollTop, setScrollTop] = useState(0);\n const [scrollHeight, setScrollHeight] = useState(1);\n\n const debouncedSearchTerm = useDebounce({ searchValue, delay: 600 });\n\n const doScrollCallback: EventListener = useCallback(\n (e) => {\n if (doRequest && typeof doRequest === 'function') {\n const target = e?.target as Element;\n\n if (\n Math.round(target.clientHeight + target.scrollTop)\n === target.scrollHeight\n ) {\n doRequest(searchValueRef.current ?? '', true);\n }\n }\n },\n [options],\n );\n\n const setSearchValue = (val: string, isChanged = true): void => {\n if (isChanged) setIsSearchValueChangedAfterOpen(true);\n setSV(val);\n searchValueRef.current = val;\n };\n\n const setIsOpen = (v: boolean): void => {\n setIsOpenState(v);\n setSearchValue('', false);\n if (!v) setIsSearchValueChangedAfterOpen(false);\n };\n\n const getParentNode = (): Element | null => {\n return (\n document.querySelector('div#root')\n ?? document.querySelector('div#app')\n ?? document.querySelector('div#storybook-root')\n );\n };\n\n const getListContainer = (): Element | null => {\n return document.getElementById(dropdownId?.toString());\n };\n\n const onWrapperClick: MouseEventHandler<Element> = (e): void => {\n if (e.target === wrapperRef?.current) {\n e.stopPropagation();\n e.preventDefault();\n\n setIsOpen(false);\n }\n };\n\n const onSearchableInputFocus: FocusEventHandler<HTMLInputElement> = (e): void => {\n if (!isOpen) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n\n const handleClickOutside = (event: Event | MouseEvent): void => {\n if (\n dropdownLiveSearchRef.current\n && !dropdownLiveSearchRef.current.contains(event.target as Node)\n && (!getListContainer() || !getListContainer()?.contains(event.target as Node))\n ) {\n setIsOpen(false);\n }\n };\n\n const closeListViaEsc = (e: KeyboardEvent): void => {\n if ([27].includes(e.keyCode)) setIsOpen(false);\n };\n\n const closeList = isOpen ? handleClickOutside : () => {};\n\n const onInputClick: MouseEventHandler<HTMLInputElement> = (e): void => {\n if (!isOpen) setIsOpen(true);\n\n if (isMobile && withMobileLogic) {\n e.preventDefault();\n e.stopPropagation();\n if (e.target) (e.target as HTMLInputElement)?.blur();\n }\n else {\n if (e.target) (e.target as HTMLInputElement)?.select();\n }\n };\n\n const onInputChange = (e: ChangeEvent): void => {\n let inputValue = (e.target as HTMLInputElement)?.value;\n if (!isNotValidateASCII)\n inputValue = formatToOnlyASCIICodeText(inputValue);\n setSearchValue(inputValue);\n\n if ((searchValue || !isSearchValueChangedAfterOpen) && !(e.target as HTMLInputElement).value) {\n onChange?.('');\n setSearchValue('');\n setIsValueDeleted(true);\n }\n else {\n setIsValueDeleted(false);\n }\n };\n\n const highlightedText = (text: string, postfix?: string): string => {\n if (!isSearchable) {\n return text;\n }\n else {\n const preparedSearchValue\n = isSearchValueChangedAfterOpen || (isMobile && withMobileLogic)\n ? searchValue\n : labelByValue;\n\n const prepare = (text: string): string => text?.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n text = text.replace(/[\"&<>]/g, (a) => {\n return { '\"': '"', '&': '&', '<': '<', '>': '>' }[a] ?? '';\n });\n\n const main = preparedSearchValue\n ? text?.replace(\n\n new RegExp(prepare(preparedSearchValue), 'i'),\n match => `<span class=\"bg--yellow\">${match}</span>`,\n )\n : text;\n const postfixPart = postfix\n ? `<span class=\"dropdown__list-item-postfix\">${postfix}</span>`\n : '';\n\n return main + postfixPart;\n }\n };\n\n const getMarkupForElement = (item: IDropdownLiveSearchOption, index?: number, optTestId?: string): ReactNode => {\n const lowerLabel = item.label.toLowerCase();\n const lowerSearchValue = searchValue?.toLowerCase();\n\n return (\n <button\n type=\"button\"\n data-testid={`${testId}-${optTestId || index}-option`}\n key={item.value?.toString()?.replace(/ /g, '_')}\n onClick={() => {\n onChange?.(item.value);\n setIsOpen(false);\n }}\n className={cn(\n `${RC}__list-item`,\n {\n [`${RC}__list-item_active`]: item.value === value,\n [`${RC}__list-item_disabled`]: item.disabled,\n },\n item.className,\n )}\n >\n {!isMobile\n || (isMobile && !withMobileLogic && (\n <span\n className={cn(`${RC}__active-icon`, {\n [`${RC}__active-icon_active`]: lowerLabel === lowerSearchValue,\n })}\n >\n <Check />\n </span>\n ))}\n\n <p\n title={item.label}\n className={item.labelClassName || ''}\n dangerouslySetInnerHTML={{\n __html: highlightedText(item.label, item.postfix),\n }}\n />\n {isMobile\n ? item?.customMobileIcon ?? (\n <RadioInput value={item.value} checked={value?.toString()} />\n )\n : ''}\n </button>\n );\n };\n\n const getListMarkUp = (): ReactNode => {\n return (\n <div\n className={cn(`${RC}__container-wrapper`)}\n ref={wrapperRef as LegacyRef<HTMLDivElement>}\n onClick={isMobile ? onWrapperClick : () => {}}\n >\n <div\n className={cn(`${RC}__list-wrapper`, {\n [`${RC}__list-wrapper--fixed-height`]: isFixedMaxHeight,\n [`${RC}__list-wrapper--with-bottom-shadow`]:\n isScrollableList && isMobile,\n [`${RC}__list-wrapper--with-bottom-shadow-hidden`]:\n scrollTop === scrollHeight,\n })}\n >\n <div\n id=\"dropdown-live-search-list\"\n className={cn(`${RC}__container`, {\n [`${RC}__list-top`]: isListTop,\n })}\n ref={dropdownListBoxRef as LegacyRef<HTMLDivElement>}\n >\n {isMobile && (\n <div\n ref={dropdownListHeaderRef as LegacyRef<HTMLDivElement>}\n className={cn(`${RC}__list-header`, {\n [`${RC}__list-header-with-shadow`]:\n isScrollableList && isMobile,\n [`${RC}__list-header-with-shadow-hidden`]: scrollTop === 0,\n })}\n >\n <div className={cn(`${RC}__list-header-row`)}>\n <div className={cn(`${RC}__list-label`)}>{label}</div>\n <div\n className={cn(`${RC}__list-close-icon`)}\n onClick={() => setIsOpen(false)}\n >\n <X onClick={() => setIsOpen(false)} />\n </div>\n </div>\n {isSearchable && (\n <input\n ref={searchInputModalRef as LegacyRef<HTMLInputElement>}\n className={`${RC}__input`}\n value={isOpen ? searchValue : labelByValue}\n onChange={onInputChange}\n placeholder={placeholder}\n onFocus={onSearchableInputFocus}\n tabIndex={-1}\n {...attributesOfNativeInput}\n />\n )}\n </div>\n )}\n <div\n className={cn(`${RC}__list`, { disabled: isLoading })}\n ref={dropdownListRef as LegacyRef<HTMLDivElement>}\n >\n {options?.map(option => getMarkupForElement(option))}\n\n {!options?.length && (\n <div\n className={`${RC}__list-item ${RC}__list-item--no-options`}\n >\n {noOptionsText}\n </div>\n )}\n </div>\n\n {isLoading && isOpen && (\n <Spinner size={(options?.length ?? 0) <= 3 ? 'small' : null} />\n )}\n </div>\n </div>\n </div>\n );\n };\n\n const initListContainer = (): void => {\n const dropdownList = document.createElement('div');\n\n dropdownList.setAttribute('id', dropdownId?.toString());\n dropdownList.classList.add('dropdown__container');\n\n if (isMobile) {\n dropdownList.addEventListener('click', (e) => {\n if ((e.target as HTMLElement).id === dropdownId) setIsOpen(false);\n });\n }\n\n try {\n getListContainer()?.remove();\n }\n finally {\n if (isMobile) {\n try {\n document.getElementById(`mlw-${dropdownId}`)?.remove();\n }\n catch {}\n\n const dropdownMobileListWrapper = document.createElement('div');\n dropdownMobileListWrapper.classList.add('dropdown-live-search-mobile');\n dropdownMobileListWrapper.setAttribute('id', `mlw-${dropdownId}`);\n dropdownMobileListWrapper?.append(dropdownList);\n getParentNode()?.append(dropdownMobileListWrapper);\n }\n else {\n getParentNode()?.append(dropdownList);\n }\n }\n };\n\n const renderListContainer = (): React.ReactPortal | null => {\n const lc = getListContainer();\n\n if (!lc) return null;\n\n return createPortal(getListMarkUp(), lc);\n };\n\n useEffect(() => {\n document.addEventListener('click', handleClickOutside, true);\n return () =>\n document.removeEventListener('click', handleClickOutside, true);\n }, []);\n\n useEffect(() => {\n if (options?.length === 1 && searchValue === options[0].label) {\n setSearchValue(options[0].label);\n onChange?.(options[0].value);\n }\n }, [options]);\n\n useEffect(() => {\n if (isSearchable && (debouncedSearchTerm || isValueDeleted)) {\n doRequest?.(debouncedSearchTerm);\n\n if (isValueDeleted) setIsValueDeleted(false);\n }\n }, [debouncedSearchTerm, isValueDeleted]);\n\n useEffect(() => {\n if (isMobile && withMobileLogic) {\n initListContainer();\n }\n }, [isMobile, withMobileLogic]);\n\n useEffect(() => {\n if (isOpen && isMobile && dropdownListRef?.current && !searchValue) {\n setIsScrollableList(\n dropdownListRef?.current?.scrollHeight\n > dropdownListRef?.current?.clientHeight,\n );\n setIsFixedMaxHeight(\n isScrollableList\n || dropdownListRef?.current?.scrollHeight\n > dropdownListRef?.current?.clientHeight,\n );\n }\n }, [\n isOpen,\n isMobile,\n isScrollableList,\n dropdownListRef?.current,\n dropdownListRef?.current?.scrollHeight,\n dropdownListRef?.current?.clientHeight,\n ]);\n\n useLayoutEffect(() => {\n const list = document.getElementById('dropdown-live-search-list');\n\n if ((list || isOpen) && (!withMobileLogic || !isMobile)) {\n const dropdownWidth = dropdownLiveSearchRef?.current?.clientWidth;\n if (list) list.style.minWidth = `${dropdownWidth}px`;\n }\n }, [dropdownLiveSearchRef, isOpen, withMobileLogic]);\n\n useEffect(() => {\n if (!isOpen) {\n setIsFocusedByClick(false);\n if (withMobileLogic && isMobile) setSearchValue('');\n }\n\n if (isOpen && dropdownListRef && dropdownListRef.current) {\n if (isMobile && withMobileLogic) {\n doRequest?.('').then(() => {\n setTimeout(() => {\n if (dropdownListRef.current && dropdownListBoxRef?.current && dropdownListHeaderRef?.current) {\n dropdownListRef.current.style.maxHeight = `${dropdownListBoxRef?.current?.getBoundingClientRect()?.height\n - dropdownListHeaderRef?.current?.getBoundingClientRect()?.height\n }px`;\n }\n }, 1);\n });\n searchInputModalRef?.current?.focus();\n }\n else if (!isMobile) {\n doRequest?.('');\n }\n dropdownListRef.current.addEventListener('scroll', doScrollCallback);\n }\n return () => {\n removeEventListener('scroll', doScrollCallback);\n };\n }, [isOpen, dropdownListRef]);\n\n useLayoutEffect(() => {\n if (!isMobile) {\n window.addEventListener('mousewheel', closeList);\n window.addEventListener('scroll', closeList);\n window.addEventListener('touchmove', closeList);\n }\n else {\n window.removeEventListener('mousewheel', closeList);\n window.removeEventListener('scroll', closeList);\n window.removeEventListener('touchmove', closeList);\n }\n\n getListContainer()?.addEventListener('click', closeList);\n window.addEventListener('keyup', closeListViaEsc);\n\n return () => {\n window.removeEventListener('mousewheel', closeList);\n window.removeEventListener('scroll', closeList);\n window.removeEventListener('touchmove', closeList);\n window.removeEventListener('keyup', closeListViaEsc);\n getListContainer()?.removeEventListener('click', closeList);\n };\n }, [getListContainer]);\n\n useEffect(() => {\n const setScrollTopValue = (e: Event | MouseEvent): void => {\n setScrollTop(Number.parseInt((e.target as HTMLElement)?.scrollTop?.toString(), 10));\n };\n\n if (isOpen && isMobile && dropdownListRef?.current) {\n dropdownListRef?.current?.addEventListener('scroll', setScrollTopValue);\n }\n\n return () => {\n dropdownListRef?.current?.removeEventListener(\n 'scroll',\n setScrollTopValue,\n );\n };\n }, [isOpen, isMobile, dropdownListRef?.current]);\n useEffect(() => {\n if (dropdownListRef?.current) {\n setScrollHeight(\n Number.parseInt(\n (dropdownListRef?.current?.scrollHeight\n - dropdownListRef?.current?.clientHeight)?.toString(),\n 10,\n ),\n );\n }\n }, [scrollTop, dropdownListRef?.current]);\n\n if (!options) return null;\n\n return (\n <div\n className={cn(RC, className, {\n disabled,\n [`${RC}-mobile`]: isMobile,\n [`${RC}--focused`]: isOpen,\n })}\n ref={dropdownLiveSearchRef as LegacyRef<HTMLDivElement>}\n >\n <button\n type=\"button\"\n data-testid={testId}\n className={`${RC}__trigger input__wrap ${isOpen ? 'input__wrap--focus' : ''} ${!value ? 'placeholder' : ''} ${\n error ? 'error' : ''\n }`}\n onClick={() => (!isSearchable ? setIsOpen(!isOpen) : null)}\n onMouseDown={() => setIsFocusedByClick(true)}\n onFocus={() => (!isFocusedByClick ? setIsOpen(true) : null)}\n tabIndex={tabIndex}\n >\n {isSearchable\n ? (\n <input\n ref={searchInputRef as LegacyRef<HTMLInputElement>}\n className={`${RC}__input`}\n value={\n isOpen\n ? (isMobile && withMobileLogic)\n || !isSearchValueChangedAfterOpen\n ? labelByValue\n : searchValue\n : labelByValue\n }\n onChange={onInputChange}\n placeholder={placeholder}\n onFocus={onSearchableInputFocus}\n onClick={onInputClick}\n tabIndex={-1}\n {...attributesOfNativeInput}\n />\n )\n : (\n <span className=\"text\">{labelByValue || placeholder}</span>\n )}\n <span\n className={cn(`${RC}__arrow`, { [`${RC}__arrow_active`]: isOpen })}\n onClick={() => setIsOpen(!isOpen)}\n >\n {isMobile\n ? (\n <Code className=\"mobile-icon\" />\n )\n : isOpen\n ? (\n <ChevronUp />\n )\n : (\n <ChevronDown />\n )}\n </span>\n </button>\n {isOpen\n && (isMobile && withMobileLogic ? renderListContainer() : getListMarkUp())}\n </div>\n );\n};\n\nexport default DropdownLiveSearch;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileLoader.js","names":[],"sources":["../../../../../src/Atomic/FormElements/FileLoader/FileLoader.tsx"],"sourcesContent":["import type {\n FileLoaderProps,\n} from './FileLoader.interface';\nimport cn from 'classnames';\n\nimport React, { useState } from 'react';\nimport LoadedContent from './partial/LoadedContent';\n\nimport LoadZone from './partial/LoadZone';\nimport './FileLoader.scss';\n\nconst RC = 'file-loader';\n\nconst FileLoader: React.FC<FileLoaderProps> = (props) => {\n const {\n fieldKey,\n value,\n disabled,\n error,\n className,\n placeholder,\n onChange,\n doLoad,\n filterFiles,\n processErrors,\n isBlockNullValues,\n isDisableErrorsClass = true,\n uploadIcon,\n downloadIcon,\n deleteIcon,\n spiner,\n isIconAfter,\n isLinkTypeDownload = false,\n isUseLinkTitle = false,\n attributesOfNativeInput = {},\n } = props;\n\n const [isLoadContent, setIsLoadContent] = useState(false);\n const [dragenter, setDragenter] = useState(false);\n\n return (\n <div\n className={cn(RC, className, {\n [`${RC}_load-content`]: isLoadContent,\n [`${RC}_load-zone`]: !value,\n [`${RC}_hover`]: dragenter,\n [`${RC}_disabled`]: disabled,\n [`${RC}_error`]: !isDisableErrorsClass && Boolean(error),\n })}\n >\n {isLoadContent && spiner}\n\n {!doLoad && 'develop error: no doLoad'}\n\n {!!doLoad && value && (\n <LoadedContent\n RC={RC}\n value={value}\n onDelete={() => onChange(null)}\n icon={downloadIcon}\n isIconAfter={isIconAfter}\n deleteIcon={deleteIcon}\n isUseLinkTitle={isUseLinkTitle}\n isLinkTypeDownload={isLinkTypeDownload}\n />\n )}\n\n {doLoad && !value && (\n <LoadZone\n RC={RC}\n fieldKey={fieldKey}\n onChange={onChange}\n icon={uploadIcon}\n doLoad={doLoad}\n setDragenter={setDragenter}\n setIsLoadContent={setIsLoadContent}\n placeholder={placeholder}\n filterFiles={filterFiles}\n processErrors={processErrors}\n isBlockNullValues={isBlockNullValues}\n attributesOfNativeInput={attributesOfNativeInput}\n />\n )}\n </div>\n );\n};\n\nexport default FileLoader;\n"],"mappings":";;;;;;;AAWA,IAAM,KAAK;AAEX,IAAM,cAAyC,UAAU;CACvD,MAAM,EACJ,UACA,OACA,UACA,OACA,WACA,aACA,UACA,QACA,aACA,eACA,mBACA,uBAAuB,MACvB,YACA,cACA,YACA,QACA,aACA,qBAAqB,OACrB,iBAAiB,OACjB,0BAA0B,CAAC,MACzB;CAEJ,MAAM,CAAC,eAAe,oBAAoB,SAAS,KAAK;CACxD,MAAM,CAAC,WAAW,gBAAgB,SAAS,KAAK;CAEhD,OACE,qBAAC,OAAD;EACE,WAAW,GAAG,IAAI,WAAW;IAC1B,GAAG,GAAG,iBAAiB;IACvB,GAAG,GAAG,cAAc,CAAC;IACrB,GAAG,GAAG,UAAU;IAChB,GAAG,GAAG,aAAa;IACnB,GAAG,GAAG,UAAU,CAAC,wBAAwB,QAAQ,KAAK;EACzD,CAAC;
|
|
1
|
+
{"version":3,"file":"FileLoader.js","names":[],"sources":["../../../../../src/Atomic/FormElements/FileLoader/FileLoader.tsx"],"sourcesContent":["import type {\n FileLoaderProps,\n} from './FileLoader.interface';\nimport cn from 'classnames';\n\nimport React, { useState } from 'react';\nimport LoadedContent from './partial/LoadedContent';\n\nimport LoadZone from './partial/LoadZone';\nimport './FileLoader.scss';\n\nconst RC = 'file-loader';\n\nconst FileLoader: React.FC<FileLoaderProps> = (props) => {\n const {\n fieldKey,\n value,\n disabled,\n error,\n className,\n placeholder,\n onChange,\n doLoad,\n filterFiles,\n processErrors,\n isBlockNullValues,\n isDisableErrorsClass = true,\n uploadIcon,\n downloadIcon,\n deleteIcon,\n spiner,\n isIconAfter,\n isLinkTypeDownload = false,\n isUseLinkTitle = false,\n attributesOfNativeInput = {},\n } = props;\n\n const [isLoadContent, setIsLoadContent] = useState(false);\n const [dragenter, setDragenter] = useState(false);\n\n return (\n <div\n className={cn(RC, className, {\n [`${RC}_load-content`]: isLoadContent,\n [`${RC}_load-zone`]: !value,\n [`${RC}_hover`]: dragenter,\n [`${RC}_disabled`]: disabled,\n [`${RC}_error`]: !isDisableErrorsClass && Boolean(error),\n })}\n >\n {isLoadContent && spiner}\n\n {!doLoad && 'develop error: no doLoad'}\n\n {!!doLoad && value && (\n <LoadedContent\n RC={RC}\n value={value}\n onDelete={() => onChange(null)}\n icon={downloadIcon}\n isIconAfter={isIconAfter}\n deleteIcon={deleteIcon}\n isUseLinkTitle={isUseLinkTitle}\n isLinkTypeDownload={isLinkTypeDownload}\n />\n )}\n\n {doLoad && !value && (\n <LoadZone\n RC={RC}\n fieldKey={fieldKey}\n onChange={onChange}\n icon={uploadIcon}\n doLoad={doLoad}\n setDragenter={setDragenter}\n setIsLoadContent={setIsLoadContent}\n placeholder={placeholder}\n filterFiles={filterFiles}\n processErrors={processErrors}\n isBlockNullValues={isBlockNullValues}\n attributesOfNativeInput={attributesOfNativeInput}\n />\n )}\n </div>\n );\n};\n\nexport default FileLoader;\n"],"mappings":";;;;;;;AAWA,IAAM,KAAK;AAEX,IAAM,cAAyC,UAAU;CACvD,MAAM,EACJ,UACA,OACA,UACA,OACA,WACA,aACA,UACA,QACA,aACA,eACA,mBACA,uBAAuB,MACvB,YACA,cACA,YACA,QACA,aACA,qBAAqB,OACrB,iBAAiB,OACjB,0BAA0B,CAAC,MACzB;CAEJ,MAAM,CAAC,eAAe,oBAAoB,SAAS,KAAK;CACxD,MAAM,CAAC,WAAW,gBAAgB,SAAS,KAAK;CAEhD,OACE,qBAAC,OAAD;EACE,WAAW,GAAG,IAAI,WAAW;IAC1B,GAAG,GAAG,iBAAiB;IACvB,GAAG,GAAG,cAAc,CAAC;IACrB,GAAG,GAAG,UAAU;IAChB,GAAG,GAAG,aAAa;IACnB,GAAG,GAAG,UAAU,CAAC,wBAAwB,QAAQ,KAAK;EACzD,CAAC;EAPH,UAAA;GASG,iBAAiB;GAEjB,CAAC,UAAU;GAEX,CAAC,CAAC,UAAU,SACX,oBAAC,eAAD;IACM;IACG;IACP,gBAAgB,SAAS,IAAI;IAC7B,MAAM;IACO;IACD;IACI;IACI;GACrB,CAAA;GAGF,UAAU,CAAC,SACV,oBAAC,UAAD;IACM;IACM;IACA;IACV,MAAM;IACE;IACM;IACI;IACL;IACA;IACE;IACI;IACM;GAC1B,CAAA;EAEA;;AAET"}
|
|
@@ -4,7 +4,7 @@ import cn from "classnames";
|
|
|
4
4
|
import { useEffect } from "react";
|
|
5
5
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
//#region src/Atomic/FormElements/FileLoader/partial/LoadZone.tsx
|
|
7
|
-
var DEFAULT_MAX_FILE_SIZE =
|
|
7
|
+
var DEFAULT_MAX_FILE_SIZE = 1048576;
|
|
8
8
|
function FILTER_FILES_DEFAULT(file) {
|
|
9
9
|
return file.size <= DEFAULT_MAX_FILE_SIZE ? file : null;
|
|
10
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoadZone.js","names":[],"sources":["../../../../../../src/Atomic/FormElements/FileLoader/partial/LoadZone.tsx"],"sourcesContent":["import type { LoadZoneProps } from './LoadZone.interface';\nimport cn from 'classnames';\n\nimport React, { useEffect } from 'react';\nimport '../FileLoader.scss';\n\nconst DEFAULT_MAX_FILE_SIZE = 1024 * 1024; // 1MB\n\nfunction FILTER_FILES_DEFAULT(file: File): File | null {\n return file.size <= DEFAULT_MAX_FILE_SIZE ? file : null\n}\n\nconst LoadZone: React.FC<LoadZoneProps> = ({\n RC,\n fieldKey,\n onChange,\n doLoad,\n setDragenter,\n setIsLoadContent,\n icon,\n placeholder = '',\n filterFiles = FILTER_FILES_DEFAULT,\n processErrors,\n isBlockNullValues,\n attributesOfNativeInput = {},\n}) => {\n const dropZoneId = `dropZone-${fieldKey}`;\n\n const handle = {\n change: async (\n e: React.ChangeEvent<HTMLInputElement> | DragEvent,\n ): Promise<void> => {\n setIsLoadContent?.(true);\n\n const file\n = 'dataTransfer' in e\n ? e.dataTransfer?.files?.[0]\n : (e.target as HTMLInputElement).files?.[0];\n\n if (!file) {\n setIsLoadContent?.(false);\n return;\n }\n\n const validatedFile = filterFiles ? await filterFiles(file) : file;\n\n if (processErrors && !validatedFile) {\n await processErrors(file);\n }\n\n if (!isBlockNullValues || validatedFile) {\n const result = await doLoad(validatedFile).catch(() => null);\n onChange(result);\n }\n\n setIsLoadContent?.(false);\n },\n\n dragover: (e: DragEvent): boolean => {\n e.stopPropagation();\n e.preventDefault();\n return false;\n },\n\n dragenter: (e: DragEvent): boolean => {\n e.stopPropagation();\n e.preventDefault();\n setDragenter?.(true);\n return false;\n },\n\n dragleave: (e: DragEvent): boolean => {\n e.stopPropagation();\n e.preventDefault();\n setDragenter?.(false);\n return false;\n },\n\n drop: (e: DragEvent): boolean => {\n e.stopPropagation();\n e.preventDefault();\n setDragenter?.(false);\n void handle.change(e);\n return false;\n },\n };\n\n useEffect(() => {\n const dropbox = document.getElementById(dropZoneId);\n if (!dropbox) return;\n\n dropbox.addEventListener('dragenter', handle.dragenter, false);\n dropbox.addEventListener('dragover', handle.dragover, false);\n dropbox.addEventListener('dragleave', handle.dragleave, false);\n dropbox.addEventListener('drop', handle.drop, false);\n dropbox.addEventListener('dragend', handle.dragleave, false);\n\n return () => {\n dropbox.removeEventListener('dragenter', handle.dragenter, false);\n dropbox.removeEventListener('dragover', handle.dragover, false);\n dropbox.removeEventListener('dragleave', handle.dragleave, false);\n dropbox.removeEventListener('drop', handle.drop, false);\n dropbox.removeEventListener('dragend', handle.dragleave, false);\n };\n }, [fieldKey, doLoad]);\n\n return (\n <>\n {icon && <div className={cn(`${RC}__icon-block`)}>{icon}</div>}\n <label\n id={dropZoneId}\n className={cn(`${RC}__input-label`, {\n [`${RC}__input-label_no-icon`]: !icon,\n })}\n htmlFor={fieldKey}\n >\n {placeholder}\n <input\n id={fieldKey}\n className={cn(`${RC}__input`)}\n type=\"file\"\n onChange={handle.change as React.ChangeEventHandler<HTMLInputElement>}\n {...attributesOfNativeInput}\n />\n </label>\n </>\n );\n};\n\nexport default LoadZone;\n"],"mappings":";;;;;AAMA,IAAM,wBAAwB
|
|
1
|
+
{"version":3,"file":"LoadZone.js","names":[],"sources":["../../../../../../src/Atomic/FormElements/FileLoader/partial/LoadZone.tsx"],"sourcesContent":["import type { LoadZoneProps } from './LoadZone.interface';\nimport cn from 'classnames';\n\nimport React, { useEffect } from 'react';\nimport '../FileLoader.scss';\n\nconst DEFAULT_MAX_FILE_SIZE = 1024 * 1024; // 1MB\n\nfunction FILTER_FILES_DEFAULT(file: File): File | null {\n return file.size <= DEFAULT_MAX_FILE_SIZE ? file : null\n}\n\nconst LoadZone: React.FC<LoadZoneProps> = ({\n RC,\n fieldKey,\n onChange,\n doLoad,\n setDragenter,\n setIsLoadContent,\n icon,\n placeholder = '',\n filterFiles = FILTER_FILES_DEFAULT,\n processErrors,\n isBlockNullValues,\n attributesOfNativeInput = {},\n}) => {\n const dropZoneId = `dropZone-${fieldKey}`;\n\n const handle = {\n change: async (\n e: React.ChangeEvent<HTMLInputElement> | DragEvent,\n ): Promise<void> => {\n setIsLoadContent?.(true);\n\n const file\n = 'dataTransfer' in e\n ? e.dataTransfer?.files?.[0]\n : (e.target as HTMLInputElement).files?.[0];\n\n if (!file) {\n setIsLoadContent?.(false);\n return;\n }\n\n const validatedFile = filterFiles ? await filterFiles(file) : file;\n\n if (processErrors && !validatedFile) {\n await processErrors(file);\n }\n\n if (!isBlockNullValues || validatedFile) {\n const result = await doLoad(validatedFile).catch(() => null);\n onChange(result);\n }\n\n setIsLoadContent?.(false);\n },\n\n dragover: (e: DragEvent): boolean => {\n e.stopPropagation();\n e.preventDefault();\n return false;\n },\n\n dragenter: (e: DragEvent): boolean => {\n e.stopPropagation();\n e.preventDefault();\n setDragenter?.(true);\n return false;\n },\n\n dragleave: (e: DragEvent): boolean => {\n e.stopPropagation();\n e.preventDefault();\n setDragenter?.(false);\n return false;\n },\n\n drop: (e: DragEvent): boolean => {\n e.stopPropagation();\n e.preventDefault();\n setDragenter?.(false);\n void handle.change(e);\n return false;\n },\n };\n\n useEffect(() => {\n const dropbox = document.getElementById(dropZoneId);\n if (!dropbox) return;\n\n dropbox.addEventListener('dragenter', handle.dragenter, false);\n dropbox.addEventListener('dragover', handle.dragover, false);\n dropbox.addEventListener('dragleave', handle.dragleave, false);\n dropbox.addEventListener('drop', handle.drop, false);\n dropbox.addEventListener('dragend', handle.dragleave, false);\n\n return () => {\n dropbox.removeEventListener('dragenter', handle.dragenter, false);\n dropbox.removeEventListener('dragover', handle.dragover, false);\n dropbox.removeEventListener('dragleave', handle.dragleave, false);\n dropbox.removeEventListener('drop', handle.drop, false);\n dropbox.removeEventListener('dragend', handle.dragleave, false);\n };\n }, [fieldKey, doLoad]);\n\n return (\n <>\n {icon && <div className={cn(`${RC}__icon-block`)}>{icon}</div>}\n <label\n id={dropZoneId}\n className={cn(`${RC}__input-label`, {\n [`${RC}__input-label_no-icon`]: !icon,\n })}\n htmlFor={fieldKey}\n >\n {placeholder}\n <input\n id={fieldKey}\n className={cn(`${RC}__input`)}\n type=\"file\"\n onChange={handle.change as React.ChangeEventHandler<HTMLInputElement>}\n {...attributesOfNativeInput}\n />\n </label>\n </>\n );\n};\n\nexport default LoadZone;\n"],"mappings":";;;;;AAMA,IAAM,wBAAwB;AAE9B,SAAS,qBAAqB,MAAyB;CACrD,OAAO,KAAK,QAAQ,wBAAwB,OAAO;AACrD;AAEA,IAAM,YAAqC,EACzC,IACA,UACA,UACA,QACA,cACA,kBACA,MACA,cAAc,IACd,cAAc,sBACd,eACA,mBACA,0BAA0B,CAAC,QACvB;CACJ,MAAM,aAAa,YAAY;CAE/B,MAAM,SAAS;EACb,QAAQ,OACN,MACkB;GAClB,mBAAmB,IAAI;GAEvB,MAAM,OACF,kBAAkB,IAChB,EAAE,cAAc,QAAQ,KACvB,EAAE,OAA4B,QAAQ;GAE7C,IAAI,CAAC,MAAM;IACT,mBAAmB,KAAK;IACxB;GACF;GAEA,MAAM,gBAAgB,cAAc,MAAM,YAAY,IAAI,IAAI;GAE9D,IAAI,iBAAiB,CAAC,eACpB,MAAM,cAAc,IAAI;GAG1B,IAAI,CAAC,qBAAqB,eAExB,SAAS,MADY,OAAO,aAAa,CAAC,CAAC,YAAY,IAAI,CAC5C;GAGjB,mBAAmB,KAAK;EAC1B;EAEA,WAAW,MAA0B;GACnC,EAAE,gBAAgB;GAClB,EAAE,eAAe;GACjB,OAAO;EACT;EAEA,YAAY,MAA0B;GACpC,EAAE,gBAAgB;GAClB,EAAE,eAAe;GACjB,eAAe,IAAI;GACnB,OAAO;EACT;EAEA,YAAY,MAA0B;GACpC,EAAE,gBAAgB;GAClB,EAAE,eAAe;GACjB,eAAe,KAAK;GACpB,OAAO;EACT;EAEA,OAAO,MAA0B;GAC/B,EAAE,gBAAgB;GAClB,EAAE,eAAe;GACjB,eAAe,KAAK;GACpB,OAAY,OAAO,CAAC;GACpB,OAAO;EACT;CACF;CAEA,gBAAgB;EACd,MAAM,UAAU,SAAS,eAAe,UAAU;EAClD,IAAI,CAAC,SAAS;EAEd,QAAQ,iBAAiB,aAAa,OAAO,WAAW,KAAK;EAC7D,QAAQ,iBAAiB,YAAY,OAAO,UAAU,KAAK;EAC3D,QAAQ,iBAAiB,aAAa,OAAO,WAAW,KAAK;EAC7D,QAAQ,iBAAiB,QAAQ,OAAO,MAAM,KAAK;EACnD,QAAQ,iBAAiB,WAAW,OAAO,WAAW,KAAK;EAE3D,aAAa;GACX,QAAQ,oBAAoB,aAAa,OAAO,WAAW,KAAK;GAChE,QAAQ,oBAAoB,YAAY,OAAO,UAAU,KAAK;GAC9D,QAAQ,oBAAoB,aAAa,OAAO,WAAW,KAAK;GAChE,QAAQ,oBAAoB,QAAQ,OAAO,MAAM,KAAK;GACtD,QAAQ,oBAAoB,WAAW,OAAO,WAAW,KAAK;EAChE;CACF,GAAG,CAAC,UAAU,MAAM,CAAC;CAErB,OACE,qBAAA,UAAA,EAAA,UAAA,CACG,QAAQ,oBAAC,OAAD;EAAK,WAAW,GAAG,GAAG,GAAG,aAAa;EAAI,UAAA;CAAU,CAAA,GAC7D,qBAAC,SAAD;EACE,IAAI;EACJ,WAAW,GAAG,GAAG,GAAG,gBAAgB,GACjC,GAAG,GAAG,yBAAyB,CAAC,KACnC,CAAC;EACD,SAAS;EALX,UAAA,CAOG,aACD,oBAAC,SAAD;GACE,IAAI;GACJ,WAAW,GAAG,GAAG,GAAG,QAAQ;GAC5B,MAAK;GACL,UAAU,OAAO;GACjB,GAAI;EACL,CAAA,CACI;CACP,CAAA,CAAA,EAAA,CAAA;AAEN"}
|
|
@@ -10,24 +10,26 @@ var LoadedContent = ({ RC, value, onDelete, icon, isIconAfter, deleteIcon, isUse
|
|
|
10
10
|
e.stopPropagation();
|
|
11
11
|
e.preventDefault();
|
|
12
12
|
const target = e.target;
|
|
13
|
+
const anchor = target.tagName === "SPAN" || target.tagName === "svg" ? target.parentNode : target;
|
|
13
14
|
downloadFile({
|
|
14
|
-
url:
|
|
15
|
+
url: anchor.href,
|
|
15
16
|
name: value.name
|
|
16
17
|
});
|
|
17
18
|
} };
|
|
19
|
+
const additionalProps = useMemo(() => {
|
|
20
|
+
const props = {};
|
|
21
|
+
if (isUseLinkTitle) props.title = isLinkTypeDownload ? `Download ${value.name}` : value.path;
|
|
22
|
+
if (isLinkTypeDownload) props.onClick = handle.download;
|
|
23
|
+
else props.target = "_blank";
|
|
24
|
+
return props;
|
|
25
|
+
}, [
|
|
26
|
+
isUseLinkTitle,
|
|
27
|
+
isLinkTypeDownload,
|
|
28
|
+
value.name,
|
|
29
|
+
value.path
|
|
30
|
+
]);
|
|
18
31
|
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("a", {
|
|
19
|
-
...
|
|
20
|
-
const props = {};
|
|
21
|
-
if (isUseLinkTitle) props.title = isLinkTypeDownload ? `Download ${value.name}` : value.path;
|
|
22
|
-
if (isLinkTypeDownload) props.onClick = handle.download;
|
|
23
|
-
else props.target = "_blank";
|
|
24
|
-
return props;
|
|
25
|
-
}, [
|
|
26
|
-
isUseLinkTitle,
|
|
27
|
-
isLinkTypeDownload,
|
|
28
|
-
value.name,
|
|
29
|
-
value.path
|
|
30
|
-
]),
|
|
32
|
+
...additionalProps,
|
|
31
33
|
href: value.path,
|
|
32
34
|
rel: "noreferrer",
|
|
33
35
|
className: cn(`${RC}__value-link`, { [`${RC}__value-link_icon-after`]: isIconAfter }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoadedContent.js","names":[],"sources":["../../../../../../src/Atomic/FormElements/FileLoader/partial/LoadedContent.tsx"],"sourcesContent":["import type { LoadedContentProps } from './LoadedContent.interface';\nimport cn from 'classnames';\n\nimport React, { useMemo } from 'react';\n\nimport { downloadFile } from '../../../../Functions/utils';\nimport '../FileLoader.scss';\n\nconst LoadedContent: React.FC<LoadedContentProps> = ({\n RC,\n value,\n onDelete,\n icon,\n isIconAfter,\n deleteIcon,\n isUseLinkTitle,\n isLinkTypeDownload,\n}) => {\n const handle = {\n download: async (e: React.MouseEvent<HTMLElement>) => {\n e.stopPropagation();\n e.preventDefault();\n const target = e.target as HTMLElement;\n const anchor = target.tagName === 'SPAN' || target.tagName === 'svg'\n ? (target.parentNode as HTMLAnchorElement)\n : (target as HTMLAnchorElement);\n downloadFile({ url: anchor.href, name: value.name });\n },\n };\n\n const additionalProps = useMemo(() => {\n const props: React.AnchorHTMLAttributes<HTMLAnchorElement> = {};\n\n if (isUseLinkTitle) {\n props.title = isLinkTypeDownload\n ? `Download ${value.name}`\n : value.path;\n }\n\n if (isLinkTypeDownload) {\n props.onClick = handle.download;\n }\n else {\n props.target = '_blank';\n }\n\n return props;\n }, [isUseLinkTitle, isLinkTypeDownload, value.name, value.path]);\n\n return (\n <>\n <a\n key={`LoadedContent-isNotUseLinkTitle-${isUseLinkTitle}-isLinkTypeDownload-${isLinkTypeDownload}`}\n {...additionalProps}\n href={value.path}\n rel=\"noreferrer\"\n className={cn(`${RC}__value-link`, {\n [`${RC}__value-link_icon-after`]: isIconAfter,\n })}\n >\n {!isIconAfter && icon}\n <span className={cn(`${RC}__value-name`)}>{value.name}</span>\n {isIconAfter && icon}\n </a>\n <span data-testid=\"loaded-content__delete-value-button\" className={cn(`${RC}__delete-value-button`)} onClick={onDelete}>\n {deleteIcon || 'X'}\n </span>\n </>\n );\n};\n\nexport default LoadedContent;\n"],"mappings":";;;;;;AAQA,IAAM,iBAA+C,EACnD,IACA,OACA,UACA,MACA,aACA,YACA,gBACA,yBACI;CACJ,MAAM,SAAS,EACb,UAAU,OAAO,MAAqC;EACpD,EAAE,gBAAgB;EAClB,EAAE,eAAe;EACjB,MAAM,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"LoadedContent.js","names":[],"sources":["../../../../../../src/Atomic/FormElements/FileLoader/partial/LoadedContent.tsx"],"sourcesContent":["import type { LoadedContentProps } from './LoadedContent.interface';\nimport cn from 'classnames';\n\nimport React, { useMemo } from 'react';\n\nimport { downloadFile } from '../../../../Functions/utils';\nimport '../FileLoader.scss';\n\nconst LoadedContent: React.FC<LoadedContentProps> = ({\n RC,\n value,\n onDelete,\n icon,\n isIconAfter,\n deleteIcon,\n isUseLinkTitle,\n isLinkTypeDownload,\n}) => {\n const handle = {\n download: async (e: React.MouseEvent<HTMLElement>) => {\n e.stopPropagation();\n e.preventDefault();\n const target = e.target as HTMLElement;\n const anchor = target.tagName === 'SPAN' || target.tagName === 'svg'\n ? (target.parentNode as HTMLAnchorElement)\n : (target as HTMLAnchorElement);\n downloadFile({ url: anchor.href, name: value.name });\n },\n };\n\n const additionalProps = useMemo(() => {\n const props: React.AnchorHTMLAttributes<HTMLAnchorElement> = {};\n\n if (isUseLinkTitle) {\n props.title = isLinkTypeDownload\n ? `Download ${value.name}`\n : value.path;\n }\n\n if (isLinkTypeDownload) {\n props.onClick = handle.download;\n }\n else {\n props.target = '_blank';\n }\n\n return props;\n }, [isUseLinkTitle, isLinkTypeDownload, value.name, value.path]);\n\n return (\n <>\n <a\n key={`LoadedContent-isNotUseLinkTitle-${isUseLinkTitle}-isLinkTypeDownload-${isLinkTypeDownload}`}\n {...additionalProps}\n href={value.path}\n rel=\"noreferrer\"\n className={cn(`${RC}__value-link`, {\n [`${RC}__value-link_icon-after`]: isIconAfter,\n })}\n >\n {!isIconAfter && icon}\n <span className={cn(`${RC}__value-name`)}>{value.name}</span>\n {isIconAfter && icon}\n </a>\n <span data-testid=\"loaded-content__delete-value-button\" className={cn(`${RC}__delete-value-button`)} onClick={onDelete}>\n {deleteIcon || 'X'}\n </span>\n </>\n );\n};\n\nexport default LoadedContent;\n"],"mappings":";;;;;;AAQA,IAAM,iBAA+C,EACnD,IACA,OACA,UACA,MACA,aACA,YACA,gBACA,yBACI;CACJ,MAAM,SAAS,EACb,UAAU,OAAO,MAAqC;EACpD,EAAE,gBAAgB;EAClB,EAAE,eAAe;EACjB,MAAM,SAAS,EAAE;EACjB,MAAM,SAAS,OAAO,YAAY,UAAU,OAAO,YAAY,QAC1D,OAAO,aACP;EACL,aAAa;GAAE,KAAK,OAAO;GAAM,MAAM,MAAM;EAAK,CAAC;CACrD,EACF;CAEA,MAAM,kBAAkB,cAAc;EACpC,MAAM,QAAuD,CAAC;EAE9D,IAAI,gBACF,MAAM,QAAQ,qBACV,YAAY,MAAM,SAClB,MAAM;EAGZ,IAAI,oBACF,MAAM,UAAU,OAAO;OAGvB,MAAM,SAAS;EAGjB,OAAO;CACT,GAAG;EAAC;EAAgB;EAAoB,MAAM;EAAM,MAAM;CAAI,CAAC;CAE/D,OACE,qBAAA,UAAA,EAAA,UAAA,CACE,qBAAC,KAAD;EAEE,GAAI;EACJ,MAAM,MAAM;EACZ,KAAI;EACJ,WAAW,GAAG,GAAG,GAAG,eAAe,GAChC,GAAG,GAAG,2BAA2B,YACpC,CAAC;EAPH,UAAA;GASG,CAAC,eAAe;GACjB,oBAAC,QAAD;IAAM,WAAW,GAAG,GAAG,GAAG,aAAa;IAAI,UAAA,MAAM;GAAW,CAAA;GAC3D,eAAe;EACf;CAXI,GAAA,mCAAmC,eAAe,sBAAsB,oBAW5E,GACH,oBAAC,QAAD;EAAM,eAAY;EAAsC,WAAW,GAAG,GAAG,GAAG,sBAAsB;EAAG,SAAS;EAC3G,UAAA,cAAc;CACX,CAAA,CACN,EAAA,CAAA;AAEN"}
|
|
@@ -9,7 +9,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
9
9
|
//#region src/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.tsx
|
|
10
10
|
var RC = "file-loader-description";
|
|
11
11
|
var UPLOAD_TRIGGER_KEY = "uploadTrigger";
|
|
12
|
-
var MAX_FILE_SIZE =
|
|
12
|
+
var MAX_FILE_SIZE = 10485760;
|
|
13
13
|
var ACCEPT_EXTENSIONS_DEFAULT = ".jpg, .jpeg, .png, .pdf, .JPG, .JPEG, .PNG, .PDF";
|
|
14
14
|
var uploadTriggerStucture = {
|
|
15
15
|
id: UPLOAD_TRIGGER_KEY,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileLoaderDescription.js","names":[],"sources":["../../../../../src/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.tsx"],"sourcesContent":["import type {\n IAccordionItem,\n IFile,\n IFileLoaderDescriptionProps,\n} from './FileLoaderDescription.interface';\nimport cn from 'classnames';\n\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { clone, compare, getBase64, uuid } from '../../../Functions/utils';\nimport AccordionText from '../../UI/AccordionText/AccordionText';\n\nimport FileLoaderLocal from '../FileLoaderLocal/FileLoaderLocal';\n\nimport './FileLoaderDescription.scss';\n\nconst RC = 'file-loader-description';\n\nconst UPLOAD_TRIGGER_KEY = 'uploadTrigger';\nconst MAX_FILE_SIZE = 10 * 1024 * 1024;\nconst ACCEPT_EXTENSIONS_DEFAULT\n = '.jpg, .jpeg, .png, .pdf, .JPG, .JPEG, .PNG, .PDF';\n\nconst uploadTriggerStucture: IFile = {\n id: UPLOAD_TRIGGER_KEY,\n isRequired: true,\n value: '',\n base64: '',\n maxItemSizeBytes: MAX_FILE_SIZE,\n error: null,\n accept: ACCEPT_EXTENSIONS_DEFAULT,\n};\n\nfunction getStructure(data: Partial<IFile>): IFile {\n return {\n value: '',\n base64: '',\n maxItemSizeBytes: MAX_FILE_SIZE,\n error: null,\n isRequired: false,\n accept: ACCEPT_EXTENSIONS_DEFAULT,\n ...data,\n }\n}\n\nfunction accordionData(accordionTitle: string, accordionListContent: IAccordionItem[]): JSX.Element {\n return (\n <div data-testid=\"accordion\">\n <div className={`${RC}__accordion-title`}>{accordionTitle}</div>\n <div className={`${RC}__list`}>\n {accordionListContent?.map(item => (\n <div key={item?.title} className={`${RC}__list-row`}>\n <div className={`${RC}__list-bullet`}></div>\n <div>\n <div className={`${RC}__list-title`}>{item.title}</div>\n <div className={`${RC}__list-descr`}>{item.description}</div>\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction getSafelyInitFiles(initFiles?: IFile[], maxFilesCount?: number): IFile[] {\n if (!Array.isArray(initFiles)) return [];\n\n let output = clone(initFiles);\n if (typeof maxFilesCount === 'number' && output.length > maxFilesCount) {\n output = output.slice(0, maxFilesCount);\n }\n\n return output.map(getStructure);\n}\n\nfunction checkOverflow(files: IFile[], maxFilesCount?: number, additional?: { error?: string | null; outerError?: string | boolean | null }): IFile[] {\n const { error = null, outerError = null } = additional || {};\n\n return typeof maxFilesCount === 'number' && files.length < maxFilesCount\n ? [...files, { ...clone(uploadTriggerStucture), error, outerError }]\n : files;\n}\n\nconst FileLoaderDescription: React.FC<IFileLoaderDescriptionProps> = ({\n id,\n testId = 'file-loader-description',\n fieldKey,\n\n files: initFiles,\n onChange,\n\n className,\n filesDescription = 'Documents must be less than 10MB and must be in PDF, JPG, JPEG or PNG format.',\n documentName = 'Document name',\n accordionTitle = 'There is a list of documents that we accept:',\n accordionListContent = [],\n listDescription,\n\n maxFilesCount = 10,\n isWithoutAccordion,\n\n error: outerError,\n\n ...props\n}) => {\n const uniqueFileLoaderDescriptionId\n = id || testId || fieldKey || `component-${uuid?.()}`;\n\n const safelyInitFiles = useMemo(\n () => getSafelyInitFiles(initFiles, maxFilesCount),\n [initFiles, maxFilesCount],\n );\n\n const [files, setFiles] = useState<IFile[]>(() => {\n if (!safelyInitFiles.length) return [clone(uploadTriggerStucture)];\n return checkOverflow(safelyInitFiles, maxFilesCount);\n });\n\n const generateUniqueFileName = (files: IFile[], name: string): string => {\n let fileName = name;\n const [nameWithoutExtension, extension] = name.split(/(?=\\.[^.]+$)/);\n let count = 1;\n\n while (files.some(file => file.value === fileName)) {\n fileName = `${nameWithoutExtension}(${count})${extension}`;\n count += 1;\n }\n\n return fileName;\n };\n\n const handle = {\n applyFields: (newFields: IFile[]) => {\n setFiles(checkOverflow(newFields, maxFilesCount));\n onChange(newFields);\n },\n\n change: (args: {\n name?: string;\n id: string | number;\n error?: string;\n file?: File;\n }) => {\n const { name, id, error = '', file } = args;\n\n let output: IFile[] = clone(files)\n .filter((item: IFile) => item.value && item.base64)\n .map((item: IFile) => ({ ...item, error: null }));\n\n const changedField = output.find((item: IFile) => id === item.id);\n\n if (!file) {\n // удаление файла\n handle.applyFields(output.filter((item: IFile) => item.id !== changedField?.id));\n }\n else if (error) {\n // ошибка - назначаем ошибку локально\n if (changedField) {\n output = output.map((item: IFile) =>\n item.id && id?.toString().includes(item.id?.toString()) ? { ...item, error } : item,\n );\n }\n\n setFiles(\n checkOverflow(output, maxFilesCount, {\n error: !changedField ? error : null,\n }),\n );\n }\n else {\n // добавление/обновление файла\n const uniqueFileName = generateUniqueFileName(output, name ?? id?.toString());\n const uniqueId = uuid?.();\n\n getBase64(file)?.then((result) => {\n const newItem = getStructure({\n id: uniqueId!,\n value: uniqueFileName,\n base64: result,\n error: null,\n });\n output = changedField\n ? output.map((item: IFile) => (item.id === changedField.id ? newItem : item))\n : [...output, newItem];\n handle.applyFields(output);\n });\n }\n },\n };\n\n useEffect(() => {\n setFiles(\n checkOverflow(\n files.filter(item => item.id !== UPLOAD_TRIGGER_KEY),\n maxFilesCount,\n { outerError },\n ),\n );\n }, [outerError]);\n\n useEffect(() => {\n if (\n !compare(\n safelyInitFiles,\n clone(files).filter((item: IFile) => item.id !== UPLOAD_TRIGGER_KEY),\n )\n ) {\n setFiles(checkOverflow(safelyInitFiles, maxFilesCount, { outerError }));\n }\n }, [initFiles, maxFilesCount]);\n\n return (\n <div\n id={uniqueFileLoaderDescriptionId}\n data-testid={RC}\n className={cn(RC, className)}\n role=\"combobox\"\n {...props}\n >\n {!!documentName && (\n <span title={documentName} className={`${RC}__title`}>\n {documentName}\n </span>\n )}\n\n {!isWithoutAccordion && (\n <AccordionText\n className={cn(`${RC}__accordion`)}\n text={accordionData(accordionTitle, accordionListContent)}\n />\n )}\n\n {!!filesDescription && (\n <span className={`${RC}__file-descr`} title={filesDescription}>\n {filesDescription}\n </span>\n )}\n <div className={cn(`${RC}__list`, { [`${RC}__list--with-description`]: listDescription })}>\n {files.map((field, i) => (\n <FileLoaderLocal\n className={`${RC}__list-item`}\n key={`${field.id}-${i}`}\n fieldId={field.id?.toString()}\n id={`loader-${uniqueFileLoaderDescriptionId}-field-${field.id}`}\n error={field.error ?? undefined}\n outerError={field.outerError}\n label=\"Upload document\"\n accept={field.accept}\n value={field.value}\n maxItemSizeBytes={field.maxItemSizeBytes}\n onChange={value => handle.change(value)}\n isRequired={files.length <= 1}\n isNoTrashIcon={false}\n />\n ))}\n {listDescription && <div className={cn(`${RC}__list-description`)}>{listDescription}</div>}\n </div>\n </div>\n );\n};\n\nexport default FileLoaderDescription;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FileLoaderDescription.js","names":[],"sources":["../../../../../src/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.tsx"],"sourcesContent":["import type {\n IAccordionItem,\n IFile,\n IFileLoaderDescriptionProps,\n} from './FileLoaderDescription.interface';\nimport cn from 'classnames';\n\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { clone, compare, getBase64, uuid } from '../../../Functions/utils';\nimport AccordionText from '../../UI/AccordionText/AccordionText';\n\nimport FileLoaderLocal from '../FileLoaderLocal/FileLoaderLocal';\n\nimport './FileLoaderDescription.scss';\n\nconst RC = 'file-loader-description';\n\nconst UPLOAD_TRIGGER_KEY = 'uploadTrigger';\nconst MAX_FILE_SIZE = 10 * 1024 * 1024;\nconst ACCEPT_EXTENSIONS_DEFAULT\n = '.jpg, .jpeg, .png, .pdf, .JPG, .JPEG, .PNG, .PDF';\n\nconst uploadTriggerStucture: IFile = {\n id: UPLOAD_TRIGGER_KEY,\n isRequired: true,\n value: '',\n base64: '',\n maxItemSizeBytes: MAX_FILE_SIZE,\n error: null,\n accept: ACCEPT_EXTENSIONS_DEFAULT,\n};\n\nfunction getStructure(data: Partial<IFile>): IFile {\n return {\n value: '',\n base64: '',\n maxItemSizeBytes: MAX_FILE_SIZE,\n error: null,\n isRequired: false,\n accept: ACCEPT_EXTENSIONS_DEFAULT,\n ...data,\n }\n}\n\nfunction accordionData(accordionTitle: string, accordionListContent: IAccordionItem[]): JSX.Element {\n return (\n <div data-testid=\"accordion\">\n <div className={`${RC}__accordion-title`}>{accordionTitle}</div>\n <div className={`${RC}__list`}>\n {accordionListContent?.map(item => (\n <div key={item?.title} className={`${RC}__list-row`}>\n <div className={`${RC}__list-bullet`}></div>\n <div>\n <div className={`${RC}__list-title`}>{item.title}</div>\n <div className={`${RC}__list-descr`}>{item.description}</div>\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction getSafelyInitFiles(initFiles?: IFile[], maxFilesCount?: number): IFile[] {\n if (!Array.isArray(initFiles)) return [];\n\n let output = clone(initFiles);\n if (typeof maxFilesCount === 'number' && output.length > maxFilesCount) {\n output = output.slice(0, maxFilesCount);\n }\n\n return output.map(getStructure);\n}\n\nfunction checkOverflow(files: IFile[], maxFilesCount?: number, additional?: { error?: string | null; outerError?: string | boolean | null }): IFile[] {\n const { error = null, outerError = null } = additional || {};\n\n return typeof maxFilesCount === 'number' && files.length < maxFilesCount\n ? [...files, { ...clone(uploadTriggerStucture), error, outerError }]\n : files;\n}\n\nconst FileLoaderDescription: React.FC<IFileLoaderDescriptionProps> = ({\n id,\n testId = 'file-loader-description',\n fieldKey,\n\n files: initFiles,\n onChange,\n\n className,\n filesDescription = 'Documents must be less than 10MB and must be in PDF, JPG, JPEG or PNG format.',\n documentName = 'Document name',\n accordionTitle = 'There is a list of documents that we accept:',\n accordionListContent = [],\n listDescription,\n\n maxFilesCount = 10,\n isWithoutAccordion,\n\n error: outerError,\n\n ...props\n}) => {\n const uniqueFileLoaderDescriptionId\n = id || testId || fieldKey || `component-${uuid?.()}`;\n\n const safelyInitFiles = useMemo(\n () => getSafelyInitFiles(initFiles, maxFilesCount),\n [initFiles, maxFilesCount],\n );\n\n const [files, setFiles] = useState<IFile[]>(() => {\n if (!safelyInitFiles.length) return [clone(uploadTriggerStucture)];\n return checkOverflow(safelyInitFiles, maxFilesCount);\n });\n\n const generateUniqueFileName = (files: IFile[], name: string): string => {\n let fileName = name;\n const [nameWithoutExtension, extension] = name.split(/(?=\\.[^.]+$)/);\n let count = 1;\n\n while (files.some(file => file.value === fileName)) {\n fileName = `${nameWithoutExtension}(${count})${extension}`;\n count += 1;\n }\n\n return fileName;\n };\n\n const handle = {\n applyFields: (newFields: IFile[]) => {\n setFiles(checkOverflow(newFields, maxFilesCount));\n onChange(newFields);\n },\n\n change: (args: {\n name?: string;\n id: string | number;\n error?: string;\n file?: File;\n }) => {\n const { name, id, error = '', file } = args;\n\n let output: IFile[] = clone(files)\n .filter((item: IFile) => item.value && item.base64)\n .map((item: IFile) => ({ ...item, error: null }));\n\n const changedField = output.find((item: IFile) => id === item.id);\n\n if (!file) {\n // удаление файла\n handle.applyFields(output.filter((item: IFile) => item.id !== changedField?.id));\n }\n else if (error) {\n // ошибка - назначаем ошибку локально\n if (changedField) {\n output = output.map((item: IFile) =>\n item.id && id?.toString().includes(item.id?.toString()) ? { ...item, error } : item,\n );\n }\n\n setFiles(\n checkOverflow(output, maxFilesCount, {\n error: !changedField ? error : null,\n }),\n );\n }\n else {\n // добавление/обновление файла\n const uniqueFileName = generateUniqueFileName(output, name ?? id?.toString());\n const uniqueId = uuid?.();\n\n getBase64(file)?.then((result) => {\n const newItem = getStructure({\n id: uniqueId!,\n value: uniqueFileName,\n base64: result,\n error: null,\n });\n output = changedField\n ? output.map((item: IFile) => (item.id === changedField.id ? newItem : item))\n : [...output, newItem];\n handle.applyFields(output);\n });\n }\n },\n };\n\n useEffect(() => {\n setFiles(\n checkOverflow(\n files.filter(item => item.id !== UPLOAD_TRIGGER_KEY),\n maxFilesCount,\n { outerError },\n ),\n );\n }, [outerError]);\n\n useEffect(() => {\n if (\n !compare(\n safelyInitFiles,\n clone(files).filter((item: IFile) => item.id !== UPLOAD_TRIGGER_KEY),\n )\n ) {\n setFiles(checkOverflow(safelyInitFiles, maxFilesCount, { outerError }));\n }\n }, [initFiles, maxFilesCount]);\n\n return (\n <div\n id={uniqueFileLoaderDescriptionId}\n data-testid={RC}\n className={cn(RC, className)}\n role=\"combobox\"\n {...props}\n >\n {!!documentName && (\n <span title={documentName} className={`${RC}__title`}>\n {documentName}\n </span>\n )}\n\n {!isWithoutAccordion && (\n <AccordionText\n className={cn(`${RC}__accordion`)}\n text={accordionData(accordionTitle, accordionListContent)}\n />\n )}\n\n {!!filesDescription && (\n <span className={`${RC}__file-descr`} title={filesDescription}>\n {filesDescription}\n </span>\n )}\n <div className={cn(`${RC}__list`, { [`${RC}__list--with-description`]: listDescription })}>\n {files.map((field, i) => (\n <FileLoaderLocal\n className={`${RC}__list-item`}\n key={`${field.id}-${i}`}\n fieldId={field.id?.toString()}\n id={`loader-${uniqueFileLoaderDescriptionId}-field-${field.id}`}\n error={field.error ?? undefined}\n outerError={field.outerError}\n label=\"Upload document\"\n accept={field.accept}\n value={field.value}\n maxItemSizeBytes={field.maxItemSizeBytes}\n onChange={value => handle.change(value)}\n isRequired={files.length <= 1}\n isNoTrashIcon={false}\n />\n ))}\n {listDescription && <div className={cn(`${RC}__list-description`)}>{listDescription}</div>}\n </div>\n </div>\n );\n};\n\nexport default FileLoaderDescription;\n"],"mappings":"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"}
|