@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
@@ -1,47 +1,23 @@
1
1
  import './../index.css';
2
- /**
3
- * Создаёт переключатель для набора с возможностью выбора только одного элемента.
4
- */
5
2
  const createSingleValueToggler = () => {
6
- /**
7
- * Переключает элемент в наборе, при необходимости сбрасывая предыдущий выбранный.
8
- * @param set Исходный набор
9
- * @param id Переключаемый элемент
10
- * @param state Новое состояние переключаемого элемента (true — в наборе, false — нет)
11
- * @returns Признак того, что набор изменился.
12
- */
13
- return (set, id, state) => {
14
- /**
15
- * Всего возможно 6 случаев:
16
- * 1. toggle([2], 2, true) => [2], return false
17
- * 2. toggle([1], 2, true) => [2], return true
18
- * 3. toggle([ ], 2, true) => [2], return true
19
- * 4. toggle([2], 2, false) => [ ], return true
20
- * 5. toggle([1], 2, false) => [1], return false
21
- * 6. toggle([ ], 2, false) => [ ], return false
22
- */
23
- if (state) {
24
- if (set.has(id)) {
25
- // 1
26
- return false;
27
- }
28
- if (set.size) {
29
- // 2
30
- set.clear();
31
- }
32
- // 3
33
- set.add(id);
34
- return true;
35
- }
36
- else if (set.has(id)) {
37
- // 4
38
- set.delete(id);
39
- return true;
40
- }
41
- // 5, 6
3
+ return (set, id, state) => {
4
+ if (state) {
5
+ if (set.has(id)) {
42
6
  return false;
43
- };
7
+ }
8
+ if (set.size) {
9
+ set.clear();
10
+ }
11
+ set.add(id);
12
+ return true;
13
+ } else if (set.has(id)) {
14
+ set.delete(id);
15
+ return true;
16
+ }
17
+ return false;
18
+ };
44
19
  };
20
+ var createSingleValueToggler_default = createSingleValueToggler;
45
21
 
46
- export { createSingleValueToggler as default };
22
+ export { createSingleValueToggler_default as default };
47
23
  //# sourceMappingURL=createSingleValueToggler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createSingleValueToggler.js","sources":["src/strategy/createSingleValueToggler.ts"],"sourcesContent":["import { Toggler } from '@hh.ru/magritte-ui-tree-selector/strategy/types';\n\n/**\n * Создаёт переключатель для набора с возможностью выбора только одного элемента.\n */\nconst createSingleValueToggler = (): Toggler => {\n /**\n * Переключает элемент в наборе, при необходимости сбрасывая предыдущий выбранный.\n * @param set Исходный набор\n * @param id Переключаемый элемент\n * @param state Новое состояние переключаемого элемента (true — в наборе, false — нет)\n * @returns Признак того, что набор изменился.\n */\n return (set: Set<string>, id: string, state: boolean) => {\n /**\n * Всего возможно 6 случаев:\n * 1. toggle([2], 2, true) => [2], return false\n * 2. toggle([1], 2, true) => [2], return true\n * 3. toggle([ ], 2, true) => [2], return true\n * 4. toggle([2], 2, false) => [ ], return true\n * 5. toggle([1], 2, false) => [1], return false\n * 6. toggle([ ], 2, false) => [ ], return false\n */\n if (state) {\n if (set.has(id)) {\n // 1\n return false;\n }\n if (set.size) {\n // 2\n set.clear();\n }\n // 3\n set.add(id);\n return true;\n } else if (set.has(id)) {\n // 4\n set.delete(id);\n return true;\n }\n // 5, 6\n return false;\n };\n};\n\nexport default createSingleValueToggler;\n"],"names":[],"mappings":"AAEA;;AAEG;AACG,MAAA,wBAAwB,GAAG,MAAc;AAC3C;;;;;;AAMG;AACH,IAAA,OAAO,CAAC,GAAgB,EAAE,EAAU,EAAE,KAAc,KAAI;AACpD;;;;;;;;AAQG;QACH,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;;AAEb,gBAAA,OAAO,KAAK,CAAC;aAChB;AACD,YAAA,IAAI,GAAG,CAAC,IAAI,EAAE;;gBAEV,GAAG,CAAC,KAAK,EAAE,CAAC;aACf;;AAED,YAAA,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACZ,YAAA,OAAO,IAAI,CAAC;SACf;AAAM,aAAA,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;;AAEpB,YAAA,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACf,YAAA,OAAO,IAAI,CAAC;SACf;;AAED,QAAA,OAAO,KAAK,CAAC;AACjB,KAAC,CAAC;AACN;;;;"}
1
+ {"version":3,"file":"createSingleValueToggler.js","sources":["src/strategy/createSingleValueToggler.ts"],"sourcesContent":["import { Toggler } from '@hh.ru/magritte-ui-tree-selector/strategy/types';\n\n/**\n * Создаёт переключатель для набора с возможностью выбора только одного элемента.\n */\nconst createSingleValueToggler = (): Toggler => {\n /**\n * Переключает элемент в наборе, при необходимости сбрасывая предыдущий выбранный.\n * @param set Исходный набор\n * @param id Переключаемый элемент\n * @param state Новое состояние переключаемого элемента (true — в наборе, false — нет)\n * @returns Признак того, что набор изменился.\n */\n return (set: Set<string>, id: string, state: boolean) => {\n /**\n * Всего возможно 6 случаев:\n * 1. toggle([2], 2, true) => [2], return false\n * 2. toggle([1], 2, true) => [2], return true\n * 3. toggle([ ], 2, true) => [2], return true\n * 4. toggle([2], 2, false) => [ ], return true\n * 5. toggle([1], 2, false) => [1], return false\n * 6. toggle([ ], 2, false) => [ ], return false\n */\n if (state) {\n if (set.has(id)) {\n // 1\n return false;\n }\n if (set.size) {\n // 2\n set.clear();\n }\n // 3\n set.add(id);\n return true;\n } else if (set.has(id)) {\n // 4\n set.delete(id);\n return true;\n }\n // 5, 6\n return false;\n };\n};\n\nexport default createSingleValueToggler;\n"],"names":[],"mappings":"AAKA,MAAM,2BAA2B,MAAe;AAQ5C,EAAO,OAAA,CAAC,GAAkB,EAAA,EAAA,EAAY,KAAmB,KAAA;AAUrD,IAAA,IAAI,KAAO,EAAA;AACP,MAAI,IAAA,GAAA,CAAI,GAAI,CAAA,EAAE,CAAG,EAAA;AAEb,QAAO,OAAA,KAAA,CAAA;AAAA,OACX;AACA,MAAA,IAAI,IAAI,IAAM,EAAA;AAEV,QAAA,GAAA,CAAI,KAAM,EAAA,CAAA;AAAA,OACd;AAEA,MAAA,GAAA,CAAI,IAAI,EAAE,CAAA,CAAA;AACV,MAAO,OAAA,IAAA,CAAA;AAAA,KACA,MAAA,IAAA,GAAA,CAAI,GAAI,CAAA,EAAE,CAAG,EAAA;AAEpB,MAAA,GAAA,CAAI,OAAO,EAAE,CAAA,CAAA;AACb,MAAO,OAAA,IAAA,CAAA;AAAA,KACX;AAEA,IAAO,OAAA,KAAA,CAAA;AAAA,GACX,CAAA;AACJ,CAAA,CAAA;AAEA,IAAO,gCAAQ,GAAA;;;;"}
@@ -1,6 +1,6 @@
1
- import TreeCollection from '@hh.ru/magritte-ui-tree-selector/collection/treeCollection';
2
- import { AdditionalDefault, IdCollectionPredicate } from '@hh.ru/magritte-ui-tree-selector/collection/types';
3
- import { Toggler } from '@hh.ru/magritte-ui-tree-selector/strategy/types';
1
+ import TreeCollection from '../collection/treeCollection';
2
+ import { AdditionalDefault, IdCollectionPredicate } from '../collection/types';
3
+ import { Toggler } from '../strategy/types';
4
4
  /**
5
5
  * Создаёт переключатель элементов в наборе с учётом иерархии элементов:
6
6
  * — если выбран или сброшен родитель, выбираются или сбрасываются все его потомки;
@@ -1,65 +1,49 @@
1
1
  import './../index.css';
2
- import toggle from './dummyToggle.js';
2
+ import dummyToggle_default from './dummyToggle.js';
3
3
 
4
- /**
5
- * Создаёт переключатель элементов в наборе с учётом иерархии элементов:
6
- * — если выбран или сброшен родитель, выбираются или сбрасываются все его потомки;
7
- * — если выбраны все потомки родителя, выбирается и родитель;
8
- * — если сброшен хотя бы один потомок выбранного родителя, сбрасывается и родитель.
9
- */
10
4
  const createTreeCollectionToggler = (collection, checkSelectable) => {
11
- /**
12
- * Определение состояния по дочерним элементам
13
- */
14
- const _getCumulativeParentState = (set, id) => {
15
- let hasSelectableChild = false;
16
- const allSelectableChildrenAreSelected = collection.getChildren(id).every((model) => {
17
- const isSelectable = checkSelectable(model.id, collection);
18
- hasSelectableChild = hasSelectableChild || isSelectable;
19
- return set.has(model.id) || !isSelectable;
20
- });
21
- return hasSelectableChild ? allSelectableChildrenAreSelected : set.has(id);
22
- };
23
- /**
24
- * Простановка состояния всем дочерним элементам
25
- */
26
- const _setStateForAllChildren = (set, id, state) => {
27
- collection.walkChildren(id, (model) => {
28
- if (checkSelectable(model.id, collection)) {
29
- toggle(set, model.id, state);
30
- }
31
- });
32
- };
33
- const _toggleOtherParents = (set, id) => {
34
- // когда добавляем-убираем родительскую модель надо проверить и проставить статус другим родителям,
35
- // у которых есть общие модели-потомки с первоночальной родительской моделью
36
- if (collection.hasChildren(id)) {
37
- const childrenIds = collection.getChildrenIds(id);
38
- const otherParentsIds = childrenIds.reduce((result, childrenId) => {
39
- const parentIds = collection
40
- .getParentIdsDuplicates(childrenId)
41
- .filter((parentId) => parentId !== id && !result.includes(parentId) && checkSelectable(parentId, collection));
42
- return result.concat(parentIds);
43
- }, []);
44
- otherParentsIds.forEach((parentId) => toggle(set, parentId, _getCumulativeParentState(set, parentId)));
5
+ const _getCumulativeParentState = (set, id) => {
6
+ let hasSelectableChild = false;
7
+ const allSelectableChildrenAreSelected = collection.getChildren(id).every((model) => {
8
+ const isSelectable = checkSelectable(model.id, collection);
9
+ hasSelectableChild = hasSelectableChild || isSelectable;
10
+ return set.has(model.id) || !isSelectable;
11
+ });
12
+ return hasSelectableChild ? allSelectableChildrenAreSelected : set.has(id);
13
+ };
14
+ const _setStateForAllChildren = (set, id, state) => {
15
+ collection.walkChildren(id, (model) => {
16
+ if (checkSelectable(model.id, collection)) {
17
+ dummyToggle_default(set, model.id, state);
18
+ }
19
+ });
20
+ };
21
+ const _toggleOtherParents = (set, id) => {
22
+ if (collection.hasChildren(id)) {
23
+ const childrenIds = collection.getChildrenIds(id);
24
+ const otherParentsIds = childrenIds.reduce((result, childrenId) => {
25
+ const parentIds = collection.getParentIdsDuplicates(childrenId).filter(
26
+ (parentId) => parentId !== id && !result.includes(parentId) && checkSelectable(parentId, collection)
27
+ );
28
+ return result.concat(parentIds);
29
+ }, []);
30
+ otherParentsIds.forEach((parentId) => dummyToggle_default(set, parentId, _getCumulativeParentState(set, parentId)));
31
+ }
32
+ };
33
+ return (set, id, state) => {
34
+ const toggleResult = dummyToggle_default(set, id, state);
35
+ if (toggleResult) {
36
+ collection.walkParents(id, (parent) => {
37
+ if (checkSelectable(parent.id, collection)) {
38
+ dummyToggle_default(set, parent.id, _getCumulativeParentState(set, parent.id));
45
39
  }
46
- };
47
- /**
48
- * Переключение состояния модели, её родителей и потомков.
49
- */
50
- return (set, id, state) => {
51
- const toggleResult = toggle(set, id, state);
52
- if (toggleResult) {
53
- collection.walkParents(id, (parent) => {
54
- if (checkSelectable(parent.id, collection)) {
55
- toggle(set, parent.id, _getCumulativeParentState(set, parent.id));
56
- }
57
- });
58
- }
59
- _setStateForAllChildren(set, id, state);
60
- _toggleOtherParents(set, id);
61
- };
40
+ });
41
+ }
42
+ _setStateForAllChildren(set, id, state);
43
+ _toggleOtherParents(set, id);
44
+ };
62
45
  };
46
+ var createTreeCollectionToggler_default = createTreeCollectionToggler;
63
47
 
64
- export { createTreeCollectionToggler as default };
48
+ export { createTreeCollectionToggler_default as default };
65
49
  //# sourceMappingURL=createTreeCollectionToggler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createTreeCollectionToggler.js","sources":["src/strategy/createTreeCollectionToggler.ts"],"sourcesContent":["import TreeCollection from '@hh.ru/magritte-ui-tree-selector/collection/treeCollection';\nimport { AdditionalDefault, IdCollectionPredicate } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport dummyToggle from '@hh.ru/magritte-ui-tree-selector/strategy/dummyToggle';\nimport { Toggler } from '@hh.ru/magritte-ui-tree-selector/strategy/types';\n\n/**\n * Создаёт переключатель элементов в наборе с учётом иерархии элементов:\n * — если выбран или сброшен родитель, выбираются или сбрасываются все его потомки;\n * — если выбраны все потомки родителя, выбирается и родитель;\n * — если сброшен хотя бы один потомок выбранного родителя, сбрасывается и родитель.\n */\n\nconst createTreeCollectionToggler = <Additional extends AdditionalDefault>(\n collection: TreeCollection<Additional>,\n checkSelectable: IdCollectionPredicate\n): Toggler => {\n /**\n * Определение состояния по дочерним элементам\n */\n const _getCumulativeParentState = (set: Set<string>, id: string) => {\n let hasSelectableChild = false;\n const allSelectableChildrenAreSelected = collection.getChildren(id).every((model) => {\n const isSelectable = checkSelectable(model.id, collection);\n hasSelectableChild = hasSelectableChild || isSelectable;\n return set.has(model.id) || !isSelectable;\n });\n return hasSelectableChild ? allSelectableChildrenAreSelected : set.has(id);\n };\n\n /**\n * Простановка состояния всем дочерним элементам\n */\n const _setStateForAllChildren = (set: Set<string>, id: string, state: boolean) => {\n collection.walkChildren(id, (model) => {\n if (checkSelectable(model.id, collection)) {\n dummyToggle(set, model.id, state);\n }\n });\n };\n\n const _toggleOtherParents = (set: Set<string>, id: string) => {\n // когда добавляем-убираем родительскую модель надо проверить и проставить статус другим родителям,\n // у которых есть общие модели-потомки с первоночальной родительской моделью\n if (collection.hasChildren(id)) {\n const childrenIds = collection.getChildrenIds(id);\n const otherParentsIds = childrenIds.reduce<string[]>((result, childrenId) => {\n const parentIds = collection\n .getParentIdsDuplicates(childrenId)\n .filter(\n (parentId) =>\n parentId !== id && !result.includes(parentId) && checkSelectable(parentId, collection)\n );\n return result.concat(parentIds);\n }, []);\n otherParentsIds.forEach((parentId) => dummyToggle(set, parentId, _getCumulativeParentState(set, parentId)));\n }\n };\n\n /**\n * Переключение состояния модели, её родителей и потомков.\n */\n return (set: Set<string>, id: string, state: boolean) => {\n const toggleResult = dummyToggle(set, id, state);\n\n if (toggleResult) {\n collection.walkParents(id, (parent) => {\n if (checkSelectable(parent.id, collection)) {\n dummyToggle(set, parent.id, _getCumulativeParentState(set, parent.id));\n }\n });\n }\n _setStateForAllChildren(set, id, state);\n _toggleOtherParents(set, id);\n };\n};\n\nexport default createTreeCollectionToggler;\n"],"names":["dummyToggle"],"mappings":";;AAKA;;;;;AAKG;AAEH,MAAM,2BAA2B,GAAG,CAChC,UAAsC,EACtC,eAAsC,KAC7B;AACT;;AAEG;AACH,IAAA,MAAM,yBAAyB,GAAG,CAAC,GAAgB,EAAE,EAAU,KAAI;QAC/D,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAC/B,QAAA,MAAM,gCAAgC,GAAG,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;YAChF,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;AAC3D,YAAA,kBAAkB,GAAG,kBAAkB,IAAI,YAAY,CAAC;YACxD,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;AAC9C,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,kBAAkB,GAAG,gCAAgC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC/E,KAAC,CAAC;AAEF;;AAEG;IACH,MAAM,uBAAuB,GAAG,CAAC,GAAgB,EAAE,EAAU,EAAE,KAAc,KAAI;QAC7E,UAAU,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,KAAK,KAAI;YAClC,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE;gBACvCA,MAAW,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;aACrC;AACL,SAAC,CAAC,CAAC;AACP,KAAC,CAAC;AAEF,IAAA,MAAM,mBAAmB,GAAG,CAAC,GAAgB,EAAE,EAAU,KAAI;;;AAGzD,QAAA,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE;YAC5B,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAClD,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAW,CAAC,MAAM,EAAE,UAAU,KAAI;gBACxE,MAAM,SAAS,GAAG,UAAU;qBACvB,sBAAsB,CAAC,UAAU,CAAC;qBAClC,MAAM,CACH,CAAC,QAAQ,KACL,QAAQ,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAC7F,CAAC;AACN,gBAAA,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;aACnC,EAAE,EAAE,CAAC,CAAC;YACP,eAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAKA,MAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,yBAAyB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;SAC/G;AACL,KAAC,CAAC;AAEF;;AAEG;AACH,IAAA,OAAO,CAAC,GAAgB,EAAE,EAAU,EAAE,KAAc,KAAI;QACpD,MAAM,YAAY,GAAGA,MAAW,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAEjD,IAAI,YAAY,EAAE;YACd,UAAU,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,MAAM,KAAI;gBAClC,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE;AACxC,oBAAAA,MAAW,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,yBAAyB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;iBAC1E;AACL,aAAC,CAAC,CAAC;SACN;AACD,QAAA,uBAAuB,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AACxC,QAAA,mBAAmB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACjC,KAAC,CAAC;AACN;;;;"}
1
+ {"version":3,"file":"createTreeCollectionToggler.js","sources":["src/strategy/createTreeCollectionToggler.ts"],"sourcesContent":["import TreeCollection from '@hh.ru/magritte-ui-tree-selector/collection/treeCollection';\nimport { AdditionalDefault, IdCollectionPredicate } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport dummyToggle from '@hh.ru/magritte-ui-tree-selector/strategy/dummyToggle';\nimport { Toggler } from '@hh.ru/magritte-ui-tree-selector/strategy/types';\n\n/**\n * Создаёт переключатель элементов в наборе с учётом иерархии элементов:\n * — если выбран или сброшен родитель, выбираются или сбрасываются все его потомки;\n * — если выбраны все потомки родителя, выбирается и родитель;\n * — если сброшен хотя бы один потомок выбранного родителя, сбрасывается и родитель.\n */\n\nconst createTreeCollectionToggler = <Additional extends AdditionalDefault>(\n collection: TreeCollection<Additional>,\n checkSelectable: IdCollectionPredicate\n): Toggler => {\n /**\n * Определение состояния по дочерним элементам\n */\n const _getCumulativeParentState = (set: Set<string>, id: string) => {\n let hasSelectableChild = false;\n const allSelectableChildrenAreSelected = collection.getChildren(id).every((model) => {\n const isSelectable = checkSelectable(model.id, collection);\n hasSelectableChild = hasSelectableChild || isSelectable;\n return set.has(model.id) || !isSelectable;\n });\n return hasSelectableChild ? allSelectableChildrenAreSelected : set.has(id);\n };\n\n /**\n * Простановка состояния всем дочерним элементам\n */\n const _setStateForAllChildren = (set: Set<string>, id: string, state: boolean) => {\n collection.walkChildren(id, (model) => {\n if (checkSelectable(model.id, collection)) {\n dummyToggle(set, model.id, state);\n }\n });\n };\n\n const _toggleOtherParents = (set: Set<string>, id: string) => {\n // когда добавляем-убираем родительскую модель надо проверить и проставить статус другим родителям,\n // у которых есть общие модели-потомки с первоночальной родительской моделью\n if (collection.hasChildren(id)) {\n const childrenIds = collection.getChildrenIds(id);\n const otherParentsIds = childrenIds.reduce<string[]>((result, childrenId) => {\n const parentIds = collection\n .getParentIdsDuplicates(childrenId)\n .filter(\n (parentId) =>\n parentId !== id && !result.includes(parentId) && checkSelectable(parentId, collection)\n );\n return result.concat(parentIds);\n }, []);\n otherParentsIds.forEach((parentId) => dummyToggle(set, parentId, _getCumulativeParentState(set, parentId)));\n }\n };\n\n /**\n * Переключение состояния модели, её родителей и потомков.\n */\n return (set: Set<string>, id: string, state: boolean) => {\n const toggleResult = dummyToggle(set, id, state);\n\n if (toggleResult) {\n collection.walkParents(id, (parent) => {\n if (checkSelectable(parent.id, collection)) {\n dummyToggle(set, parent.id, _getCumulativeParentState(set, parent.id));\n }\n });\n }\n _setStateForAllChildren(set, id, state);\n _toggleOtherParents(set, id);\n };\n};\n\nexport default createTreeCollectionToggler;\n"],"names":["dummyToggle"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Toggler } from '@hh.ru/magritte-ui-tree-selector/strategy/types';
1
+ import { Toggler } from '../strategy/types';
2
2
  /**
3
3
  * Переключает элемент в наборе.
4
4
  */
@@ -1,18 +1,15 @@
1
1
  import './../index.css';
2
- /**
3
- * Переключает элемент в наборе.
4
- */
5
2
  const toggle = (set, item, state) => {
6
- if (state && !set.has(item)) {
7
- set.add(item);
8
- return true;
9
- }
10
- else if (!state && set.has(item)) {
11
- set.delete(item);
12
- return true;
13
- }
14
- return false;
3
+ if (state && !set.has(item)) {
4
+ set.add(item);
5
+ return true;
6
+ } else if (!state && set.has(item)) {
7
+ set.delete(item);
8
+ return true;
9
+ }
10
+ return false;
15
11
  };
12
+ var dummyToggle_default = toggle;
16
13
 
17
- export { toggle as default };
14
+ export { dummyToggle_default as default };
18
15
  //# sourceMappingURL=dummyToggle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dummyToggle.js","sources":["src/strategy/dummyToggle.ts"],"sourcesContent":["import { Toggler } from '@hh.ru/magritte-ui-tree-selector/strategy/types';\n\n/**\n * Переключает элемент в наборе.\n */\nconst toggle: Toggler = (set, item, state) => {\n if (state && !set.has(item)) {\n set.add(item);\n return true;\n } else if (!state && set.has(item)) {\n set.delete(item);\n return true;\n }\n return false;\n};\n\nexport default toggle;\n"],"names":[],"mappings":"AAEA;;AAEG;AACG,MAAA,MAAM,GAAY,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,KAAI;IACzC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACzB,QAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACd,QAAA,OAAO,IAAI,CAAC;KACf;SAAM,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAChC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,OAAO,KAAK,CAAC;AACjB;;;;"}
1
+ {"version":3,"file":"dummyToggle.js","sources":["src/strategy/dummyToggle.ts"],"sourcesContent":["import { Toggler } from '@hh.ru/magritte-ui-tree-selector/strategy/types';\n\n/**\n * Переключает элемент в наборе.\n */\nconst toggle: Toggler = (set, item, state) => {\n if (state && !set.has(item)) {\n set.add(item);\n return true;\n } else if (!state && set.has(item)) {\n set.delete(item);\n return true;\n }\n return false;\n};\n\nexport default toggle;\n"],"names":[],"mappings":"AAKA,MAAM,MAAkB,GAAA,CAAC,GAAK,EAAA,IAAA,EAAM,KAAU,KAAA;AAC1C,EAAA,IAAI,KAAS,IAAA,CAAC,GAAI,CAAA,GAAA,CAAI,IAAI,CAAG,EAAA;AACzB,IAAA,GAAA,CAAI,IAAI,IAAI,CAAA,CAAA;AACZ,IAAO,OAAA,IAAA,CAAA;AAAA,aACA,CAAC,KAAA,IAAS,GAAI,CAAA,GAAA,CAAI,IAAI,CAAG,EAAA;AAChC,IAAA,GAAA,CAAI,OAAO,IAAI,CAAA,CAAA;AACf,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AACA,EAAO,OAAA,KAAA,CAAA;AACX,CAAA,CAAA;AAEA,IAAO,mBAAQ,GAAA;;;;"}
@@ -1,6 +1,6 @@
1
- import TreeCollection from '@hh.ru/magritte-ui-tree-selector/collection/treeCollection';
2
- import { AdditionalDefault } from '@hh.ru/magritte-ui-tree-selector/collection/types';
3
- import { StrategyOptions } from '@hh.ru/magritte-ui-tree-selector/strategy/types';
1
+ import TreeCollection from '../collection/treeCollection';
2
+ import { AdditionalDefault } from '../collection/types';
3
+ import { StrategyOptions } from '../strategy/types';
4
4
  declare class ImmutableSelectionStrategy<Additional extends AdditionalDefault = never> {
5
5
  private strategy;
6
6
  constructor(collection: TreeCollection<Additional>, options: StrategyOptions);
@@ -1,5 +1,5 @@
1
1
  import './../index.css';
2
- import SelectionStrategy from './selectionStrategy.js';
2
+ import selectionStrategy_default from './selectionStrategy.js';
3
3
  import '../collection/treeCollectionHelper.js';
4
4
  import '../collection/treeCollection.js';
5
5
  import './createSingleValueToggler.js';
@@ -7,31 +7,32 @@ import './createTreeCollectionToggler.js';
7
7
  import './dummyToggle.js';
8
8
 
9
9
  class ImmutableSelectionStrategy {
10
- strategy;
11
- constructor(collection, options) {
12
- this.strategy = new SelectionStrategy(collection, options);
13
- }
14
- /**
15
- * Возвращает новый набор, в котором к `items` добавлены `addedItems`.
16
- * @param items Текущий набор.
17
- * @param addedItems Добавляемые элементы.
18
- */
19
- add(items, addedItems) {
20
- const result = new Set(items);
21
- this.strategy.add(result, addedItems);
22
- return [...result];
23
- }
24
- /**
25
- * Возвращает новый набор, в котором из `items` удалены `removedItems`.
26
- * @param items Текущий набор.
27
- * @param removedItems Удаляемые элементы.
28
- */
29
- remove(items, removedItems) {
30
- const result = new Set(items);
31
- this.strategy.remove(result, removedItems);
32
- return [...result];
33
- }
10
+ strategy;
11
+ constructor(collection, options) {
12
+ this.strategy = new selectionStrategy_default(collection, options);
13
+ }
14
+ /**
15
+ * Возвращает новый набор, в котором к `items` добавлены `addedItems`.
16
+ * @param items Текущий набор.
17
+ * @param addedItems Добавляемые элементы.
18
+ */
19
+ add(items, addedItems) {
20
+ const result = new Set(items);
21
+ this.strategy.add(result, addedItems);
22
+ return [...result];
23
+ }
24
+ /**
25
+ * Возвращает новый набор, в котором из `items` удалены `removedItems`.
26
+ * @param items Текущий набор.
27
+ * @param removedItems Удаляемые элементы.
28
+ */
29
+ remove(items, removedItems) {
30
+ const result = new Set(items);
31
+ this.strategy.remove(result, removedItems);
32
+ return [...result];
33
+ }
34
34
  }
35
+ var immutableSelectionStrategy_default = ImmutableSelectionStrategy;
35
36
 
36
- export { ImmutableSelectionStrategy as default };
37
+ export { immutableSelectionStrategy_default as default };
37
38
  //# sourceMappingURL=immutableSelectionStrategy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"immutableSelectionStrategy.js","sources":["src/strategy/immutableSelectionStrategy.ts"],"sourcesContent":["import TreeCollection from '@hh.ru/magritte-ui-tree-selector/collection/treeCollection';\nimport { AdditionalDefault } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport SelectionStrategy from '@hh.ru/magritte-ui-tree-selector/strategy/selectionStrategy';\nimport { StrategyOptions } from '@hh.ru/magritte-ui-tree-selector/strategy/types';\n\nclass ImmutableSelectionStrategy<Additional extends AdditionalDefault = never> {\n private strategy: SelectionStrategy<Additional>;\n\n constructor(collection: TreeCollection<Additional>, options: StrategyOptions) {\n this.strategy = new SelectionStrategy<Additional>(collection, options);\n }\n\n /**\n * Возвращает новый набор, в котором к `items` добавлены `addedItems`.\n * @param items Текущий набор.\n * @param addedItems Добавляемые элементы.\n */\n add(items: string[], addedItems: string[]): string[] {\n const result = new Set(items);\n this.strategy.add(result, addedItems);\n return [...result];\n }\n\n /**\n * Возвращает новый набор, в котором из `items` удалены `removedItems`.\n * @param items Текущий набор.\n * @param removedItems Удаляемые элементы.\n */\n remove(items: string[], removedItems: string[]): string[] {\n const result = new Set(items);\n this.strategy.remove(result, removedItems);\n return [...result];\n }\n}\n\nexport default ImmutableSelectionStrategy;\n"],"names":[],"mappings":";;;;;;;AAKA,MAAM,0BAA0B,CAAA;AACpB,IAAA,QAAQ,CAAgC;IAEhD,WAAY,CAAA,UAAsC,EAAE,OAAwB,EAAA;QACxE,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAiB,CAAa,UAAU,EAAE,OAAO,CAAC,CAAC;KAC1E;AAED;;;;AAIG;IACH,GAAG,CAAC,KAAe,EAAE,UAAoB,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACtC,QAAA,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;KACtB;AAED;;;;AAIG;IACH,MAAM,CAAC,KAAe,EAAE,YAAsB,EAAA;AAC1C,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAC3C,QAAA,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;KACtB;AACJ;;;;"}
1
+ {"version":3,"file":"immutableSelectionStrategy.js","sources":["src/strategy/immutableSelectionStrategy.ts"],"sourcesContent":["import TreeCollection from '@hh.ru/magritte-ui-tree-selector/collection/treeCollection';\nimport { AdditionalDefault } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport SelectionStrategy from '@hh.ru/magritte-ui-tree-selector/strategy/selectionStrategy';\nimport { StrategyOptions } from '@hh.ru/magritte-ui-tree-selector/strategy/types';\n\nclass ImmutableSelectionStrategy<Additional extends AdditionalDefault = never> {\n private strategy: SelectionStrategy<Additional>;\n\n constructor(collection: TreeCollection<Additional>, options: StrategyOptions) {\n this.strategy = new SelectionStrategy<Additional>(collection, options);\n }\n\n /**\n * Возвращает новый набор, в котором к `items` добавлены `addedItems`.\n * @param items Текущий набор.\n * @param addedItems Добавляемые элементы.\n */\n add(items: string[], addedItems: string[]): string[] {\n const result = new Set(items);\n this.strategy.add(result, addedItems);\n return [...result];\n }\n\n /**\n * Возвращает новый набор, в котором из `items` удалены `removedItems`.\n * @param items Текущий набор.\n * @param removedItems Удаляемые элементы.\n */\n remove(items: string[], removedItems: string[]): string[] {\n const result = new Set(items);\n this.strategy.remove(result, removedItems);\n return [...result];\n }\n}\n\nexport default ImmutableSelectionStrategy;\n"],"names":["SelectionStrategy"],"mappings":";;;;;;;AAKA,MAAM,0BAAyE,CAAA;AAAA,EACnE,QAAA,CAAA;AAAA,EAER,WAAA,CAAY,YAAwC,OAA0B,EAAA;AAC1E,IAAA,IAAA,CAAK,QAAW,GAAA,IAAIA,yBAA8B,CAAA,UAAA,EAAY,OAAO,CAAA,CAAA;AAAA,GACzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,GAAA,CAAI,OAAiB,UAAgC,EAAA;AACjD,IAAM,MAAA,MAAA,GAAS,IAAI,GAAA,CAAI,KAAK,CAAA,CAAA;AAC5B,IAAK,IAAA,CAAA,QAAA,CAAS,GAAI,CAAA,MAAA,EAAQ,UAAU,CAAA,CAAA;AACpC,IAAO,OAAA,CAAC,GAAG,MAAM,CAAA,CAAA;AAAA,GACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAA,CAAO,OAAiB,YAAkC,EAAA;AACtD,IAAM,MAAA,MAAA,GAAS,IAAI,GAAA,CAAI,KAAK,CAAA,CAAA;AAC5B,IAAK,IAAA,CAAA,QAAA,CAAS,MAAO,CAAA,MAAA,EAAQ,YAAY,CAAA,CAAA;AACzC,IAAO,OAAA,CAAC,GAAG,MAAM,CAAA,CAAA;AAAA,GACrB;AACJ,CAAA;AAEA,IAAO,kCAAQ,GAAA;;;;"}
@@ -1,6 +1,6 @@
1
- import TreeCollection from '@hh.ru/magritte-ui-tree-selector/collection/treeCollection';
2
- import { AdditionalDefault } from '@hh.ru/magritte-ui-tree-selector/collection/types';
3
- import { StrategyOptions } from '@hh.ru/magritte-ui-tree-selector/strategy/types';
1
+ import TreeCollection from '../collection/treeCollection';
2
+ import { AdditionalDefault } from '../collection/types';
3
+ import { StrategyOptions } from '../strategy/types';
4
4
  /**
5
5
  * Стратегия переключения флага `selected` для иерархической коллекции.
6
6
  */
@@ -1,73 +1,64 @@
1
1
  import './../index.css';
2
2
  import { filterMissingIds, filterParents } from '../collection/treeCollectionHelper.js';
3
- import createSingleValueToggler from './createSingleValueToggler.js';
4
- import createTreeCollectionToggler from './createTreeCollectionToggler.js';
5
- import toggle from './dummyToggle.js';
3
+ import createSingleValueToggler_default from './createSingleValueToggler.js';
4
+ import createTreeCollectionToggler_default from './createTreeCollectionToggler.js';
5
+ import dummyToggle_default from './dummyToggle.js';
6
6
  import '../collection/treeCollection.js';
7
7
 
8
8
  const _filterSelectable = (collection, ids, checkSelectable) => {
9
- return ids.filter((id) => checkSelectable(id, collection));
9
+ return ids.filter((id) => checkSelectable(id, collection));
10
10
  };
11
11
  const defaultCheckSelectable = () => true;
12
- /**
13
- * Оставляет в массиве только последний ID
14
- */
15
12
  const _filterMultipleIds = (ids) => {
16
- if (ids.length > 1) {
17
- return [ids[ids.length - 1]];
18
- }
19
- return ids;
13
+ if (ids.length > 1) {
14
+ return [ids[ids.length - 1]];
15
+ }
16
+ return ids;
20
17
  };
21
- /**
22
- * Стратегия переключения флага `selected` для иерархической коллекции.
23
- */
24
18
  class SelectionStrategy {
25
- collection;
26
- options;
27
- checkSelectable;
28
- toggle;
29
- constructor(collection, options) {
30
- this.collection = collection;
31
- this.options = options;
32
- this.checkSelectable = options.checkSelectable || defaultCheckSelectable;
33
- this.toggle = options.singleChoice
34
- ? createSingleValueToggler()
35
- : createTreeCollectionToggler(collection, this.checkSelectable);
19
+ collection;
20
+ options;
21
+ checkSelectable;
22
+ toggle;
23
+ constructor(collection, options) {
24
+ this.collection = collection;
25
+ this.options = options;
26
+ this.checkSelectable = options.checkSelectable || defaultCheckSelectable;
27
+ this.toggle = options.singleChoice ? createSingleValueToggler_default() : createTreeCollectionToggler_default(collection, this.checkSelectable);
28
+ }
29
+ add(items, ids) {
30
+ let filteredIds = filterMissingIds(this.collection, ids);
31
+ if (this.options.singleChoice) {
32
+ filteredIds = _filterMultipleIds(filteredIds);
36
33
  }
37
- add(items, ids) {
38
- let filteredIds = filterMissingIds(this.collection, ids);
39
- if (this.options.singleChoice) {
40
- filteredIds = _filterMultipleIds(filteredIds);
41
- }
42
- if (this.options.leavesOnly) {
43
- filteredIds = filterParents(this.collection, filteredIds);
44
- }
45
- if (this.options.checkSelectable) {
46
- filteredIds = _filterSelectable(this.collection, filteredIds, this.options.checkSelectable);
47
- }
48
- if (this.options.leavesOnly && !this.options.singleChoice) {
49
- // Тут не нужно выбирать или сбрасывать родителей
50
- filteredIds.forEach((id) => {
51
- toggle(items, id, true);
52
- });
53
- }
54
- else {
55
- filteredIds.forEach((id) => {
56
- this.toggle(items, id, true);
57
- });
58
- }
34
+ if (this.options.leavesOnly) {
35
+ filteredIds = filterParents(this.collection, filteredIds);
59
36
  }
60
- remove(items, ids) {
61
- const filteredIds = filterMissingIds(this.collection, ids);
62
- filteredIds.forEach((id) => {
63
- this.toggle(items, id, false);
64
- });
37
+ if (this.options.checkSelectable) {
38
+ filteredIds = _filterSelectable(this.collection, filteredIds, this.options.checkSelectable);
65
39
  }
66
- set(items, ids) {
67
- items.clear();
68
- this.add(items, ids);
40
+ if (this.options.leavesOnly && !this.options.singleChoice) {
41
+ filteredIds.forEach((id) => {
42
+ dummyToggle_default(items, id, true);
43
+ });
44
+ } else {
45
+ filteredIds.forEach((id) => {
46
+ this.toggle(items, id, true);
47
+ });
69
48
  }
49
+ }
50
+ remove(items, ids) {
51
+ const filteredIds = filterMissingIds(this.collection, ids);
52
+ filteredIds.forEach((id) => {
53
+ this.toggle(items, id, false);
54
+ });
55
+ }
56
+ set(items, ids) {
57
+ items.clear();
58
+ this.add(items, ids);
59
+ }
70
60
  }
61
+ var selectionStrategy_default = SelectionStrategy;
71
62
 
72
- export { SelectionStrategy as default };
63
+ export { selectionStrategy_default as default };
73
64
  //# sourceMappingURL=selectionStrategy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"selectionStrategy.js","sources":["src/strategy/selectionStrategy.ts"],"sourcesContent":["import TreeCollection from '@hh.ru/magritte-ui-tree-selector/collection/treeCollection';\nimport { filterMissingIds, filterParents } from '@hh.ru/magritte-ui-tree-selector/collection/treeCollectionHelper';\nimport { AdditionalDefault, IdCollectionPredicate } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport createSingleValueToggler from '@hh.ru/magritte-ui-tree-selector/strategy/createSingleValueToggler';\nimport createTreeCollectionToggler from '@hh.ru/magritte-ui-tree-selector/strategy/createTreeCollectionToggler';\nimport dummyToggle from '@hh.ru/magritte-ui-tree-selector/strategy/dummyToggle';\nimport { StrategyOptions, Toggler } from '@hh.ru/magritte-ui-tree-selector/strategy/types';\n\nconst _filterSelectable = <Additional extends AdditionalDefault>(\n collection: TreeCollection<Additional>,\n ids: string[],\n checkSelectable: IdCollectionPredicate\n) => {\n return ids.filter((id) => checkSelectable(id, collection));\n};\n\nconst defaultCheckSelectable = () => true;\n\n/**\n * Оставляет в массиве только последний ID\n */\nconst _filterMultipleIds = (ids: string[]) => {\n if (ids.length > 1) {\n return [ids[ids.length - 1]];\n }\n return ids;\n};\n\n/**\n * Стратегия переключения флага `selected` для иерархической коллекции.\n */\nclass SelectionStrategy<Additional extends AdditionalDefault = never> {\n private collection: TreeCollection<Additional>;\n private options: StrategyOptions;\n private checkSelectable: IdCollectionPredicate;\n private toggle: Toggler;\n\n constructor(collection: TreeCollection<Additional>, options: StrategyOptions) {\n this.collection = collection;\n this.options = options;\n this.checkSelectable = options.checkSelectable || defaultCheckSelectable;\n this.toggle = options.singleChoice\n ? createSingleValueToggler()\n : createTreeCollectionToggler(collection, this.checkSelectable);\n }\n\n add(items: Set<string>, ids: string[]): void {\n let filteredIds = filterMissingIds(this.collection, ids);\n\n if (this.options.singleChoice) {\n filteredIds = _filterMultipleIds(filteredIds);\n }\n if (this.options.leavesOnly) {\n filteredIds = filterParents(this.collection, filteredIds);\n }\n if (this.options.checkSelectable) {\n filteredIds = _filterSelectable(this.collection, filteredIds, this.options.checkSelectable);\n }\n\n if (this.options.leavesOnly && !this.options.singleChoice) {\n // Тут не нужно выбирать или сбрасывать родителей\n filteredIds.forEach((id) => {\n dummyToggle(items, id, true);\n });\n } else {\n filteredIds.forEach((id) => {\n this.toggle(items, id, true);\n });\n }\n }\n\n remove(items: Set<string>, ids: string[]): void {\n const filteredIds = filterMissingIds(this.collection, ids);\n\n filteredIds.forEach((id) => {\n this.toggle(items, id, false);\n });\n }\n\n set(items: Set<string>, ids: string[]): void {\n items.clear();\n this.add(items, ids);\n }\n}\n\nexport default SelectionStrategy;\n"],"names":["dummyToggle"],"mappings":"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"}
1
+ {"version":3,"file":"selectionStrategy.js","sources":["src/strategy/selectionStrategy.ts"],"sourcesContent":["import TreeCollection from '@hh.ru/magritte-ui-tree-selector/collection/treeCollection';\nimport { filterMissingIds, filterParents } from '@hh.ru/magritte-ui-tree-selector/collection/treeCollectionHelper';\nimport { AdditionalDefault, IdCollectionPredicate } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport createSingleValueToggler from '@hh.ru/magritte-ui-tree-selector/strategy/createSingleValueToggler';\nimport createTreeCollectionToggler from '@hh.ru/magritte-ui-tree-selector/strategy/createTreeCollectionToggler';\nimport dummyToggle from '@hh.ru/magritte-ui-tree-selector/strategy/dummyToggle';\nimport { StrategyOptions, Toggler } from '@hh.ru/magritte-ui-tree-selector/strategy/types';\n\nconst _filterSelectable = <Additional extends AdditionalDefault>(\n collection: TreeCollection<Additional>,\n ids: string[],\n checkSelectable: IdCollectionPredicate\n) => {\n return ids.filter((id) => checkSelectable(id, collection));\n};\n\nconst defaultCheckSelectable = () => true;\n\n/**\n * Оставляет в массиве только последний ID\n */\nconst _filterMultipleIds = (ids: string[]) => {\n if (ids.length > 1) {\n return [ids[ids.length - 1]];\n }\n return ids;\n};\n\n/**\n * Стратегия переключения флага `selected` для иерархической коллекции.\n */\nclass SelectionStrategy<Additional extends AdditionalDefault = never> {\n private collection: TreeCollection<Additional>;\n private options: StrategyOptions;\n private checkSelectable: IdCollectionPredicate;\n private toggle: Toggler;\n\n constructor(collection: TreeCollection<Additional>, options: StrategyOptions) {\n this.collection = collection;\n this.options = options;\n this.checkSelectable = options.checkSelectable || defaultCheckSelectable;\n this.toggle = options.singleChoice\n ? createSingleValueToggler()\n : createTreeCollectionToggler(collection, this.checkSelectable);\n }\n\n add(items: Set<string>, ids: string[]): void {\n let filteredIds = filterMissingIds(this.collection, ids);\n\n if (this.options.singleChoice) {\n filteredIds = _filterMultipleIds(filteredIds);\n }\n if (this.options.leavesOnly) {\n filteredIds = filterParents(this.collection, filteredIds);\n }\n if (this.options.checkSelectable) {\n filteredIds = _filterSelectable(this.collection, filteredIds, this.options.checkSelectable);\n }\n\n if (this.options.leavesOnly && !this.options.singleChoice) {\n // Тут не нужно выбирать или сбрасывать родителей\n filteredIds.forEach((id) => {\n dummyToggle(items, id, true);\n });\n } else {\n filteredIds.forEach((id) => {\n this.toggle(items, id, true);\n });\n }\n }\n\n remove(items: Set<string>, ids: string[]): void {\n const filteredIds = filterMissingIds(this.collection, ids);\n\n filteredIds.forEach((id) => {\n this.toggle(items, id, false);\n });\n }\n\n set(items: Set<string>, ids: string[]): void {\n items.clear();\n this.add(items, ids);\n }\n}\n\nexport default SelectionStrategy;\n"],"names":["createSingleValueToggler","createTreeCollectionToggler","dummyToggle"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { IdCollectionPredicate } from '@hh.ru/magritte-ui-tree-selector/collection/types';
1
+ import { IdCollectionPredicate } from '../collection/types';
2
2
  export interface StrategyOptions {
3
3
  checkSelectable?: IdCollectionPredicate;
4
4
  singleChoice?: boolean;
@@ -0,0 +1,5 @@
1
+ import './index.css';
2
+ var styles = {"item-animation-timeout":"magritte-item-animation-timeout___pbOyZ_5-5-82","itemAnimationTimeout":"magritte-item-animation-timeout___pbOyZ_5-5-82","fade-in":"magritte-fade-in___yS4Ja_5-5-82","fadeIn":"magritte-fade-in___yS4Ja_5-5-82","wrapper":"magritte-wrapper___GHKV6_5-5-82","letter":"magritte-letter___yZOCU_5-5-82","icon":"magritte-icon___kO3Fj_5-5-82","space":"magritte-space___xTO79_5-5-82","wrapperActive":"magritte-wrapperActive___Hwk8p_5-5-82","iconActive":"magritte-iconActive___4yrG5_5-5-82","iconUp":"magritte-iconUp___mpXV6_5-5-82","content":"magritte-content___ZRc6R_5-5-82","mobile-item":"magritte-mobile-item___ynALC_5-5-82","mobileItem":"magritte-mobile-item___ynALC_5-5-82","with-gap":"magritte-with-gap___gbvGO_5-5-82","withGap":"magritte-with-gap___gbvGO_5-5-82","virtualized-list":"magritte-virtualized-list___qt2E6_5-5-82","virtualizedList":"magritte-virtualized-list___qt2E6_5-5-82","virtualized-item":"magritte-virtualized-item___qAYVN_5-5-82","virtualizedItem":"magritte-virtualized-item___qAYVN_5-5-82","was-expanded":"magritte-was-expanded___uCFbW_5-5-82","wasExpanded":"magritte-was-expanded___uCFbW_5-5-82"};
3
+
4
+ export { styles as s };
5
+ //# sourceMappingURL=tree-selector-item-BYBFlI_G.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-selector-item-BYBFlI_G.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
package/types.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { ReactElement, ReactNode } from 'react';
2
2
  import { SearchInputProps } from '@hh.ru/magritte-ui-input';
3
- import TreeCollection from '@hh.ru/magritte-ui-tree-selector/collection/treeCollection';
4
- import { AdditionalDefault, IdCollectionPredicate, TreeFilter, TreeModel } from '@hh.ru/magritte-ui-tree-selector/collection/types';
3
+ import TreeCollection from './collection/treeCollection';
4
+ import { AdditionalDefault, IdCollectionPredicate, TreeFilter, TreeModel } from './collection/types';
5
5
  export type SearchInputPropsWithRef = SearchInputProps & {
6
6
  ref?: React.Ref<HTMLInputElement>;
7
7
  };