@hh.ru/magritte-ui-select 12.4.19 → 12.5.0
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/SelectBottomSheet.js +8 -2
- package/SelectBottomSheet.js.map +1 -1
- package/SelectDrop.js +8 -2
- package/SelectDrop.js.map +1 -1
- package/SelectEmptyHint.js +1 -1
- package/SelectError.js +1 -1
- package/SelectModal.js +8 -2
- package/SelectModal.js.map +1 -1
- package/SelectOption.js +1 -1
- package/index.css +31 -31
- package/package.json +2 -2
- package/types.d.ts +6 -3
package/SelectBottomSheet.js
CHANGED
|
@@ -24,7 +24,7 @@ import '@hh.ru/magritte-common-use-disabled';
|
|
|
24
24
|
import '@hh.ru/magritte-ui-checkable-card/CheckableCardElement';
|
|
25
25
|
import '@hh.ru/magritte-ui-checkbox-radio';
|
|
26
26
|
|
|
27
|
-
var styles = {"select-bottom-sheet":"magritte-select-bottom-sheet___1RZDJ_12-
|
|
27
|
+
var styles = {"select-bottom-sheet":"magritte-select-bottom-sheet___1RZDJ_12-5-0","selectBottomSheet":"magritte-select-bottom-sheet___1RZDJ_12-5-0","select-bottom-sheet_checkbox":"magritte-select-bottom-sheet_checkbox___hwTgo_12-5-0","selectBottomSheetCheckbox":"magritte-select-bottom-sheet_checkbox___hwTgo_12-5-0","select-bottom-sheet_radio":"magritte-select-bottom-sheet_radio___qvFFV_12-5-0","selectBottomSheetRadio":"magritte-select-bottom-sheet_radio___qvFFV_12-5-0","select-bottom-sheet_without-header":"magritte-select-bottom-sheet_without-header___KOKVh_12-5-0","selectBottomSheetWithoutHeader":"magritte-select-bottom-sheet_without-header___KOKVh_12-5-0","full-screen-placeholder":"magritte-full-screen-placeholder___zPC8k_12-5-0","fullScreenPlaceholder":"magritte-full-screen-placeholder___zPC8k_12-5-0","error-wrapper":"magritte-error-wrapper___P7jYg_12-5-0","errorWrapper":"magritte-error-wrapper___P7jYg_12-5-0"};
|
|
28
28
|
|
|
29
29
|
const SelectOptionDefault = ({ data, input, type, checked, plain, }) => {
|
|
30
30
|
if (type === 'delimiter') {
|
|
@@ -50,6 +50,7 @@ const RenderHeaderDefault = ({ onCloseBottomSheet, searchValue, setSearchValue,
|
|
|
50
50
|
}, "data-qa": "bottom-sheet-navigation-input", autoComplete: "off" })) }));
|
|
51
51
|
};
|
|
52
52
|
const SelectBottomSheet = ({ type, name, multiple, clearButton: _clearButton, applyChangesButton: _applyChangesButton, useInitialValuesOnClearAction, loading, error, renderHeader = RenderHeaderDefault, renderItem = SelectOptionDefault, renderButtonsContainer = RenderButtonsContainerDefault, renderAlertOnExitWithoutSaving, headerTitle, onClose, visible, optionList, optionsListRef, searchValue, setSearchValue, searchable, value: values, onChange, clearSelectedValues, setInitialValues, isLimitExceeded, initialValuesOnOpening, setSelectedValues, onBottomSheetOpen, onBottomSheetClose, onSearchSubmit, onApply, onClear, emptyOptionsHint, emptyOptionsSearchHint, searchInProgress, internalError, reload, innerErrorTrls, optionDataQa, ...props }) => {
|
|
53
|
+
const valuesArr = Array.isArray(values) ? values : [values];
|
|
53
54
|
const [alertVisible, setAlertVisible] = useState(false);
|
|
54
55
|
const showAlertOnExitWithoutSaving = Boolean(renderAlertOnExitWithoutSaving);
|
|
55
56
|
const showErrorPlaceholder = Boolean(error);
|
|
@@ -96,7 +97,12 @@ const SelectBottomSheet = ({ type, name, multiple, clearButton: _clearButton, ap
|
|
|
96
97
|
onClick: () => {
|
|
97
98
|
setSelectedValues();
|
|
98
99
|
onClose();
|
|
99
|
-
onApply?.({
|
|
100
|
+
onApply?.({
|
|
101
|
+
isMobile: true,
|
|
102
|
+
searchValue,
|
|
103
|
+
optionsCount: optionList.length,
|
|
104
|
+
selectedOptionsCount: valuesArr.length,
|
|
105
|
+
});
|
|
100
106
|
},
|
|
101
107
|
});
|
|
102
108
|
const handleChange = useCallback((...args) => {
|
package/SelectBottomSheet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectBottomSheet.js","sources":["../src/SelectBottomSheet.tsx"],"sourcesContent":["import { ComponentProps, ReactElement, ReactNode, cloneElement, useCallback, useRef, useState } from 'react';\nimport classnames from 'classnames';\n\nimport { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';\nimport { keyboardKeys, keyboardMatch } from '@hh.ru/magritte-common-keyboard';\nimport { ActionBar } from '@hh.ru/magritte-ui-action-bar';\nimport { BottomSheet, BottomSheetFooter } from '@hh.ru/magritte-ui-bottom-sheet';\nimport { Button } from '@hh.ru/magritte-ui-button';\nimport { ButtonElement } from '@hh.ru/magritte-ui-button-stack';\nimport { Cell, CellText } from '@hh.ru/magritte-ui-cell';\nimport {\n ArrowPathClockwiseOutlinedSize24,\n CrossOutlinedSize24,\n CheckOutlinedSize24,\n} from '@hh.ru/magritte-ui-icon/icon';\nimport { SearchInput } from '@hh.ru/magritte-ui-input';\nimport { Loader } from '@hh.ru/magritte-ui-loader';\nimport { NavigationBar } from '@hh.ru/magritte-ui-navigation-bar';\nimport { SelectError } from '@hh.ru/magritte-ui-select/SelectError';\nimport { SelectOption } from '@hh.ru/magritte-ui-select/SelectOption';\nimport { getChecked } from '@hh.ru/magritte-ui-select/getChecked';\nimport { isArraysEquals } from '@hh.ru/magritte-ui-select/isArraysEquals';\nimport {\n OnChangeAction,\n SelectBottomSheetProps,\n RenderOptionTypeProps,\n RenderHeaderProps,\n RenderButtonsContainerProps,\n} from '@hh.ru/magritte-ui-select/types';\n\nimport styles from './select-bottom-sheet.less';\n\nconst SelectOptionDefault = <DataType extends StaticDataFetcherItem>({\n data,\n input,\n type,\n checked,\n plain,\n}: RenderOptionTypeProps<DataType>): ReactElement => {\n if (type === 'delimiter') {\n return (\n <CellText maxLines={1} style=\"secondary\">\n {data.text}\n </CellText>\n );\n }\n if (type === 'label') {\n return (\n <Cell Element=\"div\" right={checked && plain ? <CheckOutlinedSize24 /> : undefined} vertPadding>\n <CellText maxLines={1}>{data.text}</CellText>\n </Cell>\n );\n }\n return (\n <Cell Element=\"div\" align=\"center\" right={input}>\n <CellText maxLines={1}>{data.text}</CellText>\n </Cell>\n );\n};\n\nconst RenderButtonsContainerDefault = ({\n clearButton,\n applyChangesButton,\n loading,\n}: RenderButtonsContainerProps): ReactNode => {\n if ((!clearButton && !applyChangesButton) || loading) {\n return null;\n }\n const primaryActions = [clearButton, applyChangesButton].filter(Boolean);\n return <ActionBar primaryActions={primaryActions as ButtonElement[]} />;\n};\n\nconst RenderHeaderDefault = ({\n onCloseBottomSheet,\n searchValue,\n setSearchValue,\n searchable,\n headerTitle,\n onSearchSubmit,\n optionsCount,\n onCloseBottomSheetWithUpdateValues,\n}: RenderHeaderProps): ReactNode => {\n return (\n <NavigationBar\n title={headerTitle}\n right={<CrossOutlinedSize24 onClick={onCloseBottomSheet} data-qa=\"select-bottom-sheet-navigation-close\" />}\n options={\n searchable && (\n <SearchInput\n clearable\n size=\"medium\"\n value={searchValue}\n onChange={setSearchValue}\n onKeyDown={(event) => {\n if (onSearchSubmit && keyboardMatch(event.nativeEvent, keyboardKeys.Enter)) {\n onSearchSubmit(\n event,\n onCloseBottomSheet,\n optionsCount,\n onCloseBottomSheetWithUpdateValues\n );\n }\n }}\n data-qa=\"bottom-sheet-navigation-input\"\n autoComplete=\"off\"\n />\n )\n }\n />\n );\n};\n\nexport const SelectBottomSheet = <MultipleType extends boolean, DataType extends StaticDataFetcherItem>({\n type,\n name,\n multiple,\n clearButton: _clearButton,\n applyChangesButton: _applyChangesButton,\n useInitialValuesOnClearAction,\n loading,\n error,\n renderHeader = RenderHeaderDefault,\n renderItem = SelectOptionDefault,\n renderButtonsContainer = RenderButtonsContainerDefault,\n renderAlertOnExitWithoutSaving,\n headerTitle,\n onClose,\n visible,\n optionList,\n optionsListRef,\n searchValue,\n setSearchValue,\n searchable,\n value: values,\n onChange,\n clearSelectedValues,\n setInitialValues,\n isLimitExceeded,\n initialValuesOnOpening,\n setSelectedValues,\n onBottomSheetOpen,\n onBottomSheetClose,\n onSearchSubmit,\n onApply,\n onClear,\n emptyOptionsHint,\n emptyOptionsSearchHint,\n searchInProgress,\n internalError,\n reload,\n innerErrorTrls,\n optionDataQa,\n ...props\n}: SelectBottomSheetProps<MultipleType, DataType>): ReactElement => {\n const [alertVisible, setAlertVisible] = useState(false);\n const showAlertOnExitWithoutSaving = Boolean(renderAlertOnExitWithoutSaving);\n const showErrorPlaceholder = Boolean(error);\n const cancelCloseFuncRef = useRef<VoidFunction | null>(null);\n\n const onCloseWithAlertCheck = (cancelCloseFunc: VoidFunction | null) => {\n if (showAlertOnExitWithoutSaving && multiple) {\n const haveUnsavingChanges = !isArraysEquals<string>(\n initialValuesOnOpening.current?.map((item) => item.value) ?? [],\n // eslint-disable-next-line no-nested-ternary\n Array.isArray(values) ? values.map((item) => item.value) : values ? [values.value] : []\n );\n if (haveUnsavingChanges) {\n cancelCloseFuncRef.current = cancelCloseFunc;\n setAlertVisible(true);\n } else {\n onClose();\n }\n } else {\n onClose();\n }\n };\n\n const clearButton =\n _clearButton &&\n cloneElement(_clearButton, {\n key: 'clearButton',\n size: 'medium',\n 'data-qa': 'magritte-select-clear-action-on-xs',\n onClick: () => {\n if (useInitialValuesOnClearAction) {\n setInitialValues();\n } else {\n clearSelectedValues();\n }\n onClose();\n onClear?.();\n },\n } as Partial<ComponentProps<typeof Button>>);\n\n const needAddChangesButton = multiple && _applyChangesButton;\n const applyChangesButton =\n needAddChangesButton &&\n cloneElement(_applyChangesButton, {\n key: 'applyChangesButton',\n size: 'medium',\n 'data-qa': 'magritte-select-apply-on-xs',\n onClick: () => {\n setSelectedValues();\n onClose();\n onApply?.({ isMobile: true, searchValue });\n },\n } as Partial<ComponentProps<typeof Button>>);\n\n const handleChange: OnChangeAction<DataType> = useCallback(\n (...args) => {\n if (!multiple) {\n onClose();\n }\n onChange(...args);\n },\n [multiple, onChange, onClose]\n );\n\n const emptyOptionsHintVisible =\n optionList.length === 0 &&\n !searchValue &&\n !!emptyOptionsHint &&\n !loading &&\n !showErrorPlaceholder &&\n !searchInProgress &&\n !internalError;\n\n const emptyOptionsSearchHintVisible =\n optionList.length === 0 &&\n searchValue &&\n !!emptyOptionsSearchHint &&\n !loading &&\n !showErrorPlaceholder &&\n !searchInProgress &&\n !internalError;\n\n const footer = !showErrorPlaceholder ? (\n renderButtonsContainer({\n clearButton,\n applyChangesButton,\n searchValue,\n optionsCount: optionList.length,\n loading,\n isError: Boolean(internalError && innerErrorTrls),\n emptyOptionsHintVisible: Boolean(emptyOptionsHintVisible || emptyOptionsSearchHintVisible),\n })\n ) : (\n <BottomSheetFooter>{error && error.resetButton}</BottomSheetFooter>\n );\n\n const onCloseBottomSheetWithUpdateValues = () => {\n setSelectedValues();\n onCloseWithAlertCheck(null);\n };\n\n const optionsVisible =\n !loading &&\n !emptyOptionsSearchHintVisible &&\n !emptyOptionsHintVisible &&\n !internalError &&\n !showErrorPlaceholder;\n\n const header = renderHeader({\n onCloseBottomSheet: () => onCloseWithAlertCheck(null),\n searchValue,\n setSearchValue,\n searchable,\n headerTitle,\n onSearchSubmit,\n optionsCount: optionList.length,\n onCloseBottomSheetWithUpdateValues,\n });\n const haveHeader = Boolean(header);\n\n return (\n <>\n <BottomSheet\n {...props}\n ref={optionsListRef}\n allowScrollWhileFocused\n keyboardOverlaysFooter={false}\n visible={visible}\n showDivider={'with-scroll'}\n withContentPaddings={showErrorPlaceholder}\n header={header}\n onClose={onCloseWithAlertCheck}\n footer={\n internalError && innerErrorTrls ? (\n <BottomSheetFooter>\n <Button\n mode=\"primary\"\n style=\"accent\"\n size=\"medium\"\n onClick={reload}\n stretched\n icon={<ArrowPathClockwiseOutlinedSize24 />}\n >\n {innerErrorTrls.reloadButton}\n </Button>\n </BottomSheetFooter>\n ) : (\n footer\n )\n }\n onAppear={onBottomSheetOpen}\n onAfterExit={onBottomSheetClose}\n >\n {internalError && innerErrorTrls && <SelectError innerErrorTrls={innerErrorTrls} reload={reload} />}\n {emptyOptionsSearchHintVisible && (\n <div className={styles.fullScreenPlaceholder}>{emptyOptionsSearchHint}</div>\n )}\n {emptyOptionsHintVisible && <div className={styles.fullScreenPlaceholder}>{emptyOptionsHint}</div>}\n {loading && !showErrorPlaceholder && (\n <div className={styles.fullScreenPlaceholder}>\n <Loader size={24} />\n </div>\n )}\n {showErrorPlaceholder && <div className={styles.errorWrapper}>{error && error.placeholder}</div>}\n {optionsVisible && (\n <div\n className={classnames(styles.selectBottomSheet, styles[`select-bottom-sheet_${type}`], {\n [styles.selectBottomSheetWithoutHeader]: !haveHeader,\n })}\n data-qa=\"magritte-select-option-list-on-xs\"\n >\n {optionList.map(({ disabled: _disabled, type: optionType, ...option }) => {\n const checked = Boolean(option.data && getChecked<DataType>(option.data, values ?? []));\n const disabled = !checked && (_disabled || isLimitExceeded);\n return (\n <SelectOption\n key={option.data.value}\n name={name}\n checked={checked}\n onChange={handleChange}\n render={renderItem}\n disabled={disabled}\n type={optionType || type}\n plain={type === 'label'}\n multiple={multiple}\n data-qa={optionDataQa}\n isMobile\n {...option}\n />\n );\n })}\n </div>\n )}\n </BottomSheet>\n {renderAlertOnExitWithoutSaving?.({\n alertVisible,\n onCloseAlert: () => {\n cancelCloseFuncRef.current?.();\n cancelCloseFuncRef.current = null;\n setAlertVisible(false);\n },\n onClosePickerAndAlert: () => {\n cancelCloseFuncRef.current = null;\n setAlertVisible(false);\n onClose();\n },\n })}\n </>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectBottomSheet.js","sources":["../src/SelectBottomSheet.tsx"],"sourcesContent":["import { ComponentProps, ReactElement, ReactNode, cloneElement, useCallback, useRef, useState } from 'react';\nimport classnames from 'classnames';\n\nimport { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';\nimport { keyboardKeys, keyboardMatch } from '@hh.ru/magritte-common-keyboard';\nimport { ActionBar } from '@hh.ru/magritte-ui-action-bar';\nimport { BottomSheet, BottomSheetFooter } from '@hh.ru/magritte-ui-bottom-sheet';\nimport { Button } from '@hh.ru/magritte-ui-button';\nimport { ButtonElement } from '@hh.ru/magritte-ui-button-stack';\nimport { Cell, CellText } from '@hh.ru/magritte-ui-cell';\nimport {\n ArrowPathClockwiseOutlinedSize24,\n CrossOutlinedSize24,\n CheckOutlinedSize24,\n} from '@hh.ru/magritte-ui-icon/icon';\nimport { SearchInput } from '@hh.ru/magritte-ui-input';\nimport { Loader } from '@hh.ru/magritte-ui-loader';\nimport { NavigationBar } from '@hh.ru/magritte-ui-navigation-bar';\nimport { SelectError } from '@hh.ru/magritte-ui-select/SelectError';\nimport { SelectOption } from '@hh.ru/magritte-ui-select/SelectOption';\nimport { getChecked } from '@hh.ru/magritte-ui-select/getChecked';\nimport { isArraysEquals } from '@hh.ru/magritte-ui-select/isArraysEquals';\nimport {\n OnChangeAction,\n SelectBottomSheetProps,\n RenderOptionTypeProps,\n RenderHeaderProps,\n RenderButtonsContainerProps,\n} from '@hh.ru/magritte-ui-select/types';\n\nimport styles from './select-bottom-sheet.less';\n\nconst SelectOptionDefault = <DataType extends StaticDataFetcherItem>({\n data,\n input,\n type,\n checked,\n plain,\n}: RenderOptionTypeProps<DataType>): ReactElement => {\n if (type === 'delimiter') {\n return (\n <CellText maxLines={1} style=\"secondary\">\n {data.text}\n </CellText>\n );\n }\n if (type === 'label') {\n return (\n <Cell Element=\"div\" right={checked && plain ? <CheckOutlinedSize24 /> : undefined} vertPadding>\n <CellText maxLines={1}>{data.text}</CellText>\n </Cell>\n );\n }\n return (\n <Cell Element=\"div\" align=\"center\" right={input}>\n <CellText maxLines={1}>{data.text}</CellText>\n </Cell>\n );\n};\n\nconst RenderButtonsContainerDefault = ({\n clearButton,\n applyChangesButton,\n loading,\n}: RenderButtonsContainerProps): ReactNode => {\n if ((!clearButton && !applyChangesButton) || loading) {\n return null;\n }\n const primaryActions = [clearButton, applyChangesButton].filter(Boolean);\n return <ActionBar primaryActions={primaryActions as ButtonElement[]} />;\n};\n\nconst RenderHeaderDefault = ({\n onCloseBottomSheet,\n searchValue,\n setSearchValue,\n searchable,\n headerTitle,\n onSearchSubmit,\n optionsCount,\n onCloseBottomSheetWithUpdateValues,\n}: RenderHeaderProps): ReactNode => {\n return (\n <NavigationBar\n title={headerTitle}\n right={<CrossOutlinedSize24 onClick={onCloseBottomSheet} data-qa=\"select-bottom-sheet-navigation-close\" />}\n options={\n searchable && (\n <SearchInput\n clearable\n size=\"medium\"\n value={searchValue}\n onChange={setSearchValue}\n onKeyDown={(event) => {\n if (onSearchSubmit && keyboardMatch(event.nativeEvent, keyboardKeys.Enter)) {\n onSearchSubmit(\n event,\n onCloseBottomSheet,\n optionsCount,\n onCloseBottomSheetWithUpdateValues\n );\n }\n }}\n data-qa=\"bottom-sheet-navigation-input\"\n autoComplete=\"off\"\n />\n )\n }\n />\n );\n};\n\nexport const SelectBottomSheet = <MultipleType extends boolean, DataType extends StaticDataFetcherItem>({\n type,\n name,\n multiple,\n clearButton: _clearButton,\n applyChangesButton: _applyChangesButton,\n useInitialValuesOnClearAction,\n loading,\n error,\n renderHeader = RenderHeaderDefault,\n renderItem = SelectOptionDefault,\n renderButtonsContainer = RenderButtonsContainerDefault,\n renderAlertOnExitWithoutSaving,\n headerTitle,\n onClose,\n visible,\n optionList,\n optionsListRef,\n searchValue,\n setSearchValue,\n searchable,\n value: values,\n onChange,\n clearSelectedValues,\n setInitialValues,\n isLimitExceeded,\n initialValuesOnOpening,\n setSelectedValues,\n onBottomSheetOpen,\n onBottomSheetClose,\n onSearchSubmit,\n onApply,\n onClear,\n emptyOptionsHint,\n emptyOptionsSearchHint,\n searchInProgress,\n internalError,\n reload,\n innerErrorTrls,\n optionDataQa,\n ...props\n}: SelectBottomSheetProps<MultipleType, DataType>): ReactElement => {\n const valuesArr = Array.isArray(values) ? values : [values];\n const [alertVisible, setAlertVisible] = useState(false);\n const showAlertOnExitWithoutSaving = Boolean(renderAlertOnExitWithoutSaving);\n const showErrorPlaceholder = Boolean(error);\n const cancelCloseFuncRef = useRef<VoidFunction | null>(null);\n\n const onCloseWithAlertCheck = (cancelCloseFunc: VoidFunction | null) => {\n if (showAlertOnExitWithoutSaving && multiple) {\n const haveUnsavingChanges = !isArraysEquals<string>(\n initialValuesOnOpening.current?.map((item) => item.value) ?? [],\n // eslint-disable-next-line no-nested-ternary\n Array.isArray(values) ? values.map((item) => item.value) : values ? [values.value] : []\n );\n if (haveUnsavingChanges) {\n cancelCloseFuncRef.current = cancelCloseFunc;\n setAlertVisible(true);\n } else {\n onClose();\n }\n } else {\n onClose();\n }\n };\n\n const clearButton =\n _clearButton &&\n cloneElement(_clearButton, {\n key: 'clearButton',\n size: 'medium',\n 'data-qa': 'magritte-select-clear-action-on-xs',\n onClick: () => {\n if (useInitialValuesOnClearAction) {\n setInitialValues();\n } else {\n clearSelectedValues();\n }\n onClose();\n onClear?.();\n },\n } as Partial<ComponentProps<typeof Button>>);\n\n const needAddChangesButton = multiple && _applyChangesButton;\n const applyChangesButton =\n needAddChangesButton &&\n cloneElement(_applyChangesButton, {\n key: 'applyChangesButton',\n size: 'medium',\n 'data-qa': 'magritte-select-apply-on-xs',\n onClick: () => {\n setSelectedValues();\n onClose();\n onApply?.({\n isMobile: true,\n searchValue,\n optionsCount: optionList.length,\n selectedOptionsCount: valuesArr.length,\n });\n },\n } as Partial<ComponentProps<typeof Button>>);\n\n const handleChange: OnChangeAction<DataType> = useCallback(\n (...args) => {\n if (!multiple) {\n onClose();\n }\n onChange(...args);\n },\n [multiple, onChange, onClose]\n );\n\n const emptyOptionsHintVisible =\n optionList.length === 0 &&\n !searchValue &&\n !!emptyOptionsHint &&\n !loading &&\n !showErrorPlaceholder &&\n !searchInProgress &&\n !internalError;\n\n const emptyOptionsSearchHintVisible =\n optionList.length === 0 &&\n searchValue &&\n !!emptyOptionsSearchHint &&\n !loading &&\n !showErrorPlaceholder &&\n !searchInProgress &&\n !internalError;\n\n const footer = !showErrorPlaceholder ? (\n renderButtonsContainer({\n clearButton,\n applyChangesButton,\n searchValue,\n optionsCount: optionList.length,\n loading,\n isError: Boolean(internalError && innerErrorTrls),\n emptyOptionsHintVisible: Boolean(emptyOptionsHintVisible || emptyOptionsSearchHintVisible),\n })\n ) : (\n <BottomSheetFooter>{error && error.resetButton}</BottomSheetFooter>\n );\n\n const onCloseBottomSheetWithUpdateValues = () => {\n setSelectedValues();\n onCloseWithAlertCheck(null);\n };\n\n const optionsVisible =\n !loading &&\n !emptyOptionsSearchHintVisible &&\n !emptyOptionsHintVisible &&\n !internalError &&\n !showErrorPlaceholder;\n\n const header = renderHeader({\n onCloseBottomSheet: () => onCloseWithAlertCheck(null),\n searchValue,\n setSearchValue,\n searchable,\n headerTitle,\n onSearchSubmit,\n optionsCount: optionList.length,\n onCloseBottomSheetWithUpdateValues,\n });\n const haveHeader = Boolean(header);\n\n return (\n <>\n <BottomSheet\n {...props}\n ref={optionsListRef}\n allowScrollWhileFocused\n keyboardOverlaysFooter={false}\n visible={visible}\n showDivider={'with-scroll'}\n withContentPaddings={showErrorPlaceholder}\n header={header}\n onClose={onCloseWithAlertCheck}\n footer={\n internalError && innerErrorTrls ? (\n <BottomSheetFooter>\n <Button\n mode=\"primary\"\n style=\"accent\"\n size=\"medium\"\n onClick={reload}\n stretched\n icon={<ArrowPathClockwiseOutlinedSize24 />}\n >\n {innerErrorTrls.reloadButton}\n </Button>\n </BottomSheetFooter>\n ) : (\n footer\n )\n }\n onAppear={onBottomSheetOpen}\n onAfterExit={onBottomSheetClose}\n >\n {internalError && innerErrorTrls && <SelectError innerErrorTrls={innerErrorTrls} reload={reload} />}\n {emptyOptionsSearchHintVisible && (\n <div className={styles.fullScreenPlaceholder}>{emptyOptionsSearchHint}</div>\n )}\n {emptyOptionsHintVisible && <div className={styles.fullScreenPlaceholder}>{emptyOptionsHint}</div>}\n {loading && !showErrorPlaceholder && (\n <div className={styles.fullScreenPlaceholder}>\n <Loader size={24} />\n </div>\n )}\n {showErrorPlaceholder && <div className={styles.errorWrapper}>{error && error.placeholder}</div>}\n {optionsVisible && (\n <div\n className={classnames(styles.selectBottomSheet, styles[`select-bottom-sheet_${type}`], {\n [styles.selectBottomSheetWithoutHeader]: !haveHeader,\n })}\n data-qa=\"magritte-select-option-list-on-xs\"\n >\n {optionList.map(({ disabled: _disabled, type: optionType, ...option }) => {\n const checked = Boolean(option.data && getChecked<DataType>(option.data, values ?? []));\n const disabled = !checked && (_disabled || isLimitExceeded);\n return (\n <SelectOption\n key={option.data.value}\n name={name}\n checked={checked}\n onChange={handleChange}\n render={renderItem}\n disabled={disabled}\n type={optionType || type}\n plain={type === 'label'}\n multiple={multiple}\n data-qa={optionDataQa}\n isMobile\n {...option}\n />\n );\n })}\n </div>\n )}\n </BottomSheet>\n {renderAlertOnExitWithoutSaving?.({\n alertVisible,\n onCloseAlert: () => {\n cancelCloseFuncRef.current?.();\n cancelCloseFuncRef.current = null;\n setAlertVisible(false);\n },\n onClosePickerAndAlert: () => {\n cancelCloseFuncRef.current = null;\n setAlertVisible(false);\n onClose();\n },\n })}\n </>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,MAAM,mBAAmB,GAAG,CAAyC,EACjE,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,GACyB,KAAkB;AAChD,IAAA,IAAI,IAAI,KAAK,WAAW,EAAE;AACtB,QAAA,QACIA,GAAC,CAAA,QAAQ,EAAC,EAAA,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAC,WAAW,EACnC,QAAA,EAAA,IAAI,CAAC,IAAI,EAAA,CACH,EACb;KACL;AACD,IAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AAClB,QAAA,QACIA,GAAC,CAAA,IAAI,EAAC,EAAA,OAAO,EAAC,KAAK,EAAC,KAAK,EAAE,OAAO,IAAI,KAAK,GAAGA,IAAC,mBAAmB,EAAA,EAAA,CAAG,GAAG,SAAS,EAAE,WAAW,EAC1F,IAAA,EAAA,QAAA,EAAAA,GAAA,CAAC,QAAQ,EAAC,EAAA,QAAQ,EAAE,CAAC,YAAG,IAAI,CAAC,IAAI,EAAY,CAAA,EAAA,CAC1C,EACT;KACL;AACD,IAAA,QACIA,GAAA,CAAC,IAAI,EAAA,EAAC,OAAO,EAAC,KAAK,EAAC,KAAK,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,EAAA,QAAA,EAC3CA,GAAC,CAAA,QAAQ,EAAC,EAAA,QAAQ,EAAE,CAAC,EAAG,QAAA,EAAA,IAAI,CAAC,IAAI,EAAY,CAAA,EAAA,CAC1C,EACT;AACN,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,CAAC,EACnC,WAAW,EACX,kBAAkB,EAClB,OAAO,GACmB,KAAe;IACzC,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,kBAAkB,KAAK,OAAO,EAAE;AAClD,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACzE,IAAA,OAAOA,IAAC,SAAS,EAAA,EAAC,cAAc,EAAE,cAAiC,GAAI,CAAC;AAC5E,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,EACzB,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,UAAU,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,kCAAkC,GAClB,KAAe;IAC/B,QACIA,IAAC,aAAa,EAAA,EACV,KAAK,EAAE,WAAW,EAClB,KAAK,EAAEA,IAAC,mBAAmB,EAAA,EAAC,OAAO,EAAE,kBAAkB,aAAU,sCAAsC,EAAA,CAAG,EAC1G,OAAO,EACH,UAAU,KACNA,GAAA,CAAC,WAAW,EACR,EAAA,SAAS,QACT,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,CAAC,KAAK,KAAI;AACjB,gBAAA,IAAI,cAAc,IAAI,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE;oBACxE,cAAc,CACV,KAAK,EACL,kBAAkB,EAClB,YAAY,EACZ,kCAAkC,CACrC,CAAC;iBACL;aACJ,EAAA,SAAA,EACO,+BAA+B,EACvC,YAAY,EAAC,KAAK,EACpB,CAAA,CACL,EAEP,CAAA,EACJ;AACN,CAAC,CAAC;MAEW,iBAAiB,GAAG,CAAuE,EACpG,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,WAAW,EAAE,YAAY,EACzB,kBAAkB,EAAE,mBAAmB,EACvC,6BAA6B,EAC7B,OAAO,EACP,KAAK,EACL,YAAY,GAAG,mBAAmB,EAClC,UAAU,GAAG,mBAAmB,EAChC,sBAAsB,GAAG,6BAA6B,EACtD,8BAA8B,EAC9B,WAAW,EACX,OAAO,EACP,OAAO,EACP,UAAU,EACV,cAAc,EACd,WAAW,EACX,cAAc,EACd,UAAU,EACV,KAAK,EAAE,MAAM,EACb,QAAQ,EACR,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,MAAM,EACN,cAAc,EACd,YAAY,EACZ,GAAG,KAAK,EACqC,KAAkB;AAC/D,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxD,IAAA,MAAM,4BAA4B,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;AAC7E,IAAA,MAAM,oBAAoB,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5C,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAsB,IAAI,CAAC,CAAC;AAE7D,IAAA,MAAM,qBAAqB,GAAG,CAAC,eAAoC,KAAI;AACnE,QAAA,IAAI,4BAA4B,IAAI,QAAQ,EAAE;YAC1C,MAAM,mBAAmB,GAAG,CAAC,cAAc,CACvC,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;;AAE/D,YAAA,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAC1F,CAAC;YACF,IAAI,mBAAmB,EAAE;AACrB,gBAAA,kBAAkB,CAAC,OAAO,GAAG,eAAe,CAAC;gBAC7C,eAAe,CAAC,IAAI,CAAC,CAAC;aACzB;iBAAM;AACH,gBAAA,OAAO,EAAE,CAAC;aACb;SACJ;aAAM;AACH,YAAA,OAAO,EAAE,CAAC;SACb;AACL,KAAC,CAAC;IAEF,MAAM,WAAW,GACb,YAAY;QACZ,YAAY,CAAC,YAAY,EAAE;AACvB,YAAA,GAAG,EAAE,aAAa;AAClB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,SAAS,EAAE,oCAAoC;YAC/C,OAAO,EAAE,MAAK;gBACV,IAAI,6BAA6B,EAAE;AAC/B,oBAAA,gBAAgB,EAAE,CAAC;iBACtB;qBAAM;AACH,oBAAA,mBAAmB,EAAE,CAAC;iBACzB;AACD,gBAAA,OAAO,EAAE,CAAC;gBACV,OAAO,IAAI,CAAC;aACf;AACsC,SAAA,CAAC,CAAC;AAEjD,IAAA,MAAM,oBAAoB,GAAG,QAAQ,IAAI,mBAAmB,CAAC;IAC7D,MAAM,kBAAkB,GACpB,oBAAoB;QACpB,YAAY,CAAC,mBAAmB,EAAE;AAC9B,YAAA,GAAG,EAAE,oBAAoB;AACzB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,SAAS,EAAE,6BAA6B;YACxC,OAAO,EAAE,MAAK;AACV,gBAAA,iBAAiB,EAAE,CAAC;AACpB,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,OAAO,GAAG;AACN,oBAAA,QAAQ,EAAE,IAAI;oBACd,WAAW;oBACX,YAAY,EAAE,UAAU,CAAC,MAAM;oBAC/B,oBAAoB,EAAE,SAAS,CAAC,MAAM;AACzC,iBAAA,CAAC,CAAC;aACN;AACsC,SAAA,CAAC,CAAC;IAEjD,MAAM,YAAY,GAA6B,WAAW,CACtD,CAAC,GAAG,IAAI,KAAI;QACR,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,OAAO,EAAE,CAAC;SACb;AACD,QAAA,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;KACrB,EACD,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAChC,CAAC;AAEF,IAAA,MAAM,uBAAuB,GACzB,UAAU,CAAC,MAAM,KAAK,CAAC;AACvB,QAAA,CAAC,WAAW;AACZ,QAAA,CAAC,CAAC,gBAAgB;AAClB,QAAA,CAAC,OAAO;AACR,QAAA,CAAC,oBAAoB;AACrB,QAAA,CAAC,gBAAgB;AACjB,QAAA,CAAC,aAAa,CAAC;AAEnB,IAAA,MAAM,6BAA6B,GAC/B,UAAU,CAAC,MAAM,KAAK,CAAC;QACvB,WAAW;AACX,QAAA,CAAC,CAAC,sBAAsB;AACxB,QAAA,CAAC,OAAO;AACR,QAAA,CAAC,oBAAoB;AACrB,QAAA,CAAC,gBAAgB;AACjB,QAAA,CAAC,aAAa,CAAC;IAEnB,MAAM,MAAM,GAAG,CAAC,oBAAoB,IAChC,sBAAsB,CAAC;QACnB,WAAW;QACX,kBAAkB;QAClB,WAAW;QACX,YAAY,EAAE,UAAU,CAAC,MAAM;QAC/B,OAAO;AACP,QAAA,OAAO,EAAE,OAAO,CAAC,aAAa,IAAI,cAAc,CAAC;AACjD,QAAA,uBAAuB,EAAE,OAAO,CAAC,uBAAuB,IAAI,6BAA6B,CAAC;AAC7F,KAAA,CAAC,KAEFA,GAAC,CAAA,iBAAiB,EAAE,EAAA,QAAA,EAAA,KAAK,IAAI,KAAK,CAAC,WAAW,EAAA,CAAqB,CACtE,CAAC;IAEF,MAAM,kCAAkC,GAAG,MAAK;AAC5C,QAAA,iBAAiB,EAAE,CAAC;QACpB,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAChC,KAAC,CAAC;IAEF,MAAM,cAAc,GAChB,CAAC,OAAO;AACR,QAAA,CAAC,6BAA6B;AAC9B,QAAA,CAAC,uBAAuB;AACxB,QAAA,CAAC,aAAa;AACd,QAAA,CAAC,oBAAoB,CAAC;IAE1B,MAAM,MAAM,GAAG,YAAY,CAAC;AACxB,QAAA,kBAAkB,EAAE,MAAM,qBAAqB,CAAC,IAAI,CAAC;QACrD,WAAW;QACX,cAAc;QACd,UAAU;QACV,WAAW;QACX,cAAc;QACd,YAAY,EAAE,UAAU,CAAC,MAAM;QAC/B,kCAAkC;AACrC,KAAA,CAAC,CAAC;AACH,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnC,QACIC,4BACIA,IAAC,CAAA,WAAW,OACJ,KAAK,EACT,GAAG,EAAE,cAAc,EACnB,uBAAuB,EAAA,IAAA,EACvB,sBAAsB,EAAE,KAAK,EAC7B,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,aAAa,EAC1B,mBAAmB,EAAE,oBAAoB,EACzC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EACF,aAAa,IAAI,cAAc,IAC3BD,GAAC,CAAA,iBAAiB,cACdA,GAAC,CAAA,MAAM,IACH,IAAI,EAAC,SAAS,EACd,KAAK,EAAC,QAAQ,EACd,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,EACf,SAAS,EACT,IAAA,EAAA,IAAI,EAAEA,GAAA,CAAC,gCAAgC,EAAG,EAAA,CAAA,EAAA,QAAA,EAEzC,cAAc,CAAC,YAAY,GACvB,EACO,CAAA,KAEpB,MAAM,CACT,EAEL,QAAQ,EAAE,iBAAiB,EAC3B,WAAW,EAAE,kBAAkB,EAE9B,QAAA,EAAA,CAAA,aAAa,IAAI,cAAc,IAAIA,IAAC,WAAW,EAAA,EAAC,cAAc,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAI,CAAA,EAClG,6BAA6B,KAC1BA,aAAK,SAAS,EAAE,MAAM,CAAC,qBAAqB,EAAA,QAAA,EAAG,sBAAsB,EAAO,CAAA,CAC/E,EACA,uBAAuB,IAAIA,aAAK,SAAS,EAAE,MAAM,CAAC,qBAAqB,YAAG,gBAAgB,EAAA,CAAO,EACjG,OAAO,IAAI,CAAC,oBAAoB,KAC7BA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,qBAAqB,YACxCA,GAAC,CAAA,MAAM,IAAC,IAAI,EAAE,EAAE,EAAI,CAAA,EAAA,CAClB,CACT,EACA,oBAAoB,IAAIA,GAAK,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,MAAM,CAAC,YAAY,EAAA,QAAA,EAAG,KAAK,IAAI,KAAK,CAAC,WAAW,GAAO,EAC/F,cAAc,KACXA,GAAA,CAAA,KAAA,EAAA,EACI,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAuB,oBAAA,EAAA,IAAI,CAAE,CAAA,CAAC,EAAE;AACnF,4BAAA,CAAC,MAAM,CAAC,8BAA8B,GAAG,CAAC,UAAU;yBACvD,CAAC,EAAA,SAAA,EACM,mCAAmC,EAE1C,QAAA,EAAA,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,KAAI;AACrE,4BAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,UAAU,CAAW,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;4BACxF,MAAM,QAAQ,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,eAAe,CAAC,CAAC;4BAC5D,QACIA,GAAC,CAAA,YAAY,EAET,EAAA,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,UAAU,IAAI,IAAI,EACxB,KAAK,EAAE,IAAI,KAAK,OAAO,EACvB,QAAQ,EAAE,QAAQ,EAAA,SAAA,EACT,YAAY,EACrB,QAAQ,EACJ,IAAA,EAAA,GAAA,MAAM,EAXL,EAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAYxB,EACJ;AACN,yBAAC,CAAC,EACA,CAAA,CACT,IACS,EACb,8BAA8B,GAAG;gBAC9B,YAAY;gBACZ,YAAY,EAAE,MAAK;AACf,oBAAA,kBAAkB,CAAC,OAAO,IAAI,CAAC;AAC/B,oBAAA,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;oBAClC,eAAe,CAAC,KAAK,CAAC,CAAC;iBAC1B;gBACD,qBAAqB,EAAE,MAAK;AACxB,oBAAA,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;oBAClC,eAAe,CAAC,KAAK,CAAC,CAAC;AACvB,oBAAA,OAAO,EAAE,CAAC;iBACb;aACJ,CAAC,CAAA,EAAA,CACH,EACL;AACN;;;;"}
|
package/SelectDrop.js
CHANGED
|
@@ -21,7 +21,7 @@ import '@hh.ru/magritte-common-use-disabled';
|
|
|
21
21
|
import '@hh.ru/magritte-ui-checkable-card/CheckableCardElement';
|
|
22
22
|
import '@hh.ru/magritte-ui-checkbox-radio';
|
|
23
23
|
|
|
24
|
-
var styles = {"select-drop-container-wrapper":"magritte-select-drop-container-wrapper___OHM0q_12-
|
|
24
|
+
var styles = {"select-drop-container-wrapper":"magritte-select-drop-container-wrapper___OHM0q_12-5-0","selectDropContainerWrapper":"magritte-select-drop-container-wrapper___OHM0q_12-5-0","select-drop-container":"magritte-select-drop-container___hee1p_12-5-0","selectDropContainer":"magritte-select-drop-container___hee1p_12-5-0","select-drop-container_plain":"magritte-select-drop-container_plain___766zl_12-5-0","selectDropContainerPlain":"magritte-select-drop-container_plain___766zl_12-5-0","select-drop-container_with-footer":"magritte-select-drop-container_with-footer___6wp-L_12-5-0","selectDropContainerWithFooter":"magritte-select-drop-container_with-footer___6wp-L_12-5-0","select-drop":"magritte-select-drop___jn4O-_12-5-0","selectDrop":"magritte-select-drop___jn4O-_12-5-0","select-drop-header":"magritte-select-drop-header___fMmio_12-5-0","selectDropHeader":"magritte-select-drop-header___fMmio_12-5-0","select-drop_plain":"magritte-select-drop_plain___VL8Fz_12-5-0","selectDropPlain":"magritte-select-drop_plain___VL8Fz_12-5-0","label-option":"magritte-label-option___2N7t9_12-5-0","labelOption":"magritte-label-option___2N7t9_12-5-0","loading":"magritte-loading___AMiuq_12-5-0","hint":"magritte-hint___6qaFl_12-5-0"};
|
|
25
25
|
|
|
26
26
|
const SelectOptionDefault = ({ data, input, type, plain, checked, }) => {
|
|
27
27
|
if (type === 'delimiter') {
|
|
@@ -40,6 +40,7 @@ const RenderButtonsContainerDefault = ({ applyChangesButton, loading }) => {
|
|
|
40
40
|
};
|
|
41
41
|
const SelectDrop = ({ activatorRef, type, name, multiple, applyChangesButton: _applyChangesButton, clearButton: _clearButton, useInitialValuesOnClearAction, loading, renderItem = SelectOptionDefault, renderButtonsContainer = RenderButtonsContainerDefault, visible, optionList, optionsListRef, searchValue, setSearchValue, maxWidth, value: values, onChange, onClose, clearSelectedValues, setInitialValues, isLimitExceeded, plain, searchable, widthEqualToActivator, forceDropVisibleWithEmptyOptions, renderContentBefore, setForcedState, setSelectedValues, maxHeight, onDropClose, onDropOpen, emptyOptionsHint, emptyOptionsSearchHint, onApply, onClear, searchInProgress, internalError, reload, innerErrorTrls, optionDataQa, dropWidth, ...props }) => {
|
|
42
42
|
const closedByKeyboardRef = useRef(false);
|
|
43
|
+
const valuesArr = Array.isArray(values) ? values : [values];
|
|
43
44
|
const handleChange = useCallback((newValue, needToPut) => {
|
|
44
45
|
onChange(newValue, needToPut);
|
|
45
46
|
if (!multiple) {
|
|
@@ -85,7 +86,12 @@ const SelectDrop = ({ activatorRef, type, name, multiple, applyChangesButton: _a
|
|
|
85
86
|
onClick: () => {
|
|
86
87
|
setSelectedValues();
|
|
87
88
|
onClose?.();
|
|
88
|
-
onApply?.({
|
|
89
|
+
onApply?.({
|
|
90
|
+
isMobile: false,
|
|
91
|
+
searchValue,
|
|
92
|
+
optionsCount: optionList.length,
|
|
93
|
+
selectedOptionsCount: valuesArr.length,
|
|
94
|
+
});
|
|
89
95
|
},
|
|
90
96
|
});
|
|
91
97
|
const emptyOptionsHintVisible = optionList.length === 0 &&
|
package/SelectDrop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectDrop.js","sources":["../src/SelectDrop.tsx"],"sourcesContent":["import { useCallback, ReactElement, cloneElement, ComponentProps, ReactNode, useRef, KeyboardEvent } from 'react';\nimport classnames from 'classnames';\n\nimport { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';\nimport { keyboardKeys, keyboardMatches } from '@hh.ru/magritte-common-keyboard';\nimport { ActionBar } from '@hh.ru/magritte-ui-action-bar/ActionBar';\nimport { Button } from '@hh.ru/magritte-ui-button';\nimport { Cell, CellText } from '@hh.ru/magritte-ui-cell';\nimport { Drop } from '@hh.ru/magritte-ui-drop';\nimport { CheckOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { Loader } from '@hh.ru/magritte-ui-loader';\nimport { SelectError } from '@hh.ru/magritte-ui-select/SelectError';\nimport { SelectOption } from '@hh.ru/magritte-ui-select/SelectOption';\nimport { getChecked } from '@hh.ru/magritte-ui-select/getChecked';\nimport {\n OnChangeAction,\n SelectDropProps,\n RenderOptionTypeProps,\n RenderButtonsContainerProps,\n} from '@hh.ru/magritte-ui-select/types';\n\nimport styles from './select-drop.less';\n\nconst SelectOptionDefault = <DataType extends StaticDataFetcherItem>({\n data,\n input,\n type,\n plain,\n checked,\n}: RenderOptionTypeProps<DataType>): ReactElement => {\n if (type === 'delimiter') {\n return (\n <CellText maxLines={1} style=\"secondary\">\n {data.text}\n </CellText>\n );\n }\n if (type === 'label') {\n return (\n <Cell Element=\"div\" right={checked && plain ? <CheckOutlinedSize24 /> : undefined}>\n <div className={classnames({ [styles.labelOption]: !plain })}>\n <CellText maxLines={1}>{data.text}</CellText>\n </div>\n </Cell>\n );\n }\n return (\n <Cell Element=\"div\" align=\"center\" left={input}>\n <CellText maxLines={1}>{data.text}</CellText>\n </Cell>\n );\n};\n\nconst RenderButtonsContainerDefault = ({ applyChangesButton, loading }: RenderButtonsContainerProps): ReactNode => {\n if (loading || !applyChangesButton) {\n return null;\n }\n return <ActionBar primaryActions={applyChangesButton} />;\n};\n\nexport const SelectDrop = <MultipleType extends boolean, DataType extends StaticDataFetcherItem>({\n activatorRef,\n type,\n name,\n multiple,\n applyChangesButton: _applyChangesButton,\n clearButton: _clearButton,\n useInitialValuesOnClearAction,\n loading,\n renderItem = SelectOptionDefault,\n renderButtonsContainer = RenderButtonsContainerDefault,\n visible,\n optionList,\n optionsListRef,\n searchValue,\n setSearchValue,\n maxWidth,\n value: values,\n onChange,\n onClose,\n clearSelectedValues,\n setInitialValues,\n isLimitExceeded,\n plain,\n searchable,\n widthEqualToActivator,\n forceDropVisibleWithEmptyOptions,\n renderContentBefore,\n setForcedState,\n setSelectedValues,\n maxHeight,\n onDropClose,\n onDropOpen,\n emptyOptionsHint,\n emptyOptionsSearchHint,\n onApply,\n onClear,\n searchInProgress,\n internalError,\n reload,\n innerErrorTrls,\n optionDataQa,\n dropWidth,\n ...props\n}: SelectDropProps<MultipleType, DataType>): ReactElement => {\n const closedByKeyboardRef = useRef(false);\n const handleChange: OnChangeAction<DataType> = useCallback(\n (newValue, needToPut) => {\n onChange(newValue, needToPut);\n\n if (!multiple) {\n onClose?.();\n }\n\n if (!multiple && closedByKeyboardRef.current) {\n closedByKeyboardRef.current = false;\n setForcedState('focus');\n return;\n }\n\n if (multiple && searchValue) {\n setForcedState('focusAndSelect');\n return;\n }\n closedByKeyboardRef.current = false;\n setForcedState(null);\n },\n [multiple, onChange, onClose, searchValue, setForcedState]\n );\n\n const clearSelectedValuesAndClose = () => {\n if (useInitialValuesOnClearAction) {\n setInitialValues();\n } else {\n clearSelectedValues();\n }\n onClose?.();\n };\n const clearButton =\n _clearButton &&\n cloneElement(_clearButton, {\n key: 'clearButton',\n size: 'medium',\n 'data-qa': 'magritte-select-clear-action',\n onClick: () => {\n clearSelectedValuesAndClose();\n onClear?.();\n },\n } as Partial<ComponentProps<typeof Button>>);\n const needAddChangesButton = multiple && _applyChangesButton;\n const applyChangesButton =\n needAddChangesButton &&\n cloneElement(_applyChangesButton, {\n key: 'applyChangesButton',\n size: 'medium',\n 'data-qa': 'magritte-select-apply',\n onClick: () => {\n setSelectedValues();\n onClose?.();\n onApply?.({ isMobile: false, searchValue });\n },\n } as Partial<ComponentProps<typeof Button>>);\n\n const emptyOptionsHintVisible =\n optionList.length === 0 &&\n !searchValue &&\n !!emptyOptionsHint &&\n !loading &&\n !searchInProgress &&\n !internalError;\n const emptySearchOptionsHintVisible = !!(\n optionList.length === 0 &&\n searchValue &&\n !!emptyOptionsSearchHint &&\n !loading &&\n !searchInProgress &&\n !internalError\n );\n\n const optionsVisible = !loading && !emptySearchOptionsHintVisible && !emptyOptionsHintVisible && !internalError;\n const footer = renderButtonsContainer({\n applyChangesButton,\n clearButton,\n searchValue,\n optionsCount: optionList.length,\n loading,\n isError: Boolean(internalError && innerErrorTrls),\n emptyOptionsHintVisible: emptyOptionsHintVisible || emptySearchOptionsHintVisible,\n });\n const haveFooter = Boolean(footer);\n\n return (\n <Drop\n {...props}\n ref={optionsListRef}\n autoFocusWhenOpened={false}\n maxWidth={maxWidth}\n width={dropWidth}\n visible={\n (optionList.length > 0 ||\n forceDropVisibleWithEmptyOptions ||\n emptyOptionsHintVisible ||\n emptySearchOptionsHintVisible ||\n internalError) &&\n visible\n }\n placement={['bottom-left', 'top-left', 'bottom-right', 'top-right']}\n activatorRef={activatorRef}\n role={searchable ? 'status' : 'listbox'}\n padding={plain ? 24 : 12}\n keyboardNavigationMode=\"list\"\n onClose={() => {\n setForcedState('focus');\n onClose?.();\n }}\n closeByClickOutside={false}\n onKeyDownCapture={(event: KeyboardEvent) => {\n if (keyboardMatches(event.nativeEvent, [keyboardKeys.Enter, keyboardKeys.Space])) {\n closedByKeyboardRef.current = true;\n }\n }}\n widthEqualToActivator={widthEqualToActivator || loading}\n forcePlacement\n footer={footer}\n onAfterExit={onDropClose}\n onAppear={onDropOpen}\n returnFocusOnClose={false}\n >\n <div className={styles.selectDropContainerWrapper} style={{ maxHeight: `${maxHeight}px` }}>\n <div\n className={classnames(\n styles.selectDropContainer,\n { [styles.selectDropContainerPlain]: plain },\n { [styles.selectDropContainerWithFooter]: haveFooter }\n )}\n >\n {internalError && innerErrorTrls && <SelectError innerErrorTrls={innerErrorTrls} reload={reload} />}\n {emptyOptionsHintVisible && <div className={styles.hint}>{emptyOptionsHint}</div>}\n {emptySearchOptionsHintVisible && <div className={styles.hint}>{emptyOptionsSearchHint}</div>}\n {loading && (\n <div className={styles.loading}>\n <Loader size={24} />\n </div>\n )}\n {optionsVisible && (\n <>\n {renderContentBefore && (\n <div data-qa=\"magritte-select-header\" className={styles.selectDropHeader}>\n {renderContentBefore({\n clearSelectedValuesAndClose,\n searchValue,\n setSearchValue,\n optionsCount: optionList.length,\n })}\n </div>\n )}\n <div\n className={classnames(styles.selectDrop, { [styles.selectDropPlain]: plain })}\n data-qa=\"magritte-select-option-list\"\n >\n {optionList.map((option) => {\n const checked = Boolean(option.data && getChecked(option.data, values ?? []));\n const disabled = !checked && (option.disabled || isLimitExceeded);\n return (\n <SelectOption\n key={option.data.value}\n name={name}\n checked={checked}\n onChange={handleChange}\n render={renderItem}\n disabled={disabled}\n type={option.type || type}\n plain={!!plain}\n multiple={multiple}\n data-qa={optionDataQa}\n data={option.data}\n />\n );\n })}\n </div>\n </>\n )}\n </div>\n </div>\n </Drop>\n );\n};\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectDrop.js","sources":["../src/SelectDrop.tsx"],"sourcesContent":["import { useCallback, ReactElement, cloneElement, ComponentProps, ReactNode, useRef, KeyboardEvent } from 'react';\nimport classnames from 'classnames';\n\nimport { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';\nimport { keyboardKeys, keyboardMatches } from '@hh.ru/magritte-common-keyboard';\nimport { ActionBar } from '@hh.ru/magritte-ui-action-bar/ActionBar';\nimport { Button } from '@hh.ru/magritte-ui-button';\nimport { Cell, CellText } from '@hh.ru/magritte-ui-cell';\nimport { Drop } from '@hh.ru/magritte-ui-drop';\nimport { CheckOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { Loader } from '@hh.ru/magritte-ui-loader';\nimport { SelectError } from '@hh.ru/magritte-ui-select/SelectError';\nimport { SelectOption } from '@hh.ru/magritte-ui-select/SelectOption';\nimport { getChecked } from '@hh.ru/magritte-ui-select/getChecked';\nimport {\n OnChangeAction,\n SelectDropProps,\n RenderOptionTypeProps,\n RenderButtonsContainerProps,\n} from '@hh.ru/magritte-ui-select/types';\n\nimport styles from './select-drop.less';\n\nconst SelectOptionDefault = <DataType extends StaticDataFetcherItem>({\n data,\n input,\n type,\n plain,\n checked,\n}: RenderOptionTypeProps<DataType>): ReactElement => {\n if (type === 'delimiter') {\n return (\n <CellText maxLines={1} style=\"secondary\">\n {data.text}\n </CellText>\n );\n }\n if (type === 'label') {\n return (\n <Cell Element=\"div\" right={checked && plain ? <CheckOutlinedSize24 /> : undefined}>\n <div className={classnames({ [styles.labelOption]: !plain })}>\n <CellText maxLines={1}>{data.text}</CellText>\n </div>\n </Cell>\n );\n }\n return (\n <Cell Element=\"div\" align=\"center\" left={input}>\n <CellText maxLines={1}>{data.text}</CellText>\n </Cell>\n );\n};\n\nconst RenderButtonsContainerDefault = ({ applyChangesButton, loading }: RenderButtonsContainerProps): ReactNode => {\n if (loading || !applyChangesButton) {\n return null;\n }\n return <ActionBar primaryActions={applyChangesButton} />;\n};\n\nexport const SelectDrop = <MultipleType extends boolean, DataType extends StaticDataFetcherItem>({\n activatorRef,\n type,\n name,\n multiple,\n applyChangesButton: _applyChangesButton,\n clearButton: _clearButton,\n useInitialValuesOnClearAction,\n loading,\n renderItem = SelectOptionDefault,\n renderButtonsContainer = RenderButtonsContainerDefault,\n visible,\n optionList,\n optionsListRef,\n searchValue,\n setSearchValue,\n maxWidth,\n value: values,\n onChange,\n onClose,\n clearSelectedValues,\n setInitialValues,\n isLimitExceeded,\n plain,\n searchable,\n widthEqualToActivator,\n forceDropVisibleWithEmptyOptions,\n renderContentBefore,\n setForcedState,\n setSelectedValues,\n maxHeight,\n onDropClose,\n onDropOpen,\n emptyOptionsHint,\n emptyOptionsSearchHint,\n onApply,\n onClear,\n searchInProgress,\n internalError,\n reload,\n innerErrorTrls,\n optionDataQa,\n dropWidth,\n ...props\n}: SelectDropProps<MultipleType, DataType>): ReactElement => {\n const closedByKeyboardRef = useRef(false);\n const valuesArr = Array.isArray(values) ? values : [values];\n const handleChange: OnChangeAction<DataType> = useCallback(\n (newValue, needToPut) => {\n onChange(newValue, needToPut);\n\n if (!multiple) {\n onClose?.();\n }\n\n if (!multiple && closedByKeyboardRef.current) {\n closedByKeyboardRef.current = false;\n setForcedState('focus');\n return;\n }\n\n if (multiple && searchValue) {\n setForcedState('focusAndSelect');\n return;\n }\n closedByKeyboardRef.current = false;\n setForcedState(null);\n },\n [multiple, onChange, onClose, searchValue, setForcedState]\n );\n\n const clearSelectedValuesAndClose = () => {\n if (useInitialValuesOnClearAction) {\n setInitialValues();\n } else {\n clearSelectedValues();\n }\n onClose?.();\n };\n const clearButton =\n _clearButton &&\n cloneElement(_clearButton, {\n key: 'clearButton',\n size: 'medium',\n 'data-qa': 'magritte-select-clear-action',\n onClick: () => {\n clearSelectedValuesAndClose();\n onClear?.();\n },\n } as Partial<ComponentProps<typeof Button>>);\n const needAddChangesButton = multiple && _applyChangesButton;\n const applyChangesButton =\n needAddChangesButton &&\n cloneElement(_applyChangesButton, {\n key: 'applyChangesButton',\n size: 'medium',\n 'data-qa': 'magritte-select-apply',\n onClick: () => {\n setSelectedValues();\n onClose?.();\n onApply?.({\n isMobile: false,\n searchValue,\n optionsCount: optionList.length,\n selectedOptionsCount: valuesArr.length,\n });\n },\n } as Partial<ComponentProps<typeof Button>>);\n\n const emptyOptionsHintVisible =\n optionList.length === 0 &&\n !searchValue &&\n !!emptyOptionsHint &&\n !loading &&\n !searchInProgress &&\n !internalError;\n const emptySearchOptionsHintVisible = !!(\n optionList.length === 0 &&\n searchValue &&\n !!emptyOptionsSearchHint &&\n !loading &&\n !searchInProgress &&\n !internalError\n );\n\n const optionsVisible = !loading && !emptySearchOptionsHintVisible && !emptyOptionsHintVisible && !internalError;\n const footer = renderButtonsContainer({\n applyChangesButton,\n clearButton,\n searchValue,\n optionsCount: optionList.length,\n loading,\n isError: Boolean(internalError && innerErrorTrls),\n emptyOptionsHintVisible: emptyOptionsHintVisible || emptySearchOptionsHintVisible,\n });\n const haveFooter = Boolean(footer);\n\n return (\n <Drop\n {...props}\n ref={optionsListRef}\n autoFocusWhenOpened={false}\n maxWidth={maxWidth}\n width={dropWidth}\n visible={\n (optionList.length > 0 ||\n forceDropVisibleWithEmptyOptions ||\n emptyOptionsHintVisible ||\n emptySearchOptionsHintVisible ||\n internalError) &&\n visible\n }\n placement={['bottom-left', 'top-left', 'bottom-right', 'top-right']}\n activatorRef={activatorRef}\n role={searchable ? 'status' : 'listbox'}\n padding={plain ? 24 : 12}\n keyboardNavigationMode=\"list\"\n onClose={() => {\n setForcedState('focus');\n onClose?.();\n }}\n closeByClickOutside={false}\n onKeyDownCapture={(event: KeyboardEvent) => {\n if (keyboardMatches(event.nativeEvent, [keyboardKeys.Enter, keyboardKeys.Space])) {\n closedByKeyboardRef.current = true;\n }\n }}\n widthEqualToActivator={widthEqualToActivator || loading}\n forcePlacement\n footer={footer}\n onAfterExit={onDropClose}\n onAppear={onDropOpen}\n returnFocusOnClose={false}\n >\n <div className={styles.selectDropContainerWrapper} style={{ maxHeight: `${maxHeight}px` }}>\n <div\n className={classnames(\n styles.selectDropContainer,\n { [styles.selectDropContainerPlain]: plain },\n { [styles.selectDropContainerWithFooter]: haveFooter }\n )}\n >\n {internalError && innerErrorTrls && <SelectError innerErrorTrls={innerErrorTrls} reload={reload} />}\n {emptyOptionsHintVisible && <div className={styles.hint}>{emptyOptionsHint}</div>}\n {emptySearchOptionsHintVisible && <div className={styles.hint}>{emptyOptionsSearchHint}</div>}\n {loading && (\n <div className={styles.loading}>\n <Loader size={24} />\n </div>\n )}\n {optionsVisible && (\n <>\n {renderContentBefore && (\n <div data-qa=\"magritte-select-header\" className={styles.selectDropHeader}>\n {renderContentBefore({\n clearSelectedValuesAndClose,\n searchValue,\n setSearchValue,\n optionsCount: optionList.length,\n })}\n </div>\n )}\n <div\n className={classnames(styles.selectDrop, { [styles.selectDropPlain]: plain })}\n data-qa=\"magritte-select-option-list\"\n >\n {optionList.map((option) => {\n const checked = Boolean(option.data && getChecked(option.data, values ?? []));\n const disabled = !checked && (option.disabled || isLimitExceeded);\n return (\n <SelectOption\n key={option.data.value}\n name={name}\n checked={checked}\n onChange={handleChange}\n render={renderItem}\n disabled={disabled}\n type={option.type || type}\n plain={!!plain}\n multiple={multiple}\n data-qa={optionDataQa}\n data={option.data}\n />\n );\n })}\n </div>\n </>\n )}\n </div>\n </div>\n </Drop>\n );\n};\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
package/SelectEmptyHint.js
CHANGED
|
@@ -6,7 +6,7 @@ import { VSpacing } from '@hh.ru/magritte-ui-spacing';
|
|
|
6
6
|
import { Title } from '@hh.ru/magritte-ui-title';
|
|
7
7
|
import { Text } from '@hh.ru/magritte-ui-typography';
|
|
8
8
|
|
|
9
|
-
var styles = {"select-empty-hint":"magritte-select-empty-hint___B39XJ_12-
|
|
9
|
+
var styles = {"select-empty-hint":"magritte-select-empty-hint___B39XJ_12-5-0","selectEmptyHint":"magritte-select-empty-hint___B39XJ_12-5-0","icon":"magritte-icon___F0GQx_12-5-0","icon-init":"magritte-icon-init___GWK-V_12-5-0","iconInit":"magritte-icon-init___GWK-V_12-5-0","icon-search":"magritte-icon-search___ZsqO-_12-5-0","iconSearch":"magritte-icon-search___ZsqO-_12-5-0"};
|
|
10
10
|
|
|
11
11
|
const SelectEmptyHint = ({ title, titleElement, description, type }) => {
|
|
12
12
|
return (jsxs("div", { className: styles.selectEmptyHint, children: [type === 'init' && (jsx("div", { className: classnames(styles.icon, styles.iconInit), children: jsx(MagnifierOutlinedSize24, {}) })), type === 'emptySearch' && (jsx("div", { className: classnames(styles.icon, styles.iconSearch), children: jsx(EmojiHalfsadOutlinedSize24, {}) })), jsx(VSpacing, { default: 32 }), jsx(Title, { Element: titleElement, size: "small", children: title }), jsx(VSpacing, { default: 8 }), Boolean(description) && (jsx(Text, { typography: "paragraph-2-regular", style: "secondary", children: description }))] }));
|
package/SelectError.js
CHANGED
|
@@ -7,7 +7,7 @@ import { VSpacing } from '@hh.ru/magritte-ui-spacing';
|
|
|
7
7
|
import { Title } from '@hh.ru/magritte-ui-title';
|
|
8
8
|
import { Text } from '@hh.ru/magritte-ui-typography';
|
|
9
9
|
|
|
10
|
-
var styles = {"error-container":"magritte-error-container___t9B5w_12-
|
|
10
|
+
var styles = {"error-container":"magritte-error-container___t9B5w_12-5-0","errorContainer":"magritte-error-container___t9B5w_12-5-0"};
|
|
11
11
|
|
|
12
12
|
const SelectError = ({ innerErrorTrls, reload, }) => {
|
|
13
13
|
const { isMobile } = useBreakpoint();
|
package/SelectModal.js
CHANGED
|
@@ -23,7 +23,7 @@ import '@hh.ru/magritte-common-use-disabled';
|
|
|
23
23
|
import '@hh.ru/magritte-ui-checkable-card/CheckableCardElement';
|
|
24
24
|
import '@hh.ru/magritte-ui-checkbox-radio';
|
|
25
25
|
|
|
26
|
-
var styles = {"select-modal-wrapper":"magritte-select-modal-wrapper___5BhtC_12-
|
|
26
|
+
var styles = {"select-modal-wrapper":"magritte-select-modal-wrapper___5BhtC_12-5-0","selectModalWrapper":"magritte-select-modal-wrapper___5BhtC_12-5-0","select-modal":"magritte-select-modal___f9wc6_12-5-0","selectModal":"magritte-select-modal___f9wc6_12-5-0","select-modal_plain":"magritte-select-modal_plain___0rP39_12-5-0","selectModalPlain":"magritte-select-modal_plain___0rP39_12-5-0","label-option":"magritte-label-option___kFAuR_12-5-0","labelOption":"magritte-label-option___kFAuR_12-5-0","layer-full-height":"magritte-layer-full-height___cJX-K_12-5-0","layerFullHeight":"magritte-layer-full-height___cJX-K_12-5-0"};
|
|
27
27
|
|
|
28
28
|
const SelectOptionDefault = ({ data, input, type, plain, checked, }) => {
|
|
29
29
|
if (type === 'delimiter') {
|
|
@@ -45,6 +45,7 @@ const RenderButtonsContainerDefault = ({ applyChangesButton, clearButton, isErro
|
|
|
45
45
|
return jsx(ActionBar, { secondaryActions: clearButton, primaryActions: applyChangesButton });
|
|
46
46
|
};
|
|
47
47
|
const SelectModal = ({ type, name, multiple, applyChangesButton: _applyChangesButton, clearButton: _clearButton, useInitialValuesOnClearAction, loading, renderItem = SelectOptionDefault, renderButtonsContainer = RenderButtonsContainerDefault, visible, optionList, optionsListRef, searchValue, setSearchValue, value: values, onChange, onClose, clearSelectedValues, setInitialValues, isLimitExceeded, plain, searchable, setForcedState, setSelectedValues, emptyOptionsHint, emptyOptionsSearchHint, onApply, onClear, searchInProgress, internalError, reload, innerErrorTrls, optionDataQa, renderAlertOnExitWithoutSaving, initialValuesOnOpening, internalLoading, ...modalProps }) => {
|
|
48
|
+
const valuesArr = Array.isArray(values) ? values : [values];
|
|
48
49
|
const [alertVisible, setAlertVisible] = useState(false);
|
|
49
50
|
const onCloseAlert = () => setAlertVisible(false);
|
|
50
51
|
const showAlertOnExitWithoutSaving = Boolean(renderAlertOnExitWithoutSaving);
|
|
@@ -105,7 +106,12 @@ const SelectModal = ({ type, name, multiple, applyChangesButton: _applyChangesBu
|
|
|
105
106
|
onClick: () => {
|
|
106
107
|
setSelectedValues();
|
|
107
108
|
onClose?.();
|
|
108
|
-
onApply?.({
|
|
109
|
+
onApply?.({
|
|
110
|
+
isMobile: false,
|
|
111
|
+
searchValue,
|
|
112
|
+
optionsCount: optionList.length,
|
|
113
|
+
selectedOptionsCount: valuesArr.length,
|
|
114
|
+
});
|
|
109
115
|
},
|
|
110
116
|
});
|
|
111
117
|
const emptyOptionsHintVisible = optionList.length === 0 &&
|
package/SelectModal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectModal.js","sources":["../src/SelectModal.tsx"],"sourcesContent":["import { useCallback, ReactElement, cloneElement, ComponentProps, ReactNode, useState } from 'react';\nimport classnames from 'classnames';\n\nimport { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';\nimport { ActionBar } from '@hh.ru/magritte-ui-action-bar';\nimport { Button } from '@hh.ru/magritte-ui-button';\nimport { Cell, CellText } from '@hh.ru/magritte-ui-cell';\nimport { CrossOutlinedSize24, CheckOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { SearchInput } from '@hh.ru/magritte-ui-input';\nimport { Loader } from '@hh.ru/magritte-ui-loader';\nimport { Modal } from '@hh.ru/magritte-ui-modal';\nimport { SelectError } from '@hh.ru/magritte-ui-select/SelectError';\nimport { SelectOption } from '@hh.ru/magritte-ui-select/SelectOption';\nimport { getChecked } from '@hh.ru/magritte-ui-select/getChecked';\nimport { isArraysEquals } from '@hh.ru/magritte-ui-select/isArraysEquals';\nimport {\n OnChangeAction,\n SelectModalProps,\n RenderOptionTypeProps,\n RenderButtonsContainerProps,\n} from '@hh.ru/magritte-ui-select/types';\n\nimport styles from './select-modal.less';\n\nconst SelectOptionDefault = <DataType extends StaticDataFetcherItem>({\n data,\n input,\n type,\n plain,\n checked,\n}: RenderOptionTypeProps<DataType>): ReactElement => {\n if (type === 'delimiter') {\n return (\n <CellText maxLines={1} style=\"secondary\">\n {data.text}\n </CellText>\n );\n }\n if (type === 'label') {\n return (\n <Cell\n Element=\"div\"\n right={checked && plain ? <CheckOutlinedSize24 /> : undefined}\n vertPadding={plain}\n showDivider={plain}\n >\n <div className={classnames({ [styles.labelOption]: !plain })}>\n <CellText maxLines={1}>{data.text}</CellText>\n </div>\n </Cell>\n );\n }\n return (\n <Cell Element=\"div\" align=\"center\" left={input} vertPadding={plain} showDivider={plain}>\n <CellText maxLines={1}>{data.text}</CellText>\n </Cell>\n );\n};\n\nconst RenderButtonsContainerDefault = ({\n applyChangesButton,\n clearButton,\n isError,\n emptyOptionsHintVisible,\n}: RenderButtonsContainerProps): ReactNode => {\n if (isError || emptyOptionsHintVisible) {\n return null;\n }\n const primaryActions = [applyChangesButton, clearButton].filter((btn) => btn);\n if (primaryActions.length === 0) {\n return null;\n }\n return <ActionBar secondaryActions={clearButton} primaryActions={applyChangesButton} />;\n};\n\nexport const SelectModal = <MultipleType extends boolean, DataType extends StaticDataFetcherItem>({\n type,\n name,\n multiple,\n applyChangesButton: _applyChangesButton,\n clearButton: _clearButton,\n useInitialValuesOnClearAction,\n loading,\n renderItem = SelectOptionDefault,\n renderButtonsContainer = RenderButtonsContainerDefault,\n visible,\n optionList,\n optionsListRef,\n searchValue,\n setSearchValue,\n value: values,\n onChange,\n onClose,\n clearSelectedValues,\n setInitialValues,\n isLimitExceeded,\n plain,\n searchable,\n setForcedState,\n setSelectedValues,\n emptyOptionsHint,\n emptyOptionsSearchHint,\n onApply,\n onClear,\n searchInProgress,\n internalError,\n reload,\n innerErrorTrls,\n optionDataQa,\n renderAlertOnExitWithoutSaving,\n initialValuesOnOpening,\n internalLoading,\n ...modalProps\n}: SelectModalProps<MultipleType, DataType>): ReactElement => {\n const [alertVisible, setAlertVisible] = useState(false);\n const onCloseAlert = () => setAlertVisible(false);\n const showAlertOnExitWithoutSaving = Boolean(renderAlertOnExitWithoutSaving);\n\n const onCloseWithAlertCheck = () => {\n if (showAlertOnExitWithoutSaving && multiple) {\n // eslint-disable-next-line no-nested-ternary\n const currentValues = Array.isArray(values)\n ? values.map((item) => item.value)\n : values\n ? [values.value]\n : [];\n const haveUnsavingChanges = !isArraysEquals<string>(\n initialValuesOnOpening.current?.map((item) => item.value) ?? [],\n currentValues\n );\n if (haveUnsavingChanges) {\n setAlertVisible(true);\n } else {\n onClose?.();\n }\n } else {\n onClose?.();\n }\n };\n\n const handleChange: OnChangeAction<DataType> = useCallback(\n (newValue, needToPut) => {\n onChange(newValue, needToPut);\n if (!multiple) {\n onClose?.();\n }\n setForcedState(null);\n },\n [multiple, onChange, onClose, setForcedState]\n );\n\n const clearSelectedValuesAndClose = () => {\n if (useInitialValuesOnClearAction) {\n setInitialValues();\n } else {\n clearSelectedValues();\n }\n onClose?.();\n };\n const clearButton =\n _clearButton &&\n cloneElement(_clearButton, {\n key: 'clearButton',\n size: 'medium',\n 'data-qa': 'magritte-select-clear-action',\n disabled: loading,\n onClick: () => {\n clearSelectedValuesAndClose();\n onClear?.();\n },\n } as Partial<ComponentProps<typeof Button>>);\n const needAddChangesButton = multiple && _applyChangesButton;\n const applyChangesButton =\n needAddChangesButton &&\n cloneElement(_applyChangesButton, {\n key: 'applyChangesButton',\n size: 'medium',\n 'data-qa': 'magritte-select-apply',\n disabled: loading,\n onClick: () => {\n setSelectedValues();\n onClose?.();\n onApply?.({ isMobile: false, searchValue });\n },\n } as Partial<ComponentProps<typeof Button>>);\n\n const emptyOptionsHintVisible =\n optionList.length === 0 &&\n !searchValue &&\n !!emptyOptionsHint &&\n !loading &&\n !searchInProgress &&\n !internalError;\n const emptySearchOptionsHintVisible = !!(\n optionList.length === 0 &&\n searchValue &&\n !!emptyOptionsSearchHint &&\n !loading &&\n !searchInProgress &&\n !internalError\n );\n\n const optionsVisible = !loading && !emptySearchOptionsHintVisible && !emptyOptionsHintVisible && !internalError;\n\n return (\n <>\n <Modal\n {...modalProps}\n size={modalProps?.size || 'small'}\n height={searchable ? 'full-screen' : modalProps?.height}\n ref={optionsListRef}\n visible={visible}\n footer={renderButtonsContainer({\n applyChangesButton,\n clearButton,\n searchValue,\n optionsCount: optionList.length,\n loading,\n isError: Boolean(internalError && innerErrorTrls),\n emptyOptionsHintVisible: emptyOptionsHintVisible || emptySearchOptionsHintVisible,\n })}\n options={\n searchable && (\n <SearchInput\n clearable\n size=\"medium\"\n value={searchValue}\n onChange={setSearchValue}\n data-qa=\"select-modal-search-input\"\n autoComplete=\"off\"\n />\n )\n }\n onClose={() => {\n setForcedState('focus');\n onCloseWithAlertCheck?.();\n }}\n actions={[<CrossOutlinedSize24 key=\"1\" data-qa=\"select-modal-close\" onClick={onCloseWithAlertCheck} />]}\n >\n <div className={styles.selectModalWrapper}>\n {internalError && innerErrorTrls && (\n <div className={styles.layerFullHeight}>\n <SelectError innerErrorTrls={innerErrorTrls} reload={reload} />\n </div>\n )}\n {emptyOptionsHintVisible && <div className={styles.layerFullHeight}>{emptyOptionsHint}</div>}\n {emptySearchOptionsHintVisible && (\n <div className={styles.layerFullHeight}>{emptyOptionsSearchHint}</div>\n )}\n {loading && (\n <div className={styles.layerFullHeight}>\n <Loader size={24} />\n </div>\n )}\n {optionsVisible && (\n <div\n className={classnames(styles.selectModal, { [styles.selectModalPlain]: plain })}\n data-qa=\"magritte-select-option-list\"\n >\n {optionList.map((option) => {\n const checked = Boolean(option.data && getChecked(option.data, values ?? []));\n const disabled = !checked && (option.disabled || isLimitExceeded);\n return (\n <SelectOption\n key={option.data.value}\n name={name}\n checked={checked}\n onChange={handleChange}\n render={renderItem}\n disabled={disabled}\n type={option.type || type}\n plain={!!plain}\n multiple={multiple}\n data-qa={optionDataQa}\n data={option.data}\n />\n );\n })}\n </div>\n )}\n </div>\n </Modal>\n {renderAlertOnExitWithoutSaving?.({\n alertVisible,\n onCloseAlert,\n onClosePickerAndAlert: () => {\n onCloseAlert();\n onClose?.();\n },\n })}\n </>\n );\n};\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectModal.js","sources":["../src/SelectModal.tsx"],"sourcesContent":["import { useCallback, ReactElement, cloneElement, ComponentProps, ReactNode, useState } from 'react';\nimport classnames from 'classnames';\n\nimport { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';\nimport { ActionBar } from '@hh.ru/magritte-ui-action-bar';\nimport { Button } from '@hh.ru/magritte-ui-button';\nimport { Cell, CellText } from '@hh.ru/magritte-ui-cell';\nimport { CrossOutlinedSize24, CheckOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { SearchInput } from '@hh.ru/magritte-ui-input';\nimport { Loader } from '@hh.ru/magritte-ui-loader';\nimport { Modal } from '@hh.ru/magritte-ui-modal';\nimport { SelectError } from '@hh.ru/magritte-ui-select/SelectError';\nimport { SelectOption } from '@hh.ru/magritte-ui-select/SelectOption';\nimport { getChecked } from '@hh.ru/magritte-ui-select/getChecked';\nimport { isArraysEquals } from '@hh.ru/magritte-ui-select/isArraysEquals';\nimport {\n OnChangeAction,\n SelectModalProps,\n RenderOptionTypeProps,\n RenderButtonsContainerProps,\n} from '@hh.ru/magritte-ui-select/types';\n\nimport styles from './select-modal.less';\n\nconst SelectOptionDefault = <DataType extends StaticDataFetcherItem>({\n data,\n input,\n type,\n plain,\n checked,\n}: RenderOptionTypeProps<DataType>): ReactElement => {\n if (type === 'delimiter') {\n return (\n <CellText maxLines={1} style=\"secondary\">\n {data.text}\n </CellText>\n );\n }\n if (type === 'label') {\n return (\n <Cell\n Element=\"div\"\n right={checked && plain ? <CheckOutlinedSize24 /> : undefined}\n vertPadding={plain}\n showDivider={plain}\n >\n <div className={classnames({ [styles.labelOption]: !plain })}>\n <CellText maxLines={1}>{data.text}</CellText>\n </div>\n </Cell>\n );\n }\n return (\n <Cell Element=\"div\" align=\"center\" left={input} vertPadding={plain} showDivider={plain}>\n <CellText maxLines={1}>{data.text}</CellText>\n </Cell>\n );\n};\n\nconst RenderButtonsContainerDefault = ({\n applyChangesButton,\n clearButton,\n isError,\n emptyOptionsHintVisible,\n}: RenderButtonsContainerProps): ReactNode => {\n if (isError || emptyOptionsHintVisible) {\n return null;\n }\n const primaryActions = [applyChangesButton, clearButton].filter((btn) => btn);\n if (primaryActions.length === 0) {\n return null;\n }\n return <ActionBar secondaryActions={clearButton} primaryActions={applyChangesButton} />;\n};\n\nexport const SelectModal = <MultipleType extends boolean, DataType extends StaticDataFetcherItem>({\n type,\n name,\n multiple,\n applyChangesButton: _applyChangesButton,\n clearButton: _clearButton,\n useInitialValuesOnClearAction,\n loading,\n renderItem = SelectOptionDefault,\n renderButtonsContainer = RenderButtonsContainerDefault,\n visible,\n optionList,\n optionsListRef,\n searchValue,\n setSearchValue,\n value: values,\n onChange,\n onClose,\n clearSelectedValues,\n setInitialValues,\n isLimitExceeded,\n plain,\n searchable,\n setForcedState,\n setSelectedValues,\n emptyOptionsHint,\n emptyOptionsSearchHint,\n onApply,\n onClear,\n searchInProgress,\n internalError,\n reload,\n innerErrorTrls,\n optionDataQa,\n renderAlertOnExitWithoutSaving,\n initialValuesOnOpening,\n internalLoading,\n ...modalProps\n}: SelectModalProps<MultipleType, DataType>): ReactElement => {\n const valuesArr = Array.isArray(values) ? values : [values];\n const [alertVisible, setAlertVisible] = useState(false);\n const onCloseAlert = () => setAlertVisible(false);\n const showAlertOnExitWithoutSaving = Boolean(renderAlertOnExitWithoutSaving);\n\n const onCloseWithAlertCheck = () => {\n if (showAlertOnExitWithoutSaving && multiple) {\n // eslint-disable-next-line no-nested-ternary\n const currentValues = Array.isArray(values)\n ? values.map((item) => item.value)\n : values\n ? [values.value]\n : [];\n const haveUnsavingChanges = !isArraysEquals<string>(\n initialValuesOnOpening.current?.map((item) => item.value) ?? [],\n currentValues\n );\n if (haveUnsavingChanges) {\n setAlertVisible(true);\n } else {\n onClose?.();\n }\n } else {\n onClose?.();\n }\n };\n\n const handleChange: OnChangeAction<DataType> = useCallback(\n (newValue, needToPut) => {\n onChange(newValue, needToPut);\n if (!multiple) {\n onClose?.();\n }\n setForcedState(null);\n },\n [multiple, onChange, onClose, setForcedState]\n );\n\n const clearSelectedValuesAndClose = () => {\n if (useInitialValuesOnClearAction) {\n setInitialValues();\n } else {\n clearSelectedValues();\n }\n onClose?.();\n };\n const clearButton =\n _clearButton &&\n cloneElement(_clearButton, {\n key: 'clearButton',\n size: 'medium',\n 'data-qa': 'magritte-select-clear-action',\n disabled: loading,\n onClick: () => {\n clearSelectedValuesAndClose();\n onClear?.();\n },\n } as Partial<ComponentProps<typeof Button>>);\n const needAddChangesButton = multiple && _applyChangesButton;\n const applyChangesButton =\n needAddChangesButton &&\n cloneElement(_applyChangesButton, {\n key: 'applyChangesButton',\n size: 'medium',\n 'data-qa': 'magritte-select-apply',\n disabled: loading,\n onClick: () => {\n setSelectedValues();\n onClose?.();\n onApply?.({\n isMobile: false,\n searchValue,\n optionsCount: optionList.length,\n selectedOptionsCount: valuesArr.length,\n });\n },\n } as Partial<ComponentProps<typeof Button>>);\n\n const emptyOptionsHintVisible =\n optionList.length === 0 &&\n !searchValue &&\n !!emptyOptionsHint &&\n !loading &&\n !searchInProgress &&\n !internalError;\n const emptySearchOptionsHintVisible = !!(\n optionList.length === 0 &&\n searchValue &&\n !!emptyOptionsSearchHint &&\n !loading &&\n !searchInProgress &&\n !internalError\n );\n\n const optionsVisible = !loading && !emptySearchOptionsHintVisible && !emptyOptionsHintVisible && !internalError;\n\n return (\n <>\n <Modal\n {...modalProps}\n size={modalProps?.size || 'small'}\n height={searchable ? 'full-screen' : modalProps?.height}\n ref={optionsListRef}\n visible={visible}\n footer={renderButtonsContainer({\n applyChangesButton,\n clearButton,\n searchValue,\n optionsCount: optionList.length,\n loading,\n isError: Boolean(internalError && innerErrorTrls),\n emptyOptionsHintVisible: emptyOptionsHintVisible || emptySearchOptionsHintVisible,\n })}\n options={\n searchable && (\n <SearchInput\n clearable\n size=\"medium\"\n value={searchValue}\n onChange={setSearchValue}\n data-qa=\"select-modal-search-input\"\n autoComplete=\"off\"\n />\n )\n }\n onClose={() => {\n setForcedState('focus');\n onCloseWithAlertCheck?.();\n }}\n actions={[<CrossOutlinedSize24 key=\"1\" data-qa=\"select-modal-close\" onClick={onCloseWithAlertCheck} />]}\n >\n <div className={styles.selectModalWrapper}>\n {internalError && innerErrorTrls && (\n <div className={styles.layerFullHeight}>\n <SelectError innerErrorTrls={innerErrorTrls} reload={reload} />\n </div>\n )}\n {emptyOptionsHintVisible && <div className={styles.layerFullHeight}>{emptyOptionsHint}</div>}\n {emptySearchOptionsHintVisible && (\n <div className={styles.layerFullHeight}>{emptyOptionsSearchHint}</div>\n )}\n {loading && (\n <div className={styles.layerFullHeight}>\n <Loader size={24} />\n </div>\n )}\n {optionsVisible && (\n <div\n className={classnames(styles.selectModal, { [styles.selectModalPlain]: plain })}\n data-qa=\"magritte-select-option-list\"\n >\n {optionList.map((option) => {\n const checked = Boolean(option.data && getChecked(option.data, values ?? []));\n const disabled = !checked && (option.disabled || isLimitExceeded);\n return (\n <SelectOption\n key={option.data.value}\n name={name}\n checked={checked}\n onChange={handleChange}\n render={renderItem}\n disabled={disabled}\n type={option.type || type}\n plain={!!plain}\n multiple={multiple}\n data-qa={optionDataQa}\n data={option.data}\n />\n );\n })}\n </div>\n )}\n </div>\n </Modal>\n {renderAlertOnExitWithoutSaving?.({\n alertVisible,\n onCloseAlert,\n onClosePickerAndAlert: () => {\n onCloseAlert();\n onClose?.();\n },\n })}\n </>\n );\n};\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
package/SelectOption.js
CHANGED
|
@@ -8,7 +8,7 @@ import { CheckableCardElement } from '@hh.ru/magritte-ui-checkable-card/Checkabl
|
|
|
8
8
|
import { Radio, Checkbox } from '@hh.ru/magritte-ui-checkbox-radio';
|
|
9
9
|
import { Text } from '@hh.ru/magritte-ui-typography';
|
|
10
10
|
|
|
11
|
-
var styles = {"select-option-plain":"magritte-select-option-plain___dfz4a_12-
|
|
11
|
+
var styles = {"select-option-plain":"magritte-select-option-plain___dfz4a_12-5-0","selectOptionPlain":"magritte-select-option-plain___dfz4a_12-5-0","select-option-plain_active":"magritte-select-option-plain_active___AQSQS_12-5-0","selectOptionPlainActive":"magritte-select-option-plain_active___AQSQS_12-5-0","select-delimiter":"magritte-select-delimiter___WyeR6_12-5-0","selectDelimiter":"magritte-select-delimiter___WyeR6_12-5-0"};
|
|
12
12
|
|
|
13
13
|
const CheckableComponent = ({ type, value, checked, name, onChange, 'data-qa': dataQa, }) => {
|
|
14
14
|
if (type === 'label') {
|
package/index.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.magritte-error-container___t9B5w_12-
|
|
1
|
+
.magritte-error-container___t9B5w_12-5-0{
|
|
2
2
|
display:flex;
|
|
3
3
|
flex-direction:column;
|
|
4
4
|
align-items:center;
|
|
@@ -6,95 +6,95 @@
|
|
|
6
6
|
justify-content:center;
|
|
7
7
|
}
|
|
8
8
|
@media (min-width: 1020px){
|
|
9
|
-
body.magritte-old-layout .magritte-error-container___t9B5w_12-
|
|
9
|
+
body.magritte-old-layout .magritte-error-container___t9B5w_12-5-0{
|
|
10
10
|
min-height:320px;
|
|
11
11
|
height:auto;
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
@media (min-width: 1024px){
|
|
15
|
-
body:not(.magritte-old-layout) .magritte-error-container___t9B5w_12-
|
|
15
|
+
body:not(.magritte-old-layout) .magritte-error-container___t9B5w_12-5-0{
|
|
16
16
|
min-height:320px;
|
|
17
17
|
height:auto;
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
.magritte-select-option-plain___dfz4a_12-
|
|
21
|
+
.magritte-select-option-plain___dfz4a_12-5-0:hover{
|
|
22
22
|
cursor:default;
|
|
23
23
|
}
|
|
24
|
-
.magritte-select-option-plain_active___AQSQS_12-
|
|
24
|
+
.magritte-select-option-plain_active___AQSQS_12-5-0:hover{
|
|
25
25
|
cursor:pointer;
|
|
26
26
|
}
|
|
27
|
-
.magritte-select-delimiter___WyeR6_12-
|
|
27
|
+
.magritte-select-delimiter___WyeR6_12-5-0{
|
|
28
28
|
padding-left:16px;
|
|
29
29
|
padding-top:12px;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
.magritte-select-bottom-sheet___1RZDJ_12-
|
|
32
|
+
.magritte-select-bottom-sheet___1RZDJ_12-5-0{
|
|
33
33
|
display:flex;
|
|
34
34
|
flex-direction:column;
|
|
35
35
|
padding:0 16px;
|
|
36
36
|
padding-bottom:16px;
|
|
37
37
|
}
|
|
38
|
-
.magritte-select-bottom-sheet_checkbox___hwTgo_12-
|
|
39
|
-
.magritte-select-bottom-sheet_radio___qvFFV_12-
|
|
38
|
+
.magritte-select-bottom-sheet_checkbox___hwTgo_12-5-0,
|
|
39
|
+
.magritte-select-bottom-sheet_radio___qvFFV_12-5-0{
|
|
40
40
|
gap:12px;
|
|
41
41
|
}
|
|
42
|
-
.magritte-select-bottom-sheet_without-header___KOKVh_12-
|
|
42
|
+
.magritte-select-bottom-sheet_without-header___KOKVh_12-5-0{
|
|
43
43
|
padding-top:16px;
|
|
44
44
|
}
|
|
45
|
-
.magritte-full-screen-placeholder___zPC8k_12-
|
|
45
|
+
.magritte-full-screen-placeholder___zPC8k_12-5-0{
|
|
46
46
|
display:flex;
|
|
47
47
|
flex-direction:column;
|
|
48
48
|
align-items:center;
|
|
49
49
|
height:100%;
|
|
50
50
|
justify-content:center;
|
|
51
51
|
}
|
|
52
|
-
.magritte-error-wrapper___P7jYg_12-
|
|
52
|
+
.magritte-error-wrapper___P7jYg_12-5-0{
|
|
53
53
|
height:100%;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
.magritte-select-drop-container-wrapper___OHM0q_12-
|
|
56
|
+
.magritte-select-drop-container-wrapper___OHM0q_12-5-0{
|
|
57
57
|
display:flex;
|
|
58
58
|
flex-direction:column;
|
|
59
59
|
}
|
|
60
|
-
.magritte-select-drop-container___hee1p_12-
|
|
60
|
+
.magritte-select-drop-container___hee1p_12-5-0{
|
|
61
61
|
display:flex;
|
|
62
62
|
flex-direction:column;
|
|
63
63
|
padding:12px;
|
|
64
64
|
margin:calc(-1 * 12px);
|
|
65
65
|
}
|
|
66
|
-
.magritte-select-drop-container_plain___766zl_12-
|
|
66
|
+
.magritte-select-drop-container_plain___766zl_12-5-0{
|
|
67
67
|
padding:24px;
|
|
68
68
|
margin:calc(-1 * 24px);
|
|
69
69
|
}
|
|
70
|
-
.magritte-select-drop-container_with-footer___6wp-L_12-
|
|
70
|
+
.magritte-select-drop-container_with-footer___6wp-L_12-5-0{
|
|
71
71
|
margin-bottom:0;
|
|
72
72
|
padding-bottom:0;
|
|
73
73
|
}
|
|
74
|
-
.magritte-select-drop___jn4O-_12-
|
|
74
|
+
.magritte-select-drop___jn4O-_12-5-0{
|
|
75
75
|
display:flex;
|
|
76
76
|
flex-direction:column;
|
|
77
77
|
gap:8px;
|
|
78
78
|
}
|
|
79
|
-
.magritte-select-drop-header___fMmio_12-
|
|
79
|
+
.magritte-select-drop-header___fMmio_12-5-0{
|
|
80
80
|
display:flex;
|
|
81
81
|
flex-direction:column;
|
|
82
82
|
margin-bottom:8px;
|
|
83
83
|
}
|
|
84
|
-
.magritte-select-drop_plain___VL8Fz_12-
|
|
84
|
+
.magritte-select-drop_plain___VL8Fz_12-5-0{
|
|
85
85
|
gap:16px;
|
|
86
86
|
}
|
|
87
|
-
.magritte-label-option___2N7t9_12-
|
|
87
|
+
.magritte-label-option___2N7t9_12-5-0{
|
|
88
88
|
display:flex;
|
|
89
89
|
justify-content:center;
|
|
90
90
|
}
|
|
91
|
-
.magritte-loading___AMiuq_12-
|
|
91
|
+
.magritte-loading___AMiuq_12-5-0{
|
|
92
92
|
display:flex;
|
|
93
93
|
align-items:center;
|
|
94
94
|
height:150px;
|
|
95
95
|
justify-content:center;
|
|
96
96
|
}
|
|
97
|
-
.magritte-hint___6qaFl_12-
|
|
97
|
+
.magritte-hint___6qaFl_12-5-0{
|
|
98
98
|
display:flex;
|
|
99
99
|
flex-direction:column;
|
|
100
100
|
align-items:center;
|
|
@@ -102,24 +102,24 @@
|
|
|
102
102
|
justify-content:center;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
.magritte-select-modal-wrapper___5BhtC_12-
|
|
105
|
+
.magritte-select-modal-wrapper___5BhtC_12-5-0{
|
|
106
106
|
display:flex;
|
|
107
107
|
flex-direction:column;
|
|
108
108
|
flex-grow:1;
|
|
109
109
|
}
|
|
110
|
-
.magritte-select-modal___f9wc6_12-
|
|
110
|
+
.magritte-select-modal___f9wc6_12-5-0{
|
|
111
111
|
display:flex;
|
|
112
112
|
flex-direction:column;
|
|
113
113
|
gap:12px;
|
|
114
114
|
}
|
|
115
|
-
.magritte-select-modal_plain___0rP39_12-
|
|
115
|
+
.magritte-select-modal_plain___0rP39_12-5-0{
|
|
116
116
|
gap:0;
|
|
117
117
|
}
|
|
118
|
-
.magritte-label-option___kFAuR_12-
|
|
118
|
+
.magritte-label-option___kFAuR_12-5-0{
|
|
119
119
|
display:flex;
|
|
120
120
|
justify-content:center;
|
|
121
121
|
}
|
|
122
|
-
.magritte-layer-full-height___cJX-K_12-
|
|
122
|
+
.magritte-layer-full-height___cJX-K_12-5-0{
|
|
123
123
|
display:flex;
|
|
124
124
|
flex-direction:column;
|
|
125
125
|
align-items:center;
|
|
@@ -146,14 +146,14 @@
|
|
|
146
146
|
--magritte-color-background-accent-secondary-v24-4-0:#F1F4F7;
|
|
147
147
|
--magritte-color-icon-accent-v24-4-0:#7195AF;
|
|
148
148
|
}
|
|
149
|
-
.magritte-select-empty-hint___B39XJ_12-
|
|
149
|
+
.magritte-select-empty-hint___B39XJ_12-5-0{
|
|
150
150
|
display:flex;
|
|
151
151
|
flex-direction:column;
|
|
152
152
|
justify-content:center;
|
|
153
153
|
align-content:center;
|
|
154
154
|
align-items:center;
|
|
155
155
|
}
|
|
156
|
-
.magritte-icon___F0GQx_12-
|
|
156
|
+
.magritte-icon___F0GQx_12-5-0{
|
|
157
157
|
display:flex;
|
|
158
158
|
align-items:center;
|
|
159
159
|
justify-content:center;
|
|
@@ -161,11 +161,11 @@
|
|
|
161
161
|
height:48px;
|
|
162
162
|
border-radius:50%;
|
|
163
163
|
}
|
|
164
|
-
.magritte-icon-init___GWK-V_12-
|
|
164
|
+
.magritte-icon-init___GWK-V_12-5-0{
|
|
165
165
|
background-color:var(--magritte-color-background-accent-secondary-v24-4-0);
|
|
166
166
|
--magritte-ui-icon-color-override:var(--magritte-color-icon-accent-v24-4-0);
|
|
167
167
|
}
|
|
168
|
-
.magritte-icon-search___ZsqO-_12-
|
|
168
|
+
.magritte-icon-search___ZsqO-_12-5-0{
|
|
169
169
|
background-color:var(--magritte-color-background-secondary-v24-4-0);
|
|
170
170
|
--magritte-ui-icon-color-override:var(--magritte-color-icon-tertiary-v24-4-0);
|
|
171
171
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hh.ru/magritte-ui-select",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.5.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"sideEffects": [
|
|
@@ -52,5 +52,5 @@
|
|
|
52
52
|
"@hh.ru/magritte-ui-trigger": "4.2.3",
|
|
53
53
|
"@hh.ru/magritte-ui-typography": "4.5.1"
|
|
54
54
|
},
|
|
55
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "f4f264e321a4281882b536acde6e171a551d1aff"
|
|
56
56
|
}
|
package/types.d.ts
CHANGED
|
@@ -75,6 +75,9 @@ export interface RenderAlertOnExitWithoutSaving {
|
|
|
75
75
|
export interface OptionsCount {
|
|
76
76
|
optionsCount: number;
|
|
77
77
|
}
|
|
78
|
+
interface SelectedOptionsCount {
|
|
79
|
+
selectedOptionsCount: number;
|
|
80
|
+
}
|
|
78
81
|
export interface SearchValue {
|
|
79
82
|
searchValue: string;
|
|
80
83
|
}
|
|
@@ -152,7 +155,7 @@ export interface SelectBaseProps<MultipleType extends boolean, DataType extends
|
|
|
152
155
|
/** ref на Drop или BottomSheet в зависимости от разрешения */
|
|
153
156
|
pickerRef?: Ref<HTMLElement>;
|
|
154
157
|
/** Обработчик события клика на кнопку apply */
|
|
155
|
-
onApply?: (props: OnApplyProps) => void;
|
|
158
|
+
onApply?: (props: OnApplyProps & OptionsCount & SelectedOptionsCount) => void;
|
|
156
159
|
/** Обработчик события клика на кнопку clear */
|
|
157
160
|
onClear?: () => void;
|
|
158
161
|
/** data-qa инпутов опций */
|
|
@@ -211,7 +214,7 @@ type ExternalSelectBottomSheetProps = {
|
|
|
211
214
|
/** Render функция для Bottom Sheet header */
|
|
212
215
|
renderHeader?: RenderHeader;
|
|
213
216
|
/** Обработчик события открытия Bottom Sheet */
|
|
214
|
-
onBottomSheetOpen?:
|
|
217
|
+
onBottomSheetOpen?: () => void;
|
|
215
218
|
/** Обработчик события закрытия Bottom Sheet */
|
|
216
219
|
onBottomSheetClose?: VoidFunction;
|
|
217
220
|
/** Заголовок Navigation Bar */
|
|
@@ -244,7 +247,7 @@ interface ExternalSelectDropProps {
|
|
|
244
247
|
/** Максимальная высота выпадающего блока для desktop */
|
|
245
248
|
maxHeight?: number;
|
|
246
249
|
/** Обработчик события открытия Drop */
|
|
247
|
-
onDropOpen?:
|
|
250
|
+
onDropOpen?: () => void;
|
|
248
251
|
/** Обработчик события закрытия Drop */
|
|
249
252
|
onDropClose?: VoidFunction;
|
|
250
253
|
/**
|