diff --git a/.changeset/fuzzy-windows-camp.md b/.changeset/fuzzy-windows-camp.md new file mode 100644 index 0000000000..e683fc3390 --- /dev/null +++ b/.changeset/fuzzy-windows-camp.md @@ -0,0 +1,9 @@ +--- +'@alfalab/core-components-select': minor +--- + +1. Добавлен пропс `onSelectAllClick` в хук `useSelectWithApply` +2. Исправлена прокидка пропса `headerProps` в компонент `Header` хуке `useSelectWithApply` +3. Добавлен параметр `name` в обработчик `onChange` для кнопок "Применить" и "Сбросить" +4. Добавлен пропс `dataTestId` для чекбокса "Выбрать все" +5. Исправлена ситуация с пустым списком опций и отображаемым футером diff --git a/packages/select/src/components/options-list/Component.tsx b/packages/select/src/components/options-list/Component.tsx index ee35df3921..fad1cc4160 100644 --- a/packages/select/src/components/options-list/Component.tsx +++ b/packages/select/src/components/options-list/Component.tsx @@ -202,7 +202,7 @@ export const OptionsList = forwardRef( {nativeScrollbar ? renderWithNativeScrollbar() : renderWithCustomScrollbar()} - {showFooter && footer && ( + {showFooter && footer && flatOptions.length !== 0 && (
void; + /** * Компонент выпадающего меню */ @@ -72,6 +77,7 @@ export function useSelectWithApply({ options, selected, onChange = () => null, + onSelectAllClick = () => null, OptionsList, optionsListProps = {}, showClear = true, @@ -125,6 +131,7 @@ export function useSelectWithApply({ selected: selectedDraft[0], selectedMultiple: selectedDraft, initiator: null, + name: 'apply-footer', }); }; @@ -134,11 +141,15 @@ export function useSelectWithApply({ selected: null, selectedMultiple: [], initiator: null, + name: 'reset-footer', }); }; const handleToggleAll = () => { - setSelectedDraft(flatOptions.length === selectedDraft.length ? [] : flatOptions); + const optionsToSet = flatOptions.length === selectedDraft.length ? [] : flatOptions; + + onSelectAllClick(optionsToSet); + setSelectedDraft(optionsToSet); }; const handleChange: Required['onChange'] = ({ initiator, ...restArgs }) => { @@ -197,6 +208,7 @@ export function useSelectWithApply({ setSelectedDraft, showHeaderWithSelectAll, headerProps: { + ...(optionsListProps as AnyObject)?.headerProps, indeterminate: !!selectedDraft.length && selectedDraft.length < flatOptions.length, checked: selectedDraft.length === flatOptions.length, onChange: handleToggleAll, diff --git a/packages/select/src/presets/useSelectWithApply/options-list-with-apply/header/Component.tsx b/packages/select/src/presets/useSelectWithApply/options-list-with-apply/header/Component.tsx index 45152b2345..17bbde404c 100644 --- a/packages/select/src/presets/useSelectWithApply/options-list-with-apply/header/Component.tsx +++ b/packages/select/src/presets/useSelectWithApply/options-list-with-apply/header/Component.tsx @@ -10,9 +10,16 @@ export type HeaderProps = { indeterminate?: boolean; onChange?: CheckboxProps['onChange']; mobile?: boolean; + dataTestId?: string; }; -export const Header: React.FC = ({ onChange, checked, indeterminate, mobile }) => ( +export const Header: React.FC = ({ + onChange, + checked, + indeterminate, + mobile, + dataTestId, +}) => (
= ({ onChange, checked, indeterminate onChange={onChange} checked={checked} label='Выбрать все' + dataTestId={dataTestId} />
);