@topconsultnpm/sdkui-react 6.20.0-dev1.110 → 6.20.0-dev1.111

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.
@@ -22,10 +22,11 @@ interface ITMTreeViewProps<T extends ITMTreeItem> {
22
22
  onNodeUpdate?: (updatedNode: T) => void;
23
23
  onDataChanged?: (items: T[]) => void;
24
24
  shouldDelayFocusOnEvent?: (node: T, event: React.MouseEvent) => boolean;
25
+ autoSelectChildren?: boolean;
25
26
  itemsPerPage?: number;
26
27
  showLoadMoreButton?: boolean;
27
28
  }
28
- declare const TMTreeView: <T extends ITMTreeItem>({ dataSource, focusedItem, selectedItems, allowMultipleSelection, onDataChanged, calculateItemsForNode, itemRender, onNodeUpdate, onFocusedItemChanged, onSelectionChanged, shouldDelayFocusOnEvent, itemsPerPage, showLoadMoreButton }: ITMTreeViewProps<T>) => import("react/jsx-runtime").JSX.Element;
29
+ declare const TMTreeView: <T extends ITMTreeItem>({ dataSource, focusedItem, selectedItems, allowMultipleSelection, onDataChanged, calculateItemsForNode, itemRender, onNodeUpdate, onFocusedItemChanged, onSelectionChanged, shouldDelayFocusOnEvent, autoSelectChildren, itemsPerPage, showLoadMoreButton }: ITMTreeViewProps<T>) => import("react/jsx-runtime").JSX.Element;
29
30
  export default TMTreeView;
30
31
  export declare const StyledTreeNode: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
31
32
  $isSelected?: boolean;
@@ -3,7 +3,7 @@ import { useCallback, useEffect, useRef } from 'react';
3
3
  import styled from 'styled-components';
4
4
  import { IconChevronDown, IconChevronRight } from '../../helper';
5
5
  import TMButton from './TMButton';
6
- const TMTreeView = ({ dataSource = [], focusedItem, selectedItems = [], allowMultipleSelection, onDataChanged, calculateItemsForNode, itemRender, onNodeUpdate, onFocusedItemChanged, onSelectionChanged, shouldDelayFocusOnEvent, itemsPerPage = 100, showLoadMoreButton = true }) => {
6
+ const TMTreeView = ({ dataSource = [], focusedItem, selectedItems = [], allowMultipleSelection, onDataChanged, calculateItemsForNode, itemRender, onNodeUpdate, onFocusedItemChanged, onSelectionChanged, shouldDelayFocusOnEvent, autoSelectChildren = true, itemsPerPage = 100, showLoadMoreButton = true }) => {
7
7
  useEffect(() => {
8
8
  const handleKeyDown = (event) => {
9
9
  if (!focusedItem)
@@ -187,47 +187,51 @@ const TMTreeView = ({ dataSource = [], focusedItem, selectedItems = [], allowMul
187
187
  };
188
188
  let newSelectedItems;
189
189
  if (checked) {
190
- if (node.isContainer) {
191
- // Quando selezioni un container, aggiungi il container stesso + tutti i figli
190
+ if (node.isContainer && autoSelectChildren) {
191
+ // Quando selezioni un container, aggiungi il container stesso + tutti i figli (se autoSelectChildren è true)
192
192
  const allChildren = flattenTree(node.items || []);
193
193
  newSelectedItems = [...selectedItems, node, ...allChildren];
194
194
  }
195
195
  else if (!selectedItems.some(item => item.key === node.key)) {
196
- // Quando selezioni un figlio, aggiungi il figlio
196
+ // Quando selezioni un figlio o un container con autoSelectChildren=false, aggiungi solo il nodo
197
197
  newSelectedItems = [...selectedItems, node];
198
- // Verifica se selezionando questo figlio sono ora selezionati tutti i figli del parent
199
- const parentsToAdd = findAndCheckParents(dataSource, node, newSelectedItems);
200
- newSelectedItems = [...newSelectedItems, ...parentsToAdd];
198
+ // Verifica se selezionando questo figlio sono ora selezionati tutti i figli del parent (solo se autoSelectChildren è true)
199
+ if (autoSelectChildren) {
200
+ const parentsToAdd = findAndCheckParents(dataSource, node, newSelectedItems);
201
+ newSelectedItems = [...newSelectedItems, ...parentsToAdd];
202
+ }
201
203
  }
202
204
  else {
203
205
  newSelectedItems = selectedItems;
204
206
  }
205
207
  }
206
- else if (node.isContainer) {
207
- // Quando deselezioni un container, rimuovi il container stesso + tutti i figli
208
+ else if (node.isContainer && autoSelectChildren) {
209
+ // Quando deselezioni un container, rimuovi il container stesso + tutti i figli (solo se autoSelectChildren è true)
208
210
  const childKeys = flattenTree(node.items || []).map(item => item.key);
209
211
  newSelectedItems = selectedItems.filter(item => item.key !== node.key && !childKeys.includes(item.key));
210
212
  }
211
213
  else {
212
- // Quando deselezioni un figlio, rimuovi il figlio
214
+ // Quando deselezioni un figlio o un container con autoSelectChildren=false, rimuovi solo il nodo
213
215
  newSelectedItems = selectedItems.filter(item => item.key !== node.key);
214
- // Se il figlio apparteneva a un parent che era selezionato, rimuovi anche il parent
215
- const removeParentContainers = (items) => {
216
- const parentsToRemove = [];
217
- items.forEach(item => {
218
- if (item.isContainer && item.items) {
219
- const childKeys = flattenTree(item.items).map(child => child.key);
220
- if (childKeys.includes(node.key)) {
221
- parentsToRemove.push(item.key);
216
+ // Se il figlio apparteneva a un parent che era selezionato, rimuovi anche il parent (solo se autoSelectChildren è true)
217
+ if (autoSelectChildren && !node.isContainer) {
218
+ const removeParentContainers = (items) => {
219
+ const parentsToRemove = [];
220
+ items.forEach(item => {
221
+ if (item.isContainer && item.items) {
222
+ const childKeys = flattenTree(item.items).map(child => child.key);
223
+ if (childKeys.includes(node.key)) {
224
+ parentsToRemove.push(item.key);
225
+ }
226
+ // Ricorsione per parent annidati
227
+ parentsToRemove.push(...removeParentContainers(item.items));
222
228
  }
223
- // Ricorsione per parent annidati
224
- parentsToRemove.push(...removeParentContainers(item.items));
225
- }
226
- });
227
- return parentsToRemove;
228
- };
229
- const parentsToRemove = removeParentContainers(dataSource);
230
- newSelectedItems = newSelectedItems.filter(item => !parentsToRemove.includes(item.key));
229
+ });
230
+ return parentsToRemove;
231
+ };
232
+ const parentsToRemove = removeParentContainers(dataSource);
233
+ newSelectedItems = newSelectedItems.filter(item => !parentsToRemove.includes(item.key));
234
+ }
231
235
  }
232
236
  onSelectionChanged?.(newSelectedItems);
233
237
  };
@@ -252,6 +256,9 @@ const TMTreeView = ({ dataSource = [], focusedItem, selectedItems = [], allowMul
252
256
  // setTreeData(prevData => collapseAll(prevData));
253
257
  // };
254
258
  const isIndeterminate = (node) => {
259
+ // Lo stato indeterminate ha senso solo quando autoSelectChildren è true
260
+ if (!autoSelectChildren)
261
+ return false;
255
262
  if (!node.isContainer || !node.items)
256
263
  return false;
257
264
  const childKeys = flattenTree(node.items).map(item => item.key);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topconsultnpm/sdkui-react",
3
- "version": "6.20.0-dev1.110",
3
+ "version": "6.20.0-dev1.111",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1",