@hh.ru/magritte-ui-tree-selector 5.5.80 → 5.5.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Action.d.ts +1 -1
- package/Action.js +15 -12
- package/Action.js.map +1 -1
- package/Item.d.ts +3 -3
- package/Item.js +106 -54
- package/Item.js.map +1 -1
- package/ItemContent.d.ts +2 -2
- package/ItemContent.js +69 -15
- package/ItemContent.js.map +1 -1
- package/ItemsList.d.ts +3 -3
- package/ItemsList.js +243 -159
- package/ItemsList.js.map +1 -1
- package/MobileDelimiter.js +1 -1
- package/MobileDelimiter.js.map +1 -1
- package/MobileItem.d.ts +2 -2
- package/MobileItem.js +26 -5
- package/MobileItem.js.map +1 -1
- package/MobileItemsList.d.ts +2 -2
- package/MobileItemsList.js +259 -132
- package/MobileItemsList.js.map +1 -1
- package/MobileParentItem.d.ts +3 -3
- package/MobileParentItem.js +33 -14
- package/MobileParentItem.js.map +1 -1
- package/TreeSelector.d.ts +2 -2
- package/TreeSelector.js +49 -20
- package/TreeSelector.js.map +1 -1
- package/TreeSelectorDummy.d.ts +2 -2
- package/TreeSelectorDummy.js +178 -109
- package/TreeSelectorDummy.js.map +1 -1
- package/TreeSelectorItemBase.d.ts +2 -2
- package/TreeSelectorItemBase.js +12 -6
- package/TreeSelectorItemBase.js.map +1 -1
- package/TreeSelectorWrapper.js +38 -24
- package/TreeSelectorWrapper.js.map +1 -1
- package/collection/treeCollection.d.ts +1 -1
- package/collection/treeCollection.js +178 -184
- package/collection/treeCollection.js.map +1 -1
- package/collection/treeCollectionHelper.d.ts +9 -3
- package/collection/treeCollectionHelper.js +68 -105
- package/collection/treeCollectionHelper.js.map +1 -1
- package/collection/types.d.ts +1 -1
- package/index.css +45 -45
- package/index.d.ts +9 -9
- package/index.js +1 -1
- package/index.mock.d.ts +6 -6
- package/index.mock.js +14 -6
- package/index.mock.js.map +1 -1
- package/package.json +13 -13
- package/strategy/createSingleValueToggler.d.ts +1 -1
- package/strategy/createSingleValueToggler.js +17 -41
- package/strategy/createSingleValueToggler.js.map +1 -1
- package/strategy/createTreeCollectionToggler.d.ts +3 -3
- package/strategy/createTreeCollectionToggler.js +42 -58
- package/strategy/createTreeCollectionToggler.js.map +1 -1
- package/strategy/dummyToggle.d.ts +1 -1
- package/strategy/dummyToggle.js +10 -13
- package/strategy/dummyToggle.js.map +1 -1
- package/strategy/immutableSelectionStrategy.d.ts +3 -3
- package/strategy/immutableSelectionStrategy.js +27 -26
- package/strategy/immutableSelectionStrategy.js.map +1 -1
- package/strategy/selectionStrategy.d.ts +3 -3
- package/strategy/selectionStrategy.js +47 -56
- package/strategy/selectionStrategy.js.map +1 -1
- package/strategy/types.d.ts +1 -1
- package/tree-selector-item-DiHx85es.js +5 -0
- package/tree-selector-item-DiHx85es.js.map +1 -0
- package/types.d.ts +2 -2
- package/useAnimationTimeout.js +14 -14
- package/useAnimationTimeout.js.map +1 -1
- package/useDisabled.d.ts +2 -2
- package/useDisabled.js +7 -10
- package/useDisabled.js.map +1 -1
- package/useExpanded.d.ts +2 -2
- package/useExpanded.js +65 -54
- package/useExpanded.js.map +1 -1
- package/useIndeterminate.d.ts +2 -2
- package/useIndeterminate.js +17 -18
- package/useIndeterminate.js.map +1 -1
- package/useRenderInput.d.ts +1 -1
- package/useRenderInput.js +44 -32
- package/useRenderInput.js.map +1 -1
- package/useSelected.d.ts +3 -3
- package/useSelected.js +36 -31
- package/useSelected.js.map +1 -1
- package/tree-selector-item-BOEDcwrO.js +0 -5
- package/tree-selector-item-BOEDcwrO.js.map +0 -1
package/MobileItemsList.js
CHANGED
|
@@ -10,7 +10,7 @@ import { Action } from './Action.js';
|
|
|
10
10
|
import { MobileDelimiter } from './MobileDelimiter.js';
|
|
11
11
|
import { MobileItem } from './MobileItem.js';
|
|
12
12
|
import { MobileParentItem } from './MobileParentItem.js';
|
|
13
|
-
import { s as styles } from './tree-selector-item-
|
|
13
|
+
import { s as styles } from './tree-selector-item-DiHx85es.js';
|
|
14
14
|
import '@hh.ru/magritte-ui-checkbox-radio';
|
|
15
15
|
import '@hh.ru/magritte-ui-card';
|
|
16
16
|
import '@hh.ru/magritte-ui-typography';
|
|
@@ -19,145 +19,272 @@ import '@hh.ru/magritte-ui-badge';
|
|
|
19
19
|
|
|
20
20
|
const DEFAULT_ITEM_HEIGHT = 56;
|
|
21
21
|
const SCROLLEND_HANDLER_DEBOUNCE_MS = 150;
|
|
22
|
-
const DELIMITER =
|
|
22
|
+
const DELIMITER = ";";
|
|
23
23
|
const MobileItemsListComponent = (props, ref) => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
24
|
+
const {
|
|
25
|
+
collection,
|
|
26
|
+
selected,
|
|
27
|
+
disabled,
|
|
28
|
+
leavesOnly,
|
|
29
|
+
singleChoice,
|
|
30
|
+
onChange,
|
|
31
|
+
checkSelectable,
|
|
32
|
+
getMobileSearchItemOrder,
|
|
33
|
+
setInputValue,
|
|
34
|
+
handleChangeInput,
|
|
35
|
+
isSearch,
|
|
36
|
+
renderMobileDelimiter,
|
|
37
|
+
renderItem,
|
|
38
|
+
contentFilterQuery,
|
|
39
|
+
getSelectAllParentTrl,
|
|
40
|
+
renderContentBefore,
|
|
41
|
+
renderContentAfter,
|
|
42
|
+
onMobileNavigationChange
|
|
43
|
+
} = props;
|
|
44
|
+
const navigationChangeCallback = useRef(onMobileNavigationChange);
|
|
45
|
+
navigationChangeCallback.current = onMobileNavigationChange;
|
|
46
|
+
const prevParentIds = useRef([]);
|
|
47
|
+
const prevQueries = useRef([]);
|
|
48
|
+
const currentQuery = useRef(contentFilterQuery);
|
|
49
|
+
const [currentParentId, setCurrentParentId] = useState();
|
|
50
|
+
const items = useMemo(
|
|
51
|
+
() => currentParentId ? collection.getChildren(currentParentId) : collection.getTopLevel(),
|
|
52
|
+
[currentParentId, collection]
|
|
53
|
+
);
|
|
54
|
+
const orderHashMap = useMemo(() => {
|
|
55
|
+
return items.reduce((acc, item) => {
|
|
56
|
+
acc[item.id] = isSearch && !currentParentId ? getMobileSearchItemOrder(item) : 0;
|
|
57
|
+
return acc;
|
|
58
|
+
}, {});
|
|
59
|
+
}, [items, isSearch, currentParentId, getMobileSearchItemOrder]);
|
|
60
|
+
const sortedItems = useMemo(() => {
|
|
61
|
+
return items.sort((itemA, itemB) => {
|
|
62
|
+
return orderHashMap[itemA.id] - orderHashMap[itemB.id];
|
|
63
|
+
});
|
|
64
|
+
}, [items, orderHashMap]);
|
|
65
|
+
const isSelectable = currentParentId && !leavesOnly && checkSelectable?.(currentParentId, collection);
|
|
66
|
+
const withContentBefore = !!renderContentBefore;
|
|
67
|
+
const withContentAfter = !!renderContentAfter;
|
|
68
|
+
const count = items.length + (isSelectable ? 1 : 0) + (withContentBefore ? 1 : 0) + (withContentAfter ? 1 : 0);
|
|
69
|
+
const parentRef = useRef(null);
|
|
70
|
+
const isScrolling = useRef(false);
|
|
71
|
+
const getItemKey = (index) => {
|
|
72
|
+
if (withContentBefore && index === 0) {
|
|
73
|
+
return "promoTop";
|
|
74
|
+
}
|
|
75
|
+
if (withContentAfter && index === count - 1) {
|
|
76
|
+
return "promoBottom";
|
|
77
|
+
}
|
|
78
|
+
const isSelectAllItem = isSelectable && (index === 0 && !withContentBefore || index === 1 && withContentBefore);
|
|
79
|
+
if (isSelectAllItem) {
|
|
80
|
+
return `current${currentParentId}`;
|
|
81
|
+
}
|
|
82
|
+
const itemIndex = index - (isSelectable ? 1 : 0) - (withContentBefore ? 1 : 0);
|
|
83
|
+
const item = sortedItems[itemIndex];
|
|
84
|
+
return currentParentId ? `${currentParentId}${DELIMITER}${item.id}` : `${item.id}`;
|
|
85
|
+
};
|
|
86
|
+
const virtualizer = useVirtualizer({
|
|
87
|
+
count,
|
|
88
|
+
getScrollElement: () => parentRef.current,
|
|
89
|
+
estimateSize: () => DEFAULT_ITEM_HEIGHT,
|
|
90
|
+
getItemKey
|
|
91
|
+
});
|
|
92
|
+
const itemsVirtualizer = virtualizer.getVirtualItems();
|
|
93
|
+
useEffect(() => {
|
|
94
|
+
setCurrentParentId(void 0);
|
|
95
|
+
prevParentIds.current = [];
|
|
96
|
+
prevQueries.current = [];
|
|
97
|
+
navigationChangeCallback.current?.(void 0);
|
|
98
|
+
currentQuery.current = contentFilterQuery;
|
|
99
|
+
}, [contentFilterQuery]);
|
|
100
|
+
useImperativeHandle(
|
|
101
|
+
ref,
|
|
102
|
+
() => ({
|
|
103
|
+
back: () => {
|
|
104
|
+
if (!isScrolling.current) {
|
|
105
|
+
const prevParentId = prevParentIds.current.pop();
|
|
106
|
+
setCurrentParentId(prevParentId);
|
|
107
|
+
navigationChangeCallback.current?.(prevParentId);
|
|
108
|
+
if (prevQueries.current.length) {
|
|
109
|
+
const prevInputValue = prevQueries.current.pop();
|
|
110
|
+
setInputValue(prevInputValue);
|
|
111
|
+
currentQuery.current = prevInputValue;
|
|
112
|
+
} else {
|
|
113
|
+
handleChangeInput("");
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}),
|
|
118
|
+
[handleChangeInput, setInputValue]
|
|
119
|
+
);
|
|
120
|
+
useEffect(() => {
|
|
121
|
+
const handleScrollEnd = debounce(() => {
|
|
122
|
+
isScrolling.current = false;
|
|
123
|
+
}, SCROLLEND_HANDLER_DEBOUNCE_MS);
|
|
124
|
+
const handleScroll = () => {
|
|
125
|
+
isScrolling.current = true;
|
|
126
|
+
handleScrollEnd();
|
|
127
|
+
};
|
|
128
|
+
parentRef.current?.addEventListener("scroll", handleScroll);
|
|
129
|
+
return () => {
|
|
130
|
+
parentRef.current?.removeEventListener("scroll", handleScroll);
|
|
131
|
+
};
|
|
132
|
+
}, []);
|
|
133
|
+
const refCallback = useCallback((node) => {
|
|
134
|
+
parentRef.current = node ? node.parentElement : null;
|
|
135
|
+
}, []);
|
|
136
|
+
useEffect(() => {
|
|
137
|
+
virtualizer.scrollToIndex(0);
|
|
138
|
+
}, [currentParentId, sortedItems, virtualizer]);
|
|
139
|
+
return /* @__PURE__ */ jsx(
|
|
140
|
+
"div",
|
|
141
|
+
{
|
|
142
|
+
ref: refCallback,
|
|
143
|
+
className: styles.virtualizedList,
|
|
144
|
+
style: {
|
|
145
|
+
height: `${virtualizer.getTotalSize()}px`
|
|
146
|
+
},
|
|
147
|
+
children: itemsVirtualizer.map((virtualItem) => {
|
|
148
|
+
const isContentBeforeItem = withContentBefore && virtualItem.index === 0;
|
|
149
|
+
const isContentAfterItem = withContentAfter && virtualItem.index === count - 1;
|
|
150
|
+
const isSelectAllItem = isSelectable && (virtualItem.index === 0 && !withContentBefore || virtualItem.index === 1 && withContentBefore);
|
|
151
|
+
if (isContentBeforeItem) {
|
|
152
|
+
return /* @__PURE__ */ jsx(
|
|
153
|
+
"div",
|
|
154
|
+
{
|
|
155
|
+
ref: virtualizer.measureElement,
|
|
156
|
+
"data-index": virtualItem.index,
|
|
157
|
+
className: styles.virtualizedItem,
|
|
158
|
+
style: {
|
|
159
|
+
transform: `translateY(${virtualItem.start}px)`
|
|
160
|
+
},
|
|
161
|
+
children: renderContentBefore(isSearch)
|
|
162
|
+
},
|
|
163
|
+
virtualItem.key
|
|
164
|
+
);
|
|
52
165
|
}
|
|
53
|
-
if (
|
|
54
|
-
|
|
166
|
+
if (isContentAfterItem) {
|
|
167
|
+
return /* @__PURE__ */ jsx(
|
|
168
|
+
"div",
|
|
169
|
+
{
|
|
170
|
+
ref: virtualizer.measureElement,
|
|
171
|
+
"data-index": virtualItem.index,
|
|
172
|
+
className: styles.virtualizedItem,
|
|
173
|
+
style: {
|
|
174
|
+
transform: `translateY(${virtualItem.start}px)`
|
|
175
|
+
},
|
|
176
|
+
children: renderContentAfter(isSearch)
|
|
177
|
+
},
|
|
178
|
+
virtualItem.key
|
|
179
|
+
);
|
|
55
180
|
}
|
|
56
|
-
const isSelectAllItem = isSelectable && ((index === 0 && !withContentBefore) || (index === 1 && withContentBefore));
|
|
57
181
|
if (isSelectAllItem) {
|
|
58
|
-
|
|
182
|
+
return /* @__PURE__ */ jsx(
|
|
183
|
+
"div",
|
|
184
|
+
{
|
|
185
|
+
ref: virtualizer.measureElement,
|
|
186
|
+
"data-index": virtualItem.index,
|
|
187
|
+
className: styles.virtualizedItem,
|
|
188
|
+
style: {
|
|
189
|
+
transform: `translateY(${virtualItem.start}px)`
|
|
190
|
+
},
|
|
191
|
+
children: /* @__PURE__ */ jsx("div", { className: styles.mobileItem, children: /* @__PURE__ */ jsx(
|
|
192
|
+
CheckableCardElement,
|
|
193
|
+
{
|
|
194
|
+
padding: 16,
|
|
195
|
+
flexible: true,
|
|
196
|
+
borderRadius: 12,
|
|
197
|
+
Element: "label",
|
|
198
|
+
checked: selected.includes(currentParentId),
|
|
199
|
+
"data-qa": `tree-selector-select-all-${currentParentId}`,
|
|
200
|
+
children: /* @__PURE__ */ jsx(
|
|
201
|
+
Cell,
|
|
202
|
+
{
|
|
203
|
+
Element: "div",
|
|
204
|
+
disabled: disabled.includes(currentParentId),
|
|
205
|
+
right: /* @__PURE__ */ jsx(
|
|
206
|
+
Action,
|
|
207
|
+
{
|
|
208
|
+
selected: selected.includes(currentParentId),
|
|
209
|
+
onChange,
|
|
210
|
+
id: currentParentId,
|
|
211
|
+
singleChoice
|
|
212
|
+
}
|
|
213
|
+
),
|
|
214
|
+
children: /* @__PURE__ */ jsx(CellText, { children: getSelectAllParentTrl(currentParentId) })
|
|
215
|
+
}
|
|
216
|
+
)
|
|
217
|
+
}
|
|
218
|
+
) })
|
|
219
|
+
},
|
|
220
|
+
virtualItem.key
|
|
221
|
+
);
|
|
59
222
|
}
|
|
60
|
-
const itemIndex = index - (isSelectable ? 1 : 0) - (withContentBefore ? 1 : 0);
|
|
223
|
+
const itemIndex = virtualItem.index - (isSelectable ? 1 : 0) - (withContentBefore ? 1 : 0);
|
|
61
224
|
const item = sortedItems[itemIndex];
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
225
|
+
const hasChildren = collection.hasChildren(item.id);
|
|
226
|
+
const hasLetter = item.additional?.char && !isSearch;
|
|
227
|
+
const delimiterContent = renderMobileDelimiter?.({
|
|
228
|
+
item,
|
|
229
|
+
order: orderHashMap[item.id],
|
|
230
|
+
isSearch,
|
|
231
|
+
index: itemIndex,
|
|
232
|
+
isTopLevel: !currentParentId
|
|
233
|
+
});
|
|
234
|
+
const withGap = !!withContentBefore && virtualItem.index !== 1 || !withContentBefore && virtualItem.index !== 0;
|
|
235
|
+
return /* @__PURE__ */ jsx(
|
|
236
|
+
"div",
|
|
237
|
+
{
|
|
238
|
+
ref: virtualizer.measureElement,
|
|
239
|
+
"data-index": virtualItem.index,
|
|
240
|
+
style: {
|
|
241
|
+
transform: `translateY(${virtualItem.start}px)`
|
|
242
|
+
},
|
|
243
|
+
className: classnames(styles.virtualizedItem, {
|
|
244
|
+
[styles.withGap]: withGap
|
|
245
|
+
}),
|
|
246
|
+
children: /* @__PURE__ */ jsxs("div", { className: styles.mobileItem, children: [
|
|
247
|
+
hasLetter && /* @__PURE__ */ jsx(MobileDelimiter, { children: item.additional?.char }),
|
|
248
|
+
delimiterContent && /* @__PURE__ */ jsx(MobileDelimiter, { children: delimiterContent }),
|
|
249
|
+
hasChildren ? /* @__PURE__ */ jsx(
|
|
250
|
+
MobileParentItem,
|
|
251
|
+
{
|
|
252
|
+
collection,
|
|
253
|
+
item,
|
|
254
|
+
selected,
|
|
255
|
+
onClick: () => {
|
|
256
|
+
prevParentIds.current.push(currentParentId);
|
|
257
|
+
prevQueries.current.push(currentQuery.current);
|
|
258
|
+
setCurrentParentId(item.id);
|
|
259
|
+
setInputValue("");
|
|
260
|
+
currentQuery.current = "";
|
|
261
|
+
navigationChangeCallback.current?.(item.id);
|
|
262
|
+
},
|
|
263
|
+
parentId: currentParentId,
|
|
264
|
+
isSearch,
|
|
265
|
+
renderItem
|
|
88
266
|
}
|
|
89
|
-
|
|
90
|
-
|
|
267
|
+
) : /* @__PURE__ */ jsx(
|
|
268
|
+
MobileItem,
|
|
269
|
+
{
|
|
270
|
+
item,
|
|
271
|
+
singleChoice,
|
|
272
|
+
isSelectable: checkSelectable?.(item.id, collection),
|
|
273
|
+
isSelected: selected.includes(item.id),
|
|
274
|
+
isDisabled: disabled.includes(item.id),
|
|
275
|
+
onChange,
|
|
276
|
+
isSearch,
|
|
277
|
+
renderItem,
|
|
278
|
+
parentId: currentParentId
|
|
91
279
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
isScrolling.current = true;
|
|
101
|
-
handleScrollEnd();
|
|
102
|
-
};
|
|
103
|
-
parentRef.current?.addEventListener('scroll', handleScroll);
|
|
104
|
-
return () => {
|
|
105
|
-
parentRef.current?.removeEventListener('scroll', handleScroll);
|
|
106
|
-
};
|
|
107
|
-
}, []);
|
|
108
|
-
const refCallback = useCallback((node) => {
|
|
109
|
-
parentRef.current = node ? node.parentElement : null;
|
|
110
|
-
}, []);
|
|
111
|
-
useEffect(() => {
|
|
112
|
-
virtualizer.scrollToIndex(0);
|
|
113
|
-
}, [currentParentId, sortedItems, virtualizer]);
|
|
114
|
-
return (jsx("div", { ref: refCallback, className: styles.virtualizedList, style: {
|
|
115
|
-
height: `${virtualizer.getTotalSize()}px`,
|
|
116
|
-
}, children: itemsVirtualizer.map((virtualItem) => {
|
|
117
|
-
const isContentBeforeItem = withContentBefore && virtualItem.index === 0;
|
|
118
|
-
const isContentAfterItem = withContentAfter && virtualItem.index === count - 1;
|
|
119
|
-
const isSelectAllItem = isSelectable &&
|
|
120
|
-
((virtualItem.index === 0 && !withContentBefore) || (virtualItem.index === 1 && withContentBefore));
|
|
121
|
-
if (isContentBeforeItem) {
|
|
122
|
-
return (jsx("div", { ref: virtualizer.measureElement, "data-index": virtualItem.index, className: styles.virtualizedItem, style: {
|
|
123
|
-
transform: `translateY(${virtualItem.start}px)`,
|
|
124
|
-
}, children: renderContentBefore(isSearch) }, virtualItem.key));
|
|
125
|
-
}
|
|
126
|
-
if (isContentAfterItem) {
|
|
127
|
-
return (jsx("div", { ref: virtualizer.measureElement, "data-index": virtualItem.index, className: styles.virtualizedItem, style: {
|
|
128
|
-
transform: `translateY(${virtualItem.start}px)`,
|
|
129
|
-
}, children: renderContentAfter(isSearch) }, virtualItem.key));
|
|
130
|
-
}
|
|
131
|
-
if (isSelectAllItem) {
|
|
132
|
-
return (jsx("div", { ref: virtualizer.measureElement, "data-index": virtualItem.index, className: styles.virtualizedItem, style: {
|
|
133
|
-
transform: `translateY(${virtualItem.start}px)`,
|
|
134
|
-
}, children: jsx("div", { className: styles.mobileItem, children: jsx(CheckableCardElement, { padding: 16, flexible: true, borderRadius: 12, Element: "label", checked: selected.includes(currentParentId), "data-qa": `tree-selector-select-all-${currentParentId}`, children: jsx(Cell, { Element: 'div', disabled: disabled.includes(currentParentId), right: jsx(Action, { selected: selected.includes(currentParentId), onChange: onChange, id: currentParentId, singleChoice: singleChoice }), children: jsx(CellText, { children: getSelectAllParentTrl(currentParentId) }) }) }) }) }, virtualItem.key));
|
|
135
|
-
}
|
|
136
|
-
const itemIndex = virtualItem.index - (isSelectable ? 1 : 0) - (withContentBefore ? 1 : 0);
|
|
137
|
-
const item = sortedItems[itemIndex];
|
|
138
|
-
const hasChildren = collection.hasChildren(item.id);
|
|
139
|
-
const hasLetter = item.additional?.char && !isSearch;
|
|
140
|
-
const delimiterContent = renderMobileDelimiter?.({
|
|
141
|
-
item,
|
|
142
|
-
order: orderHashMap[item.id],
|
|
143
|
-
isSearch,
|
|
144
|
-
index: itemIndex,
|
|
145
|
-
isTopLevel: !currentParentId,
|
|
146
|
-
});
|
|
147
|
-
const withGap = (!!withContentBefore && virtualItem.index !== 1) || (!withContentBefore && virtualItem.index !== 0);
|
|
148
|
-
return (jsx("div", { ref: virtualizer.measureElement, "data-index": virtualItem.index, style: {
|
|
149
|
-
transform: `translateY(${virtualItem.start}px)`,
|
|
150
|
-
}, className: classnames(styles.virtualizedItem, {
|
|
151
|
-
[styles.withGap]: withGap,
|
|
152
|
-
}), children: jsxs("div", { className: styles.mobileItem, children: [hasLetter && jsx(MobileDelimiter, { children: item.additional?.char }), delimiterContent && jsx(MobileDelimiter, { children: delimiterContent }), hasChildren ? (jsx(MobileParentItem, { collection: collection, item: item, selected: selected, onClick: () => {
|
|
153
|
-
prevParentIds.current.push(currentParentId);
|
|
154
|
-
prevQueries.current.push(currentQuery.current);
|
|
155
|
-
setCurrentParentId(item.id);
|
|
156
|
-
setInputValue('');
|
|
157
|
-
currentQuery.current = '';
|
|
158
|
-
navigationChangeCallback.current?.(item.id);
|
|
159
|
-
}, parentId: currentParentId, isSearch: isSearch, renderItem: renderItem })) : (jsx(MobileItem, { item: item, singleChoice: singleChoice, isSelectable: checkSelectable?.(item.id, collection), isSelected: selected.includes(item.id), isDisabled: disabled.includes(item.id), onChange: onChange, isSearch: isSearch, renderItem: renderItem, parentId: currentParentId }))] }) }, virtualItem.key));
|
|
160
|
-
}) }));
|
|
280
|
+
)
|
|
281
|
+
] })
|
|
282
|
+
},
|
|
283
|
+
virtualItem.key
|
|
284
|
+
);
|
|
285
|
+
})
|
|
286
|
+
}
|
|
287
|
+
);
|
|
161
288
|
};
|
|
162
289
|
const MobileItemsList = forwardRef(MobileItemsListComponent);
|
|
163
290
|
|
package/MobileItemsList.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileItemsList.js","sources":["src/MobileItemsList.tsx"],"sourcesContent":["import {\n ReactElement,\n useMemo,\n useState,\n useImperativeHandle,\n forwardRef,\n ForwardedRef,\n useRef,\n useEffect,\n RefCallback,\n useCallback,\n} from 'react';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport classnames from 'classnames';\n\nimport { debounce } from '@hh.ru/magritte-common-func-utils';\nimport { Cell, CellText } from '@hh.ru/magritte-ui-cell';\nimport { CheckableCardElement } from '@hh.ru/magritte-ui-checkable-card/CheckableCardElement';\nimport { Action } from '@hh.ru/magritte-ui-tree-selector/Action';\nimport { MobileDelimiter } from '@hh.ru/magritte-ui-tree-selector/MobileDelimiter';\nimport { MobileItem } from '@hh.ru/magritte-ui-tree-selector/MobileItem';\nimport { MobileParentItem } from '@hh.ru/magritte-ui-tree-selector/MobileParentItem';\nimport { AdditionalDefault, TreeModel } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport { ListControls, TreeSelectorDummyProps } from '@hh.ru/magritte-ui-tree-selector/types';\n\nimport styles from './tree-selector-item.less';\n\nconst DEFAULT_ITEM_HEIGHT = 56;\nconst SCROLLEND_HANDLER_DEBOUNCE_MS = 150;\nconst DELIMITER = ';';\n\ntype MobileItemsListProps<Additional extends AdditionalDefault> = {\n selected: string[];\n disabled: string[];\n getMobileSearchItemOrder: (model: TreeModel<Additional>) => number;\n setInputValue: (newValue: string) => void;\n handleChangeInput: (newValue: string) => void;\n contentFilterQuery: string;\n isSearch: boolean;\n} & Pick<\n TreeSelectorDummyProps<Additional>,\n | 'collection'\n | 'leavesOnly'\n | 'singleChoice'\n | 'checkSelectable'\n | 'onChange'\n | 'renderItem'\n | 'renderMobileDelimiter'\n | 'onMobileNavigationChange'\n | 'getSelectAllParentTrl'\n | 'renderContentBefore'\n | 'renderContentAfter'\n>;\n\nconst MobileItemsListComponent = <Additional extends AdditionalDefault>(\n props: MobileItemsListProps<Additional>,\n ref: ForwardedRef<ListControls>\n): ReactElement => {\n const {\n collection,\n selected,\n disabled,\n leavesOnly,\n singleChoice,\n onChange,\n checkSelectable,\n getMobileSearchItemOrder,\n setInputValue,\n handleChangeInput,\n isSearch,\n renderMobileDelimiter,\n renderItem,\n contentFilterQuery,\n getSelectAllParentTrl,\n renderContentBefore,\n renderContentAfter,\n onMobileNavigationChange,\n } = props;\n const navigationChangeCallback = useRef(onMobileNavigationChange);\n navigationChangeCallback.current = onMobileNavigationChange;\n const prevParentIds = useRef<(string | undefined)[]>([]);\n const prevQueries = useRef<string[]>([]);\n const currentQuery = useRef(contentFilterQuery);\n const [currentParentId, setCurrentParentId] = useState<string | undefined>();\n const items = useMemo(\n () => (currentParentId ? collection.getChildren(currentParentId) : collection.getTopLevel()),\n [currentParentId, collection]\n );\n const orderHashMap = useMemo(() => {\n return items.reduce<Record<TreeModel<Additional>['id'], number>>((acc, item) => {\n acc[item.id] = isSearch && !currentParentId ? getMobileSearchItemOrder(item) : 0;\n return acc;\n }, {});\n }, [items, isSearch, currentParentId, getMobileSearchItemOrder]);\n\n const sortedItems = useMemo(() => {\n return items.sort((itemA, itemB) => {\n return orderHashMap[itemA.id] - orderHashMap[itemB.id];\n });\n }, [items, orderHashMap]);\n\n const isSelectable = currentParentId && !leavesOnly && checkSelectable?.(currentParentId, collection);\n const withContentBefore = !!renderContentBefore;\n const withContentAfter = !!renderContentAfter;\n const count = items.length + (isSelectable ? 1 : 0) + (withContentBefore ? 1 : 0) + (withContentAfter ? 1 : 0);\n const parentRef = useRef<HTMLElement | null>(null);\n const isScrolling = useRef(false);\n\n const getItemKey = (index: number) => {\n if (withContentBefore && index === 0) {\n return 'promoTop';\n }\n\n if (withContentAfter && index === count - 1) {\n return 'promoBottom';\n }\n\n const isSelectAllItem =\n isSelectable && ((index === 0 && !withContentBefore) || (index === 1 && withContentBefore));\n\n if (isSelectAllItem) {\n return `current${currentParentId}`;\n }\n\n const itemIndex = index - (isSelectable ? 1 : 0) - (withContentBefore ? 1 : 0);\n const item = sortedItems[itemIndex];\n\n return currentParentId ? `${currentParentId}${DELIMITER}${item.id}` : `${item.id}`;\n };\n\n const virtualizer = useVirtualizer({\n count,\n getScrollElement: () => parentRef.current,\n estimateSize: () => DEFAULT_ITEM_HEIGHT,\n getItemKey,\n });\n\n const itemsVirtualizer = virtualizer.getVirtualItems();\n\n useEffect(() => {\n setCurrentParentId(undefined);\n prevParentIds.current = [];\n prevQueries.current = [];\n navigationChangeCallback.current?.(undefined);\n currentQuery.current = contentFilterQuery;\n }, [contentFilterQuery]);\n\n useImperativeHandle(\n ref,\n () => ({\n back: () => {\n if (!isScrolling.current) {\n const prevParentId = prevParentIds.current.pop();\n setCurrentParentId(prevParentId);\n navigationChangeCallback.current?.(prevParentId);\n if (prevQueries.current.length) {\n const prevInputValue = prevQueries.current.pop() as string;\n setInputValue(prevInputValue);\n currentQuery.current = prevInputValue;\n } else {\n handleChangeInput('');\n }\n }\n },\n }),\n [handleChangeInput, setInputValue]\n );\n\n useEffect(() => {\n const handleScrollEnd = debounce(() => {\n isScrolling.current = false;\n }, SCROLLEND_HANDLER_DEBOUNCE_MS);\n\n const handleScroll = () => {\n isScrolling.current = true;\n handleScrollEnd();\n };\n parentRef.current?.addEventListener('scroll', handleScroll);\n\n return () => {\n parentRef.current?.removeEventListener('scroll', handleScroll);\n };\n }, []);\n\n const refCallback: RefCallback<HTMLDivElement> = useCallback((node) => {\n parentRef.current = node ? node.parentElement : null;\n }, []);\n\n useEffect(() => {\n virtualizer.scrollToIndex(0);\n }, [currentParentId, sortedItems, virtualizer]);\n\n return (\n <div\n ref={refCallback}\n className={styles.virtualizedList}\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n }}\n >\n {itemsVirtualizer.map((virtualItem) => {\n const isContentBeforeItem = withContentBefore && virtualItem.index === 0;\n const isContentAfterItem = withContentAfter && virtualItem.index === count - 1;\n const isSelectAllItem =\n isSelectable &&\n ((virtualItem.index === 0 && !withContentBefore) || (virtualItem.index === 1 && withContentBefore));\n\n if (isContentBeforeItem) {\n return (\n <div\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n className={styles.virtualizedItem}\n style={{\n transform: `translateY(${virtualItem.start}px)`,\n }}\n >\n {renderContentBefore(isSearch)}\n </div>\n );\n }\n\n if (isContentAfterItem) {\n return (\n <div\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n className={styles.virtualizedItem}\n style={{\n transform: `translateY(${virtualItem.start}px)`,\n }}\n >\n {renderContentAfter(isSearch)}\n </div>\n );\n }\n\n if (isSelectAllItem) {\n return (\n <div\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n className={styles.virtualizedItem}\n style={{\n transform: `translateY(${virtualItem.start}px)`,\n }}\n >\n <div className={styles.mobileItem}>\n <CheckableCardElement\n padding={16}\n flexible\n borderRadius={12}\n Element=\"label\"\n checked={selected.includes(currentParentId)}\n data-qa={`tree-selector-select-all-${currentParentId}`}\n >\n <Cell\n Element={'div'}\n disabled={disabled.includes(currentParentId)}\n right={\n <Action\n selected={selected.includes(currentParentId)}\n onChange={onChange}\n id={currentParentId}\n singleChoice={singleChoice}\n />\n }\n >\n <CellText>{getSelectAllParentTrl(currentParentId)}</CellText>\n </Cell>\n </CheckableCardElement>\n </div>\n </div>\n );\n }\n const itemIndex = virtualItem.index - (isSelectable ? 1 : 0) - (withContentBefore ? 1 : 0);\n const item = sortedItems[itemIndex];\n const hasChildren = collection.hasChildren(item.id);\n const hasLetter = item.additional?.char && !isSearch;\n const delimiterContent = renderMobileDelimiter?.({\n item,\n order: orderHashMap[item.id],\n isSearch,\n index: itemIndex,\n isTopLevel: !currentParentId,\n });\n const withGap =\n (!!withContentBefore && virtualItem.index !== 1) || (!withContentBefore && virtualItem.index !== 0);\n return (\n <div\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n style={{\n transform: `translateY(${virtualItem.start}px)`,\n }}\n className={classnames(styles.virtualizedItem, {\n [styles.withGap]: withGap,\n })}\n >\n <div className={styles.mobileItem}>\n {hasLetter && <MobileDelimiter>{item.additional?.char}</MobileDelimiter>}\n {delimiterContent && <MobileDelimiter>{delimiterContent}</MobileDelimiter>}\n {hasChildren ? (\n <MobileParentItem\n collection={collection}\n item={item}\n selected={selected}\n onClick={() => {\n prevParentIds.current.push(currentParentId);\n prevQueries.current.push(currentQuery.current);\n setCurrentParentId(item.id);\n setInputValue('');\n currentQuery.current = '';\n navigationChangeCallback.current?.(item.id);\n }}\n parentId={currentParentId}\n isSearch={isSearch}\n renderItem={renderItem}\n />\n ) : (\n <MobileItem\n item={item}\n singleChoice={singleChoice}\n isSelectable={checkSelectable?.(item.id, collection)}\n isSelected={selected.includes(item.id)}\n isDisabled={disabled.includes(item.id)}\n onChange={onChange}\n isSearch={isSearch}\n renderItem={renderItem}\n parentId={currentParentId}\n />\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\nexport const MobileItemsList = forwardRef(MobileItemsListComponent) as <Additional extends AdditionalDefault>(\n props: MobileItemsListProps<Additional> & { ref?: ForwardedRef<ListControls> }\n) => ReactElement;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MobileItemsList.js","sources":["src/MobileItemsList.tsx"],"sourcesContent":["import {\n ReactElement,\n useMemo,\n useState,\n useImperativeHandle,\n forwardRef,\n ForwardedRef,\n useRef,\n useEffect,\n RefCallback,\n useCallback,\n} from 'react';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport classnames from 'classnames';\n\nimport { debounce } from '@hh.ru/magritte-common-func-utils';\nimport { Cell, CellText } from '@hh.ru/magritte-ui-cell';\nimport { CheckableCardElement } from '@hh.ru/magritte-ui-checkable-card/CheckableCardElement';\nimport { Action } from '@hh.ru/magritte-ui-tree-selector/Action';\nimport { MobileDelimiter } from '@hh.ru/magritte-ui-tree-selector/MobileDelimiter';\nimport { MobileItem } from '@hh.ru/magritte-ui-tree-selector/MobileItem';\nimport { MobileParentItem } from '@hh.ru/magritte-ui-tree-selector/MobileParentItem';\nimport { AdditionalDefault, TreeModel } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport { ListControls, TreeSelectorDummyProps } from '@hh.ru/magritte-ui-tree-selector/types';\n\nimport styles from './tree-selector-item.less';\n\nconst DEFAULT_ITEM_HEIGHT = 56;\nconst SCROLLEND_HANDLER_DEBOUNCE_MS = 150;\nconst DELIMITER = ';';\n\ntype MobileItemsListProps<Additional extends AdditionalDefault> = {\n selected: string[];\n disabled: string[];\n getMobileSearchItemOrder: (model: TreeModel<Additional>) => number;\n setInputValue: (newValue: string) => void;\n handleChangeInput: (newValue: string) => void;\n contentFilterQuery: string;\n isSearch: boolean;\n} & Pick<\n TreeSelectorDummyProps<Additional>,\n | 'collection'\n | 'leavesOnly'\n | 'singleChoice'\n | 'checkSelectable'\n | 'onChange'\n | 'renderItem'\n | 'renderMobileDelimiter'\n | 'onMobileNavigationChange'\n | 'getSelectAllParentTrl'\n | 'renderContentBefore'\n | 'renderContentAfter'\n>;\n\nconst MobileItemsListComponent = <Additional extends AdditionalDefault>(\n props: MobileItemsListProps<Additional>,\n ref: ForwardedRef<ListControls>\n): ReactElement => {\n const {\n collection,\n selected,\n disabled,\n leavesOnly,\n singleChoice,\n onChange,\n checkSelectable,\n getMobileSearchItemOrder,\n setInputValue,\n handleChangeInput,\n isSearch,\n renderMobileDelimiter,\n renderItem,\n contentFilterQuery,\n getSelectAllParentTrl,\n renderContentBefore,\n renderContentAfter,\n onMobileNavigationChange,\n } = props;\n const navigationChangeCallback = useRef(onMobileNavigationChange);\n navigationChangeCallback.current = onMobileNavigationChange;\n const prevParentIds = useRef<(string | undefined)[]>([]);\n const prevQueries = useRef<string[]>([]);\n const currentQuery = useRef(contentFilterQuery);\n const [currentParentId, setCurrentParentId] = useState<string | undefined>();\n const items = useMemo(\n () => (currentParentId ? collection.getChildren(currentParentId) : collection.getTopLevel()),\n [currentParentId, collection]\n );\n const orderHashMap = useMemo(() => {\n return items.reduce<Record<TreeModel<Additional>['id'], number>>((acc, item) => {\n acc[item.id] = isSearch && !currentParentId ? getMobileSearchItemOrder(item) : 0;\n return acc;\n }, {});\n }, [items, isSearch, currentParentId, getMobileSearchItemOrder]);\n\n const sortedItems = useMemo(() => {\n return items.sort((itemA, itemB) => {\n return orderHashMap[itemA.id] - orderHashMap[itemB.id];\n });\n }, [items, orderHashMap]);\n\n const isSelectable = currentParentId && !leavesOnly && checkSelectable?.(currentParentId, collection);\n const withContentBefore = !!renderContentBefore;\n const withContentAfter = !!renderContentAfter;\n const count = items.length + (isSelectable ? 1 : 0) + (withContentBefore ? 1 : 0) + (withContentAfter ? 1 : 0);\n const parentRef = useRef<HTMLElement | null>(null);\n const isScrolling = useRef(false);\n\n const getItemKey = (index: number) => {\n if (withContentBefore && index === 0) {\n return 'promoTop';\n }\n\n if (withContentAfter && index === count - 1) {\n return 'promoBottom';\n }\n\n const isSelectAllItem =\n isSelectable && ((index === 0 && !withContentBefore) || (index === 1 && withContentBefore));\n\n if (isSelectAllItem) {\n return `current${currentParentId}`;\n }\n\n const itemIndex = index - (isSelectable ? 1 : 0) - (withContentBefore ? 1 : 0);\n const item = sortedItems[itemIndex];\n\n return currentParentId ? `${currentParentId}${DELIMITER}${item.id}` : `${item.id}`;\n };\n\n const virtualizer = useVirtualizer({\n count,\n getScrollElement: () => parentRef.current,\n estimateSize: () => DEFAULT_ITEM_HEIGHT,\n getItemKey,\n });\n\n const itemsVirtualizer = virtualizer.getVirtualItems();\n\n useEffect(() => {\n setCurrentParentId(undefined);\n prevParentIds.current = [];\n prevQueries.current = [];\n navigationChangeCallback.current?.(undefined);\n currentQuery.current = contentFilterQuery;\n }, [contentFilterQuery]);\n\n useImperativeHandle(\n ref,\n () => ({\n back: () => {\n if (!isScrolling.current) {\n const prevParentId = prevParentIds.current.pop();\n setCurrentParentId(prevParentId);\n navigationChangeCallback.current?.(prevParentId);\n if (prevQueries.current.length) {\n const prevInputValue = prevQueries.current.pop() as string;\n setInputValue(prevInputValue);\n currentQuery.current = prevInputValue;\n } else {\n handleChangeInput('');\n }\n }\n },\n }),\n [handleChangeInput, setInputValue]\n );\n\n useEffect(() => {\n const handleScrollEnd = debounce(() => {\n isScrolling.current = false;\n }, SCROLLEND_HANDLER_DEBOUNCE_MS);\n\n const handleScroll = () => {\n isScrolling.current = true;\n handleScrollEnd();\n };\n parentRef.current?.addEventListener('scroll', handleScroll);\n\n return () => {\n parentRef.current?.removeEventListener('scroll', handleScroll);\n };\n }, []);\n\n const refCallback: RefCallback<HTMLDivElement> = useCallback((node) => {\n parentRef.current = node ? node.parentElement : null;\n }, []);\n\n useEffect(() => {\n virtualizer.scrollToIndex(0);\n }, [currentParentId, sortedItems, virtualizer]);\n\n return (\n <div\n ref={refCallback}\n className={styles.virtualizedList}\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n }}\n >\n {itemsVirtualizer.map((virtualItem) => {\n const isContentBeforeItem = withContentBefore && virtualItem.index === 0;\n const isContentAfterItem = withContentAfter && virtualItem.index === count - 1;\n const isSelectAllItem =\n isSelectable &&\n ((virtualItem.index === 0 && !withContentBefore) || (virtualItem.index === 1 && withContentBefore));\n\n if (isContentBeforeItem) {\n return (\n <div\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n className={styles.virtualizedItem}\n style={{\n transform: `translateY(${virtualItem.start}px)`,\n }}\n >\n {renderContentBefore(isSearch)}\n </div>\n );\n }\n\n if (isContentAfterItem) {\n return (\n <div\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n className={styles.virtualizedItem}\n style={{\n transform: `translateY(${virtualItem.start}px)`,\n }}\n >\n {renderContentAfter(isSearch)}\n </div>\n );\n }\n\n if (isSelectAllItem) {\n return (\n <div\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n className={styles.virtualizedItem}\n style={{\n transform: `translateY(${virtualItem.start}px)`,\n }}\n >\n <div className={styles.mobileItem}>\n <CheckableCardElement\n padding={16}\n flexible\n borderRadius={12}\n Element=\"label\"\n checked={selected.includes(currentParentId)}\n data-qa={`tree-selector-select-all-${currentParentId}`}\n >\n <Cell\n Element={'div'}\n disabled={disabled.includes(currentParentId)}\n right={\n <Action\n selected={selected.includes(currentParentId)}\n onChange={onChange}\n id={currentParentId}\n singleChoice={singleChoice}\n />\n }\n >\n <CellText>{getSelectAllParentTrl(currentParentId)}</CellText>\n </Cell>\n </CheckableCardElement>\n </div>\n </div>\n );\n }\n const itemIndex = virtualItem.index - (isSelectable ? 1 : 0) - (withContentBefore ? 1 : 0);\n const item = sortedItems[itemIndex];\n const hasChildren = collection.hasChildren(item.id);\n const hasLetter = item.additional?.char && !isSearch;\n const delimiterContent = renderMobileDelimiter?.({\n item,\n order: orderHashMap[item.id],\n isSearch,\n index: itemIndex,\n isTopLevel: !currentParentId,\n });\n const withGap =\n (!!withContentBefore && virtualItem.index !== 1) || (!withContentBefore && virtualItem.index !== 0);\n return (\n <div\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n style={{\n transform: `translateY(${virtualItem.start}px)`,\n }}\n className={classnames(styles.virtualizedItem, {\n [styles.withGap]: withGap,\n })}\n >\n <div className={styles.mobileItem}>\n {hasLetter && <MobileDelimiter>{item.additional?.char}</MobileDelimiter>}\n {delimiterContent && <MobileDelimiter>{delimiterContent}</MobileDelimiter>}\n {hasChildren ? (\n <MobileParentItem\n collection={collection}\n item={item}\n selected={selected}\n onClick={() => {\n prevParentIds.current.push(currentParentId);\n prevQueries.current.push(currentQuery.current);\n setCurrentParentId(item.id);\n setInputValue('');\n currentQuery.current = '';\n navigationChangeCallback.current?.(item.id);\n }}\n parentId={currentParentId}\n isSearch={isSearch}\n renderItem={renderItem}\n />\n ) : (\n <MobileItem\n item={item}\n singleChoice={singleChoice}\n isSelectable={checkSelectable?.(item.id, collection)}\n isSelected={selected.includes(item.id)}\n isDisabled={disabled.includes(item.id)}\n onChange={onChange}\n isSearch={isSearch}\n renderItem={renderItem}\n parentId={currentParentId}\n />\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\nexport const MobileItemsList = forwardRef(MobileItemsListComponent) as <Additional extends AdditionalDefault>(\n props: MobileItemsListProps<Additional> & { ref?: ForwardedRef<ListControls> }\n) => ReactElement;\n"],"names":[],"mappings":"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"}
|
package/MobileParentItem.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ReactElement } from 'react';
|
|
2
|
-
import TreeCollection from '
|
|
3
|
-
import { AdditionalDefault, TreeModel } from '
|
|
4
|
-
import { RenderItem } from '
|
|
2
|
+
import TreeCollection from './collection/treeCollection';
|
|
3
|
+
import { AdditionalDefault, TreeModel } from './collection/types';
|
|
4
|
+
import { RenderItem } from './types';
|
|
5
5
|
interface MobileParentItemProps<Additional extends AdditionalDefault> {
|
|
6
6
|
collection: TreeCollection<Additional>;
|
|
7
7
|
item: TreeModel<Additional>;
|
package/MobileParentItem.js
CHANGED
|
@@ -7,20 +7,39 @@ import { Card } from '@hh.ru/magritte-ui-card';
|
|
|
7
7
|
import { CellRightLabel } from '@hh.ru/magritte-ui-cell';
|
|
8
8
|
import { TreeSelectorItemBase } from './TreeSelectorItemBase.js';
|
|
9
9
|
|
|
10
|
-
const MobileParentItem = ({
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
10
|
+
const MobileParentItem = ({
|
|
11
|
+
collection,
|
|
12
|
+
item,
|
|
13
|
+
selected,
|
|
14
|
+
onClick,
|
|
15
|
+
isSearch,
|
|
16
|
+
parentId,
|
|
17
|
+
renderItem = TreeSelectorItemBase
|
|
18
|
+
}) => {
|
|
19
|
+
const childrenSelectedCount = useMemo(() => {
|
|
20
|
+
let count = 0;
|
|
21
|
+
collection.walkChildren(item.id, (model) => {
|
|
22
|
+
if (selected.includes(model.id)) {
|
|
23
|
+
count += 1;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
return count;
|
|
27
|
+
}, [collection, selected, item.id]);
|
|
28
|
+
const labelRight = /* @__PURE__ */ jsx(CellRightLabel, { badge: childrenSelectedCount ? /* @__PURE__ */ jsx(Badge, { children: childrenSelectedCount.toString() }) : void 0 });
|
|
29
|
+
return /* @__PURE__ */ jsx(
|
|
30
|
+
Card,
|
|
31
|
+
{
|
|
32
|
+
padding: 16,
|
|
33
|
+
borderRadius: 12,
|
|
34
|
+
borderWidth: "default",
|
|
35
|
+
stretched: true,
|
|
36
|
+
onClick,
|
|
37
|
+
"data-qa": classnames("tree-selector-item", `tree-selector-item-${item.id}`, {
|
|
38
|
+
[`tree-selector-child-${parentId}`]: parentId
|
|
39
|
+
}),
|
|
40
|
+
children: renderItem({ item, labelRight, childrenSelectedCount, isSearch, isXS: true, isParent: true })
|
|
41
|
+
}
|
|
42
|
+
);
|
|
24
43
|
};
|
|
25
44
|
|
|
26
45
|
export { MobileParentItem };
|
package/MobileParentItem.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileParentItem.js","sources":["src/MobileParentItem.tsx"],"sourcesContent":["import { ReactElement, useMemo } from 'react';\nimport classnames from 'classnames';\n\nimport { Badge } from '@hh.ru/magritte-ui-badge';\nimport { Card } from '@hh.ru/magritte-ui-card';\nimport { CellRightLabel } from '@hh.ru/magritte-ui-cell';\nimport { TreeSelectorItemBase } from '@hh.ru/magritte-ui-tree-selector/TreeSelectorItemBase';\nimport TreeCollection from '@hh.ru/magritte-ui-tree-selector/collection/treeCollection';\nimport { AdditionalDefault, TreeModel } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport { RenderItem } from '@hh.ru/magritte-ui-tree-selector/types';\n\ninterface MobileParentItemProps<Additional extends AdditionalDefault> {\n collection: TreeCollection<Additional>;\n item: TreeModel<Additional>;\n selected: string[];\n onClick: () => void;\n renderItem?: RenderItem<Additional>;\n isSearch: boolean;\n parentId?: string;\n}\n\nexport const MobileParentItem = <Additional extends AdditionalDefault>({\n collection,\n item,\n selected,\n onClick,\n isSearch,\n parentId,\n renderItem = TreeSelectorItemBase,\n}: MobileParentItemProps<Additional>): ReactElement => {\n const childrenSelectedCount = useMemo(() => {\n let count = 0;\n collection.walkChildren(item.id, (model) => {\n if (selected.includes(model.id)) {\n count += 1;\n }\n });\n\n return count;\n }, [collection, selected, item.id]);\n\n const labelRight = (\n <CellRightLabel badge={childrenSelectedCount ? <Badge>{childrenSelectedCount.toString()}</Badge> : undefined} />\n );\n\n return (\n <Card\n padding={16}\n borderRadius={12}\n borderWidth=\"default\"\n stretched\n onClick={onClick}\n data-qa={classnames('tree-selector-item', `tree-selector-item-${item.id}`, {\n [`tree-selector-child-${parentId}`]: parentId,\n })}\n >\n {renderItem({ item, labelRight, childrenSelectedCount, isSearch, isXS: true, isParent: true })}\n </Card>\n );\n};\n"],"names":[
|
|
1
|
+
{"version":3,"file":"MobileParentItem.js","sources":["src/MobileParentItem.tsx"],"sourcesContent":["import { ReactElement, useMemo } from 'react';\nimport classnames from 'classnames';\n\nimport { Badge } from '@hh.ru/magritte-ui-badge';\nimport { Card } from '@hh.ru/magritte-ui-card';\nimport { CellRightLabel } from '@hh.ru/magritte-ui-cell';\nimport { TreeSelectorItemBase } from '@hh.ru/magritte-ui-tree-selector/TreeSelectorItemBase';\nimport TreeCollection from '@hh.ru/magritte-ui-tree-selector/collection/treeCollection';\nimport { AdditionalDefault, TreeModel } from '@hh.ru/magritte-ui-tree-selector/collection/types';\nimport { RenderItem } from '@hh.ru/magritte-ui-tree-selector/types';\n\ninterface MobileParentItemProps<Additional extends AdditionalDefault> {\n collection: TreeCollection<Additional>;\n item: TreeModel<Additional>;\n selected: string[];\n onClick: () => void;\n renderItem?: RenderItem<Additional>;\n isSearch: boolean;\n parentId?: string;\n}\n\nexport const MobileParentItem = <Additional extends AdditionalDefault>({\n collection,\n item,\n selected,\n onClick,\n isSearch,\n parentId,\n renderItem = TreeSelectorItemBase,\n}: MobileParentItemProps<Additional>): ReactElement => {\n const childrenSelectedCount = useMemo(() => {\n let count = 0;\n collection.walkChildren(item.id, (model) => {\n if (selected.includes(model.id)) {\n count += 1;\n }\n });\n\n return count;\n }, [collection, selected, item.id]);\n\n const labelRight = (\n <CellRightLabel badge={childrenSelectedCount ? <Badge>{childrenSelectedCount.toString()}</Badge> : undefined} />\n );\n\n return (\n <Card\n padding={16}\n borderRadius={12}\n borderWidth=\"default\"\n stretched\n onClick={onClick}\n data-qa={classnames('tree-selector-item', `tree-selector-item-${item.id}`, {\n [`tree-selector-child-${parentId}`]: parentId,\n })}\n >\n {renderItem({ item, labelRight, childrenSelectedCount, isSearch, isXS: true, isParent: true })}\n </Card>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAqBO,MAAM,mBAAmB,CAAuC;AAAA,EACnE,UAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAa,GAAA,oBAAA;AACjB,CAAuD,KAAA;AACnD,EAAM,MAAA,qBAAA,GAAwB,QAAQ,MAAM;AACxC,IAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AACZ,IAAA,UAAA,CAAW,YAAa,CAAA,IAAA,CAAK,EAAI,EAAA,CAAC,KAAU,KAAA;AACxC,MAAA,IAAI,QAAS,CAAA,QAAA,CAAS,KAAM,CAAA,EAAE,CAAG,EAAA;AAC7B,QAAS,KAAA,IAAA,CAAA,CAAA;AAAA,OACb;AAAA,KACH,CAAA,CAAA;AAED,IAAO,OAAA,KAAA,CAAA;AAAA,KACR,CAAC,UAAA,EAAY,QAAU,EAAA,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;AAElC,EAAM,MAAA,UAAA,mBACD,GAAA,CAAA,cAAA,EAAA,EAAe,KAAO,EAAA,qBAAA,mBAAyB,GAAA,CAAA,KAAA,EAAA,EAAO,QAAsB,EAAA,qBAAA,CAAA,QAAA,EAAW,EAAA,CAAA,GAAW,KAAW,CAAA,EAAA,CAAA,CAAA;AAGlH,EACI,uBAAA,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,OAAS,EAAA,EAAA;AAAA,MACT,YAAc,EAAA,EAAA;AAAA,MACd,WAAY,EAAA,SAAA;AAAA,MACZ,SAAS,EAAA,IAAA;AAAA,MACT,OAAA;AAAA,MACA,WAAS,UAAW,CAAA,oBAAA,EAAsB,CAAsB,mBAAA,EAAA,IAAA,CAAK,EAAE,CAAI,CAAA,EAAA;AAAA,QACvE,CAAC,CAAA,oBAAA,EAAuB,QAAQ,CAAA,CAAE,GAAG,QAAA;AAAA,OACxC,CAAA;AAAA,MAEA,QAAA,EAAA,UAAA,CAAW,EAAE,IAAA,EAAM,UAAY,EAAA,qBAAA,EAAuB,UAAU,IAAM,EAAA,IAAA,EAAM,QAAU,EAAA,IAAA,EAAM,CAAA;AAAA,KAAA;AAAA,GACjG,CAAA;AAER;;;;"}
|
package/TreeSelector.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ForwardedRef, ReactElement } from 'react';
|
|
2
|
-
import { AdditionalDefault } from '
|
|
3
|
-
import { TreeSelectorProps, ListControls } from '
|
|
2
|
+
import { AdditionalDefault } from './collection/types';
|
|
3
|
+
import { TreeSelectorProps, ListControls } from './types';
|
|
4
4
|
export declare const TreeSelector: <Additional extends AdditionalDefault>(props: TreeSelectorProps<Additional> & {
|
|
5
5
|
ref?: ForwardedRef<ListControls>;
|
|
6
6
|
}) => ReactElement;
|