@topconsultnpm/sdkui-react 6.21.0-dev2.20 → 6.21.0-dev2.21

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.
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useCallback, useEffect, useMemo, useState } from 'react';
3
- import { LayoutModes, MetadataDataDomains, AccessLevels, MetadataDataTypes, SDK_Globals, DcmtTypeListCacheService, DataColumnTypes } from '@topconsultnpm/sdk-ts';
3
+ import { LayoutModes, MetadataDataDomains, AccessLevels, MetadataDataTypes, SDK_Globals, DcmtTypeListCacheService, DataColumnTypes, DataListViewModes } from '@topconsultnpm/sdk-ts';
4
4
  import styled from 'styled-components';
5
5
  import { SDKUI_Localizator, stringIsNullOrEmpty } from '../../helper';
6
6
  import TMDataGrid, { TMDataGridPageSize } from '../base/TMDataGrid';
@@ -9,14 +9,17 @@ import TMSpinner from '../base/TMSpinner';
9
9
  import TMCheckBox from '../editors/TMCheckBox';
10
10
  import TMPanel from '../base/TMPanel';
11
11
  import TMModal from '../base/TMModal';
12
+ import { useDataListItem } from '../../hooks/useDataListItem';
13
+ import { useDataUserIdItem } from '../../hooks/useDataUserIdItem';
12
14
  const StyledDistinctValues = styled.div `display: flex; flex-direction: column; height: 100%; overflow: hidden; gap: 10px;`;
13
- const StyledPanelContainer = styled.div ` width: 100%; height: 100%; padding: 20px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 20px; `;
14
15
  const TMDistinctValues = ({ tid, mid, layoutMode = LayoutModes.None, allowAppendMode = true, showHeader = true, isModal, separator = " ", onSelectionChanged, onClosePanelCallback }) => {
15
16
  const [focusedItem, setFocusedItem] = useState();
16
17
  const [dataSource, setDataSource] = useState([]);
17
18
  const [isAppendMode, setIsAppendMode] = useState(false);
18
19
  const [md, setMd] = useState();
19
20
  const [currentValue, setCurrentValue] = useState('');
21
+ const { loadDataListsAsync, renderDataListCell, dataListsCache } = useDataListItem();
22
+ const { loadUsersAsync, renderUserIdViewer, usersCache } = useDataUserIdItem();
20
23
  useEffect(() => {
21
24
  getDistictValuesAsync();
22
25
  }, [mid]);
@@ -57,8 +60,23 @@ const TMDistinctValues = ({ tid, mid, layoutMode = LayoutModes.None, allowAppend
57
60
  try {
58
61
  TMSpinner.show({ description: 'Caricamento dei valori distinti...' });
59
62
  let dtd = await DcmtTypeListCacheService.GetAsync(tid, true);
60
- setMd(dtd?.metadata?.find(o => o.id === mid));
63
+ const currentMd = dtd?.metadata?.find(o => o.id === mid);
64
+ setMd(currentMd);
61
65
  let result = await SDK_Globals.tmSession?.NewSearchEngine().GetDistinctValuesAsync(tid, mid, 10000);
66
+ // Load DataList or UserID cache based on metadata domain
67
+ if (currentMd?.dataDomain === MetadataDataDomains.DataList && currentMd.dataListID) {
68
+ await loadDataListsAsync(new Set([currentMd.dataListID]));
69
+ }
70
+ if (currentMd?.dataDomain === MetadataDataDomains.UserID && result?.dtdResult?.rows) {
71
+ const userIDs = new Set();
72
+ result.dtdResult.rows.forEach((row) => {
73
+ const userId = Number(row[0]);
74
+ if (userId && userId > 0) {
75
+ userIDs.add(userId);
76
+ }
77
+ });
78
+ await loadUsersAsync(userIDs);
79
+ }
62
80
  setDataSource(convertDataTableToObject(result?.dtdResult));
63
81
  }
64
82
  catch (e) {
@@ -69,31 +87,27 @@ const TMDistinctValues = ({ tid, mid, layoutMode = LayoutModes.None, allowAppend
69
87
  TMSpinner.hide();
70
88
  }
71
89
  };
72
- const getDcmtTypeAsync = async () => {
73
- if (!tid)
74
- return;
75
- try {
76
- TMSpinner.show({ description: 'Caricamento dei valori distinti...' });
77
- let dtd = await DcmtTypeListCacheService.GetAsync(tid, true);
78
- setMd(dtd?.metadata?.find(o => o.id === mid));
79
- }
80
- catch (e) {
81
- let err = e;
82
- TMExceptionBoxManager.show({ exception: err });
83
- }
84
- finally {
85
- TMSpinner.hide();
86
- }
87
- };
88
90
  const onFocusedRowChanged = useCallback((e) => {
89
91
  setFocusedItem(e.row?.data);
90
92
  }, []);
93
+ const valueCellRender = useCallback((cellData) => {
94
+ if (!cellData || cellData.value === undefined)
95
+ return null;
96
+ if (md?.dataDomain === MetadataDataDomains.DataList && md.dataListID) {
97
+ return renderDataListCell(cellData.value, md.dataListID, md.dataListViewMode ?? DataListViewModes.None);
98
+ }
99
+ if (md?.dataDomain === MetadataDataDomains.UserID) {
100
+ return renderUserIdViewer(Number(cellData.value), true);
101
+ }
102
+ return _jsx("div", { children: cellData.text });
103
+ }, [md, renderDataListCell, renderUserIdViewer]);
91
104
  const customColumns = useMemo(() => {
105
+ const needsCellRender = md?.dataDomain === MetadataDataDomains.DataList || md?.dataDomain === MetadataDataDomains.UserID;
92
106
  return ([
93
- { dataField: 'value', dataType: md?.dataType === MetadataDataTypes.DateTime ? 'date' : 'string', caption: md?.nameLoc, width: 'min-content' },
107
+ { dataField: 'value', dataType: md?.dataType === MetadataDataTypes.DateTime ? 'date' : 'string', caption: md?.nameLoc, width: 'min-content', ...(needsCellRender && { cellRender: valueCellRender }) },
94
108
  { dataField: 'Count', dataType: 'number', caption: 'N°' }
95
109
  ]);
96
- }, [md]);
110
+ }, [md, valueCellRender]);
97
111
  const customSummary = useMemo(() => {
98
112
  return ({
99
113
  totalItems: [
@@ -695,6 +695,7 @@ export declare class SDKUI_Localizator {
695
695
  static get Subject(): "Betreff" | "Subject" | "Asunto" | "Objet" | "Assunto" | "Oggetto";
696
696
  static get Summary(): "Zusammenfassung" | "Summary" | "Resumen" | "Résumé" | "Resumo" | "Riepilogo";
697
697
  static get SwitchUser(): "Benutzer wechseln" | "Switch user" | "Cambiar usuario" | "Changer d'utilisateur" | "Mudar de usuário" | "Cambia utente";
698
+ static get SystemUser(): string;
698
699
  static get TargetedSearch(): "Gezielte Suche" | "Targeted search" | "Búsqueda dirigida" | "Recherche ciblée" | "Pesquisa direcionada" | "Ricerca puntuale";
699
700
  static get TaskAssignedMessage(): "Aufgabe wurde vom Benutzer \"{{0}}\" zugewiesen." | "Task assigned by user \"{{0}}\"." | "Tarea asignada por el usuario \"{{0}}\"." | "Tâche assignée par l'utilisateur \"{{0}}\"." | "Tarefa atribuída pelo usuário \"{{0}}\"." | "Attività assegnata dall'utente \"{{0}}\".";
700
701
  static get MoreInfoRequestedTo(): "Weitere Informationen angefordert von \"{{0}}\"." | "More information requested to \"{{0}}\"." | "Solicitud de más información a \"{{0}}\"." | "Demande d'informations supplémentaires à \"{{0}}\"." | "Pedido de mais informações a \"{{0}}\"." | "Richiesta di maggiori informazioni a \"{{0}}\".";
@@ -6924,6 +6924,16 @@ export class SDKUI_Localizator {
6924
6924
  default: return "Cambia utente";
6925
6925
  }
6926
6926
  }
6927
+ static get SystemUser() {
6928
+ switch (this._cultureID) {
6929
+ case CultureIDs.De_DE: return "Systembenutzer";
6930
+ case CultureIDs.En_US: return "System user";
6931
+ case CultureIDs.Es_ES: return "Usuario del sistema";
6932
+ case CultureIDs.Fr_FR: return "Utilisateur système";
6933
+ case CultureIDs.Pt_PT: return "Usuário do sistema";
6934
+ default: return "Utente di sistema";
6935
+ }
6936
+ }
6927
6937
  static get TargetedSearch() {
6928
6938
  switch (this._cultureID) {
6929
6939
  case CultureIDs.De_DE: return "Gezielte Suche";
@@ -15,7 +15,7 @@ export const useDataUserIdItem = () => {
15
15
  if (userIDs.size === 0)
16
16
  return;
17
17
  try {
18
- const results = await Promise.all(Array.from(userIDs).map(id => UserListCacheService.GetAsync(id).then(user => ({ id, user }))
18
+ const results = await Promise.all(Array.from(userIDs).filter(id => id > 0).map(id => UserListCacheService.GetAsync(id).then(user => ({ id, user }))
19
19
  .catch(() => ({ id, user: undefined }))));
20
20
  const newCache = new Map();
21
21
  results.forEach(({ id, user }) => {
@@ -70,17 +70,19 @@ export const useDataUserIdItem = () => {
70
70
  * @returns Elemento React per visualizzare l'utente
71
71
  */
72
72
  const renderUserIdViewer = useCallback((userId, showIcon = false, showTitile = true) => {
73
- const ud = userId && userId > 0 ? getUserItem(userId) : undefined;
73
+ const ud = userId !== undefined && userId > 0 ? getUserItem(userId) : undefined;
74
74
  const getIcon = () => {
75
75
  if (!showIcon)
76
76
  return null;
77
- if (!userId)
77
+ if (userId === undefined)
78
78
  return null;
79
79
  return ud ? _jsx(TMUserIcon, { ud: ud }) : _jsx("span", { title: showTitile ? SDKUI_Localizator.ValueNotPresent : undefined, style: { display: 'inline-flex', alignItems: 'center' }, children: _jsx(IconWarning, { color: TMColors.warning }) });
80
80
  };
81
81
  const getDescription = () => {
82
- if (!userId)
82
+ if (userId == null)
83
83
  return undefined;
84
+ if (userId === 0)
85
+ return SDKUI_Localizator.SystemUser;
84
86
  return ud ? getCompleteUserName(ud.domain, ud.name) : userId.toString() ?? SDKUI_Localizator.NoneSelection;
85
87
  };
86
88
  return (_jsxs("span", { style: { display: 'inline-flex', alignItems: 'center', gap: '4px', lineHeight: 1 }, children: [getIcon(), _jsx("span", { style: { lineHeight: 'normal' }, children: getDescription() })] }));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topconsultnpm/sdkui-react",
3
- "version": "6.21.0-dev2.20",
3
+ "version": "6.21.0-dev2.21",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1",