@hh.ru/magritte-ui-tree-selector 5.5.80 → 5.5.81
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/Action.d.ts +1 -1
- package/Action.js +15 -12
- package/Action.js.map +1 -1
- package/Item.d.ts +3 -3
- package/Item.js +106 -54
- package/Item.js.map +1 -1
- package/ItemContent.d.ts +2 -2
- package/ItemContent.js +69 -15
- package/ItemContent.js.map +1 -1
- package/ItemsList.d.ts +3 -3
- package/ItemsList.js +243 -159
- package/ItemsList.js.map +1 -1
- package/MobileDelimiter.js +1 -1
- package/MobileDelimiter.js.map +1 -1
- package/MobileItem.d.ts +2 -2
- package/MobileItem.js +26 -5
- package/MobileItem.js.map +1 -1
- package/MobileItemsList.d.ts +2 -2
- package/MobileItemsList.js +259 -132
- package/MobileItemsList.js.map +1 -1
- package/MobileParentItem.d.ts +3 -3
- package/MobileParentItem.js +33 -14
- package/MobileParentItem.js.map +1 -1
- package/TreeSelector.d.ts +2 -2
- package/TreeSelector.js +49 -20
- package/TreeSelector.js.map +1 -1
- package/TreeSelectorDummy.d.ts +2 -2
- package/TreeSelectorDummy.js +178 -109
- package/TreeSelectorDummy.js.map +1 -1
- package/TreeSelectorItemBase.d.ts +2 -2
- package/TreeSelectorItemBase.js +12 -6
- package/TreeSelectorItemBase.js.map +1 -1
- package/TreeSelectorWrapper.js +38 -24
- package/TreeSelectorWrapper.js.map +1 -1
- package/collection/treeCollection.d.ts +1 -1
- package/collection/treeCollection.js +178 -184
- package/collection/treeCollection.js.map +1 -1
- package/collection/treeCollectionHelper.d.ts +9 -3
- package/collection/treeCollectionHelper.js +68 -105
- package/collection/treeCollectionHelper.js.map +1 -1
- package/collection/types.d.ts +1 -1
- package/index.css +45 -45
- package/index.d.ts +9 -9
- package/index.js +1 -1
- package/index.mock.d.ts +6 -6
- package/index.mock.js +14 -6
- package/index.mock.js.map +1 -1
- package/package.json +13 -13
- package/strategy/createSingleValueToggler.d.ts +1 -1
- package/strategy/createSingleValueToggler.js +17 -41
- package/strategy/createSingleValueToggler.js.map +1 -1
- package/strategy/createTreeCollectionToggler.d.ts +3 -3
- package/strategy/createTreeCollectionToggler.js +42 -58
- package/strategy/createTreeCollectionToggler.js.map +1 -1
- package/strategy/dummyToggle.d.ts +1 -1
- package/strategy/dummyToggle.js +10 -13
- package/strategy/dummyToggle.js.map +1 -1
- package/strategy/immutableSelectionStrategy.d.ts +3 -3
- package/strategy/immutableSelectionStrategy.js +27 -26
- package/strategy/immutableSelectionStrategy.js.map +1 -1
- package/strategy/selectionStrategy.d.ts +3 -3
- package/strategy/selectionStrategy.js +47 -56
- package/strategy/selectionStrategy.js.map +1 -1
- package/strategy/types.d.ts +1 -1
- package/tree-selector-item-DiHx85es.js +5 -0
- package/tree-selector-item-DiHx85es.js.map +1 -0
- package/types.d.ts +2 -2
- package/useAnimationTimeout.js +14 -14
- package/useAnimationTimeout.js.map +1 -1
- package/useDisabled.d.ts +2 -2
- package/useDisabled.js +7 -10
- package/useDisabled.js.map +1 -1
- package/useExpanded.d.ts +2 -2
- package/useExpanded.js +65 -54
- package/useExpanded.js.map +1 -1
- package/useIndeterminate.d.ts +2 -2
- package/useIndeterminate.js +17 -18
- package/useIndeterminate.js.map +1 -1
- package/useRenderInput.d.ts +1 -1
- package/useRenderInput.js +44 -32
- package/useRenderInput.js.map +1 -1
- package/useSelected.d.ts +3 -3
- package/useSelected.js +36 -31
- package/useSelected.js.map +1 -1
- package/tree-selector-item-BOEDcwrO.js +0 -5
- package/tree-selector-item-BOEDcwrO.js.map +0 -1
package/TreeSelector.js
CHANGED
|
@@ -2,7 +2,7 @@ import './index.css';
|
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { forwardRef, useMemo } from 'react';
|
|
4
4
|
import { TreeSelectorDummy } from './TreeSelectorDummy.js';
|
|
5
|
-
import
|
|
5
|
+
import immutableSelectionStrategy_default from './strategy/immutableSelectionStrategy.js';
|
|
6
6
|
import { useDisabled } from './useDisabled.js';
|
|
7
7
|
import { useSelected } from './useSelected.js';
|
|
8
8
|
import '@hh.ru/magritte-common-fuzzy-search';
|
|
@@ -19,7 +19,7 @@ import '@hh.ru/magritte-ui-checkbox-radio';
|
|
|
19
19
|
import './TreeSelectorItemBase.js';
|
|
20
20
|
import '@hh.ru/magritte-ui-cell';
|
|
21
21
|
import '@hh.ru/magritte-ui-typography';
|
|
22
|
-
import './tree-selector-item-
|
|
22
|
+
import './tree-selector-item-DiHx85es.js';
|
|
23
23
|
import './MobileItemsList.js';
|
|
24
24
|
import '@hh.ru/magritte-common-func-utils';
|
|
25
25
|
import '@hh.ru/magritte-ui-checkable-card/CheckableCardElement';
|
|
@@ -45,25 +45,54 @@ import './strategy/createTreeCollectionToggler.js';
|
|
|
45
45
|
import './strategy/dummyToggle.js';
|
|
46
46
|
|
|
47
47
|
const TreeSelectorComponent = (props, ref) => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
48
|
+
const {
|
|
49
|
+
value,
|
|
50
|
+
collection,
|
|
51
|
+
singleChoice,
|
|
52
|
+
leavesOnly,
|
|
53
|
+
collapseToParentId,
|
|
54
|
+
checkSelectable,
|
|
55
|
+
onChange,
|
|
56
|
+
disabled,
|
|
57
|
+
maxSelected,
|
|
58
|
+
...rest
|
|
59
|
+
} = props;
|
|
60
|
+
const strategy = useMemo(
|
|
61
|
+
() => new immutableSelectionStrategy_default(collection, {
|
|
62
|
+
singleChoice,
|
|
63
|
+
leavesOnly,
|
|
64
|
+
checkSelectable
|
|
65
|
+
}),
|
|
66
|
+
[collection, singleChoice, leavesOnly, checkSelectable]
|
|
67
|
+
);
|
|
68
|
+
if (maxSelected && !collapseToParentId && !leavesOnly) {
|
|
69
|
+
throw new Error(
|
|
70
|
+
`Magritte component TreeSelector: maxSelected can be used only with collapseToParentId or leavesOnly`
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
const { selected, setSelected } = useSelected({
|
|
74
|
+
value,
|
|
75
|
+
strategy,
|
|
76
|
+
collection,
|
|
77
|
+
onChange,
|
|
78
|
+
maxSelected,
|
|
79
|
+
collapseToParentId
|
|
80
|
+
});
|
|
81
|
+
const currentDisabled = useDisabled({ selected, disabled, collection, maxSelected });
|
|
82
|
+
return /* @__PURE__ */ jsx(
|
|
83
|
+
TreeSelectorDummy,
|
|
84
|
+
{
|
|
85
|
+
...rest,
|
|
86
|
+
value: selected,
|
|
87
|
+
disabled: currentDisabled,
|
|
88
|
+
collection,
|
|
89
|
+
singleChoice,
|
|
90
|
+
leavesOnly,
|
|
91
|
+
checkSelectable,
|
|
92
|
+
onChange: setSelected,
|
|
93
|
+
ref
|
|
56
94
|
}
|
|
57
|
-
|
|
58
|
-
value,
|
|
59
|
-
strategy,
|
|
60
|
-
collection,
|
|
61
|
-
onChange,
|
|
62
|
-
maxSelected,
|
|
63
|
-
collapseToParentId,
|
|
64
|
-
});
|
|
65
|
-
const currentDisabled = useDisabled({ selected, disabled, collection, maxSelected });
|
|
66
|
-
return (jsx(TreeSelectorDummy, { ...rest, value: selected, disabled: currentDisabled, collection: collection, singleChoice: singleChoice, leavesOnly: leavesOnly, checkSelectable: checkSelectable, onChange: setSelected, ref: ref }));
|
|
95
|
+
);
|
|
67
96
|
};
|
|
68
97
|
const TreeSelector = forwardRef(TreeSelectorComponent);
|
|
69
98
|
|
package/TreeSelector.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSelector.js","sources":["src/TreeSelector.tsx"],"sourcesContent":["import { ForwardedRef, forwardRef, ReactElement, useMemo } from 'react';\n\nimport { TreeSelectorDummy } from '@hh.ru/magritte-ui-tree-selector/TreeSelectorDummy';\nimport { AdditionalDefault } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport ImmutableSelectionStrategy from '@hh.ru/magritte-ui-tree-selector/strategy/immutableSelectionStrategy';\nimport { TreeSelectorProps, ListControls } from '@hh.ru/magritte-ui-tree-selector/types';\nimport { useDisabled } from '@hh.ru/magritte-ui-tree-selector/useDisabled';\nimport { useSelected } from '@hh.ru/magritte-ui-tree-selector/useSelected';\n\nconst TreeSelectorComponent = <Additional extends AdditionalDefault>(\n props: TreeSelectorProps<Additional>,\n ref: ForwardedRef<ListControls>\n): ReactElement => {\n const {\n value,\n collection,\n singleChoice,\n leavesOnly,\n collapseToParentId,\n checkSelectable,\n onChange,\n disabled,\n maxSelected,\n ...rest\n } = props;\n const strategy = useMemo(\n () =>\n new ImmutableSelectionStrategy(collection, {\n singleChoice,\n leavesOnly,\n checkSelectable,\n }),\n [collection, singleChoice, leavesOnly, checkSelectable]\n );\n\n if (maxSelected && !collapseToParentId && !leavesOnly) {\n throw new Error(\n `Magritte component TreeSelector: maxSelected can be used only with collapseToParentId or leavesOnly`\n );\n }\n\n const { selected, setSelected } = useSelected({\n value,\n strategy,\n collection,\n onChange,\n maxSelected,\n collapseToParentId,\n });\n\n const currentDisabled = useDisabled({ selected, disabled, collection, maxSelected });\n\n return (\n <TreeSelectorDummy\n {...rest}\n value={selected}\n disabled={currentDisabled}\n collection={collection}\n singleChoice={singleChoice}\n leavesOnly={leavesOnly}\n checkSelectable={checkSelectable}\n onChange={setSelected}\n ref={ref}\n />\n );\n};\n\nexport const TreeSelector = forwardRef(TreeSelectorComponent) as <Additional extends AdditionalDefault>(\n props: TreeSelectorProps<Additional> & { ref?: ForwardedRef<ListControls> }\n) => ReactElement;\n"],"names":["
|
|
1
|
+
{"version":3,"file":"TreeSelector.js","sources":["src/TreeSelector.tsx"],"sourcesContent":["import { ForwardedRef, forwardRef, ReactElement, useMemo } from 'react';\n\nimport { TreeSelectorDummy } from '@hh.ru/magritte-ui-tree-selector/TreeSelectorDummy';\nimport { AdditionalDefault } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport ImmutableSelectionStrategy from '@hh.ru/magritte-ui-tree-selector/strategy/immutableSelectionStrategy';\nimport { TreeSelectorProps, ListControls } from '@hh.ru/magritte-ui-tree-selector/types';\nimport { useDisabled } from '@hh.ru/magritte-ui-tree-selector/useDisabled';\nimport { useSelected } from '@hh.ru/magritte-ui-tree-selector/useSelected';\n\nconst TreeSelectorComponent = <Additional extends AdditionalDefault>(\n props: TreeSelectorProps<Additional>,\n ref: ForwardedRef<ListControls>\n): ReactElement => {\n const {\n value,\n collection,\n singleChoice,\n leavesOnly,\n collapseToParentId,\n checkSelectable,\n onChange,\n disabled,\n maxSelected,\n ...rest\n } = props;\n const strategy = useMemo(\n () =>\n new ImmutableSelectionStrategy(collection, {\n singleChoice,\n leavesOnly,\n checkSelectable,\n }),\n [collection, singleChoice, leavesOnly, checkSelectable]\n );\n\n if (maxSelected && !collapseToParentId && !leavesOnly) {\n throw new Error(\n `Magritte component TreeSelector: maxSelected can be used only with collapseToParentId or leavesOnly`\n );\n }\n\n const { selected, setSelected } = useSelected({\n value,\n strategy,\n collection,\n onChange,\n maxSelected,\n collapseToParentId,\n });\n\n const currentDisabled = useDisabled({ selected, disabled, collection, maxSelected });\n\n return (\n <TreeSelectorDummy\n {...rest}\n value={selected}\n disabled={currentDisabled}\n collection={collection}\n singleChoice={singleChoice}\n leavesOnly={leavesOnly}\n checkSelectable={checkSelectable}\n onChange={setSelected}\n ref={ref}\n />\n );\n};\n\nexport const TreeSelector = forwardRef(TreeSelectorComponent) as <Additional extends AdditionalDefault>(\n props: TreeSelectorProps<Additional> & { ref?: ForwardedRef<ListControls> }\n) => ReactElement;\n"],"names":["ImmutableSelectionStrategy"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAM,qBAAA,GAAwB,CAC1B,KAAA,EACA,GACe,KAAA;AACf,EAAM,MAAA;AAAA,IACF,KAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,GAAG,IAAA;AAAA,GACH,GAAA,KAAA,CAAA;AACJ,EAAA,MAAM,QAAW,GAAA,OAAA;AAAA,IACb,MACI,IAAIA,kCAAA,CAA2B,UAAY,EAAA;AAAA,MACvC,YAAA;AAAA,MACA,UAAA;AAAA,MACA,eAAA;AAAA,KACH,CAAA;AAAA,IACL,CAAC,UAAA,EAAY,YAAc,EAAA,UAAA,EAAY,eAAe,CAAA;AAAA,GAC1D,CAAA;AAEA,EAAA,IAAI,WAAe,IAAA,CAAC,kBAAsB,IAAA,CAAC,UAAY,EAAA;AACnD,IAAA,MAAM,IAAI,KAAA;AAAA,MACN,CAAA,mGAAA,CAAA;AAAA,KACJ,CAAA;AAAA,GACJ;AAEA,EAAA,MAAM,EAAE,QAAA,EAAU,WAAY,EAAA,GAAI,WAAY,CAAA;AAAA,IAC1C,KAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,kBAAA;AAAA,GACH,CAAA,CAAA;AAED,EAAA,MAAM,kBAAkB,WAAY,CAAA,EAAE,UAAU,QAAU,EAAA,UAAA,EAAY,aAAa,CAAA,CAAA;AAEnF,EACI,uBAAA,GAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACI,GAAG,IAAA;AAAA,MACJ,KAAO,EAAA,QAAA;AAAA,MACP,QAAU,EAAA,eAAA;AAAA,MACV,UAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,eAAA;AAAA,MACA,QAAU,EAAA,WAAA;AAAA,MACV,GAAA;AAAA,KAAA;AAAA,GACJ,CAAA;AAER,CAAA,CAAA;AAEa,MAAA,YAAA,GAAe,WAAW,qBAAqB;;;;"}
|
package/TreeSelectorDummy.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ReactElement, ForwardedRef } from 'react';
|
|
2
|
-
import { AdditionalDefault } from '
|
|
3
|
-
import { ListControls, TreeSelectorDummyProps } from '
|
|
2
|
+
import { AdditionalDefault } from './collection/types';
|
|
3
|
+
import { ListControls, TreeSelectorDummyProps } from './types';
|
|
4
4
|
export declare const TreeSelectorDummyComponent: <Additional extends AdditionalDefault>({ collection: initialCollection, checkSelectable, initialExpanded, value: selected, leavesOnly, singleChoice, disabled, treeFilter, suggestedNotFound, constantlySuggested, renderItemForDesktop, renderItem, renderMobileDelimiter, onExpand, onChange, onChangeFilterQuery, contentNotFound, onMobileNavigationChange, getMobileSearchItemOrder, expandTreeOnSelected, getSelectAllParentTrl, renderContentBefore, renderContentAfter, children, }: TreeSelectorDummyProps<Additional>, ref: ForwardedRef<ListControls>) => ReactElement;
|
|
5
5
|
export declare const TreeSelectorDummy: <Additional extends AdditionalDefault>(props: TreeSelectorDummyProps<Additional> & {
|
|
6
6
|
ref?: ForwardedRef<ListControls>;
|
package/TreeSelectorDummy.js
CHANGED
|
@@ -21,7 +21,7 @@ import '@hh.ru/magritte-ui-checkbox-radio';
|
|
|
21
21
|
import './TreeSelectorItemBase.js';
|
|
22
22
|
import '@hh.ru/magritte-ui-cell';
|
|
23
23
|
import '@hh.ru/magritte-ui-typography';
|
|
24
|
-
import './tree-selector-item-
|
|
24
|
+
import './tree-selector-item-DiHx85es.js';
|
|
25
25
|
import '@hh.ru/magritte-common-func-utils';
|
|
26
26
|
import '@hh.ru/magritte-ui-checkable-card/CheckableCardElement';
|
|
27
27
|
import './MobileDelimiter.js';
|
|
@@ -39,112 +39,138 @@ import './useAnimationTimeout.js';
|
|
|
39
39
|
const defaultCheckSelectable = () => true;
|
|
40
40
|
const defaultArray = [];
|
|
41
41
|
const needToApply = (query) => {
|
|
42
|
-
|
|
42
|
+
return !!(query && query.length);
|
|
43
43
|
};
|
|
44
|
-
const TreeSelectorDummyComponent = ({
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
44
|
+
const TreeSelectorDummyComponent = ({
|
|
45
|
+
collection: initialCollection,
|
|
46
|
+
checkSelectable = defaultCheckSelectable,
|
|
47
|
+
initialExpanded = defaultArray,
|
|
48
|
+
value: selected,
|
|
49
|
+
leavesOnly,
|
|
50
|
+
singleChoice,
|
|
51
|
+
disabled = defaultArray,
|
|
52
|
+
treeFilter = filterWithParents,
|
|
53
|
+
suggestedNotFound = defaultArray,
|
|
54
|
+
constantlySuggested = defaultArray,
|
|
55
|
+
renderItemForDesktop,
|
|
56
|
+
renderItem,
|
|
57
|
+
renderMobileDelimiter,
|
|
58
|
+
onExpand,
|
|
59
|
+
onChange,
|
|
60
|
+
onChangeFilterQuery,
|
|
61
|
+
contentNotFound,
|
|
62
|
+
onMobileNavigationChange,
|
|
63
|
+
getMobileSearchItemOrder,
|
|
64
|
+
expandTreeOnSelected = true,
|
|
65
|
+
getSelectAllParentTrl,
|
|
66
|
+
renderContentBefore,
|
|
67
|
+
renderContentAfter,
|
|
68
|
+
children
|
|
69
|
+
}, ref) => {
|
|
70
|
+
const [collection, setCollection] = useState(initialCollection);
|
|
71
|
+
const [isSearch, setIsSearch] = useState(false);
|
|
72
|
+
const currentQuery = useRef("");
|
|
73
|
+
const inputRef = useRef(null);
|
|
74
|
+
const suggestedNotFoundModels = useRef(initialCollection.getExistModels(suggestedNotFound));
|
|
75
|
+
const constantlySuggestedModels = useRef(initialCollection.getExistModels(constantlySuggested));
|
|
76
|
+
const getSearchItemOrderDefault = useCallback(
|
|
77
|
+
(model) => {
|
|
78
|
+
return initialCollection.getModelLevel(model.id);
|
|
79
|
+
},
|
|
80
|
+
[initialCollection]
|
|
81
|
+
);
|
|
82
|
+
const { indeterminate } = useIndeterminate({ collection: initialCollection, selected });
|
|
83
|
+
const {
|
|
84
|
+
expanded: currentExpanded,
|
|
85
|
+
setExpanded,
|
|
86
|
+
handleExpansion,
|
|
87
|
+
handleResetExpanded
|
|
88
|
+
} = useExpanded({
|
|
89
|
+
initialValue: initialExpanded?.slice(),
|
|
90
|
+
selected,
|
|
91
|
+
expandTreeOnSelected,
|
|
92
|
+
collection: initialCollection,
|
|
93
|
+
onExpand
|
|
94
|
+
});
|
|
95
|
+
const { isMobile } = useBreakpoint();
|
|
96
|
+
const { contentFilterQuery, setInputValue, handleChangeInput, renderInput } = useRenderInput(inputRef);
|
|
97
|
+
const treeRefCallback = useCallback(
|
|
98
|
+
(node) => {
|
|
99
|
+
if (node) {
|
|
100
|
+
handleResetExpanded();
|
|
101
|
+
}
|
|
102
|
+
},
|
|
70
103
|
// игнорируем зависимость от selected, т.к. триггером сброса состояния expanded должен быть именно
|
|
71
104
|
// маунт компонента, а не изменение выбранной опции
|
|
72
|
-
[handleResetExpanded]
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
if (newCollection.hasChildren(item.id)) {
|
|
81
|
-
// Если есть в отфильтрованной коллекции есть дочерние элементы,
|
|
82
|
-
// значит они заматчились, и нужно открыть родителя.
|
|
83
|
-
newExpanded.push(item.id);
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
// Если заматчился только сам родитель, показываем его
|
|
87
|
-
// схлопнутым => нужно добавить его ветку в коллекцию.
|
|
88
|
-
initialCollection.walkChildren(item.id, (child, parents) => {
|
|
89
|
-
newCollection.addModel({ ...child }, parents[0].id);
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
const filteredIds = newCollection.toList().map((model) => model.id);
|
|
94
|
-
// Если в отфильтрованной коллекции нет моделей, но заданы предложенные,
|
|
95
|
-
// то показываем их
|
|
96
|
-
// Если в отфильтрованной коллекции модели есть, то пробуем добавить к ним
|
|
97
|
-
// всегда показывающиеся модели, если их ещё нет в коллекции
|
|
98
|
-
if (!filteredIds.length && suggestedNotFoundModels.current.length) {
|
|
99
|
-
suggestedNotFoundModels.current.forEach((model) => newCollection.addModel({ ...model }));
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
constantlySuggestedModels.current.forEach((model) => {
|
|
103
|
-
if (!filteredIds.includes(model.id)) {
|
|
104
|
-
newCollection.addModel({ ...model });
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
setCollection(newCollection);
|
|
109
|
-
currentQuery.current = contentFilterQuery;
|
|
110
|
-
onChangeFilterQuery?.(filteredIds, contentFilterQueryTrimmed);
|
|
111
|
-
setExpanded(newExpanded);
|
|
112
|
-
setIsSearch(true);
|
|
113
|
-
}
|
|
114
|
-
else if (queryWasChanged) {
|
|
115
|
-
// Запрос не годится для поиска.
|
|
116
|
-
const newExpanded = initialExpanded.slice();
|
|
117
|
-
setCollection(initialCollection);
|
|
118
|
-
onChangeFilterQuery?.(initialCollection.toList().map((model) => model.id), contentFilterQueryTrimmed);
|
|
119
|
-
currentQuery.current = contentFilterQuery;
|
|
120
|
-
if (inputRef.current) {
|
|
121
|
-
setExpanded(newExpanded);
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
handleResetExpanded();
|
|
125
|
-
}
|
|
126
|
-
setIsSearch(false);
|
|
127
|
-
}
|
|
128
|
-
}, [
|
|
105
|
+
[handleResetExpanded]
|
|
106
|
+
);
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
const contentFilterQueryTrimmed = contentFilterQuery.trim();
|
|
109
|
+
const queryWasChanged = contentFilterQueryTrimmed !== currentQuery.current.trim();
|
|
110
|
+
if (queryWasChanged && needToApply(contentFilterQueryTrimmed)) {
|
|
111
|
+
const newExpanded = [];
|
|
112
|
+
const newCollection = treeFilter(
|
|
129
113
|
initialCollection,
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
114
|
+
(item) => match(contentFilterQueryTrimmed, item.text),
|
|
115
|
+
isMobile
|
|
116
|
+
);
|
|
117
|
+
newCollection.toList().forEach((item) => {
|
|
118
|
+
if (newCollection.hasChildren(item.id)) {
|
|
119
|
+
newExpanded.push(item.id);
|
|
120
|
+
} else {
|
|
121
|
+
initialCollection.walkChildren(item.id, (child, parents) => {
|
|
122
|
+
newCollection.addModel({ ...child }, parents[0].id);
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
const filteredIds = newCollection.toList().map((model) => model.id);
|
|
127
|
+
if (!filteredIds.length && suggestedNotFoundModels.current.length) {
|
|
128
|
+
suggestedNotFoundModels.current.forEach((model) => newCollection.addModel({ ...model }));
|
|
129
|
+
} else {
|
|
130
|
+
constantlySuggestedModels.current.forEach((model) => {
|
|
131
|
+
if (!filteredIds.includes(model.id)) {
|
|
132
|
+
newCollection.addModel({ ...model });
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
setCollection(newCollection);
|
|
137
|
+
currentQuery.current = contentFilterQuery;
|
|
138
|
+
onChangeFilterQuery?.(filteredIds, contentFilterQueryTrimmed);
|
|
139
|
+
setExpanded(newExpanded);
|
|
140
|
+
setIsSearch(true);
|
|
141
|
+
} else if (queryWasChanged) {
|
|
142
|
+
const newExpanded = initialExpanded.slice();
|
|
143
|
+
setCollection(initialCollection);
|
|
144
|
+
onChangeFilterQuery?.(
|
|
145
|
+
initialCollection.toList().map((model) => model.id),
|
|
146
|
+
contentFilterQueryTrimmed
|
|
147
|
+
);
|
|
148
|
+
currentQuery.current = contentFilterQuery;
|
|
149
|
+
if (inputRef.current) {
|
|
150
|
+
setExpanded(newExpanded);
|
|
151
|
+
} else {
|
|
152
|
+
handleResetExpanded();
|
|
153
|
+
}
|
|
154
|
+
setIsSearch(false);
|
|
155
|
+
}
|
|
156
|
+
}, [
|
|
157
|
+
initialCollection,
|
|
158
|
+
contentFilterQuery,
|
|
159
|
+
treeFilter,
|
|
160
|
+
selected,
|
|
161
|
+
setExpanded,
|
|
162
|
+
isMobile,
|
|
163
|
+
onChangeFilterQuery,
|
|
164
|
+
handleResetExpanded,
|
|
165
|
+
initialExpanded
|
|
166
|
+
]);
|
|
167
|
+
const renderTreeSelector = useCallback(() => {
|
|
168
|
+
const hasModels = collection.getTopLevel().length;
|
|
169
|
+
return /* @__PURE__ */ jsx(TreeSelectorWrapper, { forwardRef: treeRefCallback, children: hasModels ? isMobile ? /* @__PURE__ */ jsx(
|
|
170
|
+
MobileItemsList,
|
|
171
|
+
{
|
|
172
|
+
getMobileSearchItemOrder: getMobileSearchItemOrder || getSearchItemOrderDefault,
|
|
143
173
|
collection,
|
|
144
|
-
treeRefCallback,
|
|
145
|
-
isMobile,
|
|
146
|
-
getMobileSearchItemOrder,
|
|
147
|
-
getSearchItemOrderDefault,
|
|
148
174
|
selected,
|
|
149
175
|
disabled,
|
|
150
176
|
onChange,
|
|
@@ -156,19 +182,62 @@ const TreeSelectorDummyComponent = ({ collection: initialCollection, checkSelect
|
|
|
156
182
|
renderItem,
|
|
157
183
|
renderMobileDelimiter,
|
|
158
184
|
handleChangeInput,
|
|
159
|
-
contentFilterQuery,
|
|
185
|
+
contentFilterQuery: contentFilterQuery.trim(),
|
|
160
186
|
onMobileNavigationChange,
|
|
161
187
|
isSearch,
|
|
162
188
|
getSelectAllParentTrl,
|
|
163
189
|
renderContentBefore,
|
|
164
|
-
renderContentAfter
|
|
165
|
-
|
|
166
|
-
|
|
190
|
+
renderContentAfter
|
|
191
|
+
}
|
|
192
|
+
) : /* @__PURE__ */ jsx(
|
|
193
|
+
ItemsList,
|
|
194
|
+
{
|
|
195
|
+
collection,
|
|
196
|
+
leavesOnly,
|
|
197
|
+
checkSelectable,
|
|
198
|
+
expanded: currentExpanded,
|
|
199
|
+
onExpansion: handleExpansion,
|
|
200
|
+
selected,
|
|
201
|
+
onChange,
|
|
202
|
+
disabled,
|
|
203
|
+
singleChoice,
|
|
167
204
|
indeterminate,
|
|
205
|
+
isSearch,
|
|
168
206
|
renderItemForDesktop,
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
207
|
+
renderContentBefore,
|
|
208
|
+
renderContentAfter
|
|
209
|
+
}
|
|
210
|
+
) : /* @__PURE__ */ jsx(Fragment, { children: contentNotFound }) });
|
|
211
|
+
}, [
|
|
212
|
+
collection,
|
|
213
|
+
treeRefCallback,
|
|
214
|
+
isMobile,
|
|
215
|
+
getMobileSearchItemOrder,
|
|
216
|
+
getSearchItemOrderDefault,
|
|
217
|
+
selected,
|
|
218
|
+
disabled,
|
|
219
|
+
onChange,
|
|
220
|
+
leavesOnly,
|
|
221
|
+
checkSelectable,
|
|
222
|
+
singleChoice,
|
|
223
|
+
ref,
|
|
224
|
+
setInputValue,
|
|
225
|
+
renderItem,
|
|
226
|
+
renderMobileDelimiter,
|
|
227
|
+
handleChangeInput,
|
|
228
|
+
contentFilterQuery,
|
|
229
|
+
onMobileNavigationChange,
|
|
230
|
+
isSearch,
|
|
231
|
+
getSelectAllParentTrl,
|
|
232
|
+
renderContentBefore,
|
|
233
|
+
renderContentAfter,
|
|
234
|
+
currentExpanded,
|
|
235
|
+
handleExpansion,
|
|
236
|
+
indeterminate,
|
|
237
|
+
renderItemForDesktop,
|
|
238
|
+
contentNotFound
|
|
239
|
+
]);
|
|
240
|
+
return /* @__PURE__ */ jsx(Fragment, { children: children({ renderTreeSelector, renderInput }) });
|
|
172
241
|
};
|
|
173
242
|
const TreeSelectorDummy = forwardRef(TreeSelectorDummyComponent);
|
|
174
243
|
|
package/TreeSelectorDummy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSelectorDummy.js","sources":["src/TreeSelectorDummy.tsx"],"sourcesContent":["import { ReactElement, forwardRef, ForwardedRef, useCallback, useEffect, useRef, useState, RefCallback } from 'react';\n\nimport { match } from '@hh.ru/magritte-common-fuzzy-search';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { ItemsList } from '@hh.ru/magritte-ui-tree-selector/ItemsList';\nimport { MobileItemsList } from '@hh.ru/magritte-ui-tree-selector/MobileItemsList';\nimport { TreeSelectorWrapper } from '@hh.ru/magritte-ui-tree-selector/TreeSelectorWrapper';\nimport { filterWithParents } from '@hh.ru/magritte-ui-tree-selector/collection/treeCollectionHelper';\nimport { AdditionalDefault, TreeModel } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport { ListControls, TreeSelectorDummyProps } from '@hh.ru/magritte-ui-tree-selector/types';\nimport { useExpanded } from '@hh.ru/magritte-ui-tree-selector/useExpanded';\nimport { useIndeterminate } from '@hh.ru/magritte-ui-tree-selector/useIndeterminate';\nimport { useRenderInput } from '@hh.ru/magritte-ui-tree-selector/useRenderInput';\n\nconst defaultCheckSelectable = () => true;\nconst defaultArray: string[] = [];\n\nconst needToApply = (query: string): boolean => {\n return !!(query && query.length);\n};\n\nexport const TreeSelectorDummyComponent = <Additional extends AdditionalDefault>(\n {\n collection: initialCollection,\n checkSelectable = defaultCheckSelectable,\n initialExpanded = defaultArray,\n value: selected,\n leavesOnly,\n singleChoice,\n disabled = defaultArray,\n treeFilter = filterWithParents,\n suggestedNotFound = defaultArray,\n constantlySuggested = defaultArray,\n renderItemForDesktop,\n renderItem,\n renderMobileDelimiter,\n onExpand,\n onChange,\n onChangeFilterQuery,\n contentNotFound,\n onMobileNavigationChange,\n getMobileSearchItemOrder,\n expandTreeOnSelected = true,\n getSelectAllParentTrl,\n renderContentBefore,\n renderContentAfter,\n children,\n }: TreeSelectorDummyProps<Additional>,\n ref: ForwardedRef<ListControls>\n): ReactElement => {\n const [collection, setCollection] = useState(initialCollection);\n const [isSearch, setIsSearch] = useState(false);\n const currentQuery = useRef('');\n const inputRef = useRef<HTMLInputElement>(null);\n const suggestedNotFoundModels = useRef(initialCollection.getExistModels(suggestedNotFound));\n const constantlySuggestedModels = useRef(initialCollection.getExistModels(constantlySuggested));\n const getSearchItemOrderDefault = useCallback(\n (model: TreeModel<Additional>) => {\n return initialCollection.getModelLevel(model.id);\n },\n [initialCollection]\n );\n\n const { indeterminate } = useIndeterminate({ collection: initialCollection, selected });\n\n const {\n expanded: currentExpanded,\n setExpanded,\n handleExpansion,\n handleResetExpanded,\n } = useExpanded({\n initialValue: initialExpanded?.slice(),\n selected,\n expandTreeOnSelected,\n collection: initialCollection,\n onExpand,\n });\n const { isMobile } = useBreakpoint();\n\n const { contentFilterQuery, setInputValue, handleChangeInput, renderInput } = useRenderInput(inputRef);\n\n const treeRefCallback: RefCallback<HTMLDivElement> = useCallback(\n (node) => {\n // делаем сброс при монтировании компонента, пока он размонтирован нам не важно какой именно пункт раскрыт\n if (node) {\n handleResetExpanded();\n }\n },\n // игнорируем зависимость от selected, т.к. триггером сброса состояния expanded должен быть именно\n // маунт компонента, а не изменение выбранной опции\n [handleResetExpanded]\n );\n\n useEffect(() => {\n const contentFilterQueryTrimmed = contentFilterQuery.trim();\n const queryWasChanged = contentFilterQueryTrimmed !== currentQuery.current.trim();\n\n if (queryWasChanged && needToApply(contentFilterQueryTrimmed)) {\n const newExpanded: string[] = [];\n const newCollection = treeFilter(\n initialCollection,\n (item) => match(contentFilterQueryTrimmed, item.text),\n isMobile\n );\n newCollection.toList().forEach((item) => {\n if (newCollection.hasChildren(item.id)) {\n // Если есть в отфильтрованной коллекции есть дочерние элементы,\n // значит они заматчились, и нужно открыть родителя.\n newExpanded.push(item.id);\n } else {\n // Если заматчился только сам родитель, показываем его\n // схлопнутым => нужно добавить его ветку в коллекцию.\n initialCollection.walkChildren(item.id, (child, parents) => {\n newCollection.addModel({ ...child }, parents[0].id);\n });\n }\n });\n\n const filteredIds = newCollection.toList().map((model) => model.id);\n\n // Если в отфильтрованной коллекции нет моделей, но заданы предложенные,\n // то показываем их\n // Если в отфильтрованной коллекции модели есть, то пробуем добавить к ним\n // всегда показывающиеся модели, если их ещё нет в коллекции\n if (!filteredIds.length && suggestedNotFoundModels.current.length) {\n suggestedNotFoundModels.current.forEach((model) => newCollection.addModel({ ...model }));\n } else {\n constantlySuggestedModels.current.forEach((model) => {\n if (!filteredIds.includes(model.id)) {\n newCollection.addModel({ ...model });\n }\n });\n }\n\n setCollection(newCollection);\n currentQuery.current = contentFilterQuery;\n onChangeFilterQuery?.(filteredIds, contentFilterQueryTrimmed);\n setExpanded(newExpanded);\n setIsSearch(true);\n } else if (queryWasChanged) {\n // Запрос не годится для поиска.\n const newExpanded = initialExpanded.slice();\n setCollection(initialCollection);\n\n onChangeFilterQuery?.(\n initialCollection.toList().map((model) => model.id),\n contentFilterQueryTrimmed\n );\n currentQuery.current = contentFilterQuery;\n if (inputRef.current) {\n setExpanded(newExpanded);\n } else {\n handleResetExpanded();\n }\n\n setIsSearch(false);\n }\n }, [\n initialCollection,\n contentFilterQuery,\n treeFilter,\n selected,\n setExpanded,\n isMobile,\n onChangeFilterQuery,\n handleResetExpanded,\n initialExpanded,\n ]);\n\n const renderTreeSelector = useCallback(() => {\n const hasModels = collection.getTopLevel().length;\n return (\n <TreeSelectorWrapper forwardRef={treeRefCallback}>\n {/* eslint-disable-next-line no-nested-ternary */}\n {hasModels ? (\n isMobile ? (\n <MobileItemsList\n getMobileSearchItemOrder={getMobileSearchItemOrder || getSearchItemOrderDefault}\n collection={collection}\n selected={selected}\n disabled={disabled}\n onChange={onChange}\n leavesOnly={leavesOnly}\n checkSelectable={checkSelectable}\n singleChoice={singleChoice}\n ref={ref}\n setInputValue={setInputValue}\n renderItem={renderItem}\n renderMobileDelimiter={renderMobileDelimiter}\n handleChangeInput={handleChangeInput}\n contentFilterQuery={contentFilterQuery.trim()}\n onMobileNavigationChange={onMobileNavigationChange}\n isSearch={isSearch}\n getSelectAllParentTrl={getSelectAllParentTrl}\n renderContentBefore={renderContentBefore}\n renderContentAfter={renderContentAfter}\n />\n ) : (\n <ItemsList\n collection={collection}\n leavesOnly={leavesOnly}\n checkSelectable={checkSelectable}\n expanded={currentExpanded}\n onExpansion={handleExpansion}\n selected={selected}\n onChange={onChange}\n disabled={disabled}\n singleChoice={singleChoice}\n indeterminate={indeterminate}\n isSearch={isSearch}\n renderItemForDesktop={renderItemForDesktop}\n renderContentBefore={renderContentBefore}\n renderContentAfter={renderContentAfter}\n />\n )\n ) : (\n <>{contentNotFound}</>\n )}\n </TreeSelectorWrapper>\n );\n }, [\n collection,\n treeRefCallback,\n isMobile,\n getMobileSearchItemOrder,\n getSearchItemOrderDefault,\n selected,\n disabled,\n onChange,\n leavesOnly,\n checkSelectable,\n singleChoice,\n ref,\n setInputValue,\n renderItem,\n renderMobileDelimiter,\n handleChangeInput,\n contentFilterQuery,\n onMobileNavigationChange,\n isSearch,\n getSelectAllParentTrl,\n renderContentBefore,\n renderContentAfter,\n currentExpanded,\n handleExpansion,\n indeterminate,\n renderItemForDesktop,\n contentNotFound,\n ]);\n\n return <>{children({ renderTreeSelector, renderInput })}</>;\n};\n\nexport const TreeSelectorDummy = forwardRef(TreeSelectorDummyComponent) as <Additional extends AdditionalDefault>(\n props: TreeSelectorDummyProps<Additional> & { ref?: ForwardedRef<ListControls> }\n) => ReactElement;\n"],"names":["_jsx","_Fragment"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC;AAC1C,MAAM,YAAY,GAAa,EAAE,CAAC;AAElC,MAAM,WAAW,GAAG,CAAC,KAAa,KAAa;IAC3C,OAAO,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC,CAAC;AAEK,MAAM,0BAA0B,GAAG,CACtC,EACI,UAAU,EAAE,iBAAiB,EAC7B,eAAe,GAAG,sBAAsB,EACxC,eAAe,GAAG,YAAY,EAC9B,KAAK,EAAE,QAAQ,EACf,UAAU,EACV,YAAY,EACZ,QAAQ,GAAG,YAAY,EACvB,UAAU,GAAG,iBAAiB,EAC9B,iBAAiB,GAAG,YAAY,EAChC,mBAAmB,GAAG,YAAY,EAClC,oBAAoB,EACpB,UAAU,EACV,qBAAqB,EACrB,QAAQ,EACR,QAAQ,EACR,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,GAAG,IAAI,EAC3B,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,QAAQ,GACyB,EACrC,GAA+B,KACjB;IACd,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAChE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChD,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAChC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAChD,MAAM,uBAAuB,GAAG,MAAM,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC5F,MAAM,yBAAyB,GAAG,MAAM,CAAC,iBAAiB,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAChG,IAAA,MAAM,yBAAyB,GAAG,WAAW,CACzC,CAAC,KAA4B,KAAI;QAC7B,OAAO,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACrD,KAAC,EACD,CAAC,iBAAiB,CAAC,CACtB,CAAC;AAEF,IAAA,MAAM,EAAE,aAAa,EAAE,GAAG,gBAAgB,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAC;AAExF,IAAA,MAAM,EACF,QAAQ,EAAE,eAAe,EACzB,WAAW,EACX,eAAe,EACf,mBAAmB,GACtB,GAAG,WAAW,CAAC;AACZ,QAAA,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE;QACtC,QAAQ;QACR,oBAAoB;AACpB,QAAA,UAAU,EAAE,iBAAiB;QAC7B,QAAQ;AACX,KAAA,CAAC,CAAC;AACH,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAC;AAErC,IAAA,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;AAEvG,IAAA,MAAM,eAAe,GAAgC,WAAW,CAC5D,CAAC,IAAI,KAAI;;QAEL,IAAI,IAAI,EAAE;AACN,YAAA,mBAAmB,EAAE,CAAC;SACzB;KACJ;;;IAGD,CAAC,mBAAmB,CAAC,CACxB,CAAC;IAEF,SAAS,CAAC,MAAK;AACX,QAAA,MAAM,yBAAyB,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC;QAC5D,MAAM,eAAe,GAAG,yBAAyB,KAAK,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAElF,QAAA,IAAI,eAAe,IAAI,WAAW,CAAC,yBAAyB,CAAC,EAAE;YAC3D,MAAM,WAAW,GAAa,EAAE,CAAC;YACjC,MAAM,aAAa,GAAG,UAAU,CAC5B,iBAAiB,EACjB,CAAC,IAAI,KAAK,KAAK,CAAC,yBAAyB,EAAE,IAAI,CAAC,IAAI,CAAC,EACrD,QAAQ,CACX,CAAC;YACF,aAAa,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;gBACpC,IAAI,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;;;AAGpC,oBAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBAC7B;qBAAM;;;AAGH,oBAAA,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,KAAI;AACvD,wBAAA,aAAa,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACxD,qBAAC,CAAC,CAAC;iBACN;AACL,aAAC,CAAC,CAAC;AAEH,YAAA,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;;;;;YAMpE,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,MAAM,EAAE;gBAC/D,uBAAuB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;aAC5F;iBAAM;gBACH,yBAAyB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;oBAChD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;wBACjC,aAAa,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;qBACxC;AACL,iBAAC,CAAC,CAAC;aACN;YAED,aAAa,CAAC,aAAa,CAAC,CAAC;AAC7B,YAAA,YAAY,CAAC,OAAO,GAAG,kBAAkB,CAAC;AAC1C,YAAA,mBAAmB,GAAG,WAAW,EAAE,yBAAyB,CAAC,CAAC;YAC9D,WAAW,CAAC,WAAW,CAAC,CAAC;YACzB,WAAW,CAAC,IAAI,CAAC,CAAC;SACrB;aAAM,IAAI,eAAe,EAAE;;AAExB,YAAA,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC;YAC5C,aAAa,CAAC,iBAAiB,CAAC,CAAC;YAEjC,mBAAmB,GACf,iBAAiB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,CAAC,EACnD,yBAAyB,CAC5B,CAAC;AACF,YAAA,YAAY,CAAC,OAAO,GAAG,kBAAkB,CAAC;AAC1C,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBAClB,WAAW,CAAC,WAAW,CAAC,CAAC;aAC5B;iBAAM;AACH,gBAAA,mBAAmB,EAAE,CAAC;aACzB;YAED,WAAW,CAAC,KAAK,CAAC,CAAC;SACtB;AACL,KAAC,EAAE;QACC,iBAAiB;QACjB,kBAAkB;QAClB,UAAU;QACV,QAAQ;QACR,WAAW;QACX,QAAQ;QACR,mBAAmB;QACnB,mBAAmB;QACnB,eAAe;AAClB,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAK;QACxC,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC;AAClD,QAAA,QACIA,GAAC,CAAA,mBAAmB,IAAC,UAAU,EAAE,eAAe,EAE3C,QAAA,EAAA,SAAS,IACN,QAAQ,IACJA,GAAC,CAAA,eAAe,EACZ,EAAA,wBAAwB,EAAE,wBAAwB,IAAI,yBAAyB,EAC/E,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,EACtB,qBAAqB,EAAE,qBAAqB,EAC5C,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,kBAAkB,CAAC,IAAI,EAAE,EAC7C,wBAAwB,EAAE,wBAAwB,EAClD,QAAQ,EAAE,QAAQ,EAClB,qBAAqB,EAAE,qBAAqB,EAC5C,mBAAmB,EAAE,mBAAmB,EACxC,kBAAkB,EAAE,kBAAkB,EAAA,CACxC,KAEFA,GAAA,CAAC,SAAS,EACN,EAAA,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,eAAe,EACzB,WAAW,EAAE,eAAe,EAC5B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,QAAQ,EAClB,oBAAoB,EAAE,oBAAoB,EAC1C,mBAAmB,EAAE,mBAAmB,EACxC,kBAAkB,EAAE,kBAAkB,GACxC,CACL,KAEDA,GAAG,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAA,eAAe,GAAI,CACzB,EAAA,CACiB,EACxB;AACN,KAAC,EAAE;QACC,UAAU;QACV,eAAe;QACf,QAAQ;QACR,wBAAwB;QACxB,yBAAyB;QACzB,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,UAAU;QACV,eAAe;QACf,YAAY;QACZ,GAAG;QACH,aAAa;QACb,UAAU;QACV,qBAAqB;QACrB,iBAAiB;QACjB,kBAAkB;QAClB,wBAAwB;QACxB,QAAQ;QACR,qBAAqB;QACrB,mBAAmB;QACnB,kBAAkB;QAClB,eAAe;QACf,eAAe;QACf,aAAa;QACb,oBAAoB;QACpB,eAAe;AAClB,KAAA,CAAC,CAAC;IAEH,OAAOD,GAAA,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAG,QAAQ,CAAC,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC,EAAA,CAAI,CAAC;AAChE,EAAE;MAEW,iBAAiB,GAAG,UAAU,CAAC,0BAA0B;;;;"}
|
|
1
|
+
{"version":3,"file":"TreeSelectorDummy.js","sources":["src/TreeSelectorDummy.tsx"],"sourcesContent":["import { ReactElement, forwardRef, ForwardedRef, useCallback, useEffect, useRef, useState, RefCallback } from 'react';\n\nimport { match } from '@hh.ru/magritte-common-fuzzy-search';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { ItemsList } from '@hh.ru/magritte-ui-tree-selector/ItemsList';\nimport { MobileItemsList } from '@hh.ru/magritte-ui-tree-selector/MobileItemsList';\nimport { TreeSelectorWrapper } from '@hh.ru/magritte-ui-tree-selector/TreeSelectorWrapper';\nimport { filterWithParents } from '@hh.ru/magritte-ui-tree-selector/collection/treeCollectionHelper';\nimport { AdditionalDefault, TreeModel } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport { ListControls, TreeSelectorDummyProps } from '@hh.ru/magritte-ui-tree-selector/types';\nimport { useExpanded } from '@hh.ru/magritte-ui-tree-selector/useExpanded';\nimport { useIndeterminate } from '@hh.ru/magritte-ui-tree-selector/useIndeterminate';\nimport { useRenderInput } from '@hh.ru/magritte-ui-tree-selector/useRenderInput';\n\nconst defaultCheckSelectable = () => true;\nconst defaultArray: string[] = [];\n\nconst needToApply = (query: string): boolean => {\n return !!(query && query.length);\n};\n\nexport const TreeSelectorDummyComponent = <Additional extends AdditionalDefault>(\n {\n collection: initialCollection,\n checkSelectable = defaultCheckSelectable,\n initialExpanded = defaultArray,\n value: selected,\n leavesOnly,\n singleChoice,\n disabled = defaultArray,\n treeFilter = filterWithParents,\n suggestedNotFound = defaultArray,\n constantlySuggested = defaultArray,\n renderItemForDesktop,\n renderItem,\n renderMobileDelimiter,\n onExpand,\n onChange,\n onChangeFilterQuery,\n contentNotFound,\n onMobileNavigationChange,\n getMobileSearchItemOrder,\n expandTreeOnSelected = true,\n getSelectAllParentTrl,\n renderContentBefore,\n renderContentAfter,\n children,\n }: TreeSelectorDummyProps<Additional>,\n ref: ForwardedRef<ListControls>\n): ReactElement => {\n const [collection, setCollection] = useState(initialCollection);\n const [isSearch, setIsSearch] = useState(false);\n const currentQuery = useRef('');\n const inputRef = useRef<HTMLInputElement>(null);\n const suggestedNotFoundModels = useRef(initialCollection.getExistModels(suggestedNotFound));\n const constantlySuggestedModels = useRef(initialCollection.getExistModels(constantlySuggested));\n const getSearchItemOrderDefault = useCallback(\n (model: TreeModel<Additional>) => {\n return initialCollection.getModelLevel(model.id);\n },\n [initialCollection]\n );\n\n const { indeterminate } = useIndeterminate({ collection: initialCollection, selected });\n\n const {\n expanded: currentExpanded,\n setExpanded,\n handleExpansion,\n handleResetExpanded,\n } = useExpanded({\n initialValue: initialExpanded?.slice(),\n selected,\n expandTreeOnSelected,\n collection: initialCollection,\n onExpand,\n });\n const { isMobile } = useBreakpoint();\n\n const { contentFilterQuery, setInputValue, handleChangeInput, renderInput } = useRenderInput(inputRef);\n\n const treeRefCallback: RefCallback<HTMLDivElement> = useCallback(\n (node) => {\n // делаем сброс при монтировании компонента, пока он размонтирован нам не важно какой именно пункт раскрыт\n if (node) {\n handleResetExpanded();\n }\n },\n // игнорируем зависимость от selected, т.к. триггером сброса состояния expanded должен быть именно\n // маунт компонента, а не изменение выбранной опции\n [handleResetExpanded]\n );\n\n useEffect(() => {\n const contentFilterQueryTrimmed = contentFilterQuery.trim();\n const queryWasChanged = contentFilterQueryTrimmed !== currentQuery.current.trim();\n\n if (queryWasChanged && needToApply(contentFilterQueryTrimmed)) {\n const newExpanded: string[] = [];\n const newCollection = treeFilter(\n initialCollection,\n (item) => match(contentFilterQueryTrimmed, item.text),\n isMobile\n );\n newCollection.toList().forEach((item) => {\n if (newCollection.hasChildren(item.id)) {\n // Если есть в отфильтрованной коллекции есть дочерние элементы,\n // значит они заматчились, и нужно открыть родителя.\n newExpanded.push(item.id);\n } else {\n // Если заматчился только сам родитель, показываем его\n // схлопнутым => нужно добавить его ветку в коллекцию.\n initialCollection.walkChildren(item.id, (child, parents) => {\n newCollection.addModel({ ...child }, parents[0].id);\n });\n }\n });\n\n const filteredIds = newCollection.toList().map((model) => model.id);\n\n // Если в отфильтрованной коллекции нет моделей, но заданы предложенные,\n // то показываем их\n // Если в отфильтрованной коллекции модели есть, то пробуем добавить к ним\n // всегда показывающиеся модели, если их ещё нет в коллекции\n if (!filteredIds.length && suggestedNotFoundModels.current.length) {\n suggestedNotFoundModels.current.forEach((model) => newCollection.addModel({ ...model }));\n } else {\n constantlySuggestedModels.current.forEach((model) => {\n if (!filteredIds.includes(model.id)) {\n newCollection.addModel({ ...model });\n }\n });\n }\n\n setCollection(newCollection);\n currentQuery.current = contentFilterQuery;\n onChangeFilterQuery?.(filteredIds, contentFilterQueryTrimmed);\n setExpanded(newExpanded);\n setIsSearch(true);\n } else if (queryWasChanged) {\n // Запрос не годится для поиска.\n const newExpanded = initialExpanded.slice();\n setCollection(initialCollection);\n\n onChangeFilterQuery?.(\n initialCollection.toList().map((model) => model.id),\n contentFilterQueryTrimmed\n );\n currentQuery.current = contentFilterQuery;\n if (inputRef.current) {\n setExpanded(newExpanded);\n } else {\n handleResetExpanded();\n }\n\n setIsSearch(false);\n }\n }, [\n initialCollection,\n contentFilterQuery,\n treeFilter,\n selected,\n setExpanded,\n isMobile,\n onChangeFilterQuery,\n handleResetExpanded,\n initialExpanded,\n ]);\n\n const renderTreeSelector = useCallback(() => {\n const hasModels = collection.getTopLevel().length;\n return (\n <TreeSelectorWrapper forwardRef={treeRefCallback}>\n {/* eslint-disable-next-line no-nested-ternary */}\n {hasModels ? (\n isMobile ? (\n <MobileItemsList\n getMobileSearchItemOrder={getMobileSearchItemOrder || getSearchItemOrderDefault}\n collection={collection}\n selected={selected}\n disabled={disabled}\n onChange={onChange}\n leavesOnly={leavesOnly}\n checkSelectable={checkSelectable}\n singleChoice={singleChoice}\n ref={ref}\n setInputValue={setInputValue}\n renderItem={renderItem}\n renderMobileDelimiter={renderMobileDelimiter}\n handleChangeInput={handleChangeInput}\n contentFilterQuery={contentFilterQuery.trim()}\n onMobileNavigationChange={onMobileNavigationChange}\n isSearch={isSearch}\n getSelectAllParentTrl={getSelectAllParentTrl}\n renderContentBefore={renderContentBefore}\n renderContentAfter={renderContentAfter}\n />\n ) : (\n <ItemsList\n collection={collection}\n leavesOnly={leavesOnly}\n checkSelectable={checkSelectable}\n expanded={currentExpanded}\n onExpansion={handleExpansion}\n selected={selected}\n onChange={onChange}\n disabled={disabled}\n singleChoice={singleChoice}\n indeterminate={indeterminate}\n isSearch={isSearch}\n renderItemForDesktop={renderItemForDesktop}\n renderContentBefore={renderContentBefore}\n renderContentAfter={renderContentAfter}\n />\n )\n ) : (\n <>{contentNotFound}</>\n )}\n </TreeSelectorWrapper>\n );\n }, [\n collection,\n treeRefCallback,\n isMobile,\n getMobileSearchItemOrder,\n getSearchItemOrderDefault,\n selected,\n disabled,\n onChange,\n leavesOnly,\n checkSelectable,\n singleChoice,\n ref,\n setInputValue,\n renderItem,\n renderMobileDelimiter,\n handleChangeInput,\n contentFilterQuery,\n onMobileNavigationChange,\n isSearch,\n getSelectAllParentTrl,\n renderContentBefore,\n renderContentAfter,\n currentExpanded,\n handleExpansion,\n indeterminate,\n renderItemForDesktop,\n contentNotFound,\n ]);\n\n return <>{children({ renderTreeSelector, renderInput })}</>;\n};\n\nexport const TreeSelectorDummy = forwardRef(TreeSelectorDummyComponent) as <Additional extends AdditionalDefault>(\n props: TreeSelectorDummyProps<Additional> & { ref?: ForwardedRef<ListControls> }\n) => ReactElement;\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { ReactElement } from 'react';
|
|
2
|
-
import { AdditionalDefault } from '
|
|
3
|
-
import { RenderItemProps } from '
|
|
2
|
+
import { AdditionalDefault } from './collection/types';
|
|
3
|
+
import { RenderItemProps } from './types';
|
|
4
4
|
export declare const TreeSelectorItemBase: <Additional extends AdditionalDefault>({ disabled, input, item, isXS, labelRight, }: RenderItemProps<Additional>) => ReactElement;
|
package/TreeSelectorItemBase.js
CHANGED
|
@@ -2,12 +2,18 @@ import './index.css';
|
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { Cell, CellText } from '@hh.ru/magritte-ui-cell';
|
|
4
4
|
|
|
5
|
-
const TreeSelectorItemBase = ({
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
const TreeSelectorItemBase = ({
|
|
6
|
+
disabled,
|
|
7
|
+
input,
|
|
8
|
+
item,
|
|
9
|
+
isXS,
|
|
10
|
+
labelRight
|
|
11
|
+
}) => {
|
|
12
|
+
const cellProps = {
|
|
13
|
+
[isXS ? "right" : "left"]: input,
|
|
14
|
+
...isXS && labelRight && { right: labelRight }
|
|
15
|
+
};
|
|
16
|
+
return /* @__PURE__ */ jsx(Cell, { disabled, ...cellProps, Element: isXS || !input ? "div" : "label", align: "top", children: /* @__PURE__ */ jsx(CellText, { "data-qa": `tree-selector-item-text tree-selector-item-text-${item.id}`, children: item.text }) });
|
|
11
17
|
};
|
|
12
18
|
|
|
13
19
|
export { TreeSelectorItemBase };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSelectorItemBase.js","sources":["src/TreeSelectorItemBase.tsx"],"sourcesContent":["import { ReactElement } from 'react';\n\nimport { Cell, CellText } from '@hh.ru/magritte-ui-cell';\nimport { AdditionalDefault } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport { RenderItemProps } from '@hh.ru/magritte-ui-tree-selector/types';\n\nexport const TreeSelectorItemBase = <Additional extends AdditionalDefault>({\n disabled,\n input,\n item,\n isXS,\n labelRight,\n}: RenderItemProps<Additional>): ReactElement => {\n const cellProps = {\n [isXS ? 'right' : 'left']: input,\n ...(isXS && labelRight && { right: labelRight }),\n };\n return (\n <Cell disabled={disabled} {...cellProps} Element={isXS || !input ? 'div' : 'label'} align=\"top\">\n <CellText data-qa={`tree-selector-item-text tree-selector-item-text-${item.id}`}>{item.text}</CellText>\n </Cell>\n );\n};\n"],"names":[
|
|
1
|
+
{"version":3,"file":"TreeSelectorItemBase.js","sources":["src/TreeSelectorItemBase.tsx"],"sourcesContent":["import { ReactElement } from 'react';\n\nimport { Cell, CellText } from '@hh.ru/magritte-ui-cell';\nimport { AdditionalDefault } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport { RenderItemProps } from '@hh.ru/magritte-ui-tree-selector/types';\n\nexport const TreeSelectorItemBase = <Additional extends AdditionalDefault>({\n disabled,\n input,\n item,\n isXS,\n labelRight,\n}: RenderItemProps<Additional>): ReactElement => {\n const cellProps = {\n [isXS ? 'right' : 'left']: input,\n ...(isXS && labelRight && { right: labelRight }),\n };\n return (\n <Cell disabled={disabled} {...cellProps} Element={isXS || !input ? 'div' : 'label'} align=\"top\">\n <CellText data-qa={`tree-selector-item-text tree-selector-item-text-${item.id}`}>{item.text}</CellText>\n </Cell>\n );\n};\n"],"names":[],"mappings":";;;AAMO,MAAM,uBAAuB,CAAuC;AAAA,EACvE,QAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AACJ,CAAiD,KAAA;AAC7C,EAAA,MAAM,SAAY,GAAA;AAAA,IACd,CAAC,IAAA,GAAO,OAAU,GAAA,MAAM,GAAG,KAAA;AAAA,IAC3B,GAAI,IAAA,IAAQ,UAAc,IAAA,EAAE,OAAO,UAAW,EAAA;AAAA,GAClD,CAAA;AACA,EACI,uBAAA,GAAA,CAAC,QAAK,QAAqB,EAAA,GAAG,WAAW,OAAS,EAAA,IAAA,IAAQ,CAAC,KAAA,GAAQ,KAAQ,GAAA,OAAA,EAAS,OAAM,KACtF,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAS,SAAS,EAAA,CAAA,gDAAA,EAAmD,KAAK,EAAE,CAAA,CAAA,EAAK,QAAK,EAAA,IAAA,CAAA,IAAA,EAAK,CAChG,EAAA,CAAA,CAAA;AAER;;;;"}
|