@hh.ru/magritte-ui-chips-input 8.1.6 → 8.2.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/ChipsInput.d.ts +2 -1
- package/ChipsInput.js +3 -2
- package/ChipsInput.js.map +1 -1
- package/package.json +3 -3
- package/types.d.ts +8 -6
package/ChipsInput.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { ForwardedRef, ReactElement } from 'react';
|
|
2
2
|
import { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';
|
|
3
3
|
import { ChipsInputProps } from '@hh.ru/magritte-ui-chips-input/types';
|
|
4
|
-
|
|
4
|
+
import { SuggestInputComponent } from '@hh.ru/magritte-ui-suggest';
|
|
5
|
+
declare const ChipsInput: (<DataType extends StaticDataFetcherItem, InputType extends SuggestInputComponent = SuggestInputComponent>(props: ChipsInputProps<DataType, InputType> & {
|
|
5
6
|
ref?: ForwardedRef<HTMLInputElement>;
|
|
6
7
|
}) => ReactElement | null) & {
|
|
7
8
|
displayName: string;
|
package/ChipsInput.js
CHANGED
|
@@ -31,7 +31,7 @@ const getInitialSelectValue = (type, chips) => {
|
|
|
31
31
|
}
|
|
32
32
|
return chips.map((chip) => ({ value: chip.value, text: chip.label }));
|
|
33
33
|
};
|
|
34
|
-
const ChipsInputComponent = ({ type, state, onChange: onChangeExternal, triggerProps, suggestProps, selectProps }, ref) => {
|
|
34
|
+
const ChipsInputComponent = ({ type, state, onChange: onChangeExternal, triggerProps, suggestProps, selectProps, }, ref) => {
|
|
35
35
|
const chipsTriggerRef = useRef(null);
|
|
36
36
|
const chipsTriggerRefCallback = useMultipleRefs(ref, chipsTriggerRef);
|
|
37
37
|
const { allowArbitraryValues } = triggerProps;
|
|
@@ -63,8 +63,9 @@ const ChipsInputComponent = ({ type, state, onChange: onChangeExternal, triggerP
|
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
}, onBottomSheetOpen: () => chipsTriggerRef.current?.blur(), input: {
|
|
66
|
-
component: Input,
|
|
66
|
+
component: suggestProps.input?.component || Input,
|
|
67
67
|
props: {
|
|
68
|
+
...suggestProps.input?.props,
|
|
68
69
|
value: state.value,
|
|
69
70
|
'data-qa': 'chips-input-suggest-search',
|
|
70
71
|
},
|
package/ChipsInput.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChipsInput.js","sources":["../src/ChipsInput.tsx"],"sourcesContent":["import { forwardRef, useRef, ForwardedRef, ReactElement, useState, useEffect } from 'react';\n\nimport { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { ChipsInputProps } from '@hh.ru/magritte-ui-chips-input/types';\nimport { ChipsTrigger } from '@hh.ru/magritte-ui-chips-trigger';\nimport { Input } from '@hh.ru/magritte-ui-input';\nimport { Select } from '@hh.ru/magritte-ui-select';\nimport { Suggest } from '@hh.ru/magritte-ui-suggest';\n\ntype ChipsList<DataType extends StaticDataFetcherItem> = ChipsInputProps<DataType>['state']['chips'];\ntype OnChangeSuggest = ((value: string) => void) | undefined;\n\nfunction areValuesEqual<DataType extends StaticDataFetcherItem>(\n chips: ChipsInputProps<DataType>['state']['chips'],\n selectValues: DataType[]\n): boolean {\n const filteredChipsSet = new Set<string>();\n chips.forEach((item) => {\n if (!item.userInput) {\n filteredChipsSet.add(item.value);\n }\n });\n if (filteredChipsSet.size !== selectValues.length) {\n return false;\n }\n return selectValues.every(({ value }) => filteredChipsSet.has(value));\n}\n\nconst getUniqueChips = <DataType extends StaticDataFetcherItem>(\n selectState: DataType[],\n chipsFromState: ChipsList<DataType>\n): ChipsList<DataType> => {\n const chipsFromUserInput = chipsFromState.filter(({ userInput }) => !!userInput);\n // добавить значения селекта (преобразовать в чипсы их сперва)\n const chipsFromSelect: ChipsList<DataType> =\n selectState.length > 0 ? selectState.map(({ value, text }) => ({ value, label: text, userInput: false })) : [];\n return [...chipsFromSelect, ...chipsFromUserInput];\n};\n\nconst getInitialSelectValue = <DataType extends StaticDataFetcherItem>(\n type: ChipsInputProps<DataType>['type'],\n chips: ChipsInputProps<DataType>['state']['chips']\n): DataType[] => {\n if (type === 'suggest') {\n return [];\n }\n return chips.map((chip) => ({ value: chip.value, text: chip.label }) as DataType);\n};\n\nconst ChipsInputComponent = <DataType extends StaticDataFetcherItem>(\n { type, state, onChange: onChangeExternal, triggerProps, suggestProps, selectProps }: ChipsInputProps<DataType>,\n ref: ForwardedRef<HTMLInputElement>\n) => {\n const chipsTriggerRef = useRef<HTMLInputElement>(null);\n const chipsTriggerRefCallback = useMultipleRefs(ref, chipsTriggerRef);\n const { allowArbitraryValues } = triggerProps;\n const [selectState, setSelectState] = useState(() => getInitialSelectValue<DataType>(type, state.chips));\n const selectStateRef = useRef<DataType[]>(selectState);\n const optionsCountRef = useRef<number>(0);\n const onChangeSuggestRef = useRef<OnChangeSuggest>();\n const { isMobile } = useBreakpoint();\n\n useEffect(() => {\n if (type === 'suggest') {\n return;\n }\n if (areValuesEqual(state.chips, selectStateRef.current)) {\n return;\n }\n const newSelectState = getInitialSelectValue<DataType>(type, state.chips);\n selectStateRef.current = newSelectState;\n setSelectState(newSelectState);\n }, [type, state.chips]);\n\n if (type === 'suggest') {\n return (\n <Suggest\n {...suggestProps}\n onChange={(value, isValueFromList) => {\n if (!isValueFromList) {\n return;\n }\n if (!state.chips.some((chip) => chip.value === value)) {\n onChangeExternal({ value: '', chips: [...state.chips, { value }] });\n if (isMobile) {\n onChangeSuggestRef.current?.('');\n }\n }\n }}\n onBottomSheetOpen={() => chipsTriggerRef.current?.blur()}\n input={{\n component: Input,\n props: {\n value: state.value,\n 'data-qa': 'chips-input-suggest-search',\n },\n }}\n onSearchSubmit={(event, onCloseBottomSheet, optionsCount) => {\n if (!allowArbitraryValues || optionsCount > 0) {\n return;\n }\n const value = (event.target as HTMLInputElement).value;\n if (value) {\n onChangeExternal({ value: '', chips: [...state.chips, { value }] });\n onCloseBottomSheet();\n onChangeSuggestRef.current?.('');\n }\n }}\n renderTrigger={({ props, optionsCount }) => {\n const { onChange, wrapperRef, onFocus, onKeyDown } = props;\n onChangeSuggestRef.current = onChange;\n return (\n <ChipsTrigger\n {...triggerProps}\n // разрешаем добавлять результаты только если в suggest ничего не нашли\n allowArbitraryValues={optionsCount === 0 && allowArbitraryValues}\n state={state}\n ref={chipsTriggerRefCallback}\n wrapperRef={wrapperRef}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n data-qa={triggerProps['data-qa'] || 'chips-input-suggest-trigger'}\n onChange={(newState) => {\n onChangeExternal(newState);\n onChange?.(newState.value);\n }}\n />\n );\n }}\n />\n );\n }\n\n const { applyChangesButton, clearButton } = selectProps;\n const haveApplyChangesButton = Boolean(applyChangesButton);\n const haveClearButton = Boolean(clearButton);\n return (\n <Select\n {...selectProps}\n searchable\n multiple\n value={selectState}\n onSelectOption={(values) => {\n selectStateRef.current = values;\n }}\n onChange={(newValues) => {\n setSelectState(newValues);\n if (haveApplyChangesButton || (haveClearButton && newValues.length === 0)) {\n // обработаем эти кейсы в onApply/onClear\n return;\n }\n const uniqueChips = getUniqueChips(newValues, state.chips);\n onChangeExternal({\n value: '',\n chips: uniqueChips,\n });\n }}\n onOptionsChange={(options) => {\n optionsCountRef.current = options.length;\n }}\n onApply={({ isMobile, searchValue }) => {\n const uniqueChips = getUniqueChips(selectStateRef.current, state.chips);\n // добавляем пользовательский ввод, если нужно\n // в случае bs - из navbar, в случае drop - из chis-trigger\n const userValue = isMobile ? searchValue : state.value;\n if (allowArbitraryValues && userValue.length > 0 && optionsCountRef.current === 0) {\n uniqueChips.push({ value: userValue });\n }\n onChangeExternal({\n value: '',\n chips: uniqueChips,\n });\n // актуализируем состояние селекта\n setSelectState(selectStateRef.current);\n }}\n onClear={() => {\n onChangeExternal({\n value: '',\n chips: [],\n });\n setSelectState([]);\n selectStateRef.current = [];\n }}\n onSearchSubmit={(event, _, optionsCount, onCloseBottomSheetWithUpdateValues) => {\n const uniqueChips = getUniqueChips(selectStateRef.current, state.chips);\n // добавляем пользовательский ввод из bs, если нужно\n const userValue = (event.target as HTMLInputElement).value;\n if (allowArbitraryValues && userValue.length > 0 && optionsCount === 0) {\n uniqueChips.push({ value: userValue, userInput: true });\n }\n onChangeExternal({\n value: '',\n chips: uniqueChips,\n });\n setSelectState(selectStateRef.current);\n onCloseBottomSheetWithUpdateValues();\n }}\n triggerProps={{ size: 'large' }}\n renderTrigger={({ ref, setSearchValue, onKeyDown, onBlur, onFocus, optionsCount }) => {\n optionsCountRef.current = optionsCount;\n return (\n <ChipsTrigger\n {...triggerProps}\n allowArbitraryValues={optionsCount === 0 && allowArbitraryValues}\n state={state}\n ref={chipsTriggerRefCallback}\n wrapperRef={ref}\n onKeyDown={onKeyDown}\n onBlur={onBlur}\n onFocus={onFocus}\n data-qa={triggerProps['data-qa'] || 'chips-input-select-trigger'}\n onChange={(newState) => {\n const { event } = newState;\n setSearchValue(newState.value);\n\n // если нажали `enter` в инпуте на desktop\n if (event?.type === 'add' && event.modifier === 'enter') {\n const uniqueChips = getUniqueChips(selectStateRef.current, newState.chips);\n onChangeExternal({\n value: '',\n chips: uniqueChips,\n });\n setSelectState(selectStateRef.current);\n return;\n }\n\n onChangeExternal(newState);\n // если обновился только input, то ререндрить select не нужно\n if (event?.type === 'change' && event.modifier === 'keyboard') {\n return;\n }\n\n // осталось обработать только remove\n const deletedChip = event?.element?.value as string;\n const newSelectState = selectStateRef.current.filter((item) => item.value !== deletedChip);\n setSelectState(newSelectState);\n selectStateRef.current = newSelectState;\n }}\n />\n );\n }}\n />\n );\n};\n\nconst ChipsInput = forwardRef(ChipsInputComponent) as (<DataType extends StaticDataFetcherItem>(\n props: ChipsInputProps<DataType> & { ref?: ForwardedRef<HTMLInputElement> }\n) => ReactElement | null) & { displayName: string };\n\nChipsInput.displayName = 'ChipsInput';\n\nexport { ChipsInput };\n"],"names":["_jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChipsInput.js","sources":["../src/ChipsInput.tsx"],"sourcesContent":["import { forwardRef, useRef, ForwardedRef, ReactElement, useState, useEffect } from 'react';\n\nimport { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { ChipsInputProps } from '@hh.ru/magritte-ui-chips-input/types';\nimport { ChipsTrigger } from '@hh.ru/magritte-ui-chips-trigger';\nimport { Input } from '@hh.ru/magritte-ui-input';\nimport { Select } from '@hh.ru/magritte-ui-select';\nimport { Suggest, SuggestInputComponent, SuggestInputProp } from '@hh.ru/magritte-ui-suggest';\n\ntype ChipsList<DataType extends StaticDataFetcherItem> = ChipsInputProps<DataType>['state']['chips'];\ntype OnChangeSuggest = ((value: string) => void) | undefined;\n\nfunction areValuesEqual<DataType extends StaticDataFetcherItem>(\n chips: ChipsInputProps<DataType>['state']['chips'],\n selectValues: DataType[]\n): boolean {\n const filteredChipsSet = new Set<string>();\n chips.forEach((item) => {\n if (!item.userInput) {\n filteredChipsSet.add(item.value);\n }\n });\n if (filteredChipsSet.size !== selectValues.length) {\n return false;\n }\n return selectValues.every(({ value }) => filteredChipsSet.has(value));\n}\n\nconst getUniqueChips = <DataType extends StaticDataFetcherItem>(\n selectState: DataType[],\n chipsFromState: ChipsList<DataType>\n): ChipsList<DataType> => {\n const chipsFromUserInput = chipsFromState.filter(({ userInput }) => !!userInput);\n // добавить значения селекта (преобразовать в чипсы их сперва)\n const chipsFromSelect: ChipsList<DataType> =\n selectState.length > 0 ? selectState.map(({ value, text }) => ({ value, label: text, userInput: false })) : [];\n return [...chipsFromSelect, ...chipsFromUserInput];\n};\n\nconst getInitialSelectValue = <DataType extends StaticDataFetcherItem>(\n type: ChipsInputProps<DataType>['type'],\n chips: ChipsInputProps<DataType>['state']['chips']\n): DataType[] => {\n if (type === 'suggest') {\n return [];\n }\n return chips.map((chip) => ({ value: chip.value, text: chip.label }) as DataType);\n};\n\nconst ChipsInputComponent = <\n DataType extends StaticDataFetcherItem,\n InputType extends SuggestInputComponent = SuggestInputComponent,\n>(\n {\n type,\n state,\n onChange: onChangeExternal,\n triggerProps,\n suggestProps,\n selectProps,\n }: ChipsInputProps<DataType, InputType>,\n ref: ForwardedRef<HTMLInputElement>\n) => {\n const chipsTriggerRef = useRef<HTMLInputElement>(null);\n const chipsTriggerRefCallback = useMultipleRefs(ref, chipsTriggerRef);\n const { allowArbitraryValues } = triggerProps;\n const [selectState, setSelectState] = useState(() => getInitialSelectValue<DataType>(type, state.chips));\n const selectStateRef = useRef<DataType[]>(selectState);\n const optionsCountRef = useRef<number>(0);\n const onChangeSuggestRef = useRef<OnChangeSuggest>();\n const { isMobile } = useBreakpoint();\n\n useEffect(() => {\n if (type === 'suggest') {\n return;\n }\n if (areValuesEqual(state.chips, selectStateRef.current)) {\n return;\n }\n const newSelectState = getInitialSelectValue<DataType>(type, state.chips);\n selectStateRef.current = newSelectState;\n setSelectState(newSelectState);\n }, [type, state.chips]);\n\n if (type === 'suggest') {\n return (\n <Suggest\n {...suggestProps}\n onChange={(value, isValueFromList) => {\n if (!isValueFromList) {\n return;\n }\n if (!state.chips.some((chip) => chip.value === value)) {\n onChangeExternal({ value: '', chips: [...state.chips, { value }] });\n if (isMobile) {\n onChangeSuggestRef.current?.('');\n }\n }\n }}\n onBottomSheetOpen={() => chipsTriggerRef.current?.blur()}\n input={\n {\n component: suggestProps.input?.component || Input,\n props: {\n ...suggestProps.input?.props,\n value: state.value,\n 'data-qa': 'chips-input-suggest-search',\n },\n } as unknown as SuggestInputProp<InputType>\n }\n onSearchSubmit={(event, onCloseBottomSheet, optionsCount) => {\n if (!allowArbitraryValues || optionsCount > 0) {\n return;\n }\n const value = (event.target as HTMLInputElement).value;\n if (value) {\n onChangeExternal({ value: '', chips: [...state.chips, { value }] });\n onCloseBottomSheet();\n onChangeSuggestRef.current?.('');\n }\n }}\n renderTrigger={({ props, optionsCount }) => {\n const { onChange, wrapperRef, onFocus, onKeyDown } = props;\n onChangeSuggestRef.current = onChange;\n return (\n <ChipsTrigger\n {...triggerProps}\n // разрешаем добавлять результаты только если в suggest ничего не нашли\n allowArbitraryValues={optionsCount === 0 && allowArbitraryValues}\n state={state}\n ref={chipsTriggerRefCallback}\n wrapperRef={wrapperRef}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n data-qa={triggerProps['data-qa'] || 'chips-input-suggest-trigger'}\n onChange={(newState) => {\n onChangeExternal(newState);\n onChange?.(newState.value);\n }}\n />\n );\n }}\n />\n );\n }\n\n const { applyChangesButton, clearButton } = selectProps;\n const haveApplyChangesButton = Boolean(applyChangesButton);\n const haveClearButton = Boolean(clearButton);\n return (\n <Select\n {...selectProps}\n searchable\n multiple\n value={selectState}\n onSelectOption={(values) => {\n selectStateRef.current = values;\n }}\n onChange={(newValues) => {\n setSelectState(newValues);\n if (haveApplyChangesButton || (haveClearButton && newValues.length === 0)) {\n // обработаем эти кейсы в onApply/onClear\n return;\n }\n const uniqueChips = getUniqueChips(newValues, state.chips);\n onChangeExternal({\n value: '',\n chips: uniqueChips,\n });\n }}\n onOptionsChange={(options) => {\n optionsCountRef.current = options.length;\n }}\n onApply={({ isMobile, searchValue }) => {\n const uniqueChips = getUniqueChips(selectStateRef.current, state.chips);\n // добавляем пользовательский ввод, если нужно\n // в случае bs - из navbar, в случае drop - из chis-trigger\n const userValue = isMobile ? searchValue : state.value;\n if (allowArbitraryValues && userValue.length > 0 && optionsCountRef.current === 0) {\n uniqueChips.push({ value: userValue });\n }\n onChangeExternal({\n value: '',\n chips: uniqueChips,\n });\n // актуализируем состояние селекта\n setSelectState(selectStateRef.current);\n }}\n onClear={() => {\n onChangeExternal({\n value: '',\n chips: [],\n });\n setSelectState([]);\n selectStateRef.current = [];\n }}\n onSearchSubmit={(event, _, optionsCount, onCloseBottomSheetWithUpdateValues) => {\n const uniqueChips = getUniqueChips(selectStateRef.current, state.chips);\n // добавляем пользовательский ввод из bs, если нужно\n const userValue = (event.target as HTMLInputElement).value;\n if (allowArbitraryValues && userValue.length > 0 && optionsCount === 0) {\n uniqueChips.push({ value: userValue, userInput: true });\n }\n onChangeExternal({\n value: '',\n chips: uniqueChips,\n });\n setSelectState(selectStateRef.current);\n onCloseBottomSheetWithUpdateValues();\n }}\n triggerProps={{ size: 'large' }}\n renderTrigger={({ ref, setSearchValue, onKeyDown, onBlur, onFocus, optionsCount }) => {\n optionsCountRef.current = optionsCount;\n return (\n <ChipsTrigger\n {...triggerProps}\n allowArbitraryValues={optionsCount === 0 && allowArbitraryValues}\n state={state}\n ref={chipsTriggerRefCallback}\n wrapperRef={ref}\n onKeyDown={onKeyDown}\n onBlur={onBlur}\n onFocus={onFocus}\n data-qa={triggerProps['data-qa'] || 'chips-input-select-trigger'}\n onChange={(newState) => {\n const { event } = newState;\n setSearchValue(newState.value);\n\n // если нажали `enter` в инпуте на desktop\n if (event?.type === 'add' && event.modifier === 'enter') {\n const uniqueChips = getUniqueChips(selectStateRef.current, newState.chips);\n onChangeExternal({\n value: '',\n chips: uniqueChips,\n });\n setSelectState(selectStateRef.current);\n return;\n }\n\n onChangeExternal(newState);\n // если обновился только input, то ререндрить select не нужно\n if (event?.type === 'change' && event.modifier === 'keyboard') {\n return;\n }\n\n // осталось обработать только remove\n const deletedChip = event?.element?.value as string;\n const newSelectState = selectStateRef.current.filter((item) => item.value !== deletedChip);\n setSelectState(newSelectState);\n selectStateRef.current = newSelectState;\n }}\n />\n );\n }}\n />\n );\n};\n\nconst ChipsInput = forwardRef(ChipsInputComponent) as (<\n DataType extends StaticDataFetcherItem,\n InputType extends SuggestInputComponent = SuggestInputComponent,\n>(\n props: ChipsInputProps<DataType, InputType> & { ref?: ForwardedRef<HTMLInputElement> }\n) => ReactElement | null) & { displayName: string };\n\nChipsInput.displayName = 'ChipsInput';\n\nexport { ChipsInput };\n"],"names":["_jsx"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hh.ru/magritte-ui-chips-input",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.2.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"sideEffects": [
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"@hh.ru/magritte-ui-input": "7.2.23",
|
|
33
33
|
"@hh.ru/magritte-ui-mock-component": "1.1.4",
|
|
34
34
|
"@hh.ru/magritte-ui-select": "11.0.31",
|
|
35
|
-
"@hh.ru/magritte-ui-suggest": "10.0
|
|
35
|
+
"@hh.ru/magritte-ui-suggest": "10.1.0",
|
|
36
36
|
"@hh.ru/magritte-ui-theme-provider": "1.1.51"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "11e7fed272ef72578cdb4594670d90423d28ac1c"
|
|
39
39
|
}
|
package/types.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { StaticDataFetcherItem } from '@hh.ru/magritte-common-data-provider';
|
|
2
2
|
import { ChipsTriggerProps } from '@hh.ru/magritte-ui-chips-trigger';
|
|
3
3
|
import { SelectProps } from '@hh.ru/magritte-ui-select/types';
|
|
4
|
-
import { SuggestProps } from '@hh.ru/magritte-ui-suggest';
|
|
4
|
+
import { SuggestProps, SuggestInputComponent, SuggestInputProp } from '@hh.ru/magritte-ui-suggest';
|
|
5
5
|
type TriggerPropsHelper = Omit<ChipsTriggerProps, 'expanded' | 'toggleExpanded' | 'wrapperRef' | 'ref' | 'state' | 'onChange' | 'onKeyDown' | 'onFocus'>;
|
|
6
|
-
type SuggestPropsHelper<DataType> = Omit<SuggestProps<DataType>, 'inputValue' | 'onChange' | 'renderTrigger' | 'onSearchSubmit' | 'onBottomSheetOpen' | 'input'
|
|
6
|
+
type SuggestPropsHelper<DataType, InputType extends SuggestInputComponent = SuggestInputComponent> = Omit<SuggestProps<DataType, InputType>, 'inputValue' | 'onChange' | 'renderTrigger' | 'onSearchSubmit' | 'onBottomSheetOpen' | 'input'> & {
|
|
7
|
+
input?: SuggestInputProp<InputType>;
|
|
8
|
+
};
|
|
7
9
|
type SelectPropsHelper<DataType extends StaticDataFetcherItem> = Omit<SelectProps<true, DataType>, 'value' | 'onChange' | 'renderTrigger' | 'onSearchSubmit' | 'onBottomSheetOpen' | 'triggerProps' | 'searchable' | 'multiple'>;
|
|
8
10
|
export interface ChipsInputBaseProps {
|
|
9
11
|
type: 'select' | 'suggest';
|
|
@@ -25,13 +27,13 @@ interface ChipsInputSelectProps<DataType extends StaticDataFetcherItem> {
|
|
|
25
27
|
selectProps: SelectPropsHelper<DataType>;
|
|
26
28
|
suggestProps?: never;
|
|
27
29
|
}
|
|
28
|
-
interface ChipsInputSuggestProps<DataType> {
|
|
30
|
+
interface ChipsInputSuggestProps<DataType, InputType extends SuggestInputComponent = SuggestInputComponent> {
|
|
29
31
|
/** Тип для chips-input */
|
|
30
32
|
type: 'suggest';
|
|
31
33
|
/** Свойства suggest */
|
|
32
|
-
suggestProps: SuggestPropsHelper<DataType>;
|
|
34
|
+
suggestProps: SuggestPropsHelper<DataType, InputType>;
|
|
33
35
|
selectProps?: never;
|
|
34
36
|
}
|
|
35
|
-
export type ChipsInputProps<DataType, Variant extends ChipsInputBaseProps['type'] = ChipsInputBaseProps['type']> = ChipsInputBaseProps & ChipsInputStateProps & (Variant extends 'suggest' ? ChipsInputSuggestProps<DataType> : ChipsInputSelectProps<DataType & StaticDataFetcherItem>);
|
|
36
|
-
export type UncontrolledChipsInputProps<DataType, Variant extends ChipsInputBaseProps['type'] = ChipsInputBaseProps['type']> = ChipsInputBaseProps & Partial<ChipsInputStateProps> & (Variant extends 'suggest' ? ChipsInputSuggestProps<DataType> : ChipsInputSelectProps<DataType & StaticDataFetcherItem>);
|
|
37
|
+
export type ChipsInputProps<DataType, InputType extends SuggestInputComponent = SuggestInputComponent, Variant extends ChipsInputBaseProps['type'] = ChipsInputBaseProps['type']> = ChipsInputBaseProps & ChipsInputStateProps & (Variant extends 'suggest' ? ChipsInputSuggestProps<DataType, InputType> : ChipsInputSelectProps<DataType & StaticDataFetcherItem>);
|
|
38
|
+
export type UncontrolledChipsInputProps<DataType, InputType extends SuggestInputComponent = SuggestInputComponent, Variant extends ChipsInputBaseProps['type'] = ChipsInputBaseProps['type']> = ChipsInputBaseProps & Partial<ChipsInputStateProps> & (Variant extends 'suggest' ? ChipsInputSuggestProps<DataType, InputType> : ChipsInputSelectProps<DataType & StaticDataFetcherItem>);
|
|
37
39
|
export {};
|