@hh.ru/magritte-ui-select 10.4.9 → 11.0.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/Select.d.ts +1 -1
- package/Select.js +7 -5
- package/Select.js.map +1 -1
- package/SelectBottomSheet.js +22 -20
- package/SelectBottomSheet.js.map +1 -1
- package/SelectDrop.js +19 -20
- package/SelectDrop.js.map +1 -1
- package/SelectEmptyHint.js +1 -1
- package/SelectError.js +1 -1
- package/SelectModal.d.ts +4 -0
- package/SelectModal.js +149 -0
- package/SelectModal.js.map +1 -0
- package/SelectOption.d.ts +1 -1
- package/SelectOption.js +8 -10
- package/SelectOption.js.map +1 -1
- package/UncontrolledSelect.js +2 -0
- package/UncontrolledSelect.js.map +1 -1
- package/index.css +55 -29
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/package.json +3 -2
- package/types.d.ts +27 -4
- package/useSelectOptionsList.d.ts +2 -1
- package/useSelectOptionsList.js +3 -3
- package/useSelectOptionsList.js.map +1 -1
package/Select.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { ReactElement } from 'react';
|
|
2
2
|
import { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';
|
|
3
3
|
import { SelectProps } from '@hh.ru/magritte-ui-select/types';
|
|
4
|
-
export declare const Select: <MultipleType extends boolean, DataType extends StaticDataFetcherItem>({ type, multiple, value: _value, maxSelectedOptions, loading, error, searchable: _searchable, bottomSheetHeight, onChange: onChangeHandler, renderTrigger, triggerProps, renderMobileItem, renderDesktopItem, name, maxWidth, maxHeight, useInitialValuesOnClearAction, renderAlertOnExitWithoutSaving, renderButtonsContainer, renderHeader, headerTitle: _headerTitle, clearButton, applyChangesButton, forceDropVisibleWithEmptyOptions, plain, widthEqualToActivator, renderContentBefore, onBlur, onFocus, onDropOpen, onDropClose, onBottomSheetClose, onBottomSheetOpen, onSearchSubmit, onApply, onClear, onSelectOption, pickerRef, dataProvider, emptyOptionsHint, emptyOptionsSearchHint, onOptionsChange, innerErrorTrls, optionDataQa, }: SelectProps<MultipleType, DataType>) => ReactElement;
|
|
4
|
+
export declare const Select: <MultipleType extends boolean, DataType extends StaticDataFetcherItem>({ type, multiple, value: _value, maxSelectedOptions, loading, error, searchable: _searchable, bottomSheetHeight, onChange: onChangeHandler, renderTrigger, triggerProps, renderMobileItem, renderDesktopItem, name, maxWidth, maxHeight, useInitialValuesOnClearAction, renderAlertOnExitWithoutSaving, renderButtonsContainer, renderHeader, headerTitle: _headerTitle, clearButton, applyChangesButton, forceDropVisibleWithEmptyOptions, plain, widthEqualToActivator, renderContentBefore, onBlur, onFocus, onDropOpen, onDropClose, onBottomSheetClose, onBottomSheetOpen, onSearchSubmit, onApply, onClear, onSelectOption, pickerRef, dataProvider, emptyOptionsHint, emptyOptionsSearchHint, onOptionsChange, innerErrorTrls, optionDataQa, pickerDesktopType, modalProps, }: SelectProps<MultipleType, DataType>) => ReactElement;
|
package/Select.js
CHANGED
|
@@ -7,6 +7,7 @@ import { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';
|
|
|
7
7
|
import { BaseInput } from '@hh.ru/magritte-ui-input/BaseInput';
|
|
8
8
|
import { SelectBottomSheet } from './SelectBottomSheet.js';
|
|
9
9
|
import { SelectDrop } from './SelectDrop.js';
|
|
10
|
+
import { SelectModal } from './SelectModal.js';
|
|
10
11
|
import { useSelectOptionsList } from './useSelectOptionsList.js';
|
|
11
12
|
import { useSelectSearch } from './useSelectSearch.js';
|
|
12
13
|
import { useSelectState } from './useSelectState.js';
|
|
@@ -31,6 +32,7 @@ import '@hh.ru/magritte-ui-checkbox-radio';
|
|
|
31
32
|
import './getChecked.js';
|
|
32
33
|
import './isArraysEquals.js';
|
|
33
34
|
import '@hh.ru/magritte-ui-drop';
|
|
35
|
+
import '@hh.ru/magritte-ui-modal';
|
|
34
36
|
import '@hh.ru/magritte-common-data-provider';
|
|
35
37
|
|
|
36
38
|
const SelectTriggerDefault = (triggerProps) => {
|
|
@@ -49,14 +51,14 @@ const SEARCH_INPUT_STATE = {
|
|
|
49
51
|
useSearchInput: false,
|
|
50
52
|
emitEvents: false,
|
|
51
53
|
};
|
|
52
|
-
const Select = ({ type, multiple, value: _value, maxSelectedOptions, loading, error, searchable: _searchable, bottomSheetHeight = 'full-screen', onChange: onChangeHandler, renderTrigger = SelectTriggerDefault, triggerProps, renderMobileItem, renderDesktopItem, name, maxWidth, maxHeight = 460, useInitialValuesOnClearAction, renderAlertOnExitWithoutSaving, renderButtonsContainer, renderHeader, headerTitle: _headerTitle, clearButton, applyChangesButton, forceDropVisibleWithEmptyOptions, plain = false, widthEqualToActivator = true, renderContentBefore, onBlur, onFocus, onDropOpen, onDropClose, onBottomSheetClose, onBottomSheetOpen, onSearchSubmit, onApply, onClear, onSelectOption, pickerRef, dataProvider, emptyOptionsHint, emptyOptionsSearchHint, onOptionsChange, innerErrorTrls, optionDataQa, }) => {
|
|
54
|
+
const Select = ({ type, multiple, value: _value, maxSelectedOptions, loading, error, searchable: _searchable, bottomSheetHeight = 'full-screen', onChange: onChangeHandler, renderTrigger = SelectTriggerDefault, triggerProps, renderMobileItem, renderDesktopItem, name, maxWidth, maxHeight = 460, useInitialValuesOnClearAction, renderAlertOnExitWithoutSaving, renderButtonsContainer, renderHeader, headerTitle: _headerTitle, clearButton, applyChangesButton, forceDropVisibleWithEmptyOptions, plain = false, widthEqualToActivator = true, renderContentBefore, onBlur, onFocus, onDropOpen, onDropClose, onBottomSheetClose, onBottomSheetOpen, onSearchSubmit, onApply, onClear, onSelectOption, pickerRef, dataProvider, emptyOptionsHint, emptyOptionsSearchHint, onOptionsChange, innerErrorTrls, optionDataQa, pickerDesktopType = 'drop', modalProps, }) => {
|
|
53
55
|
const { isMobile } = useBreakpoint();
|
|
54
56
|
const inputRef = useRef(null);
|
|
55
57
|
const [searchInputState, setSearchInputState] = useState(SEARCH_INPUT_STATE);
|
|
56
58
|
const [forcedState, setForcedState] = useState(null);
|
|
57
59
|
const dropRef = useRef(null);
|
|
58
60
|
const useDefaultTrigger = renderTrigger === SelectTriggerDefault;
|
|
59
|
-
const { activatorRef, optionsListRef, onOptionsListClose, toggleListVisibility, showOptions } = useSelectOptionsList(isMobile);
|
|
61
|
+
const { activatorRef, optionsListRef, onOptionsListClose, toggleListVisibility, showOptions } = useSelectOptionsList(isMobile, pickerDesktopType);
|
|
60
62
|
const prevVisibleRef = useRef(showOptions);
|
|
61
63
|
const hasChangesButton = multiple && Boolean(applyChangesButton);
|
|
62
64
|
const { values, onChange, clearSelectedValues, setInitialValues, setSelectedValues, setInitialValuesWithoutOnChange, initialValuesOnOpening, } = useSelectState(!!multiple, _value || [], showOptions, hasChangesButton, onChangeHandler, onSelectOption);
|
|
@@ -99,7 +101,7 @@ const Select = ({ type, multiple, value: _value, maxSelectedOptions, loading, er
|
|
|
99
101
|
}, [activatorRef, forcedState, isMobile, onBlur, searchable, setInitialValuesWithoutOnChange, showOptions]);
|
|
100
102
|
// селект с поиском (нужно подменить контрол)
|
|
101
103
|
useLayoutEffect(() => {
|
|
102
|
-
if (!searchable || isMobile) {
|
|
104
|
+
if (!searchable || isMobile || pickerDesktopType === 'modal') {
|
|
103
105
|
return;
|
|
104
106
|
}
|
|
105
107
|
if (forcedState === 'focus' || forcedState === 'focusAndSelect') {
|
|
@@ -108,7 +110,7 @@ const Select = ({ type, multiple, value: _value, maxSelectedOptions, loading, er
|
|
|
108
110
|
emitEvents: true,
|
|
109
111
|
});
|
|
110
112
|
}
|
|
111
|
-
}, [forcedState, isMobile, searchable, useDefaultTrigger]);
|
|
113
|
+
}, [forcedState, isMobile, searchable, useDefaultTrigger, pickerDesktopType]);
|
|
112
114
|
// триггер подменяться на input (тут пачка логики + blur)
|
|
113
115
|
useLayoutEffect(() => {
|
|
114
116
|
if (!searchInputState.emitEvents) {
|
|
@@ -215,7 +217,7 @@ const Select = ({ type, multiple, value: _value, maxSelectedOptions, loading, er
|
|
|
215
217
|
if (showOptions && optionList.length === 0 && !emptyOptionsHint) {
|
|
216
218
|
toggleListVisibility();
|
|
217
219
|
}
|
|
218
|
-
}, "data-qa": "magritte-select-activator-input", placeholder: selectedLabels.length > 0 ? selectedLabels.join(', ') : triggerLabel, autoComplete: "off" }) })), isMobile && (jsx(SelectBottomSheet, { applyChangesButton: applyChangesButton, clearButton: clearButton, clearSelectedValues: clearSelectedValues, error: error, height: searchable || Boolean(error) || loading ? 'full-screen' : bottomSheetHeight, visible: Boolean(showOptions || internalLoading), value: values, isLimitExceeded: isLimitExceeded, name: name, multiple: multiple, type: type, loading: loading || internalLoading, searchable: _searchable, useInitialValuesOnClearAction: useInitialValuesOnClearAction, initialValuesOnOpening: initialValuesOnOpening, renderItem: renderMobileItem, renderAlertOnExitWithoutSaving: renderAlertOnExitWithoutSaving, renderButtonsContainer: renderButtonsContainer, renderHeader: renderHeader, headerTitle: _headerTitle || triggerLabel, optionList: optionList, optionsListRef: optionsListRefCallback, onChange: onChange, onClose: onOptionsListClose, searchValue: searchValue, setSearchValue: setSearchValue, setInitialValues: setInitialValues, setSelectedValues: setSelectedValues, onBottomSheetClose: onBottomSheetClose, onBottomSheetOpen: onBottomSheetOpen, onSearchSubmit: onSearchSubmit, onApply: onApply, onClear: onClear, emptyOptionsHint: emptyOptionsHint, emptyOptionsSearchHint: emptyOptionsSearchHint, searchInProgress: searchInProgress, internalError: internalError, reload: reload, innerErrorTrls: innerErrorTrls, optionDataQa: optionDataQa })), !isMobile && (jsx(SelectDrop, { activatorRef: activatorRef, applyChangesButton: applyChangesButton, clearButton: clearButton, clearSelectedValues: clearSelectedValues, isLimitExceeded: isLimitExceeded, name: name, multiple: multiple, maxWidth: maxWidth, type: type, loading: loading || internalLoading, useInitialValuesOnClearAction: useInitialValuesOnClearAction, onClose: onOptionsListClose, renderItem: renderDesktopItem, renderButtonsContainer: renderButtonsContainer, plain: plain, optionList: optionList, optionsListRef: optionsListRefCallback, value: values, onChange: onChange, searchValue: searchValue, searchable: searchable, forceDropVisibleWithEmptyOptions: forceDropVisibleWithEmptyOptions || internalLoading, setSearchValue: setSearchValue, setInitialValues: setInitialValues, visible: !error && (showOptions || internalLoading), widthEqualToActivator: widthEqualToActivator, renderContentBefore: renderContentBefore, setForcedState: setForcedState, setSelectedValues: setSelectedValues, maxHeight: maxHeight, onDropOpen: onDropOpen, onDropClose: onDropClose, onApply: onApply, onClear: onClear, emptyOptionsHint: emptyOptionsHint, emptyOptionsSearchHint: emptyOptionsSearchHint, searchInProgress: searchInProgress, internalError: internalError, reload: reload, innerErrorTrls: innerErrorTrls, optionDataQa: optionDataQa }))] }));
|
|
220
|
+
}, "data-qa": "magritte-select-activator-input", placeholder: selectedLabels.length > 0 ? selectedLabels.join(', ') : triggerLabel, autoComplete: "off" }) })), isMobile && (jsx(SelectBottomSheet, { applyChangesButton: applyChangesButton, clearButton: clearButton, clearSelectedValues: clearSelectedValues, error: error, height: searchable || Boolean(error) || loading ? 'full-screen' : bottomSheetHeight, visible: Boolean(showOptions || internalLoading), value: values, isLimitExceeded: isLimitExceeded, name: name, multiple: multiple, type: type, loading: loading || internalLoading, searchable: _searchable, useInitialValuesOnClearAction: useInitialValuesOnClearAction, initialValuesOnOpening: initialValuesOnOpening, renderItem: renderMobileItem, renderAlertOnExitWithoutSaving: renderAlertOnExitWithoutSaving, renderButtonsContainer: renderButtonsContainer, renderHeader: renderHeader, headerTitle: _headerTitle || triggerLabel, optionList: optionList, optionsListRef: optionsListRefCallback, onChange: onChange, onClose: onOptionsListClose, searchValue: searchValue, setSearchValue: setSearchValue, setInitialValues: setInitialValues, setSelectedValues: setSelectedValues, onBottomSheetClose: onBottomSheetClose, onBottomSheetOpen: onBottomSheetOpen, onSearchSubmit: onSearchSubmit, onApply: onApply, onClear: onClear, emptyOptionsHint: emptyOptionsHint, emptyOptionsSearchHint: emptyOptionsSearchHint, searchInProgress: searchInProgress, internalError: internalError, reload: reload, innerErrorTrls: innerErrorTrls, optionDataQa: optionDataQa })), !isMobile && (jsxs(Fragment, { children: [pickerDesktopType === 'drop' && (jsx(SelectDrop, { activatorRef: activatorRef, applyChangesButton: applyChangesButton, clearButton: clearButton, clearSelectedValues: clearSelectedValues, isLimitExceeded: isLimitExceeded, name: name, multiple: multiple, maxWidth: maxWidth, type: type, loading: loading || internalLoading, useInitialValuesOnClearAction: useInitialValuesOnClearAction, onClose: onOptionsListClose, renderItem: renderDesktopItem, renderButtonsContainer: renderButtonsContainer, plain: plain, optionList: optionList, optionsListRef: optionsListRefCallback, value: values, onChange: onChange, searchValue: searchValue, searchable: searchable, forceDropVisibleWithEmptyOptions: forceDropVisibleWithEmptyOptions || internalLoading, setSearchValue: setSearchValue, setInitialValues: setInitialValues, visible: !error && (showOptions || internalLoading), widthEqualToActivator: widthEqualToActivator, renderContentBefore: renderContentBefore, setForcedState: setForcedState, setSelectedValues: setSelectedValues, maxHeight: maxHeight, onDropOpen: onDropOpen, onDropClose: onDropClose, onApply: onApply, onClear: onClear, emptyOptionsHint: emptyOptionsHint, emptyOptionsSearchHint: emptyOptionsSearchHint, searchInProgress: searchInProgress, internalError: internalError, reload: reload, innerErrorTrls: innerErrorTrls, optionDataQa: optionDataQa })), pickerDesktopType === 'modal' && (jsx(SelectModal, { ...modalProps, applyChangesButton: applyChangesButton, clearButton: clearButton, clearSelectedValues: clearSelectedValues, isLimitExceeded: isLimitExceeded, name: name, multiple: multiple, type: type, loading: loading || internalLoading, useInitialValuesOnClearAction: useInitialValuesOnClearAction, onClose: onOptionsListClose, renderItem: renderDesktopItem, renderButtonsContainer: renderButtonsContainer, plain: plain, optionList: optionList, optionsListRef: optionsListRefCallback, value: values, onChange: onChange, searchValue: searchValue, searchable: searchable, setSearchValue: setSearchValue, setInitialValues: setInitialValues, visible: Boolean(showOptions || internalLoading), setForcedState: setForcedState, setSelectedValues: setSelectedValues, onApply: onApply, onClear: onClear, emptyOptionsHint: emptyOptionsHint, emptyOptionsSearchHint: emptyOptionsSearchHint, searchInProgress: searchInProgress, internalError: internalError, reload: reload, innerErrorTrls: innerErrorTrls, optionDataQa: optionDataQa, renderAlertOnExitWithoutSaving: renderAlertOnExitWithoutSaving, initialValuesOnOpening: initialValuesOnOpening }))] }))] }));
|
|
219
221
|
};
|
|
220
222
|
|
|
221
223
|
export { Select };
|
package/Select.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","sources":["../src/Select.tsx"],"sourcesContent":["import {\n ReactElement,\n useState,\n useRef,\n useLayoutEffect,\n useCallback,\n KeyboardEventHandler,\n SyntheticEvent,\n useMemo,\n} from 'react';\n\nimport { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';\nimport {\n findNextFocusableElement,\n keyboardKeys,\n keyboardMatch,\n keyboardMatches,\n} from '@hh.ru/magritte-common-keyboard';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { BaseInput } from '@hh.ru/magritte-ui-input/BaseInput';\nimport { SelectBottomSheet } from '@hh.ru/magritte-ui-select/SelectBottomSheet';\nimport { SelectDrop } from '@hh.ru/magritte-ui-select/SelectDrop';\nimport {\n SelectProps,\n TriggerPropsWithRef,\n FocusStateType,\n SetSearchValue,\n OptionsCount,\n} from '@hh.ru/magritte-ui-select/types';\nimport { useSelectOptionsList } from '@hh.ru/magritte-ui-select/useSelectOptionsList';\nimport { useSelectSearch } from '@hh.ru/magritte-ui-select/useSelectSearch';\nimport { useSelectState } from '@hh.ru/magritte-ui-select/useSelectState';\nimport { Trigger } from '@hh.ru/magritte-ui-trigger';\n\nconst SelectTriggerDefault = (triggerProps: TriggerPropsWithRef): ReactElement => {\n return <Trigger {...triggerProps} />;\n};\n\nconst focusOptionsList = (event: SyntheticEvent, drop: HTMLElement | null | undefined, direction: 'up' | 'down') => {\n if (drop) {\n const nextFocusableElement = findNextFocusableElement(drop, null, direction, 'list');\n if (nextFocusableElement !== null) {\n event.preventDefault();\n nextFocusableElement.focus();\n }\n }\n};\n\ninterface SearchInputState {\n useSearchInput: boolean;\n emitEvents: boolean;\n}\n\nconst SEARCH_INPUT_STATE: SearchInputState = {\n useSearchInput: false,\n emitEvents: false,\n};\n\nexport const Select = <MultipleType extends boolean, DataType extends StaticDataFetcherItem>({\n type,\n multiple,\n value: _value,\n maxSelectedOptions,\n loading,\n error,\n searchable: _searchable,\n bottomSheetHeight = 'full-screen',\n onChange: onChangeHandler,\n renderTrigger = SelectTriggerDefault,\n triggerProps,\n renderMobileItem,\n renderDesktopItem,\n name,\n maxWidth,\n maxHeight = 460,\n useInitialValuesOnClearAction,\n renderAlertOnExitWithoutSaving,\n renderButtonsContainer,\n renderHeader,\n headerTitle: _headerTitle,\n clearButton,\n applyChangesButton,\n forceDropVisibleWithEmptyOptions,\n plain = false,\n widthEqualToActivator = true,\n renderContentBefore,\n onBlur,\n onFocus,\n onDropOpen,\n onDropClose,\n onBottomSheetClose,\n onBottomSheetOpen,\n onSearchSubmit,\n onApply,\n onClear,\n onSelectOption,\n pickerRef,\n dataProvider,\n emptyOptionsHint,\n emptyOptionsSearchHint,\n onOptionsChange,\n innerErrorTrls,\n optionDataQa,\n}: SelectProps<MultipleType, DataType>): ReactElement => {\n const { isMobile } = useBreakpoint();\n const inputRef = useRef<HTMLInputElement>(null);\n const [searchInputState, setSearchInputState] = useState<SearchInputState>(SEARCH_INPUT_STATE);\n const [forcedState, setForcedState] = useState<FocusStateType>(null);\n const dropRef = useRef<HTMLDivElement>(null);\n const useDefaultTrigger = renderTrigger === SelectTriggerDefault;\n\n const { activatorRef, optionsListRef, onOptionsListClose, toggleListVisibility, showOptions } =\n useSelectOptionsList(isMobile);\n const prevVisibleRef = useRef<boolean>(showOptions);\n const hasChangesButton = multiple && Boolean(applyChangesButton);\n const {\n values,\n onChange,\n clearSelectedValues,\n setInitialValues,\n setSelectedValues,\n setInitialValuesWithoutOnChange,\n initialValuesOnOpening,\n } = useSelectState<DataType, MultipleType>(\n !!multiple,\n _value || [],\n showOptions,\n hasChangesButton,\n onChangeHandler,\n onSelectOption\n );\n const valuesArray = useMemo(\n // eslint-disable-next-line no-nested-ternary\n () => (Array.isArray(values) ? values : values ? ([values] as DataType[]) : []),\n [values]\n );\n const { optionList, internalLoading, searchValue, setSearchValue, searchInProgress, reload, internalError } =\n useSelectSearch<DataType>(showOptions, valuesArray, dataProvider, onOptionsChange);\n\n const selectedLabels = useMemo(\n () =>\n // eslint-disable-next-line no-nested-ternary\n Array.isArray(_value)\n ? _value.map((item) => item.text ?? item.value)\n : _value\n ? [_value?.text ?? _value.value]\n : [],\n [_value]\n );\n\n const optionsListRefCallback = useMultipleRefs(optionsListRef, dropRef, pickerRef);\n const showedByFocus = useRef<boolean>(false);\n const isLimitExceeded =\n maxSelectedOptions !== undefined && Array.isArray(values) && values.length >= maxSelectedOptions;\n const { size, stretched, label: triggerLabel, disabled } = triggerProps;\n const sizeProp = size === 'large' ? ({ size: 'large' } as const) : ({ size: 'medium' } as const);\n const inputWrapperStyles = stretched ? { with: '100%' } : { maxWidth: activatorRef.current?.offsetWidth };\n const searchable = _searchable && (size === 'large' || size === 'medium');\n const dataQa = triggerProps['data-qa'] || 'magritte-select-activator';\n\n // селект без поиска (переключаем фокус и отправляем blur)\n useLayoutEffect(() => {\n if (searchable && !isMobile) {\n return;\n }\n if (!showOptions && prevVisibleRef.current) {\n setInitialValuesWithoutOnChange();\n if (forcedState === 'focus') {\n activatorRef.current?.focus();\n setForcedState?.(null);\n showedByFocus.current = false;\n }\n }\n if (!forcedState && !showOptions && prevVisibleRef.current) {\n onBlur?.();\n }\n prevVisibleRef.current = showOptions;\n }, [activatorRef, forcedState, isMobile, onBlur, searchable, setInitialValuesWithoutOnChange, showOptions]);\n\n // селект с поиском (нужно подменить контрол)\n useLayoutEffect(() => {\n if (!searchable || isMobile) {\n return;\n }\n if (forcedState === 'focus' || forcedState === 'focusAndSelect') {\n setSearchInputState({\n useSearchInput: useDefaultTrigger,\n emitEvents: true,\n });\n }\n }, [forcedState, isMobile, searchable, useDefaultTrigger]);\n\n // триггер подменяться на input (тут пачка логики + blur)\n useLayoutEffect(() => {\n if (!searchInputState.emitEvents) {\n return;\n }\n // немного магипуляций, если тригер дефотный\n if (searchInputState.useSearchInput) {\n if (!inputRef.current) {\n return;\n }\n if (forcedState === 'focus') {\n inputRef.current.focus();\n }\n // например во время выбора опции, нужно выбрать текст\n if (forcedState === 'focusAndSelect') {\n inputRef.current?.focus();\n inputRef.current?.select();\n }\n }\n if (!showOptions && prevVisibleRef.current) {\n setInitialValuesWithoutOnChange();\n }\n if (!forcedState && !showOptions) {\n setSearchInputState({\n useSearchInput: false,\n emitEvents: false,\n });\n if (prevVisibleRef.current) {\n onBlur?.();\n }\n }\n prevVisibleRef.current = showOptions;\n }, [forcedState, onBlur, setForcedState, searchInputState, showOptions, setInitialValuesWithoutOnChange]);\n\n const handleKeyDown = useCallback<KeyboardEventHandler>(\n (event) => {\n if (showOptions && keyboardMatch(event.nativeEvent, keyboardKeys.Escape)) {\n showedByFocus.current = false;\n setForcedState('focus');\n\n toggleListVisibility();\n return;\n }\n\n // движение по списку опций\n if (showOptions && keyboardMatch(event.nativeEvent, keyboardKeys.ArrowUp)) {\n focusOptionsList(event, dropRef?.current, 'up');\n return;\n }\n\n if (showOptions && keyboardMatch(event.nativeEvent, keyboardKeys.ArrowDown)) {\n focusOptionsList(event, dropRef?.current, 'down');\n return;\n }\n\n // после закрытия пользователь решил что-то поделать опять\n if (\n !showOptions &&\n !keyboardMatches(event.nativeEvent, [keyboardKeys.Tab, keyboardKeys.Escape, keyboardKeys.Space])\n ) {\n toggleListVisibility();\n }\n },\n [showOptions, toggleListVisibility]\n );\n\n return (\n <>\n {!searchInputState.useSearchInput &&\n renderTrigger({\n values: selectedLabels,\n expanded: showOptions,\n toggleExpanded: toggleListVisibility,\n onChange: () => {\n if (disabled) {\n return;\n }\n // открываем по фокусу, закрываем по клику\n // повторно открываем по клику (события фокуса уже не будет)\n if (showedByFocus.current) {\n showedByFocus.current = false;\n return;\n }\n toggleListVisibility();\n },\n onClear: () => clearSelectedValues(),\n ref: activatorRef,\n onKeyDown: handleKeyDown,\n onBlur: () => {\n setForcedState(null);\n if (showOptions && optionList.length === 0 && !emptyOptionsHint) {\n toggleListVisibility();\n }\n if (!showOptions && forcedState === null) {\n onBlur?.();\n }\n },\n onFocus: () => {\n if (disabled || showOptions) {\n return;\n }\n if (!showOptions && forcedState !== 'focus' && forcedState !== 'focusAndSelect') {\n onFocus?.();\n setForcedState('focus');\n\n toggleListVisibility();\n }\n showedByFocus.current = true;\n },\n 'data-qa': dataQa,\n setSearchValue,\n optionsCount: optionList.length,\n ...triggerProps,\n } as TriggerPropsWithRef & SetSearchValue & OptionsCount)}\n {searchInputState.useSearchInput && (\n <div style={inputWrapperStyles}>\n <BaseInput\n {...sizeProp}\n ref={inputRef}\n wrapperRef={activatorRef}\n value={searchValue}\n onChange={setSearchValue}\n onKeyDown={handleKeyDown}\n onFocus={() => {\n setForcedState('focus');\n }}\n onBlur={() => {\n setForcedState(null);\n if (showOptions && optionList.length === 0 && !emptyOptionsHint) {\n toggleListVisibility();\n }\n }}\n data-qa=\"magritte-select-activator-input\"\n placeholder={selectedLabels.length > 0 ? selectedLabels.join(', ') : triggerLabel}\n autoComplete=\"off\"\n />\n </div>\n )}\n {isMobile && (\n <SelectBottomSheet\n applyChangesButton={applyChangesButton}\n clearButton={clearButton}\n clearSelectedValues={clearSelectedValues}\n error={error}\n height={searchable || Boolean(error) || loading ? 'full-screen' : bottomSheetHeight}\n visible={Boolean(showOptions || internalLoading)}\n value={values}\n isLimitExceeded={isLimitExceeded}\n name={name}\n multiple={multiple}\n type={type}\n loading={loading || internalLoading}\n searchable={_searchable}\n useInitialValuesOnClearAction={useInitialValuesOnClearAction}\n initialValuesOnOpening={initialValuesOnOpening}\n renderItem={renderMobileItem}\n renderAlertOnExitWithoutSaving={renderAlertOnExitWithoutSaving}\n renderButtonsContainer={renderButtonsContainer}\n renderHeader={renderHeader}\n headerTitle={_headerTitle || triggerLabel}\n optionList={optionList}\n optionsListRef={optionsListRefCallback}\n onChange={onChange}\n onClose={onOptionsListClose}\n searchValue={searchValue}\n setSearchValue={setSearchValue}\n setInitialValues={setInitialValues}\n setSelectedValues={setSelectedValues}\n onBottomSheetClose={onBottomSheetClose}\n onBottomSheetOpen={onBottomSheetOpen}\n onSearchSubmit={onSearchSubmit}\n onApply={onApply}\n onClear={onClear}\n emptyOptionsHint={emptyOptionsHint}\n emptyOptionsSearchHint={emptyOptionsSearchHint}\n searchInProgress={searchInProgress}\n internalError={internalError}\n reload={reload}\n innerErrorTrls={innerErrorTrls}\n optionDataQa={optionDataQa}\n />\n )}\n {!isMobile && (\n <SelectDrop\n activatorRef={activatorRef}\n applyChangesButton={applyChangesButton}\n clearButton={clearButton}\n clearSelectedValues={clearSelectedValues}\n isLimitExceeded={isLimitExceeded}\n name={name}\n multiple={multiple}\n maxWidth={maxWidth}\n type={type}\n loading={loading || internalLoading}\n useInitialValuesOnClearAction={useInitialValuesOnClearAction}\n onClose={onOptionsListClose}\n renderItem={renderDesktopItem}\n renderButtonsContainer={renderButtonsContainer}\n plain={plain}\n optionList={optionList}\n optionsListRef={optionsListRefCallback}\n value={values}\n onChange={onChange}\n searchValue={searchValue}\n searchable={searchable}\n forceDropVisibleWithEmptyOptions={forceDropVisibleWithEmptyOptions || internalLoading}\n setSearchValue={setSearchValue}\n setInitialValues={setInitialValues}\n visible={!error && (showOptions || internalLoading)}\n widthEqualToActivator={widthEqualToActivator}\n renderContentBefore={renderContentBefore}\n setForcedState={setForcedState}\n setSelectedValues={setSelectedValues}\n maxHeight={maxHeight}\n onDropOpen={onDropOpen}\n onDropClose={onDropClose}\n onApply={onApply}\n onClear={onClear}\n emptyOptionsHint={emptyOptionsHint}\n emptyOptionsSearchHint={emptyOptionsSearchHint}\n searchInProgress={searchInProgress}\n internalError={internalError}\n reload={reload}\n innerErrorTrls={innerErrorTrls}\n optionDataQa={optionDataQa}\n />\n )}\n </>\n );\n};\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Select.js","sources":["../src/Select.tsx"],"sourcesContent":["import {\n ReactElement,\n useState,\n useRef,\n useLayoutEffect,\n useCallback,\n KeyboardEventHandler,\n SyntheticEvent,\n useMemo,\n} from 'react';\n\nimport { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';\nimport {\n findNextFocusableElement,\n keyboardKeys,\n keyboardMatch,\n keyboardMatches,\n} from '@hh.ru/magritte-common-keyboard';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { BaseInput } from '@hh.ru/magritte-ui-input/BaseInput';\nimport { SelectBottomSheet } from '@hh.ru/magritte-ui-select/SelectBottomSheet';\nimport { SelectDrop } from '@hh.ru/magritte-ui-select/SelectDrop';\nimport { SelectModal } from '@hh.ru/magritte-ui-select/SelectModal';\nimport {\n SelectProps,\n TriggerPropsWithRef,\n FocusStateType,\n SetSearchValue,\n OptionsCount,\n} from '@hh.ru/magritte-ui-select/types';\nimport { useSelectOptionsList } from '@hh.ru/magritte-ui-select/useSelectOptionsList';\nimport { useSelectSearch } from '@hh.ru/magritte-ui-select/useSelectSearch';\nimport { useSelectState } from '@hh.ru/magritte-ui-select/useSelectState';\nimport { Trigger } from '@hh.ru/magritte-ui-trigger';\n\nconst SelectTriggerDefault = (triggerProps: TriggerPropsWithRef): ReactElement => {\n return <Trigger {...triggerProps} />;\n};\n\nconst focusOptionsList = (event: SyntheticEvent, drop: HTMLElement | null | undefined, direction: 'up' | 'down') => {\n if (drop) {\n const nextFocusableElement = findNextFocusableElement(drop, null, direction, 'list');\n if (nextFocusableElement !== null) {\n event.preventDefault();\n nextFocusableElement.focus();\n }\n }\n};\n\ninterface SearchInputState {\n useSearchInput: boolean;\n emitEvents: boolean;\n}\n\nconst SEARCH_INPUT_STATE: SearchInputState = {\n useSearchInput: false,\n emitEvents: false,\n};\n\nexport const Select = <MultipleType extends boolean, DataType extends StaticDataFetcherItem>({\n type,\n multiple,\n value: _value,\n maxSelectedOptions,\n loading,\n error,\n searchable: _searchable,\n bottomSheetHeight = 'full-screen',\n onChange: onChangeHandler,\n renderTrigger = SelectTriggerDefault,\n triggerProps,\n renderMobileItem,\n renderDesktopItem,\n name,\n maxWidth,\n maxHeight = 460,\n useInitialValuesOnClearAction,\n renderAlertOnExitWithoutSaving,\n renderButtonsContainer,\n renderHeader,\n headerTitle: _headerTitle,\n clearButton,\n applyChangesButton,\n forceDropVisibleWithEmptyOptions,\n plain = false,\n widthEqualToActivator = true,\n renderContentBefore,\n onBlur,\n onFocus,\n onDropOpen,\n onDropClose,\n onBottomSheetClose,\n onBottomSheetOpen,\n onSearchSubmit,\n onApply,\n onClear,\n onSelectOption,\n pickerRef,\n dataProvider,\n emptyOptionsHint,\n emptyOptionsSearchHint,\n onOptionsChange,\n innerErrorTrls,\n optionDataQa,\n pickerDesktopType = 'drop',\n modalProps,\n}: SelectProps<MultipleType, DataType>): ReactElement => {\n const { isMobile } = useBreakpoint();\n const inputRef = useRef<HTMLInputElement>(null);\n const [searchInputState, setSearchInputState] = useState<SearchInputState>(SEARCH_INPUT_STATE);\n const [forcedState, setForcedState] = useState<FocusStateType>(null);\n const dropRef = useRef<HTMLDivElement>(null);\n const useDefaultTrigger = renderTrigger === SelectTriggerDefault;\n\n const { activatorRef, optionsListRef, onOptionsListClose, toggleListVisibility, showOptions } =\n useSelectOptionsList(isMobile, pickerDesktopType);\n const prevVisibleRef = useRef<boolean>(showOptions);\n const hasChangesButton = multiple && Boolean(applyChangesButton);\n const {\n values,\n onChange,\n clearSelectedValues,\n setInitialValues,\n setSelectedValues,\n setInitialValuesWithoutOnChange,\n initialValuesOnOpening,\n } = useSelectState<DataType, MultipleType>(\n !!multiple,\n _value || [],\n showOptions,\n hasChangesButton,\n onChangeHandler,\n onSelectOption\n );\n const valuesArray = useMemo(\n // eslint-disable-next-line no-nested-ternary\n () => (Array.isArray(values) ? values : values ? ([values] as DataType[]) : []),\n [values]\n );\n const { optionList, internalLoading, searchValue, setSearchValue, searchInProgress, reload, internalError } =\n useSelectSearch<DataType>(showOptions, valuesArray, dataProvider, onOptionsChange);\n\n const selectedLabels = useMemo(\n () =>\n // eslint-disable-next-line no-nested-ternary\n Array.isArray(_value)\n ? _value.map((item) => item.text ?? item.value)\n : _value\n ? [_value?.text ?? _value.value]\n : [],\n [_value]\n );\n\n const optionsListRefCallback = useMultipleRefs(optionsListRef, dropRef, pickerRef);\n const showedByFocus = useRef<boolean>(false);\n const isLimitExceeded =\n maxSelectedOptions !== undefined && Array.isArray(values) && values.length >= maxSelectedOptions;\n const { size, stretched, label: triggerLabel, disabled } = triggerProps;\n const sizeProp = size === 'large' ? ({ size: 'large' } as const) : ({ size: 'medium' } as const);\n const inputWrapperStyles = stretched ? { with: '100%' } : { maxWidth: activatorRef.current?.offsetWidth };\n const searchable = _searchable && (size === 'large' || size === 'medium');\n const dataQa = triggerProps['data-qa'] || 'magritte-select-activator';\n\n // селект без поиска (переключаем фокус и отправляем blur)\n useLayoutEffect(() => {\n if (searchable && !isMobile) {\n return;\n }\n if (!showOptions && prevVisibleRef.current) {\n setInitialValuesWithoutOnChange();\n if (forcedState === 'focus') {\n activatorRef.current?.focus();\n setForcedState?.(null);\n showedByFocus.current = false;\n }\n }\n if (!forcedState && !showOptions && prevVisibleRef.current) {\n onBlur?.();\n }\n prevVisibleRef.current = showOptions;\n }, [activatorRef, forcedState, isMobile, onBlur, searchable, setInitialValuesWithoutOnChange, showOptions]);\n\n // селект с поиском (нужно подменить контрол)\n useLayoutEffect(() => {\n if (!searchable || isMobile || pickerDesktopType === 'modal') {\n return;\n }\n if (forcedState === 'focus' || forcedState === 'focusAndSelect') {\n setSearchInputState({\n useSearchInput: useDefaultTrigger,\n emitEvents: true,\n });\n }\n }, [forcedState, isMobile, searchable, useDefaultTrigger, pickerDesktopType]);\n\n // триггер подменяться на input (тут пачка логики + blur)\n useLayoutEffect(() => {\n if (!searchInputState.emitEvents) {\n return;\n }\n // немного магипуляций, если тригер дефотный\n if (searchInputState.useSearchInput) {\n if (!inputRef.current) {\n return;\n }\n if (forcedState === 'focus') {\n inputRef.current.focus();\n }\n // например во время выбора опции, нужно выбрать текст\n if (forcedState === 'focusAndSelect') {\n inputRef.current?.focus();\n inputRef.current?.select();\n }\n }\n if (!showOptions && prevVisibleRef.current) {\n setInitialValuesWithoutOnChange();\n }\n if (!forcedState && !showOptions) {\n setSearchInputState({\n useSearchInput: false,\n emitEvents: false,\n });\n if (prevVisibleRef.current) {\n onBlur?.();\n }\n }\n prevVisibleRef.current = showOptions;\n }, [forcedState, onBlur, setForcedState, searchInputState, showOptions, setInitialValuesWithoutOnChange]);\n\n const handleKeyDown = useCallback<KeyboardEventHandler>(\n (event) => {\n if (showOptions && keyboardMatch(event.nativeEvent, keyboardKeys.Escape)) {\n showedByFocus.current = false;\n setForcedState('focus');\n\n toggleListVisibility();\n return;\n }\n\n // движение по списку опций\n if (showOptions && keyboardMatch(event.nativeEvent, keyboardKeys.ArrowUp)) {\n focusOptionsList(event, dropRef?.current, 'up');\n return;\n }\n\n if (showOptions && keyboardMatch(event.nativeEvent, keyboardKeys.ArrowDown)) {\n focusOptionsList(event, dropRef?.current, 'down');\n return;\n }\n\n // после закрытия пользователь решил что-то поделать опять\n if (\n !showOptions &&\n !keyboardMatches(event.nativeEvent, [keyboardKeys.Tab, keyboardKeys.Escape, keyboardKeys.Space])\n ) {\n toggleListVisibility();\n }\n },\n [showOptions, toggleListVisibility]\n );\n\n return (\n <>\n {!searchInputState.useSearchInput &&\n renderTrigger({\n values: selectedLabels,\n expanded: showOptions,\n toggleExpanded: toggleListVisibility,\n onChange: () => {\n if (disabled) {\n return;\n }\n // открываем по фокусу, закрываем по клику\n // повторно открываем по клику (события фокуса уже не будет)\n if (showedByFocus.current) {\n showedByFocus.current = false;\n return;\n }\n toggleListVisibility();\n },\n onClear: () => clearSelectedValues(),\n ref: activatorRef,\n onKeyDown: handleKeyDown,\n onBlur: () => {\n setForcedState(null);\n if (showOptions && optionList.length === 0 && !emptyOptionsHint) {\n toggleListVisibility();\n }\n if (!showOptions && forcedState === null) {\n onBlur?.();\n }\n },\n onFocus: () => {\n if (disabled || showOptions) {\n return;\n }\n if (!showOptions && forcedState !== 'focus' && forcedState !== 'focusAndSelect') {\n onFocus?.();\n setForcedState('focus');\n\n toggleListVisibility();\n }\n showedByFocus.current = true;\n },\n 'data-qa': dataQa,\n setSearchValue,\n optionsCount: optionList.length,\n ...triggerProps,\n } as TriggerPropsWithRef & SetSearchValue & OptionsCount)}\n {searchInputState.useSearchInput && (\n <div style={inputWrapperStyles}>\n <BaseInput\n {...sizeProp}\n ref={inputRef}\n wrapperRef={activatorRef}\n value={searchValue}\n onChange={setSearchValue}\n onKeyDown={handleKeyDown}\n onFocus={() => {\n setForcedState('focus');\n }}\n onBlur={() => {\n setForcedState(null);\n if (showOptions && optionList.length === 0 && !emptyOptionsHint) {\n toggleListVisibility();\n }\n }}\n data-qa=\"magritte-select-activator-input\"\n placeholder={selectedLabels.length > 0 ? selectedLabels.join(', ') : triggerLabel}\n autoComplete=\"off\"\n />\n </div>\n )}\n {isMobile && (\n <SelectBottomSheet\n applyChangesButton={applyChangesButton}\n clearButton={clearButton}\n clearSelectedValues={clearSelectedValues}\n error={error}\n height={searchable || Boolean(error) || loading ? 'full-screen' : bottomSheetHeight}\n visible={Boolean(showOptions || internalLoading)}\n value={values}\n isLimitExceeded={isLimitExceeded}\n name={name}\n multiple={multiple}\n type={type}\n loading={loading || internalLoading}\n searchable={_searchable}\n useInitialValuesOnClearAction={useInitialValuesOnClearAction}\n initialValuesOnOpening={initialValuesOnOpening}\n renderItem={renderMobileItem}\n renderAlertOnExitWithoutSaving={renderAlertOnExitWithoutSaving}\n renderButtonsContainer={renderButtonsContainer}\n renderHeader={renderHeader}\n headerTitle={_headerTitle || triggerLabel}\n optionList={optionList}\n optionsListRef={optionsListRefCallback}\n onChange={onChange}\n onClose={onOptionsListClose}\n searchValue={searchValue}\n setSearchValue={setSearchValue}\n setInitialValues={setInitialValues}\n setSelectedValues={setSelectedValues}\n onBottomSheetClose={onBottomSheetClose}\n onBottomSheetOpen={onBottomSheetOpen}\n onSearchSubmit={onSearchSubmit}\n onApply={onApply}\n onClear={onClear}\n emptyOptionsHint={emptyOptionsHint}\n emptyOptionsSearchHint={emptyOptionsSearchHint}\n searchInProgress={searchInProgress}\n internalError={internalError}\n reload={reload}\n innerErrorTrls={innerErrorTrls}\n optionDataQa={optionDataQa}\n />\n )}\n {!isMobile && (\n <>\n {pickerDesktopType === 'drop' && (\n <SelectDrop\n activatorRef={activatorRef}\n applyChangesButton={applyChangesButton}\n clearButton={clearButton}\n clearSelectedValues={clearSelectedValues}\n isLimitExceeded={isLimitExceeded}\n name={name}\n multiple={multiple}\n maxWidth={maxWidth}\n type={type}\n loading={loading || internalLoading}\n useInitialValuesOnClearAction={useInitialValuesOnClearAction}\n onClose={onOptionsListClose}\n renderItem={renderDesktopItem}\n renderButtonsContainer={renderButtonsContainer}\n plain={plain}\n optionList={optionList}\n optionsListRef={optionsListRefCallback}\n value={values}\n onChange={onChange}\n searchValue={searchValue}\n searchable={searchable}\n forceDropVisibleWithEmptyOptions={forceDropVisibleWithEmptyOptions || internalLoading}\n setSearchValue={setSearchValue}\n setInitialValues={setInitialValues}\n visible={!error && (showOptions || internalLoading)}\n widthEqualToActivator={widthEqualToActivator}\n renderContentBefore={renderContentBefore}\n setForcedState={setForcedState}\n setSelectedValues={setSelectedValues}\n maxHeight={maxHeight}\n onDropOpen={onDropOpen}\n onDropClose={onDropClose}\n onApply={onApply}\n onClear={onClear}\n emptyOptionsHint={emptyOptionsHint}\n emptyOptionsSearchHint={emptyOptionsSearchHint}\n searchInProgress={searchInProgress}\n internalError={internalError}\n reload={reload}\n innerErrorTrls={innerErrorTrls}\n optionDataQa={optionDataQa}\n />\n )}\n {pickerDesktopType === 'modal' && (\n <SelectModal\n {...modalProps}\n applyChangesButton={applyChangesButton}\n clearButton={clearButton}\n clearSelectedValues={clearSelectedValues}\n isLimitExceeded={isLimitExceeded}\n name={name}\n multiple={multiple}\n type={type}\n loading={loading || internalLoading}\n useInitialValuesOnClearAction={useInitialValuesOnClearAction}\n onClose={onOptionsListClose}\n renderItem={renderDesktopItem}\n renderButtonsContainer={renderButtonsContainer}\n plain={plain}\n optionList={optionList}\n optionsListRef={optionsListRefCallback}\n value={values}\n onChange={onChange}\n searchValue={searchValue}\n searchable={searchable}\n setSearchValue={setSearchValue}\n setInitialValues={setInitialValues}\n visible={Boolean(showOptions || internalLoading)}\n setForcedState={setForcedState}\n setSelectedValues={setSelectedValues}\n onApply={onApply}\n onClear={onClear}\n emptyOptionsHint={emptyOptionsHint}\n emptyOptionsSearchHint={emptyOptionsSearchHint}\n searchInProgress={searchInProgress}\n internalError={internalError}\n reload={reload}\n innerErrorTrls={innerErrorTrls}\n optionDataQa={optionDataQa}\n renderAlertOnExitWithoutSaving={renderAlertOnExitWithoutSaving}\n initialValuesOnOpening={initialValuesOnOpening}\n />\n )}\n </>\n )}\n </>\n );\n};\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
package/SelectBottomSheet.js
CHANGED
|
@@ -7,7 +7,7 @@ import { ActionBar } from '@hh.ru/magritte-ui-action-bar';
|
|
|
7
7
|
import { BottomSheetFooter, BottomSheet } from '@hh.ru/magritte-ui-bottom-sheet';
|
|
8
8
|
import { Button } from '@hh.ru/magritte-ui-button';
|
|
9
9
|
import { CellText, Cell } from '@hh.ru/magritte-ui-cell';
|
|
10
|
-
import { ArrowPathClockwiseOutlinedSize24, CrossOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';
|
|
10
|
+
import { ArrowPathClockwiseOutlinedSize24, CheckOutlinedSize24, CrossOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';
|
|
11
11
|
import { SearchInput } from '@hh.ru/magritte-ui-input';
|
|
12
12
|
import { Loader } from '@hh.ru/magritte-ui-loader';
|
|
13
13
|
import { NavigationBar } from '@hh.ru/magritte-ui-navigation-bar';
|
|
@@ -23,18 +23,21 @@ import '@hh.ru/magritte-ui-typography';
|
|
|
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-bottom-sheet":"magritte-select-bottom-
|
|
26
|
+
var styles = {"select-bottom-sheet":"magritte-select-bottom-sheet___1RZDJ_11-0-0","selectBottomSheet":"magritte-select-bottom-sheet___1RZDJ_11-0-0","select-bottom-sheet_checkbox":"magritte-select-bottom-sheet_checkbox___hwTgo_11-0-0","selectBottomSheetCheckbox":"magritte-select-bottom-sheet_checkbox___hwTgo_11-0-0","select-bottom-sheet_radio":"magritte-select-bottom-sheet_radio___qvFFV_11-0-0","selectBottomSheetRadio":"magritte-select-bottom-sheet_radio___qvFFV_11-0-0","select-bottom-sheet_without-header":"magritte-select-bottom-sheet_without-header___KOKVh_11-0-0","selectBottomSheetWithoutHeader":"magritte-select-bottom-sheet_without-header___KOKVh_11-0-0","full-screen-placeholder":"magritte-full-screen-placeholder___zPC8k_11-0-0","fullScreenPlaceholder":"magritte-full-screen-placeholder___zPC8k_11-0-0","error-wrapper":"magritte-error-wrapper___P7jYg_11-0-0","errorWrapper":"magritte-error-wrapper___P7jYg_11-0-0"};
|
|
27
27
|
|
|
28
|
-
const SelectOptionDefault = ({ data, input, type, }) => {
|
|
28
|
+
const SelectOptionDefault = ({ data, input, type, checked, plain, }) => {
|
|
29
29
|
if (type === 'delimiter') {
|
|
30
30
|
return (jsx(CellText, { maxLines: 1, style: "secondary", children: data.text }));
|
|
31
31
|
}
|
|
32
32
|
if (type === 'label') {
|
|
33
|
-
return jsx(CellText, { maxLines: 1, children: data.text });
|
|
33
|
+
return (jsx(Cell, { Element: "div", right: checked && plain ? jsx(CheckOutlinedSize24, {}) : undefined, vertPadding: true, children: jsx(CellText, { maxLines: 1, children: data.text }) }));
|
|
34
34
|
}
|
|
35
35
|
return (jsx(Cell, { Element: "div", align: "center", right: input, children: jsx(CellText, { maxLines: 1, children: data.text }) }));
|
|
36
36
|
};
|
|
37
|
-
const RenderButtonsContainerDefault = ({ clearButton, applyChangesButton }) => {
|
|
37
|
+
const RenderButtonsContainerDefault = ({ clearButton, applyChangesButton, loading, }) => {
|
|
38
|
+
if ((!clearButton && !applyChangesButton) || loading) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
38
41
|
const primaryActions = [clearButton, applyChangesButton].filter(Boolean);
|
|
39
42
|
return jsx(ActionBar, { type: "mobile", primaryActions: primaryActions });
|
|
40
43
|
};
|
|
@@ -83,7 +86,7 @@ const SelectBottomSheet = ({ type, name, multiple, clearButton: _clearButton, ap
|
|
|
83
86
|
},
|
|
84
87
|
});
|
|
85
88
|
const needAddChangesButton = multiple && _applyChangesButton;
|
|
86
|
-
const applyChangesButton =
|
|
89
|
+
const applyChangesButton = needAddChangesButton &&
|
|
87
90
|
cloneElement(_applyChangesButton, {
|
|
88
91
|
key: 'applyChangesButton',
|
|
89
92
|
size: 'medium',
|
|
@@ -93,23 +96,13 @@ const SelectBottomSheet = ({ type, name, multiple, clearButton: _clearButton, ap
|
|
|
93
96
|
onClose();
|
|
94
97
|
onApply?.({ isMobile: true, searchValue });
|
|
95
98
|
},
|
|
96
|
-
})
|
|
97
|
-
undefined;
|
|
99
|
+
});
|
|
98
100
|
const handleChange = useCallback((...args) => {
|
|
99
101
|
if (!multiple) {
|
|
100
102
|
onClose();
|
|
101
103
|
}
|
|
102
104
|
onChange(...args);
|
|
103
105
|
}, [multiple, onChange, onClose]);
|
|
104
|
-
const haveClearOrApplyChangesButtons = clearButton || applyChangesButton;
|
|
105
|
-
const footer = !showErrorPlaceholder ? (!loading &&
|
|
106
|
-
haveClearOrApplyChangesButtons &&
|
|
107
|
-
renderButtonsContainer({
|
|
108
|
-
clearButton,
|
|
109
|
-
applyChangesButton,
|
|
110
|
-
searchValue,
|
|
111
|
-
optionsCount: optionList.length,
|
|
112
|
-
})) : (jsx(BottomSheetFooter, { children: error && error.resetButton }));
|
|
113
106
|
const emptyOptionsHintVisible = optionList.length === 0 &&
|
|
114
107
|
!searchValue &&
|
|
115
108
|
!!emptyOptionsHint &&
|
|
@@ -124,6 +117,15 @@ const SelectBottomSheet = ({ type, name, multiple, clearButton: _clearButton, ap
|
|
|
124
117
|
!showErrorPlaceholder &&
|
|
125
118
|
!searchInProgress &&
|
|
126
119
|
!internalError;
|
|
120
|
+
const footer = !showErrorPlaceholder ? (renderButtonsContainer({
|
|
121
|
+
clearButton,
|
|
122
|
+
applyChangesButton,
|
|
123
|
+
searchValue,
|
|
124
|
+
optionsCount: optionList.length,
|
|
125
|
+
loading,
|
|
126
|
+
isError: Boolean(internalError && innerErrorTrls),
|
|
127
|
+
emptyOptionsHintVisible: Boolean(emptyOptionsHintVisible || emptyOptionsSearchHintVisible),
|
|
128
|
+
})) : (jsx(BottomSheetFooter, { children: error && error.resetButton }));
|
|
127
129
|
const onCloseBottomSheetWithUpdateValues = () => {
|
|
128
130
|
setSelectedValues();
|
|
129
131
|
onCloseWithAlertCheck();
|
|
@@ -144,16 +146,16 @@ const SelectBottomSheet = ({ type, name, multiple, clearButton: _clearButton, ap
|
|
|
144
146
|
onCloseBottomSheetWithUpdateValues,
|
|
145
147
|
});
|
|
146
148
|
const haveHeader = Boolean(header);
|
|
147
|
-
return (jsxs(Fragment, { children: [jsxs(BottomSheet, { ...props, ref: optionsListRef, allowScrollWhileFocused: true, keyboardOverlaysFooter: false, visible: visible, showDivider:
|
|
149
|
+
return (jsxs(Fragment, { children: [jsxs(BottomSheet, { ...props, ref: optionsListRef, allowScrollWhileFocused: true, keyboardOverlaysFooter: false, visible: visible, showDivider: 'with-scroll', withContentPaddings: showErrorPlaceholder, header: header, onClose: onCloseWithAlertCheck, footer: internalError && innerErrorTrls ? (jsx(BottomSheetFooter, { children: jsx(Button, { mode: "primary", style: "accent", size: "medium", onClick: reload, stretched: true, icon: jsx(ArrowPathClockwiseOutlinedSize24, {}), children: innerErrorTrls.reloadButton }) })) : (footer), onAppear: onBottomSheetOpen, onAfterExit: onBottomSheetClose, children: [internalError && innerErrorTrls && jsx(SelectError, { innerErrorTrls: innerErrorTrls, reload: reload }), emptyOptionsSearchHintVisible && (jsx("div", { className: styles.fullScreenPlaceholder, children: emptyOptionsSearchHint })), emptyOptionsHintVisible && jsx("div", { className: styles.fullScreenPlaceholder, children: emptyOptionsHint }), loading && !showErrorPlaceholder && (jsx("div", { className: styles.fullScreenPlaceholder, children: jsx(Loader, { size: 24 }) })), showErrorPlaceholder && jsx("div", { className: styles.errorWrapper, children: error && error.placeholder }), optionsVisible && (jsx("div", { className: classnames(styles.selectBottomSheet, styles[`select-bottom-sheet_${type}`], {
|
|
148
150
|
[styles.selectBottomSheetWithoutHeader]: !haveHeader,
|
|
149
151
|
}), "data-qa": "magritte-select-option-list-on-xs", children: optionList.map(({ disabled: _disabled, type: optionType, ...option }) => {
|
|
150
152
|
const checked = Boolean(option.data && getChecked(option.data, values ?? []));
|
|
151
153
|
const disabled = !checked && (_disabled || isLimitExceeded);
|
|
152
|
-
return (jsx(SelectOption, { name: name, checked: checked, onChange: handleChange, render: renderItem, disabled: disabled, type: optionType || type, plain: type === 'label', multiple: multiple, "data-qa": optionDataQa,
|
|
154
|
+
return (jsx(SelectOption, { name: name, checked: checked, onChange: handleChange, render: renderItem, disabled: disabled, type: optionType || type, plain: type === 'label', multiple: multiple, "data-qa": optionDataQa, isMobile: true, ...option }, option.data.value));
|
|
153
155
|
}) }))] }), renderAlertOnExitWithoutSaving?.({
|
|
154
156
|
alertVisible,
|
|
155
157
|
onCloseAlert,
|
|
156
|
-
|
|
158
|
+
onClosePickerAndAlert: () => {
|
|
157
159
|
onCloseAlert();
|
|
158
160
|
onClose();
|
|
159
161
|
},
|
package/SelectBottomSheet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectBottomSheet.js","sources":["../src/SelectBottomSheet.tsx"],"sourcesContent":["import { useCallback, ReactElement, ReactNode, cloneElement, useState, ComponentProps } 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 { ArrowPathClockwiseOutlinedSize24, CrossOutlinedSize24 } 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 SelectButtons,\n SelectBottomSheetProps,\n RenderOptionTypeProps,\n RenderHeaderProps,\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}: 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 <CellText maxLines={1}>{data.text}</CellText>;\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 = ({ clearButton, applyChangesButton }: SelectButtons): ReactNode => {\n const primaryActions = [clearButton, applyChangesButton].filter(Boolean);\n return <ActionBar type=\"mobile\" 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 onCloseAlert = () => setAlertVisible(false);\n const showAlertOnExitWithoutSaving = Boolean(renderAlertOnExitWithoutSaving);\n const showErrorPlaceholder = Boolean(error);\n\n const onCloseWithAlertCheck = () => {\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 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 undefined;\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 haveClearOrApplyChangesButtons = clearButton || applyChangesButton;\n const footer = !showErrorPlaceholder ? (\n !loading &&\n haveClearOrApplyChangesButtons &&\n renderButtonsContainer({\n clearButton,\n applyChangesButton,\n searchValue,\n optionsCount: optionList.length,\n })\n ) : (\n <BottomSheetFooter>{error && error.resetButton}</BottomSheetFooter>\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 onCloseBottomSheetWithUpdateValues = () => {\n setSelectedValues();\n onCloseWithAlertCheck();\n };\n\n const optionsVisible =\n !loading &&\n !emptyOptionsSearchHintVisible &&\n !emptyOptionsHintVisible &&\n !internalError &&\n !showErrorPlaceholder;\n\n const header = renderHeader({\n onCloseBottomSheet: onCloseWithAlertCheck,\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={false}\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 isXS\n {...option}\n />\n );\n })}\n </div>\n )}\n </BottomSheet>\n {renderAlertOnExitWithoutSaving?.({\n alertVisible,\n onCloseAlert,\n onCloseBottomSheetAndAlert: () => {\n onCloseAlert();\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 { useCallback, ReactElement, ReactNode, cloneElement, useState, ComponentProps } 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 type=\"mobile\" 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 onCloseAlert = () => setAlertVisible(false);\n const showAlertOnExitWithoutSaving = Boolean(renderAlertOnExitWithoutSaving);\n const showErrorPlaceholder = Boolean(error);\n\n const onCloseWithAlertCheck = () => {\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 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();\n };\n\n const optionsVisible =\n !loading &&\n !emptyOptionsSearchHintVisible &&\n !emptyOptionsHintVisible &&\n !internalError &&\n !showErrorPlaceholder;\n\n const header = renderHeader({\n onCloseBottomSheet: onCloseWithAlertCheck,\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 onClosePickerAndAlert: () => {\n onCloseAlert();\n onClose();\n },\n })}\n </>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
package/SelectDrop.js
CHANGED
|
@@ -5,6 +5,7 @@ import classnames from 'classnames';
|
|
|
5
5
|
import { keyboardMatches, keyboardKeys } from '@hh.ru/magritte-common-keyboard';
|
|
6
6
|
import { CellText, Cell } from '@hh.ru/magritte-ui-cell';
|
|
7
7
|
import { Drop } from '@hh.ru/magritte-ui-drop';
|
|
8
|
+
import { CheckOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';
|
|
8
9
|
import { Loader } from '@hh.ru/magritte-ui-loader';
|
|
9
10
|
import { SelectError } from './SelectError.js';
|
|
10
11
|
import { SelectOption } from './SelectOption.js';
|
|
@@ -17,23 +18,22 @@ import '@hh.ru/magritte-ui-title';
|
|
|
17
18
|
import '@hh.ru/magritte-ui-typography';
|
|
18
19
|
import '@hh.ru/magritte-ui-checkable-card/CheckableCardElement';
|
|
19
20
|
import '@hh.ru/magritte-ui-checkbox-radio';
|
|
20
|
-
import '@hh.ru/magritte-ui-icon/icon';
|
|
21
21
|
|
|
22
|
-
var styles = {"select-drop-container-wrapper":"magritte-select-drop-container-
|
|
22
|
+
var styles = {"select-drop-container-wrapper":"magritte-select-drop-container-wrapper___OHM0q_11-0-0","selectDropContainerWrapper":"magritte-select-drop-container-wrapper___OHM0q_11-0-0","select-drop-container":"magritte-select-drop-container___hee1p_11-0-0","selectDropContainer":"magritte-select-drop-container___hee1p_11-0-0","select-drop-container_plain":"magritte-select-drop-container_plain___766zl_11-0-0","selectDropContainerPlain":"magritte-select-drop-container_plain___766zl_11-0-0","select-drop":"magritte-select-drop___jn4O-_11-0-0","selectDrop":"magritte-select-drop___jn4O-_11-0-0","select-drop-header":"magritte-select-drop-header___fMmio_11-0-0","selectDropHeader":"magritte-select-drop-header___fMmio_11-0-0","select-drop_plain":"magritte-select-drop_plain___VL8Fz_11-0-0","selectDropPlain":"magritte-select-drop_plain___VL8Fz_11-0-0","label-option":"magritte-label-option___2N7t9_11-0-0","labelOption":"magritte-label-option___2N7t9_11-0-0","loading":"magritte-loading___AMiuq_11-0-0","hint":"magritte-hint___6qaFl_11-0-0"};
|
|
23
23
|
|
|
24
|
-
const SelectOptionDefault = ({ data, input, type, plain, }) => {
|
|
24
|
+
const SelectOptionDefault = ({ data, input, type, plain, checked, }) => {
|
|
25
25
|
if (type === 'delimiter') {
|
|
26
26
|
return (jsx(CellText, { maxLines: 1, style: "secondary", children: data.text }));
|
|
27
27
|
}
|
|
28
28
|
if (type === 'label') {
|
|
29
|
-
|
|
30
|
-
return jsx(CellText, { maxLines: 1, children: data.text });
|
|
31
|
-
}
|
|
32
|
-
return (jsx(Cell, { Element: "div", align: "center", children: jsx("div", { className: styles.labelOptionPlain, children: jsx(CellText, { maxLines: 1, children: data.text }) }) }));
|
|
29
|
+
return (jsx(Cell, { Element: "div", right: checked && plain ? jsx(CheckOutlinedSize24, {}) : undefined, children: jsx("div", { className: classnames({ [styles.labelOption]: !plain }), children: jsx(CellText, { maxLines: 1, children: data.text }) }) }));
|
|
33
30
|
}
|
|
34
31
|
return (jsx(Cell, { Element: "div", align: "center", left: input, children: jsx(CellText, { maxLines: 1, children: data.text }) }));
|
|
35
32
|
};
|
|
36
|
-
const RenderButtonsContainerDefault = ({ applyChangesButton }) => {
|
|
33
|
+
const RenderButtonsContainerDefault = ({ applyChangesButton, loading }) => {
|
|
34
|
+
if (loading) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
37
|
const primaryActions = [applyChangesButton].filter((btn) => btn);
|
|
38
38
|
if (primaryActions.length === 0) {
|
|
39
39
|
return null;
|
|
@@ -80,7 +80,7 @@ const SelectDrop = ({ activatorRef, type, name, multiple, applyChangesButton: _a
|
|
|
80
80
|
},
|
|
81
81
|
});
|
|
82
82
|
const needAddChangesButton = multiple && _applyChangesButton;
|
|
83
|
-
const applyChangesButton =
|
|
83
|
+
const applyChangesButton = needAddChangesButton &&
|
|
84
84
|
cloneElement(_applyChangesButton, {
|
|
85
85
|
key: 'applyChangesButton',
|
|
86
86
|
size: 'medium',
|
|
@@ -90,15 +90,6 @@ const SelectDrop = ({ activatorRef, type, name, multiple, applyChangesButton: _a
|
|
|
90
90
|
onClose?.();
|
|
91
91
|
onApply?.({ isMobile: false, searchValue });
|
|
92
92
|
},
|
|
93
|
-
})) ||
|
|
94
|
-
undefined;
|
|
95
|
-
const footer = !loading &&
|
|
96
|
-
needAddChangesButton &&
|
|
97
|
-
renderButtonsContainer({
|
|
98
|
-
applyChangesButton,
|
|
99
|
-
clearButton,
|
|
100
|
-
searchValue,
|
|
101
|
-
optionsCount: optionList.length,
|
|
102
93
|
});
|
|
103
94
|
const emptyOptionsHintVisible = optionList.length === 0 &&
|
|
104
95
|
!searchValue &&
|
|
@@ -125,7 +116,15 @@ const SelectDrop = ({ activatorRef, type, name, multiple, applyChangesButton: _a
|
|
|
125
116
|
if (keyboardMatches(event.nativeEvent, [keyboardKeys.Enter, keyboardKeys.Space])) {
|
|
126
117
|
closedByKeyboardRef.current = true;
|
|
127
118
|
}
|
|
128
|
-
}, widthEqualToActivator: widthEqualToActivator || loading, forcePlacement: true, footer:
|
|
119
|
+
}, widthEqualToActivator: widthEqualToActivator || loading, forcePlacement: true, footer: renderButtonsContainer({
|
|
120
|
+
applyChangesButton,
|
|
121
|
+
clearButton,
|
|
122
|
+
searchValue,
|
|
123
|
+
optionsCount: optionList.length,
|
|
124
|
+
loading,
|
|
125
|
+
isError: Boolean(internalError && innerErrorTrls),
|
|
126
|
+
emptyOptionsHintVisible: emptyOptionsHintVisible || emptySearchOptionsHintVisible,
|
|
127
|
+
}), onAfterExit: onDropClose, onAppear: onDropOpen, children: jsx("div", { className: styles.selectDropContainerWrapper, style: { maxHeight: `${maxHeight}px` }, children: jsxs("div", { className: classnames(styles.selectDropContainer, { [styles.selectDropContainerPlain]: plain }), children: [internalError && innerErrorTrls && jsx(SelectError, { innerErrorTrls: innerErrorTrls, reload: reload }), emptyOptionsHintVisible && jsx("div", { className: styles.hint, children: emptyOptionsHint }), emptySearchOptionsHintVisible && jsx("div", { className: styles.hint, children: emptyOptionsSearchHint }), loading && (jsx("div", { className: styles.loading, children: jsx(Loader, { size: 24 }) })), optionsVisible && (jsxs(Fragment, { children: [renderContentBefore && (jsx("div", { "data-qa": "magritte-select-header", className: styles.selectDropHeader, children: renderContentBefore({
|
|
129
128
|
clearSelectedValuesAndClose,
|
|
130
129
|
searchValue,
|
|
131
130
|
setSearchValue,
|
|
@@ -133,7 +132,7 @@ const SelectDrop = ({ activatorRef, type, name, multiple, applyChangesButton: _a
|
|
|
133
132
|
}) })), jsx("div", { className: classnames(styles.selectDrop, { [styles.selectDropPlain]: plain }), "data-qa": "magritte-select-option-list", children: optionList.map((option) => {
|
|
134
133
|
const checked = Boolean(option.data && getChecked(option.data, values ?? []));
|
|
135
134
|
const disabled = !checked && (option.disabled || isLimitExceeded);
|
|
136
|
-
return (jsx(SelectOption, { name: name, checked: checked, onChange: handleChange, render: renderItem, disabled: disabled, type: option.type || type, plain: !!plain,
|
|
135
|
+
return (jsx(SelectOption, { name: name, checked: checked, onChange: handleChange, render: renderItem, disabled: disabled, type: option.type || type, plain: !!plain, multiple: multiple, "data-qa": optionDataQa, data: option.data }, option.data.value));
|
|
137
136
|
}) })] }))] }) }) }));
|
|
138
137
|
};
|
|
139
138
|
|