@topconsultnpm/sdkui-react 6.20.0-dev1.53 → 6.20.0-dev1.55

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,5 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useState, useRef, useEffect } from 'react';
3
+ import { createPortal } from 'react-dom';
3
4
  import * as S from './styles';
4
5
  import { useIsMobile, useMenuPosition, useIsIOS } from './hooks';
5
6
  import { IconArrowLeft } from '../../../helper';
@@ -297,6 +298,6 @@ const TMContextMenu = ({ items, trigger = 'right', children, externalControl, ke
297
298
  display: 'inline-block',
298
299
  WebkitTouchCallout: isIOS ? 'none' : undefined,
299
300
  WebkitUserSelect: isIOS ? 'none' : undefined,
300
- }, children: children })), menuState.visible && (_jsxs(_Fragment, { children: [_jsxs(S.MenuContainer, { ref: menuRef, "$x": menuState.position.x, "$y": menuState.position.y, "$openLeft": openLeft, "$openUp": openUp, "$isPositioned": isCalculated, "$externalControl": !!externalControl, children: [isMobile && menuState.parentNames.length > 0 && (_jsxs(S.MobileMenuHeader, { children: [_jsx(S.BackButton, { onClick: handleBack, "aria-label": "Go back", children: _jsx(IconArrowLeft, {}) }), _jsx(S.HeaderTitle, { children: currentParentName })] })), renderMenuItems(currentMenu, 0)] }), !isMobile && hoveredSubmenus.map((submenu, idx) => (_jsx(S.Submenu, { "$parentRect": submenu.parentRect, "$openUp": submenu.openUp, "data-submenu": "true", onMouseEnter: handleSubmenuMouseEnter, onMouseLeave: () => handleMouseLeave(submenu.depth), children: renderMenuItems(submenu.items, submenu.depth) }, `submenu-${submenu.depth}-${idx}`)))] }))] }));
301
+ }, children: children })), menuState.visible && createPortal(_jsxs(_Fragment, { children: [_jsxs(S.MenuContainer, { ref: menuRef, "$x": menuState.position.x, "$y": menuState.position.y, "$openLeft": openLeft, "$openUp": openUp, "$isPositioned": isCalculated, "$externalControl": !!externalControl, children: [isMobile && menuState.parentNames.length > 0 && (_jsxs(S.MobileMenuHeader, { children: [_jsx(S.BackButton, { onClick: handleBack, "aria-label": "Go back", children: _jsx(IconArrowLeft, {}) }), _jsx(S.HeaderTitle, { children: currentParentName })] })), renderMenuItems(currentMenu, 0)] }), !isMobile && hoveredSubmenus.map((submenu, idx) => (_jsx(S.Submenu, { "$parentRect": submenu.parentRect, "$openUp": submenu.openUp, "data-submenu": "true", onMouseEnter: handleSubmenuMouseEnter, onMouseLeave: () => handleMouseLeave(submenu.depth), children: renderMenuItems(submenu.items, submenu.depth) }, `submenu-${submenu.depth}-${idx}`)))] }), document.body)] }));
301
302
  };
302
303
  export default TMContextMenu;
@@ -3,8 +3,8 @@ import React, { useEffect, useState } from 'react';
3
3
  import styled from 'styled-components';
4
4
  import { SharingModes, SDK_Globals, SDK_Localizator } from '@topconsultnpm/sdk-ts';
5
5
  import { LocalizeSharingModes } from '../../../helper/Enum_Localizator';
6
- import ContextMenu from 'devextreme-react/context-menu';
7
- import { SDKUI_Localizator, Globalization, svgToString, IconStar, IconDelete, IconDashboard, IconSavedQuery, IconApply, IconInfo, IconCloseOutline } from '../../../helper';
6
+ import TMContextMenu from '../../NewComponents/ContextMenu/TMContextMenu';
7
+ import { SDKUI_Localizator, Globalization, IconStar, IconDelete, IconDashboard, IconSavedQuery, IconApply, IconInfo, IconCloseOutline } from '../../../helper';
8
8
  import { TMColors } from '../../../utils/theme';
9
9
  import ShowAlert from '../../base/TMAlert';
10
10
  import { TMMessageBoxManager, ButtonNames, TMExceptionBoxManager } from '../../base/TMPopUp';
@@ -81,45 +81,38 @@ export const getTooltipBySqd = (sqd) => {
81
81
  return (_jsxs("div", { style: { textAlign: "left", fontSize: '1rem', color: TMColors.primaryColor }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 10 }, children: [_jsx(IconSavedQuery, { color: getSharingModeColor(sqd.sharingMode), fontSize: 20, style: { flexShrink: 0 } }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 2 }, children: [_jsxs("div", { children: ["ID: ", sqd.id] }), _jsxs("div", { children: ["Master TID: ", sqd.masterTID] }), sqd.description && _jsx("div", { children: `${SDKUI_Localizator.Description}: ${sqd.description}` })] })] }), _jsx("hr", {}), _jsxs("div", { children: [SDKUI_Localizator.OwnerName, ": ", sqd.ownerName, " (", sqd.ownerID, ")"] }), _jsx("div", { children: LocalizeSharingModes(sqd.sharingMode) }), _jsxs("div", { children: ["Default: ", sqd.isDefault == 1 ? SDKUI_Localizator.Yes : SDKUI_Localizator.No] }), _jsxs("div", { children: ["Filtro semplice", ": ", sqd.isEasyWhere == 1 ? SDKUI_Localizator.Yes : SDKUI_Localizator.No] }), _jsxs("div", { children: ["Esegui ricerca immediatamente", ": ", sqd.runSearchWhenSelected == 1 ? SDKUI_Localizator.Yes : SDKUI_Localizator.No] }), _jsx("hr", {}), _jsxs("div", { children: [SDKUI_Localizator.CreationTime, ": ", Globalization.getDateTimeDisplayValue(sqd.creationTime)] }), _jsxs("div", { children: [SDKUI_Localizator.LastUpdateTime, ": ", Globalization.getDateTimeDisplayValue(sqd.lastUpdateTime)] })] }));
82
82
  };
83
83
  const initialSQDsMaxItems = 12;
84
- const SavedQueryContexMenu = ({ sqd, manageDefault, isMobile, deleteAsync, favManageAsync, setDefaultAsync, setInfoSQD }) => _jsx(ContextMenu, { items: [
85
- ...(manageDefault ? [{
86
- text: SDKUI_Localizator.SetAsDefault2,
87
- icon: svgToString(_jsx(IconStar, { color: 'rgb(248, 215, 117)' })),
88
- onClick: () => setDefaultAsync(sqd)
89
- }] : []),
90
- {
91
- text: SDKUI_Localizator.Delete,
92
- disabled: (sqd.id == 1),
93
- icon: svgToString(_jsx(IconDelete, {})),
94
- onClick: () => deleteAsync(sqd)
95
- },
96
- {
97
- text: SDKUI_Localizator.AddToHomePage,
98
- disabled: (sqd.id == 1),
99
- icon: svgToString(_jsx(IconDashboard, {})),
100
- onClick: () => favManageAsync?.(sqd)
101
- },
102
- ...(isMobile ? [
103
- {
104
- text: SDKUI_Localizator.About,
105
- icon: svgToString(_jsx(IconInfo, { color: TMColors.info })),
106
- onClick: () => { setInfoSQD?.(sqd); }
107
- }
108
- ] : [])
109
- ], target: `#sqd-item-${sqd.id}`, onItemClick: (e) => {
110
- if (e.itemIndex == 0)
111
- setDefaultAsync?.(sqd);
112
- else if (e.itemIndex == 1)
113
- deleteAsync?.(sqd);
114
- else if (e.itemIndex == 2)
115
- favManageAsync?.(sqd);
116
- } });
84
+ const getContextMenuItems = (sqd, manageDefault, isMobile, deleteAsync, setDefaultAsync, favManageAsync, setInfoSQD) => [
85
+ ...(manageDefault ? [{
86
+ name: SDKUI_Localizator.SetAsDefault2,
87
+ icon: _jsx(IconStar, { color: 'rgb(248, 215, 117)' }),
88
+ onClick: () => setDefaultAsync(sqd)
89
+ }] : []),
90
+ {
91
+ name: SDKUI_Localizator.Delete,
92
+ disabled: (sqd.id == 1),
93
+ icon: _jsx(IconDelete, {}),
94
+ onClick: () => deleteAsync(sqd)
95
+ },
96
+ {
97
+ name: SDKUI_Localizator.AddToHomePage,
98
+ disabled: (sqd.id == 1),
99
+ icon: _jsx(IconDashboard, {}),
100
+ onClick: () => favManageAsync?.(sqd)
101
+ },
102
+ ...(isMobile ? [{
103
+ name: SDKUI_Localizator.About,
104
+ icon: _jsx(IconInfo, { color: TMColors.info }),
105
+ onClick: () => { setInfoSQD?.(sqd); }
106
+ }] : [])
107
+ ];
117
108
  const TMSavedQuerySelector = React.memo(({ items, selectedId, allowShowSearch = true, height, manageDefault = true, onItemClick, onDeleted, onFavoritesAdded, onRefreshData }) => {
118
109
  const [dataSource, setDataSource] = useState([]);
119
110
  const [selectedItem, setSelectedItem] = useState();
120
111
  const [searchText, setSearchText] = useState('');
121
112
  const [showAllRoot, setShowAllRoot] = useState(false);
122
113
  const [infoSQD, setInfoSQD] = useState();
114
+ // Context menu state
115
+ const [contextMenuState, setContextMenuState] = useState({ visible: false, position: { x: 0, y: 0 }, sqd: null });
123
116
  const deviceType = useDeviceType();
124
117
  const isMobile = deviceType === DeviceType.MOBILE;
125
118
  const panelRef = useOutsideClick(() => {
@@ -187,40 +180,52 @@ const TMSavedQuerySelector = React.memo(({ items, selectedId, allowShowSearch =
187
180
  overflow: 'auto'
188
181
  }, children: dataSource.slice(0, showAllRoot || searchText.length > 0 ? dataSource.length : initialSQDsMaxItems).filter(o => searchText.length <= 0 || (searchText.length > 0 && o.name?.toLocaleLowerCase().includes(searchText.toLocaleLowerCase())) || o.description?.toLocaleLowerCase().includes(searchText.toLocaleLowerCase())).map((sqd, index) => {
189
182
  const isCurrent = selectedItem?.id == sqd.id;
190
- return (_jsxs(StyledSqdItem, { id: `sqd-item-${sqd.id}`, "$isMobile": isMobile, onClick: () => {
183
+ return (_jsx(StyledSqdItem, { "$isMobile": isMobile, onClick: () => {
191
184
  setSelectedItem(sqd);
192
185
  onItemClick?.(sqd);
193
- }, children: [_jsxs(StyledDivHorizontal, { style: { alignItems: 'center', gap: 8, width: '100%' }, children: [!isMobile && (_jsx("span", { className: "info-icon", style: {
194
- marginRight: 4,
195
- display: 'flex',
196
- alignItems: 'center'
197
- }, children: _jsx(TMTooltip, { content: getTooltipBySqd(sqd), children: _jsx(IconInfo, { color: TMColors.primaryColor }) }) })), _jsxs("div", { style: {
198
- flex: 1,
199
- display: 'flex',
200
- alignItems: 'center',
201
- justifyContent: 'center',
202
- minWidth: 0
203
- }, children: [_jsx("p", { style: {
204
- fontSize: '1rem',
205
- fontWeight: sqd.id === 1 ? 600 : 'normal',
206
- whiteSpace: 'nowrap',
207
- overflow: 'hidden',
208
- textOverflow: 'ellipsis',
209
- color: TMColors.primaryColor,
210
- paddingRight: '15px'
211
- }, children: sqd.name }), manageDefault && sqd.isDefault == 1 && _jsx(IconStar, { fontSize: 16, color: 'rgb(248, 215, 117)' })] }), _jsx("span", { style: {
212
- width: 24,
213
- height: 24,
214
- borderRadius: 24,
215
- display: 'flex',
216
- alignItems: 'center',
217
- justifyContent: 'center',
218
- fontSize: '1rem',
219
- fontWeight: 'bold',
220
- marginLeft: 8,
221
- visibility: isCurrent ? 'visible' : 'hidden'
222
- }, children: _jsx(IconApply, { fontSize: 24, color: 'green' }) })] }), _jsx(SavedQueryContexMenu, { sqd: sqd, manageDefault: manageDefault, isMobile: isMobile, setInfoSQD: setInfoSQD, setDefaultAsync: () => setDefaultSQDAsync(sqd), deleteAsync: () => deleteSQDAsync(sqd), favManageAsync: () => favManageSQDAsync(sqd) })] }, sqd.id));
186
+ }, onContextMenu: (e) => {
187
+ e.preventDefault();
188
+ e.stopPropagation();
189
+ setContextMenuState({
190
+ visible: true,
191
+ position: { x: e.clientX, y: e.clientY },
192
+ sqd: sqd
193
+ });
194
+ }, children: _jsxs(StyledDivHorizontal, { style: { alignItems: 'center', gap: 8, width: '100%' }, children: [!isMobile && (_jsx("span", { className: "info-icon", style: {
195
+ marginRight: 4,
196
+ display: 'flex',
197
+ alignItems: 'center'
198
+ }, children: _jsx(TMTooltip, { content: getTooltipBySqd(sqd), children: _jsx(IconInfo, { color: TMColors.primaryColor }) }) })), _jsxs("div", { style: {
199
+ flex: 1,
200
+ display: 'flex',
201
+ alignItems: 'center',
202
+ justifyContent: 'center',
203
+ minWidth: 0
204
+ }, children: [_jsx("p", { style: {
205
+ fontSize: '1rem',
206
+ fontWeight: sqd.id === 1 ? 600 : 'normal',
207
+ whiteSpace: 'nowrap',
208
+ overflow: 'hidden',
209
+ textOverflow: 'ellipsis',
210
+ color: TMColors.primaryColor,
211
+ paddingRight: '15px'
212
+ }, children: sqd.name }), manageDefault && sqd.isDefault == 1 && _jsx(IconStar, { fontSize: 16, color: 'rgb(248, 215, 117)' })] }), _jsx("span", { style: {
213
+ width: 24,
214
+ height: 24,
215
+ borderRadius: 24,
216
+ display: 'flex',
217
+ alignItems: 'center',
218
+ justifyContent: 'center',
219
+ fontSize: '1rem',
220
+ fontWeight: 'bold',
221
+ marginLeft: 8,
222
+ visibility: isCurrent ? 'visible' : 'hidden'
223
+ }, children: _jsx(IconApply, { fontSize: 24, color: 'green' }) })] }) }, sqd.id));
223
224
  }) }), dataSource.length > initialSQDsMaxItems && searchText.length <= 0 &&
224
- _jsx("div", { style: { display: 'flex', justifyContent: 'flex-end', padding: '10px', position: 'relative' }, children: _jsx(TMShowAllOrMaxItemsButton, { showAll: showAllRoot, dataSourceLength: dataSource.length, onClick: () => { setShowAllRoot(!showAllRoot); } }) }), _jsxs(StyledOffCanvasPanel, { ref: panelRef, "$isOpen": isMobile && infoSQD !== undefined, children: [_jsxs(StyledDivHorizontal, { style: { gap: 10, padding: '10px 8px', width: '100%', alignItems: 'center' }, children: [_jsx("p", { style: { fontSize: '1.1rem', fontWeight: 'bold' }, children: `${SDK_Localizator.SavedQuery} - ${SDKUI_Localizator.About}` }), _jsx(IconCloseOutline, { style: { marginLeft: 'auto', cursor: 'pointer' }, onClick: () => setInfoSQD(undefined) })] }), getTooltipBySqd(infoSQD)] })] }));
225
+ _jsx("div", { style: { display: 'flex', justifyContent: 'flex-end', padding: '10px', position: 'relative' }, children: _jsx(TMShowAllOrMaxItemsButton, { showAll: showAllRoot, dataSourceLength: dataSource.length, onClick: () => { setShowAllRoot(!showAllRoot); } }) }), contextMenuState.sqd && (_jsx(TMContextMenu, { items: getContextMenuItems(contextMenuState.sqd, manageDefault, isMobile, deleteSQDAsync, setDefaultSQDAsync, favManageSQDAsync, setInfoSQD), externalControl: {
226
+ visible: contextMenuState.visible,
227
+ position: contextMenuState.position,
228
+ onClose: () => setContextMenuState(prev => ({ ...prev, visible: false, sqd: null }))
229
+ } })), _jsxs(StyledOffCanvasPanel, { ref: panelRef, "$isOpen": isMobile && infoSQD !== undefined, children: [_jsxs(StyledDivHorizontal, { style: { gap: 10, padding: '10px 8px', width: '100%', alignItems: 'center' }, children: [_jsx("p", { style: { fontSize: '1.1rem', fontWeight: 'bold' }, children: `${SDK_Localizator.SavedQuery} - ${SDKUI_Localizator.About}` }), _jsx(IconCloseOutline, { style: { marginLeft: 'auto', cursor: 'pointer' }, onClick: () => setInfoSQD(undefined) })] }), getTooltipBySqd(infoSQD)] })] }));
225
230
  });
226
231
  export default TMSavedQuerySelector;
@@ -348,6 +348,7 @@ export declare class SDKUI_Localizator {
348
348
  static get Login(): string;
349
349
  static get LogDelete(): "Löschen der Logik" | "Logical delete" | "Cancelación lógica" | "Suppression logique" | "Lógica de cancelamento" | "Cancellazione logica";
350
350
  static get Logout(): "Abmelden" | "Logout" | "Cerrar sesión" | "Déconnexion" | "Sair" | "Esci";
351
+ static get LogScreenFolder(): "Ordner für Screenshot-Protokolle" | "Log screenshot folder" | "Carpeta de registro de capturas de pantalla" | "Dossier de journal des captures d'écran" | "Pasta de log de capturas de tela" | "Cartella di log screenshot";
351
352
  static get Low(): "Niedrig" | "Low" | "Baja" | "Faible" | "Baixa" | "Bassa";
352
353
  static get MakeEditable(): "Bearbeitbar machen" | "Make editable" | "Hacer editable" | "Rendre modifiable" | "Faça editável" | "Rendi editabile";
353
354
  static get Mark(): "Markierung" | "Mark" | "Marca" | "Marque" | "Segno";
@@ -533,7 +534,7 @@ export declare class SDKUI_Localizator {
533
534
  static get ReplaceDocument(): "Dokument ersetzen" | "Replace Document" | "Reemplazar Documento" | "Remplacer le Document" | "Substituir Documento" | "Sostituisci Documento";
534
535
  static get Request(): string;
535
536
  static get RequestTo(): string;
536
- static get RequestType(): "Anforderungstyp" | "Request type" | "Tipo de solicitud" | "Type de demande" | "Tipo de requisição" | "Tipo richiesta";
537
+ static get SearchType(): "Suchtyp" | "Search type" | "Tipo de búsqueda" | "Type de recherche" | "Tipo de pesquisa" | "Tipo di ricerca";
537
538
  static get Required(): "Obligatorisch" | "Required" | "Obligatorio" | "Obbligatoire" | "Obrigatório" | "Obbligatorio";
538
539
  static get RequiredField(): "Erforderliches Feld" | "Required field" | "Campo obligatorio" | "Champ obligatoire" | "Campo obrigatório" | "Campo Obbligatorio";
539
540
  static get RequiredNOT(): "Nicht obligatorisch" | "Not mandatory" | "No obligatorio" | "Pas obligatoire" | "Não é obrigatório" | "Non obbligatorio";
@@ -630,6 +631,7 @@ export declare class SDKUI_Localizator {
630
631
  static get Statistics(): "Statistiken" | "Statistics" | "Estadística" | "Statistiques" | "Estatísticas" | "Statistiche";
631
632
  static get Status(): "Status" | "Estado" | "Statut" | "Stato";
632
633
  static get Subject(): "Betreff" | "Subject" | "Asunto" | "Objet" | "Assunto" | "Oggetto";
634
+ static get SubjectType(): "Betreff-Typ" | "Subject type" | "Tipo de asunto" | "Type de sujet" | "Tipo de assunto" | "Tipo soggetto";
633
635
  static get Summary(): "Zusammenfassung" | "Summary" | "Resumen" | "Résumé" | "Resumo" | "Riepilogo";
634
636
  static get SwitchUser(): "Benutzer wechseln" | "Switch user" | "Cambiar usuario" | "Changer d'utilisateur" | "Mudar de usuário" | "Cambia utente";
635
637
  static get TargetedSearch(): "Gezielte Suche" | "Targeted search" | "Búsqueda dirigida" | "Recherche ciblée" | "Pesquisa direcionada" | "Ricerca puntuale";
@@ -3446,6 +3446,16 @@ export class SDKUI_Localizator {
3446
3446
  default: return "Esci";
3447
3447
  }
3448
3448
  }
3449
+ static get LogScreenFolder() {
3450
+ switch (this._cultureID) {
3451
+ case CultureIDs.De_DE: return "Ordner für Screenshot-Protokolle";
3452
+ case CultureIDs.En_US: return "Log screenshot folder";
3453
+ case CultureIDs.Es_ES: return "Carpeta de registro de capturas de pantalla";
3454
+ case CultureIDs.Fr_FR: return "Dossier de journal des captures d'écran";
3455
+ case CultureIDs.Pt_PT: return "Pasta de log de capturas de tela";
3456
+ default: return "Cartella di log screenshot";
3457
+ }
3458
+ }
3449
3459
  static get Low() {
3450
3460
  switch (this._cultureID) {
3451
3461
  case CultureIDs.De_DE: return "Niedrig";
@@ -5301,14 +5311,14 @@ export class SDKUI_Localizator {
5301
5311
  default: return "Richiedi a";
5302
5312
  }
5303
5313
  }
5304
- static get RequestType() {
5314
+ static get SearchType() {
5305
5315
  switch (this._cultureID) {
5306
- case CultureIDs.De_DE: return "Anforderungstyp";
5307
- case CultureIDs.En_US: return "Request type";
5308
- case CultureIDs.Es_ES: return "Tipo de solicitud";
5309
- case CultureIDs.Fr_FR: return "Type de demande";
5310
- case CultureIDs.Pt_PT: return "Tipo de requisição";
5311
- default: return "Tipo richiesta";
5316
+ case CultureIDs.De_DE: return "Suchtyp";
5317
+ case CultureIDs.En_US: return "Search type";
5318
+ case CultureIDs.Es_ES: return "Tipo de búsqueda";
5319
+ case CultureIDs.Fr_FR: return "Type de recherche";
5320
+ case CultureIDs.Pt_PT: return "Tipo de pesquisa";
5321
+ default: return "Tipo di ricerca";
5312
5322
  }
5313
5323
  }
5314
5324
  static get Required() {
@@ -6272,6 +6282,16 @@ export class SDKUI_Localizator {
6272
6282
  default: return "Oggetto";
6273
6283
  }
6274
6284
  }
6285
+ static get SubjectType() {
6286
+ switch (this._cultureID) {
6287
+ case CultureIDs.De_DE: return "Betreff-Typ";
6288
+ case CultureIDs.En_US: return "Subject type";
6289
+ case CultureIDs.Es_ES: return "Tipo de asunto";
6290
+ case CultureIDs.Fr_FR: return "Type de sujet";
6291
+ case CultureIDs.Pt_PT: return "Tipo de assunto";
6292
+ default: return "Tipo soggetto";
6293
+ }
6294
+ }
6275
6295
  static get Summary() {
6276
6296
  switch (this._cultureID) {
6277
6297
  case CultureIDs.De_DE: return "Zusammenfassung";
@@ -667,7 +667,7 @@ export function versionAndBuildtypeInfo(module) {
667
667
  switch (module) {
668
668
  case moduleTypes.SDK:
669
669
  case moduleTypes.SDKUI:
670
- return moduleVersion(module).replace("-hotfix", "+hotfix");
670
+ return moduleVersion(module).replace("-hotfix.", "+hotfix").replace("-hotfix", "+hotfix");
671
671
  default:
672
672
  return moduleVersion(module);
673
673
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topconsultnpm/sdkui-react",
3
- "version": "6.20.0-dev1.53",
3
+ "version": "6.20.0-dev1.55",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1",