@hh.ru/magritte-ui-tree-selector 5.5.80 → 5.5.82

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.
Files changed (86) hide show
  1. package/Action.d.ts +1 -1
  2. package/Action.js +15 -12
  3. package/Action.js.map +1 -1
  4. package/Item.d.ts +3 -3
  5. package/Item.js +106 -54
  6. package/Item.js.map +1 -1
  7. package/ItemContent.d.ts +2 -2
  8. package/ItemContent.js +69 -15
  9. package/ItemContent.js.map +1 -1
  10. package/ItemsList.d.ts +3 -3
  11. package/ItemsList.js +243 -159
  12. package/ItemsList.js.map +1 -1
  13. package/MobileDelimiter.js +1 -1
  14. package/MobileDelimiter.js.map +1 -1
  15. package/MobileItem.d.ts +2 -2
  16. package/MobileItem.js +26 -5
  17. package/MobileItem.js.map +1 -1
  18. package/MobileItemsList.d.ts +2 -2
  19. package/MobileItemsList.js +259 -132
  20. package/MobileItemsList.js.map +1 -1
  21. package/MobileParentItem.d.ts +3 -3
  22. package/MobileParentItem.js +33 -14
  23. package/MobileParentItem.js.map +1 -1
  24. package/TreeSelector.d.ts +2 -2
  25. package/TreeSelector.js +49 -20
  26. package/TreeSelector.js.map +1 -1
  27. package/TreeSelectorDummy.d.ts +2 -2
  28. package/TreeSelectorDummy.js +178 -109
  29. package/TreeSelectorDummy.js.map +1 -1
  30. package/TreeSelectorItemBase.d.ts +2 -2
  31. package/TreeSelectorItemBase.js +12 -6
  32. package/TreeSelectorItemBase.js.map +1 -1
  33. package/TreeSelectorWrapper.js +38 -24
  34. package/TreeSelectorWrapper.js.map +1 -1
  35. package/collection/treeCollection.d.ts +1 -1
  36. package/collection/treeCollection.js +178 -184
  37. package/collection/treeCollection.js.map +1 -1
  38. package/collection/treeCollectionHelper.d.ts +9 -3
  39. package/collection/treeCollectionHelper.js +68 -105
  40. package/collection/treeCollectionHelper.js.map +1 -1
  41. package/collection/types.d.ts +1 -1
  42. package/index.css +45 -45
  43. package/index.d.ts +9 -9
  44. package/index.js +1 -1
  45. package/index.mock.d.ts +6 -6
  46. package/index.mock.js +14 -6
  47. package/index.mock.js.map +1 -1
  48. package/package.json +23 -22
  49. package/strategy/createSingleValueToggler.d.ts +1 -1
  50. package/strategy/createSingleValueToggler.js +17 -41
  51. package/strategy/createSingleValueToggler.js.map +1 -1
  52. package/strategy/createTreeCollectionToggler.d.ts +3 -3
  53. package/strategy/createTreeCollectionToggler.js +42 -58
  54. package/strategy/createTreeCollectionToggler.js.map +1 -1
  55. package/strategy/dummyToggle.d.ts +1 -1
  56. package/strategy/dummyToggle.js +10 -13
  57. package/strategy/dummyToggle.js.map +1 -1
  58. package/strategy/immutableSelectionStrategy.d.ts +3 -3
  59. package/strategy/immutableSelectionStrategy.js +27 -26
  60. package/strategy/immutableSelectionStrategy.js.map +1 -1
  61. package/strategy/selectionStrategy.d.ts +3 -3
  62. package/strategy/selectionStrategy.js +47 -56
  63. package/strategy/selectionStrategy.js.map +1 -1
  64. package/strategy/types.d.ts +1 -1
  65. package/tree-selector-item-BYBFlI_G.js +5 -0
  66. package/tree-selector-item-BYBFlI_G.js.map +1 -0
  67. package/types.d.ts +2 -2
  68. package/useAnimationTimeout.js +14 -14
  69. package/useAnimationTimeout.js.map +1 -1
  70. package/useDisabled.d.ts +2 -2
  71. package/useDisabled.js +7 -10
  72. package/useDisabled.js.map +1 -1
  73. package/useExpanded.d.ts +2 -2
  74. package/useExpanded.js +65 -54
  75. package/useExpanded.js.map +1 -1
  76. package/useIndeterminate.d.ts +2 -2
  77. package/useIndeterminate.js +17 -18
  78. package/useIndeterminate.js.map +1 -1
  79. package/useRenderInput.d.ts +1 -1
  80. package/useRenderInput.js +44 -32
  81. package/useRenderInput.js.map +1 -1
  82. package/useSelected.d.ts +3 -3
  83. package/useSelected.js +36 -31
  84. package/useSelected.js.map +1 -1
  85. package/tree-selector-item-BOEDcwrO.js +0 -5
  86. 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 ImmutableSelectionStrategy from './strategy/immutableSelectionStrategy.js';
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-BOEDcwrO.js';
22
+ import './tree-selector-item-BYBFlI_G.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
- const { value, collection, singleChoice, leavesOnly, collapseToParentId, checkSelectable, onChange, disabled, maxSelected, ...rest } = props;
49
- const strategy = useMemo(() => new ImmutableSelectionStrategy(collection, {
50
- singleChoice,
51
- leavesOnly,
52
- checkSelectable,
53
- }), [collection, singleChoice, leavesOnly, checkSelectable]);
54
- if (maxSelected && !collapseToParentId && !leavesOnly) {
55
- throw new Error(`Magritte component TreeSelector: maxSelected can be used only with collapseToParentId or leavesOnly`);
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
- const { selected, setSelected } = useSelected({
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
 
@@ -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":["_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAM,qBAAqB,GAAG,CAC1B,KAAoC,EACpC,GAA+B,KACjB;IACd,MAAM,EACF,KAAK,EACL,UAAU,EACV,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,GAAG,IAAI,EACV,GAAG,KAAK,CAAC;IACV,MAAM,QAAQ,GAAG,OAAO,CACpB,MACI,IAAI,0BAA0B,CAAC,UAAU,EAAE;QACvC,YAAY;QACZ,UAAU;QACV,eAAe;KAClB,CAAC,EACN,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,CAAC,CAC1D,CAAC;IAEF,IAAI,WAAW,IAAI,CAAC,kBAAkB,IAAI,CAAC,UAAU,EAAE;AACnD,QAAA,MAAM,IAAI,KAAK,CACX,CAAA,mGAAA,CAAqG,CACxG,CAAC;KACL;AAED,IAAA,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC;QAC1C,KAAK;QACL,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,WAAW;QACX,kBAAkB;AACrB,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,eAAe,GAAG,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;AAErF,IAAA,QACIA,GAAC,CAAA,iBAAiB,EACV,EAAA,GAAA,IAAI,EACR,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,WAAW,EACrB,GAAG,EAAE,GAAG,EAAA,CACV,EACJ;AACN,CAAC,CAAC;MAEW,YAAY,GAAG,UAAU,CAAC,qBAAqB;;;;"}
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;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { ReactElement, ForwardedRef } from 'react';
2
- import { AdditionalDefault } from '@hh.ru/magritte-ui-tree-selector/collection/types';
3
- import { ListControls, TreeSelectorDummyProps } from '@hh.ru/magritte-ui-tree-selector/types';
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>;
@@ -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-BOEDcwrO.js';
24
+ import './tree-selector-item-BYBFlI_G.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
- return !!(query && query.length);
42
+ return !!(query && query.length);
43
43
  };
44
- const TreeSelectorDummyComponent = ({ collection: initialCollection, checkSelectable = defaultCheckSelectable, initialExpanded = defaultArray, value: selected, leavesOnly, singleChoice, disabled = defaultArray, treeFilter = filterWithParents, suggestedNotFound = defaultArray, constantlySuggested = defaultArray, renderItemForDesktop, renderItem, renderMobileDelimiter, onExpand, onChange, onChangeFilterQuery, contentNotFound, onMobileNavigationChange, getMobileSearchItemOrder, expandTreeOnSelected = true, getSelectAllParentTrl, renderContentBefore, renderContentAfter, children, }, ref) => {
45
- const [collection, setCollection] = useState(initialCollection);
46
- const [isSearch, setIsSearch] = useState(false);
47
- const currentQuery = useRef('');
48
- const inputRef = useRef(null);
49
- const suggestedNotFoundModels = useRef(initialCollection.getExistModels(suggestedNotFound));
50
- const constantlySuggestedModels = useRef(initialCollection.getExistModels(constantlySuggested));
51
- const getSearchItemOrderDefault = useCallback((model) => {
52
- return initialCollection.getModelLevel(model.id);
53
- }, [initialCollection]);
54
- const { indeterminate } = useIndeterminate({ collection: initialCollection, selected });
55
- const { expanded: currentExpanded, setExpanded, handleExpansion, handleResetExpanded, } = useExpanded({
56
- initialValue: initialExpanded?.slice(),
57
- selected,
58
- expandTreeOnSelected,
59
- collection: initialCollection,
60
- onExpand,
61
- });
62
- const { isMobile } = useBreakpoint();
63
- const { contentFilterQuery, setInputValue, handleChangeInput, renderInput } = useRenderInput(inputRef);
64
- const treeRefCallback = useCallback((node) => {
65
- // делаем сброс при монтировании компонента, пока он размонтирован нам не важно какой именно пункт раскрыт
66
- if (node) {
67
- handleResetExpanded();
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
- useEffect(() => {
74
- const contentFilterQueryTrimmed = contentFilterQuery.trim();
75
- const queryWasChanged = contentFilterQueryTrimmed !== currentQuery.current.trim();
76
- if (queryWasChanged && needToApply(contentFilterQueryTrimmed)) {
77
- const newExpanded = [];
78
- const newCollection = treeFilter(initialCollection, (item) => match(contentFilterQueryTrimmed, item.text), isMobile);
79
- newCollection.toList().forEach((item) => {
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
- contentFilterQuery,
131
- treeFilter,
132
- selected,
133
- setExpanded,
134
- isMobile,
135
- onChangeFilterQuery,
136
- handleResetExpanded,
137
- initialExpanded,
138
- ]);
139
- const renderTreeSelector = useCallback(() => {
140
- const hasModels = collection.getTopLevel().length;
141
- return (jsx(TreeSelectorWrapper, { forwardRef: treeRefCallback, children: hasModels ? (isMobile ? (jsx(MobileItemsList, { getMobileSearchItemOrder: getMobileSearchItemOrder || getSearchItemOrderDefault, collection: collection, selected: selected, disabled: disabled, onChange: onChange, leavesOnly: leavesOnly, checkSelectable: checkSelectable, singleChoice: singleChoice, ref: ref, setInputValue: setInputValue, renderItem: renderItem, renderMobileDelimiter: renderMobileDelimiter, handleChangeInput: handleChangeInput, contentFilterQuery: contentFilterQuery.trim(), onMobileNavigationChange: onMobileNavigationChange, isSearch: isSearch, getSelectAllParentTrl: getSelectAllParentTrl, renderContentBefore: renderContentBefore, renderContentAfter: renderContentAfter })) : (jsx(ItemsList, { collection: collection, leavesOnly: leavesOnly, checkSelectable: checkSelectable, expanded: currentExpanded, onExpansion: handleExpansion, selected: selected, onChange: onChange, disabled: disabled, singleChoice: singleChoice, indeterminate: indeterminate, isSearch: isSearch, renderItemForDesktop: renderItemForDesktop, renderContentBefore: renderContentBefore, renderContentAfter: renderContentAfter }))) : (jsx(Fragment, { children: contentNotFound })) }));
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
- currentExpanded,
166
- handleExpansion,
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
- contentNotFound,
170
- ]);
171
- return jsx(Fragment, { children: children({ renderTreeSelector, renderInput }) });
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
 
@@ -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":"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"}
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,MAAM,yBAAyB,MAAM,IAAA,CAAA;AACrC,MAAM,eAAyB,EAAC,CAAA;AAEhC,MAAM,WAAA,GAAc,CAAC,KAA2B,KAAA;AAC5C,EAAO,OAAA,CAAC,EAAE,KAAA,IAAS,KAAM,CAAA,MAAA,CAAA,CAAA;AAC7B,CAAA,CAAA;AAEO,MAAM,6BAA6B,CACtC;AAAA,EACI,UAAY,EAAA,iBAAA;AAAA,EACZ,eAAkB,GAAA,sBAAA;AAAA,EAClB,eAAkB,GAAA,YAAA;AAAA,EAClB,KAAO,EAAA,QAAA;AAAA,EACP,UAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAW,GAAA,YAAA;AAAA,EACX,UAAa,GAAA,iBAAA;AAAA,EACb,iBAAoB,GAAA,YAAA;AAAA,EACpB,mBAAsB,GAAA,YAAA;AAAA,EACtB,oBAAA;AAAA,EACA,UAAA;AAAA,EACA,qBAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,eAAA;AAAA,EACA,wBAAA;AAAA,EACA,wBAAA;AAAA,EACA,oBAAuB,GAAA,IAAA;AAAA,EACvB,qBAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,QAAA;AACJ,CAAA,EACA,GACe,KAAA;AACf,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,iBAAiB,CAAA,CAAA;AAC9D,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAC9C,EAAM,MAAA,YAAA,GAAe,OAAO,EAAE,CAAA,CAAA;AAC9B,EAAM,MAAA,QAAA,GAAW,OAAyB,IAAI,CAAA,CAAA;AAC9C,EAAA,MAAM,uBAA0B,GAAA,MAAA,CAAO,iBAAkB,CAAA,cAAA,CAAe,iBAAiB,CAAC,CAAA,CAAA;AAC1F,EAAA,MAAM,yBAA4B,GAAA,MAAA,CAAO,iBAAkB,CAAA,cAAA,CAAe,mBAAmB,CAAC,CAAA,CAAA;AAC9F,EAAA,MAAM,yBAA4B,GAAA,WAAA;AAAA,IAC9B,CAAC,KAAiC,KAAA;AAC9B,MAAO,OAAA,iBAAA,CAAkB,aAAc,CAAA,KAAA,CAAM,EAAE,CAAA,CAAA;AAAA,KACnD;AAAA,IACA,CAAC,iBAAiB,CAAA;AAAA,GACtB,CAAA;AAEA,EAAM,MAAA,EAAE,eAAkB,GAAA,gBAAA,CAAiB,EAAE,UAAY,EAAA,iBAAA,EAAmB,UAAU,CAAA,CAAA;AAEtF,EAAM,MAAA;AAAA,IACF,QAAU,EAAA,eAAA;AAAA,IACV,WAAA;AAAA,IACA,eAAA;AAAA,IACA,mBAAA;AAAA,MACA,WAAY,CAAA;AAAA,IACZ,YAAA,EAAc,iBAAiB,KAAM,EAAA;AAAA,IACrC,QAAA;AAAA,IACA,oBAAA;AAAA,IACA,UAAY,EAAA,iBAAA;AAAA,IACZ,QAAA;AAAA,GACH,CAAA,CAAA;AACD,EAAM,MAAA,EAAE,QAAS,EAAA,GAAI,aAAc,EAAA,CAAA;AAEnC,EAAA,MAAM,EAAE,kBAAoB,EAAA,aAAA,EAAe,mBAAmB,WAAY,EAAA,GAAI,eAAe,QAAQ,CAAA,CAAA;AAErG,EAAA,MAAM,eAA+C,GAAA,WAAA;AAAA,IACjD,CAAC,IAAS,KAAA;AAEN,MAAA,IAAI,IAAM,EAAA;AACN,QAAoB,mBAAA,EAAA,CAAA;AAAA,OACxB;AAAA,KACJ;AAAA;AAAA;AAAA,IAGA,CAAC,mBAAmB,CAAA;AAAA,GACxB,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACZ,IAAM,MAAA,yBAAA,GAA4B,mBAAmB,IAAK,EAAA,CAAA;AAC1D,IAAA,MAAM,eAAkB,GAAA,yBAAA,KAA8B,YAAa,CAAA,OAAA,CAAQ,IAAK,EAAA,CAAA;AAEhF,IAAI,IAAA,eAAA,IAAmB,WAAY,CAAA,yBAAyB,CAAG,EAAA;AAC3D,MAAA,MAAM,cAAwB,EAAC,CAAA;AAC/B,MAAA,MAAM,aAAgB,GAAA,UAAA;AAAA,QAClB,iBAAA;AAAA,QACA,CAAC,IAAA,KAAS,KAAM,CAAA,yBAAA,EAA2B,KAAK,IAAI,CAAA;AAAA,QACpD,QAAA;AAAA,OACJ,CAAA;AACA,MAAA,aAAA,CAAc,MAAO,EAAA,CAAE,OAAQ,CAAA,CAAC,IAAS,KAAA;AACrC,QAAA,IAAI,aAAc,CAAA,WAAA,CAAY,IAAK,CAAA,EAAE,CAAG,EAAA;AAGpC,UAAY,WAAA,CAAA,IAAA,CAAK,KAAK,EAAE,CAAA,CAAA;AAAA,SACrB,MAAA;AAGH,UAAA,iBAAA,CAAkB,YAAa,CAAA,IAAA,CAAK,EAAI,EAAA,CAAC,OAAO,OAAY,KAAA;AACxD,YAAc,aAAA,CAAA,QAAA,CAAS,EAAE,GAAG,KAAA,IAAS,OAAQ,CAAA,CAAC,EAAE,EAAE,CAAA,CAAA;AAAA,WACrD,CAAA,CAAA;AAAA,SACL;AAAA,OACH,CAAA,CAAA;AAED,MAAM,MAAA,WAAA,GAAc,cAAc,MAAO,EAAA,CAAE,IAAI,CAAC,KAAA,KAAU,MAAM,EAAE,CAAA,CAAA;AAMlE,MAAA,IAAI,CAAC,WAAA,CAAY,MAAU,IAAA,uBAAA,CAAwB,QAAQ,MAAQ,EAAA;AAC/D,QAAwB,uBAAA,CAAA,OAAA,CAAQ,OAAQ,CAAA,CAAC,KAAU,KAAA,aAAA,CAAc,SAAS,EAAE,GAAG,KAAM,EAAC,CAAC,CAAA,CAAA;AAAA,OACpF,MAAA;AACH,QAA0B,yBAAA,CAAA,OAAA,CAAQ,OAAQ,CAAA,CAAC,KAAU,KAAA;AACjD,UAAA,IAAI,CAAC,WAAA,CAAY,QAAS,CAAA,KAAA,CAAM,EAAE,CAAG,EAAA;AACjC,YAAA,aAAA,CAAc,QAAS,CAAA,EAAE,GAAG,KAAA,EAAO,CAAA,CAAA;AAAA,WACvC;AAAA,SACH,CAAA,CAAA;AAAA,OACL;AAEA,MAAA,aAAA,CAAc,aAAa,CAAA,CAAA;AAC3B,MAAA,YAAA,CAAa,OAAU,GAAA,kBAAA,CAAA;AACvB,MAAA,mBAAA,GAAsB,aAAa,yBAAyB,CAAA,CAAA;AAC5D,MAAA,WAAA,CAAY,WAAW,CAAA,CAAA;AACvB,MAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAAA,eACT,eAAiB,EAAA;AAExB,MAAM,MAAA,WAAA,GAAc,gBAAgB,KAAM,EAAA,CAAA;AAC1C,MAAA,aAAA,CAAc,iBAAiB,CAAA,CAAA;AAE/B,MAAA,mBAAA;AAAA,QACI,kBAAkB,MAAO,EAAA,CAAE,IAAI,CAAC,KAAA,KAAU,MAAM,EAAE,CAAA;AAAA,QAClD,yBAAA;AAAA,OACJ,CAAA;AACA,MAAA,YAAA,CAAa,OAAU,GAAA,kBAAA,CAAA;AACvB,MAAA,IAAI,SAAS,OAAS,EAAA;AAClB,QAAA,WAAA,CAAY,WAAW,CAAA,CAAA;AAAA,OACpB,MAAA;AACH,QAAoB,mBAAA,EAAA,CAAA;AAAA,OACxB;AAEA,MAAA,WAAA,CAAY,KAAK,CAAA,CAAA;AAAA,KACrB;AAAA,GACD,EAAA;AAAA,IACC,iBAAA;AAAA,IACA,kBAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,mBAAA;AAAA,IACA,mBAAA;AAAA,IACA,eAAA;AAAA,GACH,CAAA,CAAA;AAED,EAAM,MAAA,kBAAA,GAAqB,YAAY,MAAM;AACzC,IAAM,MAAA,SAAA,GAAY,UAAW,CAAA,WAAA,EAAc,CAAA,MAAA,CAAA;AAC3C,IAAA,uBACK,GAAA,CAAA,mBAAA,EAAA,EAAoB,UAAY,EAAA,eAAA,EAE5B,sBACG,QACI,mBAAA,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACG,0BAA0B,wBAA4B,IAAA,yBAAA;AAAA,QACtD,UAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAA;AAAA,QACA,eAAA;AAAA,QACA,YAAA;AAAA,QACA,GAAA;AAAA,QACA,aAAA;AAAA,QACA,UAAA;AAAA,QACA,qBAAA;AAAA,QACA,iBAAA;AAAA,QACA,kBAAA,EAAoB,mBAAmB,IAAK,EAAA;AAAA,QAC5C,wBAAA;AAAA,QACA,QAAA;AAAA,QACA,qBAAA;AAAA,QACA,mBAAA;AAAA,QACA,kBAAA;AAAA,OAAA;AAAA,KAGJ,mBAAA,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACG,UAAA;AAAA,QACA,UAAA;AAAA,QACA,eAAA;AAAA,QACA,QAAU,EAAA,eAAA;AAAA,QACV,WAAa,EAAA,eAAA;AAAA,QACb,QAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,YAAA;AAAA,QACA,aAAA;AAAA,QACA,QAAA;AAAA,QACA,oBAAA;AAAA,QACA,mBAAA;AAAA,QACA,kBAAA;AAAA,OAAA;AAAA,KACJ,mBAGD,GAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA,eAAA,EAAgB,CAE3B,EAAA,CAAA,CAAA;AAAA,GAEL,EAAA;AAAA,IACC,UAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,wBAAA;AAAA,IACA,yBAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,GAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,qBAAA;AAAA,IACA,iBAAA;AAAA,IACA,kBAAA;AAAA,IACA,wBAAA;AAAA,IACA,QAAA;AAAA,IACA,qBAAA;AAAA,IACA,mBAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,oBAAA;AAAA,IACA,eAAA;AAAA,GACH,CAAA,CAAA;AAED,EAAA,uCAAU,QAAS,EAAA,QAAA,CAAA,EAAE,kBAAoB,EAAA,WAAA,EAAa,CAAE,EAAA,CAAA,CAAA;AAC5D,EAAA;AAEa,MAAA,iBAAA,GAAoB,WAAW,0BAA0B;;;;"}
@@ -1,4 +1,4 @@
1
1
  import { ReactElement } from 'react';
2
- import { AdditionalDefault } from '@hh.ru/magritte-ui-tree-selector/collection/types';
3
- import { RenderItemProps } from '@hh.ru/magritte-ui-tree-selector/types';
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;
@@ -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 = ({ disabled, input, item, isXS, labelRight, }) => {
6
- const cellProps = {
7
- [isXS ? 'right' : 'left']: input,
8
- ...(isXS && labelRight && { right: labelRight }),
9
- };
10
- return (jsx(Cell, { disabled: disabled, ...cellProps, Element: isXS || !input ? 'div' : 'label', align: "top", children: jsx(CellText, { "data-qa": `tree-selector-item-text tree-selector-item-text-${item.id}`, children: item.text }) }));
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":["_jsx"],"mappings":";;;AAMa,MAAA,oBAAoB,GAAG,CAAuC,EACvE,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,UAAU,GACgB,KAAkB;AAC5C,IAAA,MAAM,SAAS,GAAG;QACd,CAAC,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK;QAChC,IAAI,IAAI,IAAI,UAAU,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE;KAClD,CAAC;IACF,QACIA,IAAC,IAAI,EAAA,EAAC,QAAQ,EAAE,QAAQ,KAAM,SAAS,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,OAAO,EAAE,KAAK,EAAC,KAAK,YAC3FA,GAAC,CAAA,QAAQ,eAAU,CAAmD,gDAAA,EAAA,IAAI,CAAC,EAAE,CAAA,CAAE,YAAG,IAAI,CAAC,IAAI,EAAY,CAAA,EAAA,CACpG,EACT;AACN;;;;"}
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;;;;"}