@topconsultnpm/sdkui-react 6.19.0-dev1.10

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 (682) hide show
  1. package/lib/assets/IconsS4t/add.svg +12 -0
  2. package/lib/assets/IconsS4t/aggiorna.svg +18 -0
  3. package/lib/assets/IconsS4t/bookmark.svg +42 -0
  4. package/lib/assets/IconsS4t/cancella.svg +15 -0
  5. package/lib/assets/IconsS4t/check-box.svg +19 -0
  6. package/lib/assets/IconsS4t/down-arrow-signBook.svg +40 -0
  7. package/lib/assets/IconsS4t/down.svg +28 -0
  8. package/lib/assets/IconsS4t/edit-file.svg +19 -0
  9. package/lib/assets/IconsS4t/edita.svg +32 -0
  10. package/lib/assets/IconsS4t/firma.svg +19 -0
  11. package/lib/assets/IconsS4t/icona_download.svg +16 -0
  12. package/lib/assets/IconsS4t/info.svg +51 -0
  13. package/lib/assets/IconsS4t/left.svg +20 -0
  14. package/lib/assets/IconsS4t/line.svg +40 -0
  15. package/lib/assets/IconsS4t/more.svg +19 -0
  16. package/lib/assets/IconsS4t/new-signature.svg +1 -0
  17. package/lib/assets/IconsS4t/plus.svg +23 -0
  18. package/lib/assets/IconsS4t/printer.svg +49 -0
  19. package/lib/assets/IconsS4t/radio-on-button.svg +25 -0
  20. package/lib/assets/IconsS4t/rectangle.svg +41 -0
  21. package/lib/assets/IconsS4t/redo.svg +19 -0
  22. package/lib/assets/IconsS4t/right-arrow-signBook-finish.svg +40 -0
  23. package/lib/assets/IconsS4t/right-arrow-signBook.svg +40 -0
  24. package/lib/assets/IconsS4t/right.svg +22 -0
  25. package/lib/assets/IconsS4t/searchbar.svg +21 -0
  26. package/lib/assets/IconsS4t/text-box.svg +36 -0
  27. package/lib/assets/IconsS4t/tick.svg +8 -0
  28. package/lib/assets/IconsS4t/trash-white.svg +11 -0
  29. package/lib/assets/IconsS4t/trash.svg +1 -0
  30. package/lib/assets/IconsS4t/undo.svg +19 -0
  31. package/lib/assets/IconsS4t/up.svg +32 -0
  32. package/lib/assets/IconsS4t/video-streaming.svg +2 -0
  33. package/lib/assets/IconsS4t/zoom-in.svg +58 -0
  34. package/lib/assets/IconsS4t/zoom-out.svg +56 -0
  35. package/lib/assets/ImageLibrary/arrow_001.png +0 -0
  36. package/lib/assets/ImageLibrary/arrow_002.png +0 -0
  37. package/lib/assets/ImageLibrary/arrow_003.png +0 -0
  38. package/lib/assets/ImageLibrary/arrow_004.png +0 -0
  39. package/lib/assets/ImageLibrary/arrow_005.png +0 -0
  40. package/lib/assets/ImageLibrary/arrow_006.png +0 -0
  41. package/lib/assets/ImageLibrary/arrow_007.png +0 -0
  42. package/lib/assets/ImageLibrary/arrow_008.png +0 -0
  43. package/lib/assets/ImageLibrary/arrow_009.png +0 -0
  44. package/lib/assets/ImageLibrary/arrow_010.png +0 -0
  45. package/lib/assets/ImageLibrary/arrow_011.png +0 -0
  46. package/lib/assets/ImageLibrary/arrow_012.png +0 -0
  47. package/lib/assets/ImageLibrary/book_001.png +0 -0
  48. package/lib/assets/ImageLibrary/book_002.png +0 -0
  49. package/lib/assets/ImageLibrary/book_003.png +0 -0
  50. package/lib/assets/ImageLibrary/book_004.png +0 -0
  51. package/lib/assets/ImageLibrary/book_005.png +0 -0
  52. package/lib/assets/ImageLibrary/book_006.png +0 -0
  53. package/lib/assets/ImageLibrary/book_007.png +0 -0
  54. package/lib/assets/ImageLibrary/clock_001.png +0 -0
  55. package/lib/assets/ImageLibrary/clock_002.png +0 -0
  56. package/lib/assets/ImageLibrary/clock_003.png +0 -0
  57. package/lib/assets/ImageLibrary/cube_001.png +0 -0
  58. package/lib/assets/ImageLibrary/cube_002.png +0 -0
  59. package/lib/assets/ImageLibrary/cube_003.png +0 -0
  60. package/lib/assets/ImageLibrary/dcmt_001.png +0 -0
  61. package/lib/assets/ImageLibrary/dcmt_002.png +0 -0
  62. package/lib/assets/ImageLibrary/dcmt_003.png +0 -0
  63. package/lib/assets/ImageLibrary/dcmt_004.png +0 -0
  64. package/lib/assets/ImageLibrary/dcmt_005.png +0 -0
  65. package/lib/assets/ImageLibrary/dcmt_006.png +0 -0
  66. package/lib/assets/ImageLibrary/dcmt_007.png +0 -0
  67. package/lib/assets/ImageLibrary/dcmt_008.png +0 -0
  68. package/lib/assets/ImageLibrary/emoticon_001.png +0 -0
  69. package/lib/assets/ImageLibrary/emoticon_002.png +0 -0
  70. package/lib/assets/ImageLibrary/emoticon_003.png +0 -0
  71. package/lib/assets/ImageLibrary/emoticon_004.png +0 -0
  72. package/lib/assets/ImageLibrary/fld_001.png +0 -0
  73. package/lib/assets/ImageLibrary/fld_002.png +0 -0
  74. package/lib/assets/ImageLibrary/fld_003.png +0 -0
  75. package/lib/assets/ImageLibrary/fld_004.png +0 -0
  76. package/lib/assets/ImageLibrary/fld_005.png +0 -0
  77. package/lib/assets/ImageLibrary/fld_006.png +0 -0
  78. package/lib/assets/ImageLibrary/fld_007.png +0 -0
  79. package/lib/assets/ImageLibrary/fld_008.png +0 -0
  80. package/lib/assets/ImageLibrary/fld_009.png +0 -0
  81. package/lib/assets/ImageLibrary/fld_010.png +0 -0
  82. package/lib/assets/ImageLibrary/fld_011.png +0 -0
  83. package/lib/assets/ImageLibrary/fld_012.png +0 -0
  84. package/lib/assets/ImageLibrary/fld_013.png +0 -0
  85. package/lib/assets/ImageLibrary/fld_014.png +0 -0
  86. package/lib/assets/ImageLibrary/fld_015.png +0 -0
  87. package/lib/assets/ImageLibrary/fld_016.png +0 -0
  88. package/lib/assets/ImageLibrary/fld_017.png +0 -0
  89. package/lib/assets/ImageLibrary/fld_018.png +0 -0
  90. package/lib/assets/ImageLibrary/fld_019.png +0 -0
  91. package/lib/assets/ImageLibrary/fld_020.png +0 -0
  92. package/lib/assets/ImageLibrary/fld_021.png +0 -0
  93. package/lib/assets/ImageLibrary/fld_022.png +0 -0
  94. package/lib/assets/ImageLibrary/fld_023.png +0 -0
  95. package/lib/assets/ImageLibrary/fld_024.png +0 -0
  96. package/lib/assets/ImageLibrary/fld_025.png +0 -0
  97. package/lib/assets/ImageLibrary/fld_026.png +0 -0
  98. package/lib/assets/ImageLibrary/fld_027.png +0 -0
  99. package/lib/assets/ImageLibrary/fld_028.png +0 -0
  100. package/lib/assets/ImageLibrary/fld_029.png +0 -0
  101. package/lib/assets/ImageLibrary/fld_030.png +0 -0
  102. package/lib/assets/ImageLibrary/fld_031.png +0 -0
  103. package/lib/assets/ImageLibrary/fld_032.png +0 -0
  104. package/lib/assets/ImageLibrary/fld_033.png +0 -0
  105. package/lib/assets/ImageLibrary/gen_001.png +0 -0
  106. package/lib/assets/ImageLibrary/gen_002.png +0 -0
  107. package/lib/assets/ImageLibrary/gen_003.png +0 -0
  108. package/lib/assets/ImageLibrary/gen_004.png +0 -0
  109. package/lib/assets/ImageLibrary/gen_005.png +0 -0
  110. package/lib/assets/ImageLibrary/gen_006.png +0 -0
  111. package/lib/assets/ImageLibrary/gen_007.png +0 -0
  112. package/lib/assets/ImageLibrary/gen_008.png +0 -0
  113. package/lib/assets/ImageLibrary/gen_009.png +0 -0
  114. package/lib/assets/ImageLibrary/gen_010.png +0 -0
  115. package/lib/assets/ImageLibrary/gen_011.png +0 -0
  116. package/lib/assets/ImageLibrary/gen_012.png +0 -0
  117. package/lib/assets/ImageLibrary/gen_013.png +0 -0
  118. package/lib/assets/ImageLibrary/gen_014.png +0 -0
  119. package/lib/assets/ImageLibrary/gen_015.png +0 -0
  120. package/lib/assets/ImageLibrary/gen_016.png +0 -0
  121. package/lib/assets/ImageLibrary/gen_017.png +0 -0
  122. package/lib/assets/ImageLibrary/gen_018.png +0 -0
  123. package/lib/assets/ImageLibrary/gen_019.png +0 -0
  124. package/lib/assets/ImageLibrary/gen_020.png +0 -0
  125. package/lib/assets/ImageLibrary/gen_021.png +0 -0
  126. package/lib/assets/ImageLibrary/gen_022.png +0 -0
  127. package/lib/assets/ImageLibrary/gen_023.png +0 -0
  128. package/lib/assets/ImageLibrary/gen_024.png +0 -0
  129. package/lib/assets/ImageLibrary/gen_025.png +0 -0
  130. package/lib/assets/ImageLibrary/gen_026.png +0 -0
  131. package/lib/assets/ImageLibrary/gen_027.png +0 -0
  132. package/lib/assets/ImageLibrary/gen_028.png +0 -0
  133. package/lib/assets/ImageLibrary/gen_029.png +0 -0
  134. package/lib/assets/ImageLibrary/gen_030.png +0 -0
  135. package/lib/assets/ImageLibrary/gen_031.png +0 -0
  136. package/lib/assets/ImageLibrary/gen_032.png +0 -0
  137. package/lib/assets/ImageLibrary/gen_033.png +0 -0
  138. package/lib/assets/ImageLibrary/gen_034.png +0 -0
  139. package/lib/assets/ImageLibrary/gen_035.png +0 -0
  140. package/lib/assets/ImageLibrary/gen_036.png +0 -0
  141. package/lib/assets/ImageLibrary/gen_037.png +0 -0
  142. package/lib/assets/ImageLibrary/gen_038.png +0 -0
  143. package/lib/assets/ImageLibrary/gen_039.png +0 -0
  144. package/lib/assets/ImageLibrary/gen_040.png +0 -0
  145. package/lib/assets/ImageLibrary/gen_041.png +0 -0
  146. package/lib/assets/ImageLibrary/gen_042.png +0 -0
  147. package/lib/assets/ImageLibrary/gen_043.png +0 -0
  148. package/lib/assets/ImageLibrary/gen_044.png +0 -0
  149. package/lib/assets/ImageLibrary/gen_045.png +0 -0
  150. package/lib/assets/ImageLibrary/gen_046.png +0 -0
  151. package/lib/assets/ImageLibrary/gen_047.png +0 -0
  152. package/lib/assets/ImageLibrary/gen_048.png +0 -0
  153. package/lib/assets/ImageLibrary/gen_049.png +0 -0
  154. package/lib/assets/ImageLibrary/gen_050.png +0 -0
  155. package/lib/assets/ImageLibrary/gen_051.png +0 -0
  156. package/lib/assets/ImageLibrary/gen_052.png +0 -0
  157. package/lib/assets/ImageLibrary/hand_001.png +0 -0
  158. package/lib/assets/ImageLibrary/hand_002.png +0 -0
  159. package/lib/assets/ImageLibrary/hand_003.png +0 -0
  160. package/lib/assets/ImageLibrary/hand_004.png +0 -0
  161. package/lib/assets/ImageLibrary/hand_005.png +0 -0
  162. package/lib/assets/ImageLibrary/hand_006.png +0 -0
  163. package/lib/assets/ImageLibrary/law_001.png +0 -0
  164. package/lib/assets/ImageLibrary/law_002.png +0 -0
  165. package/lib/assets/ImageLibrary/law_003.png +0 -0
  166. package/lib/assets/ImageLibrary/lock_001.png +0 -0
  167. package/lib/assets/ImageLibrary/lock_002.png +0 -0
  168. package/lib/assets/ImageLibrary/lock_003.png +0 -0
  169. package/lib/assets/ImageLibrary/mail_001.png +0 -0
  170. package/lib/assets/ImageLibrary/mail_002.png +0 -0
  171. package/lib/assets/ImageLibrary/mail_003.png +0 -0
  172. package/lib/assets/ImageLibrary/mail_004.png +0 -0
  173. package/lib/assets/ImageLibrary/mail_005.png +0 -0
  174. package/lib/assets/ImageLibrary/mail_006.png +0 -0
  175. package/lib/assets/ImageLibrary/mail_007.png +0 -0
  176. package/lib/assets/ImageLibrary/mail_008.png +0 -0
  177. package/lib/assets/ImageLibrary/mail_009.png +0 -0
  178. package/lib/assets/ImageLibrary/mail_010.png +0 -0
  179. package/lib/assets/ImageLibrary/mail_011.png +0 -0
  180. package/lib/assets/ImageLibrary/mail_012.png +0 -0
  181. package/lib/assets/ImageLibrary/mail_013.png +0 -0
  182. package/lib/assets/ImageLibrary/mail_014.png +0 -0
  183. package/lib/assets/ImageLibrary/mail_015.png +0 -0
  184. package/lib/assets/ImageLibrary/net_001.png +0 -0
  185. package/lib/assets/ImageLibrary/net_002.png +0 -0
  186. package/lib/assets/ImageLibrary/net_003.png +0 -0
  187. package/lib/assets/ImageLibrary/net_004.png +0 -0
  188. package/lib/assets/ImageLibrary/nmbr_001.png +0 -0
  189. package/lib/assets/ImageLibrary/nmbr_002.png +0 -0
  190. package/lib/assets/ImageLibrary/nmbr_003.png +0 -0
  191. package/lib/assets/ImageLibrary/nmbr_004.png +0 -0
  192. package/lib/assets/ImageLibrary/nmbr_005.png +0 -0
  193. package/lib/assets/ImageLibrary/nmbr_006.png +0 -0
  194. package/lib/assets/ImageLibrary/nmbr_007.png +0 -0
  195. package/lib/assets/ImageLibrary/nmbr_008.png +0 -0
  196. package/lib/assets/ImageLibrary/nmbr_009.png +0 -0
  197. package/lib/assets/ImageLibrary/note_001.png +0 -0
  198. package/lib/assets/ImageLibrary/note_002.png +0 -0
  199. package/lib/assets/ImageLibrary/note_003.png +0 -0
  200. package/lib/assets/ImageLibrary/note_004.png +0 -0
  201. package/lib/assets/ImageLibrary/note_005.png +0 -0
  202. package/lib/assets/ImageLibrary/note_006.png +0 -0
  203. package/lib/assets/ImageLibrary/note_007.png +0 -0
  204. package/lib/assets/ImageLibrary/note_008.png +0 -0
  205. package/lib/assets/ImageLibrary/note_009.png +0 -0
  206. package/lib/assets/ImageLibrary/note_010.png +0 -0
  207. package/lib/assets/ImageLibrary/note_011.png +0 -0
  208. package/lib/assets/ImageLibrary/note_012.png +0 -0
  209. package/lib/assets/ImageLibrary/note_013.png +0 -0
  210. package/lib/assets/ImageLibrary/note_014.png +0 -0
  211. package/lib/assets/ImageLibrary/note_015.png +0 -0
  212. package/lib/assets/ImageLibrary/note_016.png +0 -0
  213. package/lib/assets/ImageLibrary/run_001.png +0 -0
  214. package/lib/assets/ImageLibrary/run_002.png +0 -0
  215. package/lib/assets/ImageLibrary/run_003.png +0 -0
  216. package/lib/assets/ImageLibrary/sem_001.png +0 -0
  217. package/lib/assets/ImageLibrary/sem_002.png +0 -0
  218. package/lib/assets/ImageLibrary/sem_003.png +0 -0
  219. package/lib/assets/ImageLibrary/sem_004.png +0 -0
  220. package/lib/assets/ImageLibrary/sem_005.png +0 -0
  221. package/lib/assets/ImageLibrary/star_001.png +0 -0
  222. package/lib/assets/ImageLibrary/star_002.png +0 -0
  223. package/lib/assets/ImageLibrary/star_003.png +0 -0
  224. package/lib/assets/ImageLibrary/star_004.png +0 -0
  225. package/lib/assets/ImageLibrary/star_005.png +0 -0
  226. package/lib/assets/ImageLibrary/star_006.png +0 -0
  227. package/lib/assets/ImageLibrary/state_001.png +0 -0
  228. package/lib/assets/ImageLibrary/state_002.png +0 -0
  229. package/lib/assets/ImageLibrary/state_003.png +0 -0
  230. package/lib/assets/ImageLibrary/state_004.png +0 -0
  231. package/lib/assets/ImageLibrary/state_005.png +0 -0
  232. package/lib/assets/ImageLibrary/study_001.png +0 -0
  233. package/lib/assets/ImageLibrary/study_002.png +0 -0
  234. package/lib/assets/ImageLibrary/user_001.png +0 -0
  235. package/lib/assets/ImageLibrary/user_002.png +0 -0
  236. package/lib/assets/ImageLibrary/user_003.png +0 -0
  237. package/lib/assets/ImageLibrary/user_004.png +0 -0
  238. package/lib/assets/ImageLibrary/user_005.png +0 -0
  239. package/lib/assets/ImageLibrary/user_006.png +0 -0
  240. package/lib/assets/ImageLibrary/user_007.png +0 -0
  241. package/lib/assets/ImageLibrary/user_008.png +0 -0
  242. package/lib/assets/ImageLibrary/user_009.png +0 -0
  243. package/lib/assets/ImageLibrary/user_010.png +0 -0
  244. package/lib/assets/ImageLibrary/user_011.png +0 -0
  245. package/lib/assets/ImageLibrary/user_012.png +0 -0
  246. package/lib/assets/ImageLibrary/user_013.png +0 -0
  247. package/lib/assets/ImageLibrary/user_014.png +0 -0
  248. package/lib/assets/ImageLibrary/user_015.png +0 -0
  249. package/lib/assets/ImageLibrary/user_016.png +0 -0
  250. package/lib/assets/ImageLibrary/user_017.png +0 -0
  251. package/lib/assets/ImageLibrary/user_018.png +0 -0
  252. package/lib/assets/ImageLibrary/user_019.png +0 -0
  253. package/lib/assets/ImageLibrary/user_020.png +0 -0
  254. package/lib/assets/ImageLibrary/user_021.png +0 -0
  255. package/lib/assets/ImageLibrary/user_022.png +0 -0
  256. package/lib/assets/ImageLibrary/user_023.png +0 -0
  257. package/lib/assets/ImageLibrary/vehicle_001.png +0 -0
  258. package/lib/assets/ImageLibrary/vehicle_002.png +0 -0
  259. package/lib/assets/ImageLibrary/vehicle_003.png +0 -0
  260. package/lib/assets/ImageLibrary/vehicle_004.png +0 -0
  261. package/lib/assets/ImageLibrary/vehicle_005.png +0 -0
  262. package/lib/assets/ImageLibrary/vehicle_006.png +0 -0
  263. package/lib/assets/ImageLibrary/vehicle_007.png +0 -0
  264. package/lib/assets/ImageLibrary/vehicle_008.png +0 -0
  265. package/lib/assets/Toppy-generico.png +0 -0
  266. package/lib/assets/france.svg +1 -0
  267. package/lib/assets/german.svg +1 -0
  268. package/lib/assets/icomoon.eot +0 -0
  269. package/lib/assets/icomoon.svg +97 -0
  270. package/lib/assets/icomoon.ttf +0 -0
  271. package/lib/assets/icomoon.woff +0 -0
  272. package/lib/assets/italy.svg +16 -0
  273. package/lib/assets/loading.png +0 -0
  274. package/lib/assets/login-bg.png +0 -0
  275. package/lib/assets/multipleSelectionManager.jpg +0 -0
  276. package/lib/assets/portugal.svg +1 -0
  277. package/lib/assets/six.png +0 -0
  278. package/lib/assets/six.svg +4 -0
  279. package/lib/assets/spain.svg +1 -0
  280. package/lib/assets/thumbnails/dicom.png +0 -0
  281. package/lib/assets/thumbnails/doc.png +0 -0
  282. package/lib/assets/thumbnails/docx.png +0 -0
  283. package/lib/assets/thumbnails/dwg.png +0 -0
  284. package/lib/assets/thumbnails/email.png +0 -0
  285. package/lib/assets/thumbnails/exe.png +0 -0
  286. package/lib/assets/thumbnails/folder.png +0 -0
  287. package/lib/assets/thumbnails/html.png +0 -0
  288. package/lib/assets/thumbnails/image.png +0 -0
  289. package/lib/assets/thumbnails/index.d.ts +19 -0
  290. package/lib/assets/thumbnails/index.js +19 -0
  291. package/lib/assets/thumbnails/index.ts +39 -0
  292. package/lib/assets/thumbnails/mp4.png +0 -0
  293. package/lib/assets/thumbnails/other.png +0 -0
  294. package/lib/assets/thumbnails/p7m.png +0 -0
  295. package/lib/assets/thumbnails/pdf.png +0 -0
  296. package/lib/assets/thumbnails/ppt.png +0 -0
  297. package/lib/assets/thumbnails/slddrw.png +0 -0
  298. package/lib/assets/thumbnails/txt.png +0 -0
  299. package/lib/assets/thumbnails/xls.png +0 -0
  300. package/lib/assets/thumbnails/xml.png +0 -0
  301. package/lib/assets/thumbnails/zip.png +0 -0
  302. package/lib/assets/topmedia-six.svg +66 -0
  303. package/lib/assets/topmeida-six-bianco.svg +66 -0
  304. package/lib/assets/united-kingdom.svg +1 -0
  305. package/lib/components/base/Styled.d.ts +62 -0
  306. package/lib/components/base/Styled.js +297 -0
  307. package/lib/components/base/TMAccordion.d.ts +12 -0
  308. package/lib/components/base/TMAccordion.js +62 -0
  309. package/lib/components/base/TMAlert.d.ts +73 -0
  310. package/lib/components/base/TMAlert.js +77 -0
  311. package/lib/components/base/TMAreaManager.d.ts +25 -0
  312. package/lib/components/base/TMAreaManager.js +733 -0
  313. package/lib/components/base/TMButton.d.ts +21 -0
  314. package/lib/components/base/TMButton.js +174 -0
  315. package/lib/components/base/TMClosableList.d.ts +10 -0
  316. package/lib/components/base/TMClosableList.js +70 -0
  317. package/lib/components/base/TMConfirm.d.ts +13 -0
  318. package/lib/components/base/TMConfirm.js +119 -0
  319. package/lib/components/base/TMContextMenu.d.ts +25 -0
  320. package/lib/components/base/TMContextMenu.js +109 -0
  321. package/lib/components/base/TMContextMenuOLD.d.ts +26 -0
  322. package/lib/components/base/TMContextMenuOLD.js +56 -0
  323. package/lib/components/base/TMCounterBar.d.ts +10 -0
  324. package/lib/components/base/TMCounterBar.js +43 -0
  325. package/lib/components/base/TMCounterContainer.d.ts +23 -0
  326. package/lib/components/base/TMCounterContainer.js +58 -0
  327. package/lib/components/base/TMDataGrid.d.ts +56 -0
  328. package/lib/components/base/TMDataGrid.js +237 -0
  329. package/lib/components/base/TMDataGridExportForm.d.ts +15 -0
  330. package/lib/components/base/TMDataGridExportForm.js +209 -0
  331. package/lib/components/base/TMDeviceProvider.d.ts +15 -0
  332. package/lib/components/base/TMDeviceProvider.js +41 -0
  333. package/lib/components/base/TMDropDownMenu.d.ts +23 -0
  334. package/lib/components/base/TMDropDownMenu.js +45 -0
  335. package/lib/components/base/TMEditorBase.d.ts +39 -0
  336. package/lib/components/base/TMEditorBase.js +1 -0
  337. package/lib/components/base/TMFileManager.d.ts +45 -0
  338. package/lib/components/base/TMFileManager.js +224 -0
  339. package/lib/components/base/TMFileManagerDataGridView.d.ts +14 -0
  340. package/lib/components/base/TMFileManagerDataGridView.js +89 -0
  341. package/lib/components/base/TMFileManagerThumbnailItems.d.ts +16 -0
  342. package/lib/components/base/TMFileManagerThumbnailItems.js +138 -0
  343. package/lib/components/base/TMFileManagerThumbnailsView.d.ts +17 -0
  344. package/lib/components/base/TMFileManagerThumbnailsView.js +46 -0
  345. package/lib/components/base/TMFileManagerUtils.d.ts +78 -0
  346. package/lib/components/base/TMFileManagerUtils.js +207 -0
  347. package/lib/components/base/TMFloatingToolbar.d.ts +9 -0
  348. package/lib/components/base/TMFloatingToolbar.js +101 -0
  349. package/lib/components/base/TMLayout.d.ts +54 -0
  350. package/lib/components/base/TMLayout.js +201 -0
  351. package/lib/components/base/TMList.d.ts +9 -0
  352. package/lib/components/base/TMList.js +54 -0
  353. package/lib/components/base/TMListView.d.ts +42 -0
  354. package/lib/components/base/TMListView.js +387 -0
  355. package/lib/components/base/TMModal.d.ts +16 -0
  356. package/lib/components/base/TMModal.js +70 -0
  357. package/lib/components/base/TMPanel.d.ts +32 -0
  358. package/lib/components/base/TMPanel.js +181 -0
  359. package/lib/components/base/TMPopUp.d.ts +33 -0
  360. package/lib/components/base/TMPopUp.js +280 -0
  361. package/lib/components/base/TMProgressBar.d.ts +11 -0
  362. package/lib/components/base/TMProgressBar.js +32 -0
  363. package/lib/components/base/TMResizableMenu.d.ts +20 -0
  364. package/lib/components/base/TMResizableMenu.js +98 -0
  365. package/lib/components/base/TMRightSidebar.d.ts +19 -0
  366. package/lib/components/base/TMRightSidebar.js +80 -0
  367. package/lib/components/base/TMShowAllOrMaxItemsButton.d.ts +8 -0
  368. package/lib/components/base/TMShowAllOrMaxItemsButton.js +20 -0
  369. package/lib/components/base/TMSpinner.d.ts +14 -0
  370. package/lib/components/base/TMSpinner.js +160 -0
  371. package/lib/components/base/TMTab.d.ts +20 -0
  372. package/lib/components/base/TMTab.js +42 -0
  373. package/lib/components/base/TMToggleButton.d.ts +10 -0
  374. package/lib/components/base/TMToggleButton.js +58 -0
  375. package/lib/components/base/TMToolbarCard.d.ts +19 -0
  376. package/lib/components/base/TMToolbarCard.js +51 -0
  377. package/lib/components/base/TMTooltip.d.ts +14 -0
  378. package/lib/components/base/TMTooltip.js +20 -0
  379. package/lib/components/base/TMTreeView.d.ts +32 -0
  380. package/lib/components/base/TMTreeView.js +355 -0
  381. package/lib/components/base/TMUserAvatar.d.ts +8 -0
  382. package/lib/components/base/TMUserAvatar.js +34 -0
  383. package/lib/components/base/TMVilViewer.d.ts +5 -0
  384. package/lib/components/base/TMVilViewer.js +22 -0
  385. package/lib/components/base/TMWaitPanel.d.ts +32 -0
  386. package/lib/components/base/TMWaitPanel.js +44 -0
  387. package/lib/components/choosers/TMCultureIDPicker.d.ts +9 -0
  388. package/lib/components/choosers/TMCultureIDPicker.js +72 -0
  389. package/lib/components/choosers/TMDataListItemChooser.d.ts +17 -0
  390. package/lib/components/choosers/TMDataListItemChooser.js +49 -0
  391. package/lib/components/choosers/TMDataListItemPicker.d.ts +9 -0
  392. package/lib/components/choosers/TMDataListItemPicker.js +96 -0
  393. package/lib/components/choosers/TMDcmtTypeChooser.d.ts +25 -0
  394. package/lib/components/choosers/TMDcmtTypeChooser.js +61 -0
  395. package/lib/components/choosers/TMDiskChooser.d.ts +10 -0
  396. package/lib/components/choosers/TMDiskChooser.js +41 -0
  397. package/lib/components/choosers/TMDistinctValues.d.ts +21 -0
  398. package/lib/components/choosers/TMDistinctValues.js +140 -0
  399. package/lib/components/choosers/TMDynDataListItemChooser.d.ts +40 -0
  400. package/lib/components/choosers/TMDynDataListItemChooser.js +159 -0
  401. package/lib/components/choosers/TMGroupChooser.d.ts +7 -0
  402. package/lib/components/choosers/TMGroupChooser.js +37 -0
  403. package/lib/components/choosers/TMInvoiceRetrieveFormats.d.ts +4 -0
  404. package/lib/components/choosers/TMInvoiceRetrieveFormats.js +22 -0
  405. package/lib/components/choosers/TMMetadataChooser.d.ts +51 -0
  406. package/lib/components/choosers/TMMetadataChooser.js +134 -0
  407. package/lib/components/choosers/TMOrderRetrieveFormats.d.ts +4 -0
  408. package/lib/components/choosers/TMOrderRetrieveFormats.js +22 -0
  409. package/lib/components/choosers/TMPathChooser.d.ts +12 -0
  410. package/lib/components/choosers/TMPathChooser.js +147 -0
  411. package/lib/components/choosers/TMRelationChooser.d.ts +31 -0
  412. package/lib/components/choosers/TMRelationChooser.js +94 -0
  413. package/lib/components/choosers/TMUserChooser.d.ts +40 -0
  414. package/lib/components/choosers/TMUserChooser.js +141 -0
  415. package/lib/components/editors/TMCheckBox.d.ts +9 -0
  416. package/lib/components/editors/TMCheckBox.js +90 -0
  417. package/lib/components/editors/TMDateBox.d.ts +17 -0
  418. package/lib/components/editors/TMDateBox.js +75 -0
  419. package/lib/components/editors/TMDropDown.d.ts +10 -0
  420. package/lib/components/editors/TMDropDown.js +62 -0
  421. package/lib/components/editors/TMEditorStyled.d.ts +41 -0
  422. package/lib/components/editors/TMEditorStyled.js +90 -0
  423. package/lib/components/editors/TMFormulaEditor.d.ts +49 -0
  424. package/lib/components/editors/TMFormulaEditor.js +727 -0
  425. package/lib/components/editors/TMHtmlContentDisplay.d.ts +7 -0
  426. package/lib/components/editors/TMHtmlContentDisplay.js +78 -0
  427. package/lib/components/editors/TMHtmlEditor.d.ts +33 -0
  428. package/lib/components/editors/TMHtmlEditor.js +143 -0
  429. package/lib/components/editors/TMLocalizedTextBox.d.ts +19 -0
  430. package/lib/components/editors/TMLocalizedTextBox.js +125 -0
  431. package/lib/components/editors/TMMetadataEditor.d.ts +29 -0
  432. package/lib/components/editors/TMMetadataEditor.js +140 -0
  433. package/lib/components/editors/TMMetadataValues.d.ts +46 -0
  434. package/lib/components/editors/TMMetadataValues.js +480 -0
  435. package/lib/components/editors/TMRadioButton.d.ts +10 -0
  436. package/lib/components/editors/TMRadioButton.js +57 -0
  437. package/lib/components/editors/TMSummary.d.ts +20 -0
  438. package/lib/components/editors/TMSummary.js +92 -0
  439. package/lib/components/editors/TMTextArea.d.ts +17 -0
  440. package/lib/components/editors/TMTextArea.js +155 -0
  441. package/lib/components/editors/TMTextBox.d.ts +20 -0
  442. package/lib/components/editors/TMTextBox.js +249 -0
  443. package/lib/components/editors/TMTextExpression.d.ts +25 -0
  444. package/lib/components/editors/TMTextExpression.js +174 -0
  445. package/lib/components/editors/TMTreeDropDown.d.ts +18 -0
  446. package/lib/components/editors/TMTreeDropDown.js +66 -0
  447. package/lib/components/features/archive/TMArchive.d.ts +19 -0
  448. package/lib/components/features/archive/TMArchive.js +162 -0
  449. package/lib/components/features/assistant/ToppyHelpCenter.d.ts +12 -0
  450. package/lib/components/features/assistant/ToppyHelpCenter.js +173 -0
  451. package/lib/components/features/blog/TMBlogCommentForm.d.ts +17 -0
  452. package/lib/components/features/blog/TMBlogCommentForm.js +308 -0
  453. package/lib/components/features/documents/TMBatchUpdateForm.d.ts +17 -0
  454. package/lib/components/features/documents/TMBatchUpdateForm.js +159 -0
  455. package/lib/components/features/documents/TMDcmtBlog.d.ts +8 -0
  456. package/lib/components/features/documents/TMDcmtBlog.js +77 -0
  457. package/lib/components/features/documents/TMDcmtForm.d.ts +50 -0
  458. package/lib/components/features/documents/TMDcmtForm.js +1083 -0
  459. package/lib/components/features/documents/TMDcmtIcon.d.ts +18 -0
  460. package/lib/components/features/documents/TMDcmtIcon.js +93 -0
  461. package/lib/components/features/documents/TMDcmtPreview.d.ts +31 -0
  462. package/lib/components/features/documents/TMDcmtPreview.js +446 -0
  463. package/lib/components/features/documents/TMDragDropOverlay.d.ts +6 -0
  464. package/lib/components/features/documents/TMDragDropOverlay.js +96 -0
  465. package/lib/components/features/documents/TMFileUploader.d.ts +14 -0
  466. package/lib/components/features/documents/TMFileUploader.js +115 -0
  467. package/lib/components/features/documents/TMMasterDetailDcmts.d.ts +19 -0
  468. package/lib/components/features/documents/TMMasterDetailDcmts.js +288 -0
  469. package/lib/components/features/documents/TMRelationViewer.d.ts +71 -0
  470. package/lib/components/features/documents/TMRelationViewer.js +573 -0
  471. package/lib/components/features/search/TMSavedQueryForm.d.ts +9 -0
  472. package/lib/components/features/search/TMSavedQueryForm.js +41 -0
  473. package/lib/components/features/search/TMSavedQuerySelector.d.ts +16 -0
  474. package/lib/components/features/search/TMSavedQuerySelector.js +226 -0
  475. package/lib/components/features/search/TMSearch.d.ts +31 -0
  476. package/lib/components/features/search/TMSearch.js +244 -0
  477. package/lib/components/features/search/TMSearchQueryEditor.d.ts +15 -0
  478. package/lib/components/features/search/TMSearchQueryEditor.js +367 -0
  479. package/lib/components/features/search/TMSearchQueryPanel.d.ts +29 -0
  480. package/lib/components/features/search/TMSearchQueryPanel.js +426 -0
  481. package/lib/components/features/search/TMSearchResult.d.ts +44 -0
  482. package/lib/components/features/search/TMSearchResult.js +1293 -0
  483. package/lib/components/features/search/TMSearchResultFloatingActionButton.d.ts +16 -0
  484. package/lib/components/features/search/TMSearchResultFloatingActionButton.js +50 -0
  485. package/lib/components/features/search/TMSearchResultsMenuItems.d.ts +10 -0
  486. package/lib/components/features/search/TMSearchResultsMenuItems.js +654 -0
  487. package/lib/components/features/search/TMTreeSelector.d.ts +12 -0
  488. package/lib/components/features/search/TMTreeSelector.js +270 -0
  489. package/lib/components/features/wg/TMWGsCopyMoveForm.d.ts +39 -0
  490. package/lib/components/features/wg/TMWGsCopyMoveForm.js +439 -0
  491. package/lib/components/features/workflow/TMWorkflowPopup.d.ts +40 -0
  492. package/lib/components/features/workflow/TMWorkflowPopup.js +273 -0
  493. package/lib/components/features/workflow/diagram/ConnectionComponent.d.ts +14 -0
  494. package/lib/components/features/workflow/diagram/ConnectionComponent.js +90 -0
  495. package/lib/components/features/workflow/diagram/ConnectionForm.d.ts +9 -0
  496. package/lib/components/features/workflow/diagram/ConnectionForm.js +73 -0
  497. package/lib/components/features/workflow/diagram/DiagramItemComponent.d.ts +18 -0
  498. package/lib/components/features/workflow/diagram/DiagramItemComponent.js +264 -0
  499. package/lib/components/features/workflow/diagram/DiagramItemForm.d.ts +10 -0
  500. package/lib/components/features/workflow/diagram/DiagramItemForm.js +681 -0
  501. package/lib/components/features/workflow/diagram/DiagramItemSvgContent.d.ts +12 -0
  502. package/lib/components/features/workflow/diagram/DiagramItemSvgContent.js +97 -0
  503. package/lib/components/features/workflow/diagram/RecipientList.d.ts +27 -0
  504. package/lib/components/features/workflow/diagram/RecipientList.js +203 -0
  505. package/lib/components/features/workflow/diagram/WFDiagram.d.ts +9 -0
  506. package/lib/components/features/workflow/diagram/WFDiagram.js +1666 -0
  507. package/lib/components/features/workflow/diagram/WorkitemRecipientsEditor.d.ts +18 -0
  508. package/lib/components/features/workflow/diagram/WorkitemRecipientsEditor.js +97 -0
  509. package/lib/components/features/workflow/diagram/interfaces.d.ts +126 -0
  510. package/lib/components/features/workflow/diagram/interfaces.js +26 -0
  511. package/lib/components/features/workflow/diagram/metadataParser.d.ts +14 -0
  512. package/lib/components/features/workflow/diagram/metadataParser.js +54 -0
  513. package/lib/components/features/workflow/diagram/queryDescriptorParser.d.ts +3 -0
  514. package/lib/components/features/workflow/diagram/queryDescriptorParser.js +188 -0
  515. package/lib/components/features/workflow/diagram/workflowHelpers.d.ts +122 -0
  516. package/lib/components/features/workflow/diagram/workflowHelpers.js +488 -0
  517. package/lib/components/features/workflow/diagram/xmlParser.d.ts +10 -0
  518. package/lib/components/features/workflow/diagram/xmlParser.js +490 -0
  519. package/lib/components/filesystem/ProgressBar.d.ts +7 -0
  520. package/lib/components/filesystem/ProgressBar.js +25 -0
  521. package/lib/components/forms/Login/ChangePassword.d.ts +9 -0
  522. package/lib/components/forms/Login/ChangePassword.js +22 -0
  523. package/lib/components/forms/Login/ChangePasswordInputs.d.ts +14 -0
  524. package/lib/components/forms/Login/ChangePasswordInputs.js +80 -0
  525. package/lib/components/forms/Login/Chooser.d.ts +28 -0
  526. package/lib/components/forms/Login/Chooser.js +145 -0
  527. package/lib/components/forms/Login/LOGINLocalizator.d.ts +29 -0
  528. package/lib/components/forms/Login/LOGINLocalizator.js +247 -0
  529. package/lib/components/forms/Login/LoginValidatorService.d.ts +50 -0
  530. package/lib/components/forms/Login/LoginValidatorService.js +162 -0
  531. package/lib/components/forms/Login/Menu.d.ts +10 -0
  532. package/lib/components/forms/Login/Menu.js +48 -0
  533. package/lib/components/forms/Login/OTPReader.d.ts +14 -0
  534. package/lib/components/forms/Login/OTPReader.js +90 -0
  535. package/lib/components/forms/Login/PasswordStrengthChecker.d.ts +7 -0
  536. package/lib/components/forms/Login/PasswordStrengthChecker.js +45 -0
  537. package/lib/components/forms/Login/RapidAccessLogin.d.ts +25 -0
  538. package/lib/components/forms/Login/RapidAccessLogin.js +310 -0
  539. package/lib/components/forms/Login/RecoverPasswordFlow.d.ts +11 -0
  540. package/lib/components/forms/Login/RecoverPasswordFlow.js +111 -0
  541. package/lib/components/forms/Login/SelectBox.d.ts +23 -0
  542. package/lib/components/forms/Login/SelectBox.js +96 -0
  543. package/lib/components/forms/Login/StepIndicator.d.ts +7 -0
  544. package/lib/components/forms/Login/StepIndicator.js +19 -0
  545. package/lib/components/forms/Login/TMLoginForm.d.ts +44 -0
  546. package/lib/components/forms/Login/TMLoginForm.js +737 -0
  547. package/lib/components/forms/Login/TextBox.d.ts +27 -0
  548. package/lib/components/forms/Login/TextBox.js +111 -0
  549. package/lib/components/forms/TMApplyForm.d.ts +4 -0
  550. package/lib/components/forms/TMApplyForm.js +105 -0
  551. package/lib/components/forms/TMChooserForm.d.ts +3 -0
  552. package/lib/components/forms/TMChooserForm.js +94 -0
  553. package/lib/components/forms/TMResultDialog.d.ts +20 -0
  554. package/lib/components/forms/TMResultDialog.js +38 -0
  555. package/lib/components/forms/TMSaveForm.d.ts +31 -0
  556. package/lib/components/forms/TMSaveForm.js +176 -0
  557. package/lib/components/grids/TMBlogs.d.ts +102 -0
  558. package/lib/components/grids/TMBlogs.js +721 -0
  559. package/lib/components/grids/TMBlogsUtils.d.ts +99 -0
  560. package/lib/components/grids/TMBlogsUtils.js +226 -0
  561. package/lib/components/grids/TMRecentsManager.d.ts +13 -0
  562. package/lib/components/grids/TMRecentsManager.js +155 -0
  563. package/lib/components/grids/TMValidationItemsList.d.ts +6 -0
  564. package/lib/components/grids/TMValidationItemsList.js +82 -0
  565. package/lib/components/index.d.ts +102 -0
  566. package/lib/components/index.js +123 -0
  567. package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +9 -0
  568. package/lib/components/layout/panelManager/TMPanelManagerContainer.js +215 -0
  569. package/lib/components/layout/panelManager/TMPanelManagerContext.d.ts +39 -0
  570. package/lib/components/layout/panelManager/TMPanelManagerContext.js +251 -0
  571. package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +11 -0
  572. package/lib/components/layout/panelManager/TMPanelManagerToolbar.js +82 -0
  573. package/lib/components/layout/panelManager/TMPanelManagerWithPersistenceProvider.d.ts +21 -0
  574. package/lib/components/layout/panelManager/TMPanelManagerWithPersistenceProvider.js +64 -0
  575. package/lib/components/layout/panelManager/TMPanelWrapper.d.ts +8 -0
  576. package/lib/components/layout/panelManager/TMPanelWrapper.js +59 -0
  577. package/lib/components/layout/panelManager/types.d.ts +41 -0
  578. package/lib/components/layout/panelManager/types.js +1 -0
  579. package/lib/components/layout/panelManager/utils.d.ts +21 -0
  580. package/lib/components/layout/panelManager/utils.js +208 -0
  581. package/lib/components/pages/TMPage.d.ts +38 -0
  582. package/lib/components/pages/TMPage.js +220 -0
  583. package/lib/components/query/TMQueryEditor.d.ts +58 -0
  584. package/lib/components/query/TMQueryEditor.js +1001 -0
  585. package/lib/components/query/TMQuerySummary.d.ts +15 -0
  586. package/lib/components/query/TMQuerySummary.js +35 -0
  587. package/lib/components/settings/SettingsAppearance.d.ts +14 -0
  588. package/lib/components/settings/SettingsAppearance.js +65 -0
  589. package/lib/components/sidebar/TMAboutApp.d.ts +8 -0
  590. package/lib/components/sidebar/TMAboutApp.js +14 -0
  591. package/lib/components/sidebar/TMCommandsPanel.d.ts +16 -0
  592. package/lib/components/sidebar/TMCommandsPanel.js +27 -0
  593. package/lib/components/sidebar/TMHeader.d.ts +43 -0
  594. package/lib/components/sidebar/TMHeader.js +616 -0
  595. package/lib/components/sidebar/TMSidebar.d.ts +21 -0
  596. package/lib/components/sidebar/TMSidebar.js +61 -0
  597. package/lib/components/sidebar/TMSidebarItem.d.ts +15 -0
  598. package/lib/components/sidebar/TMSidebarItem.js +39 -0
  599. package/lib/components/viewers/TMDataListItemViewer.d.ts +10 -0
  600. package/lib/components/viewers/TMDataListItemViewer.js +80 -0
  601. package/lib/components/viewers/TMMidViewer.d.ts +36 -0
  602. package/lib/components/viewers/TMMidViewer.js +128 -0
  603. package/lib/components/viewers/TMTidViewer.d.ts +256 -0
  604. package/lib/components/viewers/TMTidViewer.js +341 -0
  605. package/lib/components/wizard/TMStepIndicator.d.ts +11 -0
  606. package/lib/components/wizard/TMStepIndicator.js +165 -0
  607. package/lib/components/wizard/TMWizard.d.ts +18 -0
  608. package/lib/components/wizard/TMWizard.js +93 -0
  609. package/lib/css/tm-sdkui.css +1 -0
  610. package/lib/helper/DeepCompareHelper.d.ts +7 -0
  611. package/lib/helper/DeepCompareHelper.js +106 -0
  612. package/lib/helper/Enum_Localizator.d.ts +18 -0
  613. package/lib/helper/Enum_Localizator.js +247 -0
  614. package/lib/helper/Globalization.d.ts +14 -0
  615. package/lib/helper/Globalization.js +80 -0
  616. package/lib/helper/SDKUI_Globals.d.ts +93 -0
  617. package/lib/helper/SDKUI_Globals.js +165 -0
  618. package/lib/helper/SDKUI_Localizator.d.ts +649 -0
  619. package/lib/helper/SDKUI_Localizator.js +6385 -0
  620. package/lib/helper/TMCommandsContextMenu.d.ts +14 -0
  621. package/lib/helper/TMCommandsContextMenu.js +6 -0
  622. package/lib/helper/TMConditionalWrapper.d.ts +8 -0
  623. package/lib/helper/TMConditionalWrapper.js +4 -0
  624. package/lib/helper/TMIcons.d.ts +271 -0
  625. package/lib/helper/TMIcons.js +664 -0
  626. package/lib/helper/TMImageLibrary.d.ts +3 -0
  627. package/lib/helper/TMImageLibrary.js +466 -0
  628. package/lib/helper/TMUtils.d.ts +20 -0
  629. package/lib/helper/TMUtils.js +176 -0
  630. package/lib/helper/dcmtsHelper.d.ts +5 -0
  631. package/lib/helper/dcmtsHelper.js +25 -0
  632. package/lib/helper/helpers.d.ts +84 -0
  633. package/lib/helper/helpers.js +824 -0
  634. package/lib/helper/index.d.ts +11 -0
  635. package/lib/helper/index.js +11 -0
  636. package/lib/helper/queryHelper.d.ts +19 -0
  637. package/lib/helper/queryHelper.js +336 -0
  638. package/lib/hooks/useDcmtOperations.d.ts +24 -0
  639. package/lib/hooks/useDcmtOperations.js +482 -0
  640. package/lib/hooks/useForm.d.ts +24 -0
  641. package/lib/hooks/useForm.js +157 -0
  642. package/lib/hooks/useInputDialog.d.ts +9 -0
  643. package/lib/hooks/useInputDialog.js +105 -0
  644. package/lib/hooks/useOutsideClick.d.ts +2 -0
  645. package/lib/hooks/useOutsideClick.js +38 -0
  646. package/lib/hooks/usePreventFileDrop.d.ts +3 -0
  647. package/lib/hooks/usePreventFileDrop.js +37 -0
  648. package/lib/hooks/useQueryParametersDialog.d.ts +2 -0
  649. package/lib/hooks/useQueryParametersDialog.js +71 -0
  650. package/lib/hooks/useResizeObserver.d.ts +4 -0
  651. package/lib/hooks/useResizeObserver.js +22 -0
  652. package/lib/hooks/useWorkflowApprove.d.ts +11 -0
  653. package/lib/hooks/useWorkflowApprove.js +57 -0
  654. package/lib/index.d.ts +11 -0
  655. package/lib/index.js +14 -0
  656. package/lib/services/index.d.ts +1 -0
  657. package/lib/services/index.js +1 -0
  658. package/lib/services/platform_services.d.ts +18 -0
  659. package/lib/services/platform_services.js +492 -0
  660. package/lib/stories/TMButton.stories.d.ts +4 -0
  661. package/lib/stories/TMButton.stories.js +29 -0
  662. package/lib/stories/TMDataGrid.stories.d.ts +9 -0
  663. package/lib/stories/TMDataGrid.stories.js +310 -0
  664. package/lib/stories/TMHtmlContentDisplay.stories.d.ts +6 -0
  665. package/lib/stories/TMHtmlContentDisplay.stories.js +45 -0
  666. package/lib/stories/TMHtmlEditor.stories.d.ts +6 -0
  667. package/lib/stories/TMHtmlEditor.stories.js +49 -0
  668. package/lib/stories/TMIcons.stories.d.ts +4 -0
  669. package/lib/stories/TMIcons.stories.js +13 -0
  670. package/lib/stories/TMSDKUI_Localizator.stories.d.ts +4 -0
  671. package/lib/stories/TMSDKUI_Localizator.stories.js +123 -0
  672. package/lib/stories/TMStoriesUtils.d.ts +1 -0
  673. package/lib/stories/TMStoriesUtils.js +10 -0
  674. package/lib/stories/TMUserAvatar.stories.d.ts +6 -0
  675. package/lib/stories/TMUserAvatar.stories.js +20 -0
  676. package/lib/ts/index.d.ts +1 -0
  677. package/lib/ts/index.js +1 -0
  678. package/lib/ts/types.d.ts +296 -0
  679. package/lib/ts/types.js +85 -0
  680. package/lib/utils/theme.d.ts +68 -0
  681. package/lib/utils/theme.js +80 -0
  682. package/package.json +54 -0
@@ -0,0 +1,1083 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
+ import TMDcmtPreview from './TMDcmtPreview';
4
+ import { AccessLevels, ArchiveConstraints, ArchiveEngineByID, DcmtTypeListCacheService, LayoutModes, MetadataDataTypes, ResultTypes, SDK_Globals, SDK_Localizator, SystemMIDsAsNumber, SystemTIDs, Task_States, TemplateTIDs, UpdateEngineByID, ValidationItem, WorkflowCacheService, WorkItemMetadataNames } from '@topconsultnpm/sdk-ts';
5
+ import { ContextMenu } from 'devextreme-react';
6
+ import { WorkFlowApproveRejectPopUp, WorkFlowMoreInfoPopUp, WorkFlowOperationButtons, WorkFlowReAssignPopUp } from '../workflow/TMWorkflowPopup';
7
+ import { DownloadTypes, FormModes } from '../../../ts';
8
+ import { DeviceType, useDeviceType } from '../../base/TMDeviceProvider';
9
+ import { useDcmtOperations } from '../../../hooks/useDcmtOperations';
10
+ import { getWorkItemSetIDAsync, handleArchiveVisibility, searchResultToMetadataValues } from '../../../helper/queryHelper';
11
+ import { genUniqueId, IconShow, SDKUI_Localizator, updateMruTids, IconBoard, IconDcmtTypeSys, IconDetailDcmts, svgToString, IconDownload, calcIsModified, IconMenuVertical, Globalization, getListMaxItems, getSystemMetadata, IconBoxArchiveIn, IconClear, IconUndo, SDKUI_Globals, IconPreview, isTaskMoreInfo, IconWorkflow, IconSearch, deepCompare } from '../../../helper';
12
+ import { hasDetailRelations, hasMasterRelations, isXMLFileExt } from '../../../helper/dcmtsHelper';
13
+ import { Gutters, TMColors } from '../../../utils/theme';
14
+ import { StyledFormButtonsContainer, StyledLoadingContainer, StyledModalContainer, StyledSpinner, StyledToolbarCardContainer } from '../../base/Styled';
15
+ import ShowAlert from '../../base/TMAlert';
16
+ import TMButton from '../../base/TMButton';
17
+ import { TMExceptionBoxManager, TMMessageBoxManager, ButtonNames } from '../../base/TMPopUp';
18
+ import TMSpinner, { Spinner } from '../../base/TMSpinner';
19
+ import { TMLayoutWaitingContainer } from '../../base/TMWaitPanel';
20
+ import TMDistinctValues from '../../choosers/TMDistinctValues';
21
+ import TMFormulaEditor, { FormulaDescriptor, FormulaHelper, FormulaTargets } from '../../editors/TMFormulaEditor';
22
+ import TMMetadataValues, { AdvancedMenuButtons } from '../../editors/TMMetadataValues';
23
+ import { TMSaveFormButtonPrevious, TMSaveFormButtonNext, TMSaveFormButtonSave, TMSaveFormButtonUndo } from '../../forms/TMSaveForm';
24
+ import TMShowAllOrMaxItemsButton from '../../base/TMShowAllOrMaxItemsButton';
25
+ import TMFileUploader from '../../features/documents/TMFileUploader';
26
+ import TMMasterDetailDcmts from './TMMasterDetailDcmts';
27
+ import TMDcmtBlog from './TMDcmtBlog';
28
+ import { useInputAttachmentsDialog } from '../../../hooks/useInputDialog';
29
+ import TMModal from '../../base/TMModal';
30
+ import { useTMPanelManagerContext } from '../../layout/panelManager/TMPanelManagerContext';
31
+ import TMPanelManagerContainer from '../../layout/panelManager/TMPanelManagerContainer';
32
+ import { TMPanelManagerWithPersistenceProvider } from '../../layout/panelManager/TMPanelManagerWithPersistenceProvider';
33
+ import { useWorkflowApprove } from '../../../hooks/useWorkflowApprove';
34
+ import ToppyHelpCenter from '../assistant/ToppyHelpCenter';
35
+ import TMBlogCommentForm from '../blog/TMBlogCommentForm';
36
+ import WFDiagram from '../workflow/diagram/WFDiagram';
37
+ import TMTooltip from '../../base/TMTooltip';
38
+ let abortControllerLocal = new AbortController();
39
+ //#endregion
40
+ const TMDcmtForm = ({ showHeader = true, onSaveRecents, layoutMode = LayoutModes.Update, onClose, onSavedAsyncCallback, TID, DID, formMode = FormModes.Update, canNext, canPrev, count, itemIndex, onNext, onPrev, allowNavigation = true, allowRelations = true, isClosable = false, isExpertMode = SDKUI_Globals.userSettings.advancedSettings.expertMode === 1, showDcmtFormSidebar = true, invokedByTodo = false, titleModal, isModal = false, widthModal = "100%", heightModal = "100%", groupId, onWFOperationCompleted, onTaskCompleted, inputFile = null, taskFormDialogComponent, taskMoreInfo, connectorFileSave = undefined, inputMids = [], onOpenS4TViewerRequest, s4TViewerDialogComponent, enableDragDropOverlay = false, passToSearch }) => {
41
+ const [id, setID] = useState('');
42
+ const [showWaitPanelLocal, setShowWaitPanelLocal] = useState(false);
43
+ const [waitPanelTitleLocal, setWaitPanelTitleLocal] = useState('');
44
+ const [showPrimaryLocal, setShowPrimaryLocal] = useState(false);
45
+ const [waitPanelTextPrimaryLocal, setWaitPanelTextPrimaryLocal] = useState('');
46
+ const [waitPanelValuePrimaryLocal, setWaitPanelValuePrimaryLocal] = useState(0);
47
+ const [waitPanelMaxValuePrimaryLocal, setWaitPanelMaxValuePrimaryLocal] = useState(0);
48
+ const [showSecondaryLocal, setShowSecondaryLocal] = useState(false);
49
+ const [waitPanelTextSecondaryLocal, setWaitPanelTextSecondaryLocal] = useState('');
50
+ const [waitPanelValueSecondaryLocal, setWaitPanelValueSecondaryLocal] = useState(0);
51
+ const [waitPanelMaxValueSecondaryLocal, setWaitPanelMaxValueSecondaryLocal] = useState(0);
52
+ const [useWaitPanelLocalState, setUseWaitPanelLocalState] = useState(false);
53
+ const [formData, setFormData] = useState([]);
54
+ const [formDataOrig, setFormDataOrig] = useState([]);
55
+ const [validationItems, setValidationItems] = useState([]);
56
+ const [fromDTD, setFromDTD] = useState();
57
+ const [showApprovePopup, setShowApprovePopup] = useState(false);
58
+ const [showRejectPopup, setShowRejectPopup] = useState(false);
59
+ const [showReAssignPopup, setShowReAssignPopup] = useState(false);
60
+ const [showMoreInfoPopup, setShowMoreInfoPopup] = useState(false);
61
+ const [layout, setLayout] = useState();
62
+ const appliedInputMidsRef = useRef(null);
63
+ // Refs per evitare stale closure nei callback
64
+ // I useCallback catturano i valori delle dipendenze al momento della creazione.
65
+ // Questi ref vengono sincronizzati tramite useEffect e permettono di accedere
66
+ // sempre ai valori correnti senza dover ricreare i callback ad ogni cambio di stato.
67
+ const formDataOrigRef = useRef([]);
68
+ const formDataRef = useRef([]);
69
+ const fromDTDRef = useRef();
70
+ const [isOpenDetails, setIsOpenDetails] = useState(false);
71
+ const [isOpenMaster, setIsOpenMaster] = useState(false);
72
+ const [secondaryMasterDcmts, setSecondaryMasterDcmts] = useState([]);
73
+ const [isOpenDistinctValues, setIsOpenDistinctValues] = useState(false);
74
+ const [isOpenFormulaEditor, setIsOpenFormulaEditor] = useState(false);
75
+ const [currentTIDHasDetailRelations, setCurrentTIDHasDetailRelations] = useState();
76
+ const [currentTIDHasMasterRelations, setCurrentTIDHasMasterRelations] = useState();
77
+ const [currentDcmt, setCurrentDcmt] = useState();
78
+ const [dcmtFile, setDcmtFile] = useState(null);
79
+ const [focusedMetadataValue, setFocusedMetadataValue] = useState();
80
+ const [showAll, setShowAll] = useState(layoutMode === LayoutModes.Ark);
81
+ const [fetchError, setFetchError] = useState(false);
82
+ const [isWFDataLoading, setIsWFDataLoading] = useState(false);
83
+ const [workItems, setWorkItems] = useState([]);
84
+ const [workflows, setWorkflows] = useState([]);
85
+ const [showCommentForm, setShowCommentForm] = useState(false);
86
+ const [isInitialLoading, setIsInitialLoading] = useState(true);
87
+ const [isNavigating, setIsNavigating] = useState(false);
88
+ const { openConfirmAttachmentsDialog, ConfirmAttachmentsDialog } = useInputAttachmentsDialog();
89
+ const { abortController, showWaitPanel, waitPanelTitle, showPrimary, waitPanelTextPrimary, waitPanelValuePrimary, waitPanelMaxValuePrimary, showSecondary, waitPanelTextSecondary, waitPanelValueSecondary, waitPanelMaxValueSecondary, downloadDcmtsAsync } = useDcmtOperations();
90
+ // Custom hook to manage workflow approval data
91
+ const { workflowApproveData } = useWorkflowApprove();
92
+ const fetchErrorShownRef = useRef(false);
93
+ const deviceType = useDeviceType();
94
+ const getDcmts = useCallback(() => {
95
+ return [{ TID: currentDcmt?.tid, DID: currentDcmt?.did, FILEEXT: currentDcmt?.fileExt }];
96
+ }, [currentDcmt?.tid, currentDcmt?.did, currentDcmt?.fileExt]);
97
+ const handleReset = useCallback(() => {
98
+ setDcmtFile(null);
99
+ }, []);
100
+ const setMetadataList = useCallback(async (mdList, getMetadataResult = undefined, archived = false, currentDID) => {
101
+ try {
102
+ let did = currentDID ?? DID;
103
+ if (!did)
104
+ return;
105
+ TMSpinner.show({ description: 'Loading Metadata...' });
106
+ let res = getMetadataResult ?? await SDK_Globals.tmSession?.NewSearchEngine().GetMetadataAsync(TID, did, true);
107
+ let dtd = res?.dtdResult;
108
+ let rows = dtd.rows ? dtd.rows[0] : [];
109
+ let mids = res?.selectMIDs;
110
+ let metadataList = searchResultToMetadataValues(TID, dtd, rows, mids, mdList, layoutMode);
111
+ if (archived) {
112
+ // Usa setFormData con funzione callback per accedere allo stato precedente
113
+ // invece di dipendere da formDataOrig nell'array di dipendenze
114
+ setFormData(prevFormDataOrig => {
115
+ let tempMetadataList = [];
116
+ for (let md of metadataList) {
117
+ if (md.value === null) {
118
+ if (prevFormDataOrig.find(metadata => metadata.mid === md.mid)?.value === '') {
119
+ tempMetadataList.push({ ...md, value: '' });
120
+ }
121
+ if (prevFormDataOrig.find(metadata => metadata.mid === md.mid)?.value === undefined) {
122
+ tempMetadataList.push({ ...md, value: undefined });
123
+ }
124
+ if (prevFormDataOrig.find(metadata => metadata.mid === md.mid)?.value === null) {
125
+ tempMetadataList.push(md);
126
+ }
127
+ }
128
+ else {
129
+ tempMetadataList.push(md);
130
+ }
131
+ }
132
+ return tempMetadataList;
133
+ });
134
+ return;
135
+ }
136
+ setFormDataOrig(structuredClone(metadataList));
137
+ setFormData(structuredClone(metadataList));
138
+ // Sincronizza il ref con i dati caricati per evitare stale closure in handleSave
139
+ formDataOrigRef.current = structuredClone(metadataList);
140
+ }
141
+ catch (e) {
142
+ TMExceptionBoxManager.show({ exception: e });
143
+ }
144
+ finally {
145
+ TMSpinner.hide();
146
+ }
147
+ }, [TID, DID, layoutMode]);
148
+ const fetchData = useCallback(async () => {
149
+ try {
150
+ setFetchError(false);
151
+ if (!TID)
152
+ return;
153
+ if (!DID && layoutMode === LayoutModes.Update)
154
+ return;
155
+ let getMetadataResult;
156
+ if (layoutMode === LayoutModes.Update)
157
+ getMetadataResult = await SDK_Globals.tmSession?.NewSearchEngine().GetMetadataAsync(TID, DID, true);
158
+ let dtd = await DcmtTypeListCacheService.GetWithNotGrantedAsync(TID, DID, getMetadataResult);
159
+ setFromDTD(dtd);
160
+ if (layoutMode === LayoutModes.Update || (layoutMode === LayoutModes.Ark && DID)) {
161
+ await setMetadataList(dtd?.metadata ?? [], getMetadataResult);
162
+ }
163
+ else {
164
+ const renderedMetadata = dtd?.metadata?.filter((metadata) => handleArchiveVisibility(metadata)) ?? [];
165
+ const metadataList = searchResultToMetadataValues(dtd?.id, undefined, [], [], renderedMetadata, layoutMode);
166
+ setFormDataOrig(structuredClone(metadataList));
167
+ setFormData(structuredClone(metadataList));
168
+ formDataOrigRef.current = structuredClone(metadataList);
169
+ }
170
+ let resLayout = await SDK_Globals.tmSession?.NewDcmtTypeEngine().LayoutRetrieveAsync(TID, layoutMode);
171
+ setLayout(resLayout);
172
+ (layoutMode === LayoutModes.Ark && !inputFile) && handleReset();
173
+ }
174
+ catch (e) {
175
+ setFetchError(true);
176
+ throw e;
177
+ }
178
+ finally {
179
+ setIsInitialLoading(false);
180
+ setIsNavigating(false);
181
+ }
182
+ }, [TID, DID, layoutMode, inputFile, setMetadataList, handleReset]);
183
+ const createChange = useCallback((mid, metadataType, modifiedValue) => {
184
+ return { mid, metadataType, modifiedValue };
185
+ }, []);
186
+ const getSpecificChangedKeysWithValues = useCallback((originalList, modifiedList) => {
187
+ const changes = [];
188
+ if (!originalList || !modifiedList)
189
+ return changes;
190
+ const originalMap = new Map(originalList.map(item => [item.mid, item]));
191
+ for (const modified of modifiedList) {
192
+ if (modified.mid === undefined)
193
+ continue;
194
+ const original = originalMap.get(modified.mid);
195
+ if (!original)
196
+ continue;
197
+ if (original.value !== modified.value) {
198
+ changes.push(createChange(modified.mid, modified.md?.dataType ?? MetadataDataTypes.Varchar, modified.value));
199
+ }
200
+ }
201
+ return changes;
202
+ }, [createChange]);
203
+ useEffect(() => { setID(genUniqueId()); }, []);
204
+ // Sincronizza i ref con gli stati correnti per evitare stale closure nei callback.
205
+ // I useCallback catturano le variabili delle dipendenze al momento della loro creazione,
206
+ // quindi se uno stato cambia frequentemente, il callback avrebbe sempre valori vecchi.
207
+ // Usando i ref, possiamo accedere sempre ai valori più recenti senza dover ricreare i callback.
208
+ useEffect(() => {
209
+ formDataRef.current = formData;
210
+ }, [formData]);
211
+ useEffect(() => {
212
+ fromDTDRef.current = fromDTD;
213
+ }, [fromDTD]);
214
+ useEffect(() => {
215
+ if (!inputFile || inputFile === null)
216
+ return;
217
+ setDcmtFile(inputFile);
218
+ }, [inputFile]);
219
+ useEffect(() => {
220
+ const run = async () => {
221
+ try {
222
+ fetchErrorShownRef.current = false; // Reset flag all'inizio
223
+ // Distinguish between initial load and navigation
224
+ if (isInitialLoading) {
225
+ // First load - keep isInitialLoading true
226
+ await fetchData();
227
+ }
228
+ else {
229
+ // Navigation - use isNavigating instead
230
+ setIsNavigating(true);
231
+ await fetchData();
232
+ }
233
+ }
234
+ catch (e) {
235
+ // Mostra l'errore solo se non è già stato mostrato (evita duplicati in StrictMode)
236
+ if (!fetchErrorShownRef.current) {
237
+ fetchErrorShownRef.current = true;
238
+ TMExceptionBoxManager.show({ exception: e });
239
+ // Se il caricamento fallisce, chiudi il form
240
+ onClose?.();
241
+ }
242
+ }
243
+ };
244
+ run();
245
+ }, [TID, DID, fetchData]);
246
+ useEffect(() => {
247
+ if (formData.length > 0) {
248
+ setValidationItems(validateMetadataList(formData));
249
+ const newDcmt = {
250
+ tid: formData.find(o => o.mid == SystemMIDsAsNumber.TID)?.value,
251
+ did: formData.find(o => o.mid == SystemMIDsAsNumber.DID)?.value,
252
+ fileCount: formData.find(o => o.mid == SystemMIDsAsNumber.FileCount)?.value,
253
+ fileSize: formData.find(o => o.mid == SystemMIDsAsNumber.FileSize)?.value,
254
+ fileExt: formData.find(o => o.mid == SystemMIDsAsNumber.FileExt)?.value
255
+ };
256
+ if (!currentDcmt ||
257
+ currentDcmt.tid !== newDcmt.tid ||
258
+ currentDcmt.did !== newDcmt.did ||
259
+ currentDcmt.fileExt !== newDcmt.fileExt ||
260
+ currentDcmt.fileSize !== newDcmt.fileSize ||
261
+ currentDcmt.fileCount !== newDcmt.fileCount) {
262
+ setCurrentDcmt(newDcmt);
263
+ }
264
+ }
265
+ }, [formData, formDataOrig, getSpecificChangedKeysWithValues, currentDcmt]);
266
+ useEffect(() => {
267
+ hasDetailRelations(TID).then((value) => setCurrentTIDHasDetailRelations(value));
268
+ hasMasterRelations(TID).then((value) => setCurrentTIDHasMasterRelations(value));
269
+ }, [TID]);
270
+ useEffect(() => {
271
+ if (layoutMode !== LayoutModes.Ark)
272
+ return;
273
+ setFocusedMetadataValue(undefined);
274
+ }, [fromDTD, layoutMode]);
275
+ useEffect(() => {
276
+ if (!inputMids || inputMids.length === 0)
277
+ return;
278
+ if (layoutMode !== LayoutModes.Ark)
279
+ return;
280
+ if (!formData || formData.length === 0)
281
+ return;
282
+ if (appliedInputMidsRef.current && deepCompare(appliedInputMidsRef.current, inputMids))
283
+ return;
284
+ appliedInputMidsRef.current = inputMids;
285
+ let data = structuredClone(formData);
286
+ for (let md of data) {
287
+ if (!md.mid)
288
+ continue;
289
+ if (md.mid > 99) {
290
+ const defaultValue = md.md?.defaultValue;
291
+ if (defaultValue) {
292
+ if (FormulaHelper.isFormula(defaultValue)) {
293
+ md.value = undefined;
294
+ }
295
+ else {
296
+ md.value = defaultValue;
297
+ }
298
+ }
299
+ else if (formDataOrig.find(metadata => metadata.mid === md.mid)?.value === undefined) {
300
+ if (md.value)
301
+ md.value = undefined;
302
+ }
303
+ else if (md.value && md.value.length > 0) {
304
+ md.value = '';
305
+ }
306
+ }
307
+ }
308
+ inputMids.forEach(inputMid => {
309
+ const md = data.find(m => m.mid === inputMid.mid);
310
+ if (md) {
311
+ md.value = inputMid.value;
312
+ }
313
+ });
314
+ setFormData(data);
315
+ }, [inputMids, layoutMode, formData, formDataOrig]);
316
+ // Memoizza solo il valore WI_SetID per evitare re-render quando altri metadata cambiano
317
+ const workItemSetIDValue = useMemo(() => formData.find(o => o.md?.name === WorkItemMetadataNames.WI_SetID)?.value, [formData]);
318
+ useEffect(() => {
319
+ const loadAllWfData = async () => {
320
+ if (layoutMode !== LayoutModes.Update || !DID) {
321
+ setWorkItems([]);
322
+ setWorkflows([]);
323
+ return;
324
+ }
325
+ setIsWFDataLoading(true);
326
+ try {
327
+ // 1. item da processare in modo sincrono
328
+ const itemsToProcess = [];
329
+ for (const workflow of workflowApproveData) {
330
+ for (const dataRow of workflow.dtdResult?.rows ?? []) {
331
+ const did = Number(dataRow?.[1]);
332
+ if (did === Number(DID)) {
333
+ const tid = Number(dataRow?.[0]);
334
+ itemsToProcess.push({ tid, did });
335
+ }
336
+ }
337
+ }
338
+ if (itemsToProcess.length === 0) {
339
+ setWorkItems([]);
340
+ setWorkflows([]);
341
+ setIsWFDataLoading(false);
342
+ return;
343
+ }
344
+ // promises per i setID in modo condizionale
345
+ let setIDPromises;
346
+ if (workItemSetIDValue !== undefined) {
347
+ // Se abbiamo il setID dal form, non facciamo chiamate di rete.
348
+ setIDPromises = itemsToProcess.map(() => Promise.resolve(workItemSetIDValue));
349
+ }
350
+ else {
351
+ // Altrimenti, procediamo con le chiamate di rete come prima.
352
+ setIDPromises = itemsToProcess.map(item => getWorkItemSetIDAsync(item.tid, item.did));
353
+ }
354
+ // Crea un array di Promise per tutte le chiamate a GetWFInfoAsync
355
+ const workflowInfoPromises = itemsToProcess.map(item => WorkflowCacheService.GetWFInfoAsync(item.tid));
356
+ // Esegui tutte le chiamate in parallelo e attendi i risultati
357
+ const setIDResults = await Promise.all(setIDPromises);
358
+ const workflowInfoResults = await Promise.all(workflowInfoPromises);
359
+ // Combina i risultati
360
+ const finalWorkItems = itemsToProcess.map((item, index) => ({
361
+ ...item,
362
+ setID: setIDResults[index],
363
+ }));
364
+ const validWorkflows = workflowInfoResults.filter(Boolean);
365
+ // Aggiorna lo stato una sola volta con i dati finali
366
+ setWorkItems(finalWorkItems);
367
+ setWorkflows(validWorkflows);
368
+ }
369
+ catch (error) {
370
+ console.error("Errore durante il caricamento dei dati del workflow:", error);
371
+ setWorkItems([]);
372
+ setWorkflows([]);
373
+ }
374
+ finally {
375
+ setIsWFDataLoading(false);
376
+ }
377
+ };
378
+ if (workItemSetIDValue !== undefined || workflowApproveData.length > 0)
379
+ loadAllWfData();
380
+ }, [workItemSetIDValue, workflowApproveData, DID, layoutMode]);
381
+ const getSelectionDcmtInfo = useCallback(() => {
382
+ let dcmts = [];
383
+ dcmts.push({ TID: TID ?? 0, DID: DID ?? 0 });
384
+ return dcmts;
385
+ }, [TID, DID]);
386
+ const handleAddItem = useCallback((tid, did) => {
387
+ let newItem = { TID: tid ?? 0, DID: did ?? 0 };
388
+ setSecondaryMasterDcmts((prevItems) => [...prevItems, newItem]);
389
+ }, []);
390
+ const handleRemoveItem = useCallback((tid, did) => {
391
+ setSecondaryMasterDcmts((prevItems) => prevItems.filter(item => item.TID !== tid && item.DID !== did));
392
+ }, []);
393
+ const handlePassToSearch = useCallback(() => {
394
+ if (!passToSearch)
395
+ return;
396
+ const outputMids = formData
397
+ .filter(md => md.mid && md.mid > 100 && md.value && md.value.length > 0)
398
+ .map(md => ({ mid: md.mid, value: md.value }));
399
+ passToSearch(outputMids);
400
+ }, [passToSearch, formData]);
401
+ const isPreviewDisabled = useMemo(() => layoutMode === LayoutModes.Ark && fromDTD?.archiveConstraint === ArchiveConstraints.OnlyMetadata, [layoutMode, fromDTD?.archiveConstraint]);
402
+ const isBoardDisabled = useMemo(() => layoutMode !== LayoutModes.Update || fromDTD?.hasBlog !== 1, [layoutMode, fromDTD?.hasBlog]);
403
+ const isSysMetadataDisabled = useMemo(() => layoutMode !== LayoutModes.Update, [layoutMode]);
404
+ const isDetailsDisabled = useMemo(() => layoutMode !== LayoutModes.Update || !DID, [layoutMode, DID]);
405
+ const isMasterDisabled = useMemo(() => layoutMode !== LayoutModes.Update || !DID, [layoutMode, DID]);
406
+ const isWFDisabled = useMemo(() => layoutMode !== LayoutModes.Update || fetchError || workItems.length <= 0, [layoutMode, fetchError, workItems.length]);
407
+ const showToppyForApprove = useMemo(() => layoutMode === LayoutModes.Update && !fetchError && workItems.length > 0 && !isOpenDetails && !isOpenMaster, [layoutMode, fetchError, workItems.length, isOpenDetails, isOpenMaster]);
408
+ const showToppyForCompleteMoreInfo = useMemo(() => layoutMode === LayoutModes.Update && isTaskMoreInfo(taskMoreInfo?.name) && taskMoreInfo?.state !== Task_States.Completed, [layoutMode, taskMoreInfo?.name, taskMoreInfo?.state]);
409
+ const isMobile = useMemo(() => deviceType === DeviceType.MOBILE, [deviceType]);
410
+ const isApprView = useMemo(() => fromDTD?.templateTID === TemplateTIDs.WF_WIApprView, [fromDTD?.templateTID]);
411
+ const workitemSetID = useMemo(() => workItems.find(o => o.did === Number(DID))?.setID || formData.find(o => o.md?.name === WorkItemMetadataNames.WI_SetID)?.value, [workItems, DID, formData]);
412
+ const approvalVID = useMemo(() => workItems.length > 0 ? Number(workItems[0].tid) : -1, [workItems]);
413
+ const commandsMenuItems = useMemo(() => [
414
+ { icon: svgToString(_jsx(IconDownload, {})), operationType: 'singleRow', disabled: fromDTD?.perm?.canRetrieveFile !== AccessLevels.Yes, text: "Download file", onClick: async () => await downloadDcmtsAsync(getDcmts(), DownloadTypes.Dcmt, "download") },
415
+ { icon: svgToString(_jsx(IconDownload, {})), operationType: 'singleRow', disabled: !isXMLFileExt(currentDcmt?.fileExt), text: "Download allegati XML", onClick: async () => await downloadDcmtsAsync(getDcmts(), DownloadTypes.Attachment, "download", undefined, openConfirmAttachmentsDialog) },
416
+ ...(allowRelations && currentTIDHasMasterRelations ? [{ icon: svgToString(_jsx(IconDetailDcmts, { transform: 'scale(-1, 1)' })), operationType: 'singleRow', disabled: isMasterDisabled, text: SDKUI_Localizator.DcmtsMaster, onClick: () => { if (!isMasterDisabled)
417
+ setIsOpenMaster(!isOpenMaster); } }] : []),
418
+ ...(allowRelations && currentTIDHasDetailRelations ? [{ icon: svgToString(_jsx(IconDetailDcmts, {})), operationType: 'singleRow', disabled: isDetailsDisabled, text: SDKUI_Localizator.DcmtsDetail, onClick: () => { if (!isDetailsDisabled)
419
+ setIsOpenDetails(!isOpenDetails); } }] : []),
420
+ ], [fromDTD?.perm?.canRetrieveFile, currentDcmt?.fileExt, allowRelations, currentTIDHasMasterRelations, isMasterDisabled, currentTIDHasDetailRelations, isDetailsDisabled, getDcmts, downloadDcmtsAsync, openConfirmAttachmentsDialog]);
421
+ const isModified = useMemo(() => calcIsModified(formData, formDataOrig), [formData, formDataOrig]);
422
+ const formToolbar = useMemo(() => _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '10px' }, children: [allowNavigation && canPrev != undefined && _jsx("p", { style: { textAlign: 'center', padding: '1px 4px', display: 'flex' }, children: `${itemIndex}/${count}` }), allowNavigation && canPrev != undefined && _jsx(TMSaveFormButtonPrevious, { btnStyle: 'icon', iconColor: 'white', isModified: isModified, formMode: formMode, canPrev: canPrev, onPrev: onPrev }), allowNavigation && canNext != undefined && _jsx(TMSaveFormButtonNext, { btnStyle: 'icon', iconColor: 'white', isModified: isModified, formMode: formMode, canNext: canNext, onNext: onNext }), layoutMode === LayoutModes.Update && _jsx(IconMenuVertical, { id: `commands-detail-${id}`, color: 'white', cursor: 'pointer' }), layoutMode === LayoutModes.Update && _jsx(ContextMenu, { showEvent: 'click', dataSource: commandsMenuItems, target: `#commands-detail-${id}` }), layoutMode === LayoutModes.Ark &&
423
+ _jsx(TMTooltip, { content: SDKUI_Localizator.PassToSearch, position: 'bottom', children: _jsx(IconSearch, { style: { cursor: 'pointer' }, onClick: handlePassToSearch }) })] }), [allowNavigation, canPrev, canNext, itemIndex, count, isModified, formMode, onPrev, onNext, layoutMode, id, commandsMenuItems, handlePassToSearch]);
424
+ const handleUndo = useCallback(() => {
425
+ setFormData(structuredClone(formDataOrig));
426
+ }, [formDataOrig]);
427
+ const handleConfirmAction = useCallback(async () => {
428
+ TMMessageBoxManager.show({
429
+ parentId: isModal ? "TMDcmtFormShowConfirmForClose-" + id : undefined,
430
+ buttons: [ButtonNames.YES, ButtonNames.NO],
431
+ message: layoutMode === LayoutModes.Update ? SDKUI_Localizator.SaveQuestion : 'Sei sicuro di voler archiviare questo documento?',
432
+ onButtonClick(e) {
433
+ if (e !== ButtonNames.YES)
434
+ return;
435
+ layoutMode === LayoutModes.Update ? handleSave() : handleArchiveCompleted();
436
+ },
437
+ });
438
+ }, [isModal, id, layoutMode]);
439
+ const handleSave = useCallback(async () => {
440
+ const ue = new UpdateEngineByID(SDK_Globals.tmSession);
441
+ ue.DID = DID;
442
+ ue.TID = TID;
443
+ ue.Metadata_ClearAll();
444
+ try {
445
+ TMSpinner.show({ description: 'Aggiornamento in corso...' });
446
+ // Usa i ref invece degli stati per evitare stale closure.
447
+ // handleSave è un useCallback che verrebbe ricreato ogni volta che formData/formDataOrig cambiano,
448
+ // causando problemi di performance. Usando i ref, possiamo mantenere lo stesso callback
449
+ // ma accedere sempre ai valori correnti tramite formDataRef.current e formDataOrigRef.current.
450
+ const changes = getSpecificChangedKeysWithValues(formDataOrigRef.current, formDataRef.current);
451
+ for (let metadata of changes) {
452
+ if (!metadata.modifiedValue)
453
+ ue.Metadata_AddNull(metadata.mid);
454
+ else {
455
+ switch (metadata.metadataType) {
456
+ case MetadataDataTypes.DateTime:
457
+ ue.Metadata_AddDateTime(metadata.mid, new Date(metadata.modifiedValue));
458
+ break;
459
+ case MetadataDataTypes.Number:
460
+ ue.Metadata_AddNumber(metadata.mid, metadata.modifiedValue);
461
+ break;
462
+ case MetadataDataTypes.Varchar:
463
+ ue.Metadata_AddString(metadata.mid, metadata.modifiedValue);
464
+ break;
465
+ default: ue.Metadata_AddNull(metadata.mid);
466
+ }
467
+ }
468
+ }
469
+ await ue.UpdateAsync();
470
+ // Aggiorna lo stato locale immediatamente dopo il salvataggio riuscito
471
+ // Questo garantisce che isModified diventi false anche se il reload fallisce
472
+ const savedFormData = structuredClone(formDataRef.current);
473
+ setFormDataOrig(savedFormData);
474
+ formDataOrigRef.current = savedFormData;
475
+ // Tenta di ottenere i metadati aggiornati
476
+ let metadataResult = undefined;
477
+ let hasGetMetadataError = false;
478
+ try {
479
+ metadataResult = await SDK_Globals.tmSession?.NewSearchEngine().GetMetadataAsync(TID, DID, true);
480
+ }
481
+ catch (metadataError) {
482
+ hasGetMetadataError = true;
483
+ // Estrai ErrorCode dal campo detail se disponibile
484
+ let errorCode = undefined;
485
+ if (metadataError?.isApiException && metadataError?.response?.detail) {
486
+ try {
487
+ const detailObj = JSON.parse(metadataError.response.detail);
488
+ errorCode = detailObj?.ErrorCode;
489
+ }
490
+ catch (parseError) {
491
+ console.log("Impossibile parsare il detail dell'eccezione:", parseError);
492
+ }
493
+ }
494
+ // Se ErrorCode è -5, mostra messaggio personalizzato, altrimenti mostra l'eccezione originale
495
+ if (errorCode === -5) {
496
+ TMMessageBoxManager.show({
497
+ message: SDKUI_Localizator.DcmtOutOfView,
498
+ buttons: [ButtonNames.OK],
499
+ });
500
+ }
501
+ else {
502
+ TMExceptionBoxManager.show({ exception: metadataError });
503
+ }
504
+ // Usa null per indicare al callback che c'è stato un errore e non deve ritentare
505
+ metadataResult = null;
506
+ }
507
+ // Esegui sempre il callback:
508
+ // - Se metadataResult è un oggetto: refresh normale
509
+ // - Se metadataResult è null: GetMetadataAsync fallito, rimuove il documento dalla griglia senza ritentare
510
+ // - Se metadataResult è undefined: nessun parametro passato, il callback può decidere cosa fare
511
+ await onSavedAsyncCallback?.(TID, DID, metadataResult === null ? null : metadataResult);
512
+ // Mostra messaggio di successo solo se non ci sono stati errori critici
513
+ if (!hasGetMetadataError) {
514
+ if (metadataResult && metadataResult !== null) {
515
+ // Usa fromDTDRef.current invece di fromDTD per evitare stale closure.
516
+ // fromDTD potrebbe essere undefined/vuoto nel callback se lo stato è cambiato,
517
+ // mentre fromDTDRef.current contiene sempre il valore corrente sincronizzato tramite useEffect.
518
+ await setMetadataList(fromDTDRef.current?.metadata ?? [], metadataResult);
519
+ }
520
+ ShowAlert({ mode: 'success', title: 'Form di documento', message: 'Le modifiche sono state salvate con successo', duration: 3000 });
521
+ }
522
+ else
523
+ onClose?.();
524
+ }
525
+ catch (e) {
526
+ TMExceptionBoxManager.show({ exception: e });
527
+ }
528
+ finally {
529
+ TMSpinner.hide();
530
+ }
531
+ }, [DID, TID, getSpecificChangedKeysWithValues, onSavedAsyncCallback, onClose, setMetadataList]);
532
+ const handleArchiveCompleted = useCallback(async () => {
533
+ let firstBlock = true;
534
+ let maxFileSize = 0;
535
+ let operationTitle = 'Archiviazione';
536
+ setUseWaitPanelLocalState(true);
537
+ setShowWaitPanelLocal(true);
538
+ setShowPrimaryLocal(false);
539
+ setShowSecondaryLocal(true);
540
+ setWaitPanelTitleLocal(operationTitle);
541
+ abortControllerLocal = new AbortController();
542
+ const ae = new ArchiveEngineByID(SDK_Globals.tmSession);
543
+ ae.TID = TID;
544
+ ae.Metadata_ClearAll();
545
+ try {
546
+ // Usa formDataRef.current invece di formData per evitare stale closure.
547
+ // Questo garantisce di avere sempre i valori più recenti dei metadati da archiviare.
548
+ for (let metadata of formDataRef.current) {
549
+ if (!metadata.value)
550
+ continue;
551
+ switch (metadata.md?.dataType) {
552
+ case MetadataDataTypes.DateTime:
553
+ ae.Metadata_AddDateTime(metadata.mid, new Date(metadata.value));
554
+ break;
555
+ case MetadataDataTypes.Number:
556
+ ae.Metadata_AddNumber(metadata.mid, parseFloat(metadata.value));
557
+ break;
558
+ case MetadataDataTypes.Varchar:
559
+ ae.Metadata_AddString(metadata.mid, metadata.value);
560
+ break;
561
+ default: ae.Metadata_AddNull(metadata.mid);
562
+ }
563
+ }
564
+ if (connectorFileSave) {
565
+ let file = await connectorFileSave();
566
+ ae.ArchivingFile = file;
567
+ }
568
+ else {
569
+ ae.ArchivingFile = dcmtFile;
570
+ }
571
+ let newDID = await ae.ArchiveAsync(abortControllerLocal.signal, (pd) => {
572
+ if (firstBlock) {
573
+ maxFileSize = pd.ProgressBarMaximum ?? 0;
574
+ setWaitPanelMaxValueSecondaryLocal(maxFileSize);
575
+ firstBlock = false;
576
+ }
577
+ setWaitPanelValueSecondaryLocal(pd.ProgressBarValue);
578
+ setWaitPanelTextSecondaryLocal(`Archiviazione... ${Globalization.getNumberDisplayValue(pd.ProgressBarValue, true)} / ${Globalization.getNumberDisplayValue(maxFileSize, true)}`);
579
+ if (pd.ProgressBarValue === pd.ProgressBarMaximum) {
580
+ setWaitPanelMaxValueSecondaryLocal(0);
581
+ setWaitPanelValueSecondaryLocal(0);
582
+ setWaitPanelTextSecondaryLocal('');
583
+ firstBlock = true;
584
+ }
585
+ });
586
+ // Aggiorna lo stato locale immediatamente dopo il salvataggio riuscito
587
+ // Questo garantisce che isModified diventi false anche se il reload fallisce
588
+ const savedFormData = structuredClone(formDataRef.current);
589
+ setFormDataOrig(savedFormData);
590
+ formDataOrigRef.current = savedFormData;
591
+ await onSavedAsyncCallback?.(ae.TID, newDID);
592
+ // Usa fromDTDRef.current invece di fromDTD per evitare stale closure,
593
+ // garantendo di avere il descrittore del tipo documento corrente.
594
+ await setMetadataList(fromDTDRef.current?.metadata ?? [], undefined, true, newDID);
595
+ handleReset();
596
+ let newMruTIDS = updateMruTids(SDKUI_Globals.userSettings.archivingSettings.mruTIDs, TID);
597
+ SDKUI_Globals.userSettings.archivingSettings.mruTIDs = newMruTIDS;
598
+ onSaveRecents?.(newMruTIDS);
599
+ ShowAlert({ mode: 'success', title: 'Archiviazione', message: 'Il documento è stato archiviato con successo', duration: 3000 });
600
+ const isDuplication = layoutMode === LayoutModes.Ark && DID;
601
+ if (isDuplication)
602
+ onClose?.();
603
+ }
604
+ catch (err) {
605
+ TMExceptionBoxManager.show({ exception: err });
606
+ }
607
+ finally {
608
+ setWaitPanelTextPrimaryLocal('');
609
+ setWaitPanelMaxValuePrimaryLocal(0);
610
+ setWaitPanelValuePrimaryLocal(0);
611
+ setWaitPanelTextSecondaryLocal('');
612
+ setWaitPanelMaxValueSecondaryLocal(0);
613
+ setWaitPanelValueSecondaryLocal(0);
614
+ setShowWaitPanelLocal(false);
615
+ setUseWaitPanelLocalState(false);
616
+ }
617
+ }, [TID, dcmtFile, connectorFileSave, onSavedAsyncCallback, onSaveRecents, onClose, DID, setMetadataList, handleReset, layoutMode]);
618
+ const handleClearForm = useCallback(() => {
619
+ let data = structuredClone(formData);
620
+ if (!data || data.length === 0)
621
+ return;
622
+ for (let md of data) {
623
+ if (!md.mid)
624
+ continue;
625
+ if (md.mid > 99) {
626
+ const defaultValue = md.md?.defaultValue;
627
+ if (defaultValue) {
628
+ if (FormulaHelper.isFormula(defaultValue)) {
629
+ md.value = undefined;
630
+ }
631
+ else {
632
+ md.value = defaultValue;
633
+ }
634
+ }
635
+ else if (formDataOrig.find(metadata => metadata.mid === md.mid)?.value === undefined) {
636
+ if (md.value)
637
+ md.value = undefined;
638
+ }
639
+ else if (md.value && md.value.length > 0) {
640
+ md.value = '';
641
+ }
642
+ }
643
+ }
644
+ setFormData(data);
645
+ }, [formData, formDataOrig]);
646
+ const clearFormBtnDisabled = useMemo(() => formData.filter(md => md.mid && md.value && md.mid > 99 && md.value.length > 0).length > 0, [formData]);
647
+ const archiveBtnDisabled = useMemo(() => layoutMode === LayoutModes.Update || (fromDTD?.archiveConstraint === ArchiveConstraints.ContentCompulsory && !dcmtFile) || validationItems.length > 0, [layoutMode, fromDTD?.archiveConstraint, dcmtFile, validationItems.length]);
648
+ const undoBtnDisabled = useMemo(() => layoutMode === LayoutModes.Update || !isModified, [layoutMode, isModified]);
649
+ const listMaxItems = useMemo(() => getListMaxItems(deviceType ?? DeviceType.DESKTOP), [deviceType]);
650
+ const totalItems = useMemo(() => formData.filter(o => o.mid && o.mid > 100).length, [formData]);
651
+ const metadataValuesSource = useMemo(() => {
652
+ return applyMetadataFilter(formData, showAll, listMaxItems, TID);
653
+ }, [showAll, formData, listMaxItems, TID]);
654
+ const metadataValuesSourceOrig = useMemo(() => {
655
+ return applyMetadataFilter(formDataOrig, showAll, listMaxItems, TID);
656
+ }, [showAll, formDataOrig, listMaxItems, TID]);
657
+ const handleClose = useCallback(() => {
658
+ if (!isModified) {
659
+ onClose?.();
660
+ return;
661
+ }
662
+ TMMessageBoxManager.show({
663
+ parentId: isModal ? "TMDcmtFormShowConfirmForClose-" + id : undefined,
664
+ message: SDKUI_Localizator.SaveQuestion, buttons: [ButtonNames.YES, ButtonNames.NO, ButtonNames.CANCEL],
665
+ onButtonClick: async (e) => {
666
+ try {
667
+ if (e == ButtonNames.CANCEL)
668
+ return;
669
+ if (e == ButtonNames.YES)
670
+ await handleSave();
671
+ onClose?.();
672
+ }
673
+ catch (ex) {
674
+ TMExceptionBoxManager.show({ exception: ex });
675
+ }
676
+ }
677
+ });
678
+ }, [isModified, onClose, isModal, id, handleSave]);
679
+ const getFormula = useCallback(() => {
680
+ let fd = new FormulaDescriptor();
681
+ fd.expression = FormulaHelper.isFormula(focusedMetadataValue?.value) ? FormulaHelper.removeFormulaTag(focusedMetadataValue?.value) : undefined;
682
+ fd.formulaTarget = FormulaTargets.BatchUpdate;
683
+ fd.items = FormulaHelper.TreeViewList(TID ?? 0, getSystemMetadata(true), undefined, FormulaTargets.BatchUpdate, SDK_Globals.dbBrand);
684
+ fd.mid = focusedMetadataValue?.mid ?? 0;
685
+ fd.tid = TID;
686
+ return fd;
687
+ }, [focusedMetadataValue?.value, focusedMetadataValue?.mid, TID]);
688
+ const handleWFOperationCompleted = useCallback(async () => {
689
+ await onWFOperationCompleted?.();
690
+ onClose?.();
691
+ }, [onWFOperationCompleted, onClose]);
692
+ // Determina se showAll deve essere automaticamente true
693
+ // Best practice: usa useMemo per calcolare valori derivati invece di useEffect con setState
694
+ const shouldShowAll = useMemo(() => {
695
+ // Mostra sempre tutti i metadati se:
696
+ // 1. È presente un layout personalizzato (per renderizzare correttamente la gerarchia)
697
+ // 2. È una vista di approvazione workflow
698
+ // 3. È il tipo documento Drafts
699
+ const hasCustomLayout = layout && layout.items && layout.items.length > 0;
700
+ return hasCustomLayout || isApprView || TID === SystemTIDs.Drafts;
701
+ }, [layout, isApprView, TID]);
702
+ // Aggiorna showAll quando shouldShowAll cambia
703
+ useEffect(() => {
704
+ if (shouldShowAll && !showAll) {
705
+ setShowAll(true);
706
+ }
707
+ }, [shouldShowAll, showAll]);
708
+ const tmDcmtForm = useMemo(() => {
709
+ return _jsx(_Fragment, { children: metadataValuesSource.length > 0 &&
710
+ _jsxs(StyledToolbarCardContainer, { children: [_jsx(TMMetadataValues, { TID: TID, metadataValues: metadataValuesSource, metadataValuesOrig: metadataValuesSourceOrig, isExpertMode: isExpertMode, isOpenDistinctValues: isOpenDistinctValues, openChooserBySingleClick: !isOpenDistinctValues, selectedMID: focusedMetadataValue?.mid, isReadOnly: formMode === FormModes.ReadOnly, layoutMode: layoutMode, deviceType: deviceType, validationItems: validationItems, inputMids: inputMids, layout: layout, onFocusedItemChanged: (item) => { (item?.mid !== focusedMetadataValue?.mid) && setFocusedMetadataValue(item); }, onValueChanged: (newItems) => {
711
+ setFormData((prevItems) => prevItems.map((item) => {
712
+ const newItem = newItems.find((newItem) => newItem.tid === item.tid && newItem.mid === item.mid);
713
+ return newItem ? { ...item, ...newItem } : item;
714
+ }));
715
+ }, onAdvancedMenuClick: (e) => {
716
+ switch (e.button) {
717
+ case AdvancedMenuButtons.DistinctValues:
718
+ setIsOpenDistinctValues(!isOpenDistinctValues);
719
+ break;
720
+ case AdvancedMenuButtons.FormulaEditor:
721
+ setIsOpenFormulaEditor(!isOpenFormulaEditor);
722
+ break;
723
+ }
724
+ } }), _jsxs(StyledFormButtonsContainer, { children: [_jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 10 }, children: _jsx("div", { style: { display: 'flex', justifyContent: 'center', alignItems: 'center', gap: '8px' }, children: layoutMode === LayoutModes.Update ? _jsxs(_Fragment, { children: [_jsx(TMSaveFormButtonSave, { showTooltip: false, btnStyle: 'advanced', advancedColor: '#f09c0a', isModified: isModified, formMode: formMode, errorsCount: validationItems.filter(o => o.ResultType == ResultTypes.ERROR).length, onSaveAsync: handleConfirmAction }), _jsx(TMSaveFormButtonUndo, { btnStyle: 'toolbar', showTooltip: true, color: 'primary', isModified: isModified, formMode: formMode, onUndo: handleUndo })] }) :
725
+ _jsxs(_Fragment, { children: [_jsx(TMButton, { disabled: archiveBtnDisabled, btnStyle: 'advanced', icon: _jsx(IconBoxArchiveIn, {}), width: 'auto', showTooltip: false, caption: SDKUI_Localizator.Archive, advancedColor: TMColors.success, onClick: handleConfirmAction }), _jsx(TMButton, { disabled: !clearFormBtnDisabled, btnStyle: 'advanced', icon: _jsx(IconClear, {}), width: 'auto', showTooltip: false, caption: SDKUI_Localizator.Clear, advancedColor: TMColors.tertiary, onClick: handleClearForm }), DID && _jsx(TMButton, { disabled: undoBtnDisabled, btnStyle: 'advanced', icon: _jsx(IconUndo, {}), width: '150px', showTooltip: false, caption: SDKUI_Localizator.Undo, advancedColor: TMColors.tertiary, onClick: handleUndo })] }) }) }), totalItems > listMaxItems &&
726
+ !isApprView &&
727
+ TID !== SystemTIDs.Drafts &&
728
+ !shouldShowAll &&
729
+ _jsx(TMShowAllOrMaxItemsButton, { showAll: showAll, dataSourceLength: totalItems, onClick: () => { setShowAll(!showAll); } })] }), _jsx(ConfirmAttachmentsDialog, {})] }) });
730
+ }, [
731
+ TID,
732
+ DID,
733
+ metadataValuesSource,
734
+ metadataValuesSourceOrig,
735
+ isExpertMode,
736
+ isOpenDistinctValues,
737
+ focusedMetadataValue?.mid,
738
+ formMode,
739
+ layoutMode,
740
+ deviceType,
741
+ validationItems,
742
+ inputMids,
743
+ layout,
744
+ isModified,
745
+ archiveBtnDisabled,
746
+ clearFormBtnDisabled,
747
+ undoBtnDisabled,
748
+ totalItems,
749
+ listMaxItems,
750
+ isApprView,
751
+ shouldShowAll,
752
+ showAll,
753
+ handleConfirmAction,
754
+ handleUndo,
755
+ handleClearForm
756
+ ]);
757
+ const tmBlog = useMemo(() => _jsx(TMDcmtBlog, { tid: TID, did: DID }), [TID, DID]);
758
+ const tmSysMetadata = useMemo(() => _jsx(TMMetadataValues, { layoutMode: layoutMode, openChooserBySingleClick: !isOpenDistinctValues, TID: TID, isReadOnly: true, deviceType: deviceType, metadataValues: formData.filter(o => (o.mid != undefined && o.mid <= 100)), metadataValuesOrig: formData.filter(o => (o.mid != undefined && o.mid <= 100)), validationItems: [], inputMids: inputMids }), [TID, layoutMode, formData, deviceType, inputMids]);
759
+ const tmDcmtPreview = useMemo(() => _jsx(TMDcmtPreviewWrapper, { currentDcmt: currentDcmt, dcmtFile: dcmtFile ?? inputFile, deviceType: deviceType, fromDTD: fromDTD, layoutMode: layoutMode, onFileUpload: (setFile) => {
760
+ setDcmtFile(setFile);
761
+ }, enableDragDropOverlay: enableDragDropOverlay }), [currentDcmt, dcmtFile, deviceType, fromDTD, layoutMode, inputFile, enableDragDropOverlay]);
762
+ const tmWF = useMemo(() => {
763
+ if (isWFDataLoading) {
764
+ return (_jsx("div", { style: {
765
+ display: 'flex',
766
+ alignItems: 'center',
767
+ justifyContent: 'center',
768
+ width: '100%',
769
+ height: '100%',
770
+ minHeight: '200px'
771
+ }, children: _jsxs(StyledLoadingContainer, { children: [_jsx(StyledSpinner, {}), _jsx("span", { children: `${'Caricamento dati workflow'}...` })] }) }));
772
+ }
773
+ const isAuthorized = !!workflows?.[0]?.diagram;
774
+ return (_jsxs("div", { style: { position: 'relative', width: '100%', height: '100%', display: 'flex', flexDirection: 'column', gap: 3 }, children: [workItems.length > 0
775
+ ? (isAuthorized
776
+ ? _jsx(WFDiagram, { xmlDiagramString: workflows?.[0]?.diagram || '', allowEdit: false, currentSetID: workitemSetID })
777
+ : _jsx("div", { style: {
778
+ position: 'absolute',
779
+ top: '50%',
780
+ left: '50%',
781
+ transform: 'translate(-50%, -50%)',
782
+ fontSize: '1.1rem',
783
+ color: TMColors.primaryColor,
784
+ textAlign: 'center',
785
+ }, children: SDKUI_Localizator.WorkflowDiagramNotAuthorized }))
786
+ : _jsx("div", { style: {
787
+ position: 'absolute',
788
+ top: '50%',
789
+ left: '50%',
790
+ transform: 'translate(-50%, -50%)',
791
+ fontSize: '1.1rem',
792
+ color: TMColors.primaryColor,
793
+ textAlign: 'center',
794
+ }, children: SDKUI_Localizator.WorkitemsToApproveNone }), isAuthorized && !workitemSetID && workItems.length > 0 &&
795
+ _jsx("div", { style: {
796
+ padding: 5,
797
+ backgroundColor: 'khaki',
798
+ borderRadius: 8
799
+ }, children: SDKUI_Localizator.WorkItemTechnicalNote_SetID })] }));
800
+ }, [workflows, formData, workitemSetID, workItems, isWFDataLoading]);
801
+ const normalizedTID = TID !== undefined ? Number(TID) : undefined;
802
+ const defaultPanelDimensions = {
803
+ 'tmDcmtForm': { width: '20%', height: '100%' },
804
+ 'tmBlog': { width: '20%', height: '100%' },
805
+ 'tmSysMetadata': { width: '20%', height: '100%' },
806
+ 'tmDcmtPreview': { width: '20%', height: '100%' },
807
+ 'tmWF': { width: '20%', height: '100%' },
808
+ };
809
+ const allInitialPanelVisibility = {
810
+ 'tmDcmtForm': true,
811
+ 'tmBlog': false,
812
+ 'tmSysMetadata': false,
813
+ 'tmDcmtPreview': true,
814
+ 'tmWF': false,
815
+ };
816
+ const initialPanels = useMemo(() => [
817
+ {
818
+ id: 'tmDcmtForm',
819
+ name: SDK_Localizator.Metadatas,
820
+ contentOptions: {
821
+ component: tmDcmtForm,
822
+ isClosable: isClosable,
823
+ panelContainer: {
824
+ showHeader: showHeader,
825
+ title: fromDTD?.nameLoc,
826
+ allowMaximize: !isMobile,
827
+ onBack: (isClosable && deviceType !== DeviceType.MOBILE) ? undefined : handleClose,
828
+ onClose: isClosable ? () => { } : undefined,
829
+ toolbar: allowNavigation ? formToolbar : _jsx(_Fragment, {})
830
+ },
831
+ },
832
+ toolbarOptions: {
833
+ icon: _jsx(IconPreview, { fontSize: 24 }),
834
+ visible: true,
835
+ orderNumber: 1,
836
+ isActive: allInitialPanelVisibility['tmDcmtForm']
837
+ }
838
+ },
839
+ {
840
+ id: 'tmBlog',
841
+ name: SDKUI_Localizator.BlogCase,
842
+ contentOptions: { component: tmBlog, panelContainer: { title: SDKUI_Localizator.BlogCase, allowMaximize: !isMobile } },
843
+ toolbarOptions: {
844
+ icon: _jsx(IconBoard, { fontSize: 24 }),
845
+ visible: true,
846
+ disabled: isBoardDisabled,
847
+ orderNumber: 2,
848
+ isActive: allInitialPanelVisibility['tmBlog']
849
+ }
850
+ },
851
+ {
852
+ id: 'tmSysMetadata',
853
+ name: SDKUI_Localizator.MetadataSystem,
854
+ contentOptions: { component: tmSysMetadata, panelContainer: { title: SDKUI_Localizator.MetadataSystem, allowMaximize: !isMobile } },
855
+ toolbarOptions: { icon: _jsx(IconDcmtTypeSys, { fontSize: 24 }), visible: true, disabled: isSysMetadataDisabled, orderNumber: 3, isActive: allInitialPanelVisibility['tmSysMetadata'] }
856
+ },
857
+ {
858
+ id: 'tmDcmtPreview',
859
+ name: SDKUI_Localizator.PreviewDocument,
860
+ contentOptions: { component: tmDcmtPreview },
861
+ toolbarOptions: { icon: _jsx(IconShow, { fontSize: 24 }), disabled: isPreviewDisabled, visible: true, orderNumber: 4, isActive: allInitialPanelVisibility['tmDcmtPreview'] }
862
+ },
863
+ {
864
+ id: 'tmWF',
865
+ name: "Workflow",
866
+ contentOptions: {
867
+ component: tmWF,
868
+ panelContainer: {
869
+ title: "Workflow", allowMaximize: !isMobile
870
+ }
871
+ },
872
+ toolbarOptions: {
873
+ icon: _jsx(IconWorkflow, { fontSize: 24 }),
874
+ visible: true,
875
+ disabled: isWFDisabled,
876
+ orderNumber: 5,
877
+ isActive: allInitialPanelVisibility['tmWF']
878
+ }
879
+ },
880
+ ], [fromDTD, tmDcmtForm, tmBlog, tmSysMetadata, tmDcmtPreview, tmWF, isPreviewDisabled, isSysMetadataDisabled, isBoardDisabled, isWFDisabled, inputFile, isClosable]);
881
+ // Retrieves the current document form setting based on the normalized TID
882
+ const getCurrentDcmtFormSetting = () => {
883
+ const settings = SDKUI_Globals.userSettings.dcmtFormSettings;
884
+ // Find the index of the setting that matches the normalized TID
885
+ const idx = settings.findIndex(s => Number(s.TID) === normalizedTID);
886
+ // Return both the index and the corresponding setting (or empty object if not found)
887
+ return { idx, setting: settings[idx] ?? {} };
888
+ };
889
+ // Checks if there's a saved panel layout for the current context (ToDo or general)
890
+ const hasSavedLayout = () => {
891
+ const { setting } = getCurrentDcmtFormSetting();
892
+ if (invokedByTodo) {
893
+ // If invoked by ToDo, check for existence of layoutToDo and that it has keys
894
+ return setting.layoutToDo !== undefined && Object.keys(setting.layoutToDo).length > 0;
895
+ }
896
+ else {
897
+ // Otherwise, check for general layout
898
+ return setting.layout !== undefined && Object.keys(setting.layout).length > 0;
899
+ }
900
+ };
901
+ // Persists the current panel states (layout) into user settings
902
+ const persistPanelStates = (state) => {
903
+ // If no valid TID or empty state, skip saving
904
+ if (normalizedTID === undefined || Object.keys(state).length === 0)
905
+ return;
906
+ const settings = SDKUI_Globals.userSettings.dcmtFormSettings;
907
+ const { idx, setting: existingSetting } = getCurrentDcmtFormSetting();
908
+ // Prepare the new setting object with updated layout depending on context
909
+ const newSetting = {
910
+ TID: normalizedTID,
911
+ layout: invokedByTodo ? (existingSetting.layout ?? {}) : state,
912
+ layoutToDo: invokedByTodo ? state : (existingSetting.layoutToDo ?? {}),
913
+ };
914
+ // Replace existing setting if found, otherwise push a new one
915
+ if (idx >= 0) {
916
+ settings[idx] = newSetting;
917
+ }
918
+ else {
919
+ settings.push(newSetting);
920
+ }
921
+ // Assign the updated settings array back to the global settings
922
+ SDKUI_Globals.userSettings.dcmtFormSettings = [...settings];
923
+ };
924
+ // Retrieves the persisted panel states (layout) for the current context
925
+ const getPersistedPanelStates = () => {
926
+ // Do not return layout on mobile devices
927
+ if (isMobile)
928
+ return undefined;
929
+ const settings = getCurrentDcmtFormSetting()?.setting;
930
+ // Return the appropriate layout based on context
931
+ return invokedByTodo ? settings?.layoutToDo : settings?.layout;
932
+ };
933
+ const handleCompleteMoreInfo = useCallback(async () => {
934
+ try {
935
+ TMSpinner.show();
936
+ let newTask = { ...taskMoreInfo, state: Task_States.Completed };
937
+ await SDK_Globals.tmSession?.NewTaskEngine().UpdateAsync(newTask);
938
+ onTaskCompleted?.(newTask);
939
+ onClose?.();
940
+ ShowAlert({ mode: 'success', title: SDKUI_Localizator.MoreInformation, message: SDKUI_Localizator.MoreInfoCompleted, duration: 3000 });
941
+ }
942
+ catch (e) {
943
+ TMSpinner.hide();
944
+ TMExceptionBoxManager.show({ exception: e });
945
+ }
946
+ finally {
947
+ TMSpinner.hide();
948
+ }
949
+ }, [taskMoreInfo, onTaskCompleted, onClose]);
950
+ const handleSignApprove = useCallback(() => {
951
+ if (onOpenS4TViewerRequest && TID && DID) {
952
+ onOpenS4TViewerRequest([{ TID, DID }]);
953
+ return;
954
+ }
955
+ ShowAlert({
956
+ message: "TODO",
957
+ mode: "info",
958
+ duration: 3000,
959
+ title: SDKUI_Localizator.SignatureAndApprove,
960
+ });
961
+ }, [onOpenS4TViewerRequest, TID, DID]);
962
+ const renderDcmtForm = () => {
963
+ // Show flat spinner during initial load (before component is mounted)
964
+ if (isInitialLoading) {
965
+ return _jsx(Spinner, { description: SDKUI_Localizator.Loading, flat: true });
966
+ }
967
+ return (_jsxs("div", { style: {
968
+ display: 'flex',
969
+ flexDirection: deviceType === DeviceType.MOBILE ? 'column' : 'row',
970
+ justifyContent: 'space-between',
971
+ gap: Gutters.getGutters(),
972
+ width: '100%',
973
+ height: '100%',
974
+ position: 'relative',
975
+ overflow: 'hidden'
976
+ }, children: [isNavigating && _jsx(Spinner, { description: SDKUI_Localizator.Loading, flat: false }), (fromDTD) && _jsxs(TMLayoutWaitingContainer, { direction: 'vertical', showWaitPanel: useWaitPanelLocalState ? showWaitPanelLocal : showWaitPanel, showWaitPanelPrimary: useWaitPanelLocalState ? showPrimaryLocal : showPrimary, showWaitPanelSecondary: useWaitPanelLocalState ? showSecondaryLocal : showSecondary, waitPanelTitle: useWaitPanelLocalState ? waitPanelTitleLocal : waitPanelTitle, waitPanelTextPrimary: useWaitPanelLocalState ? waitPanelTextPrimaryLocal : waitPanelTextPrimary, waitPanelValuePrimary: useWaitPanelLocalState ? waitPanelValuePrimaryLocal : waitPanelValuePrimary, waitPanelMaxValuePrimary: useWaitPanelLocalState ? waitPanelMaxValuePrimaryLocal : waitPanelMaxValuePrimary, waitPanelTextSecondary: useWaitPanelLocalState ? waitPanelTextSecondaryLocal : waitPanelTextSecondary, waitPanelValueSecondary: useWaitPanelLocalState ? waitPanelValueSecondaryLocal : waitPanelValueSecondary, waitPanelMaxValueSecondary: useWaitPanelLocalState ? waitPanelMaxValueSecondaryLocal : waitPanelMaxValueSecondary, isCancelable: useWaitPanelLocalState ? dcmtFile ? dcmtFile.size >= 1000000 : false : true, abortController: useWaitPanelLocalState ? abortControllerLocal : abortController, children: [(groupId && groupId.length > 0)
977
+ ? _jsx(TMPanelManagerContainer, { panels: initialPanels, direction: "horizontal", parentId: groupId, showToolbar: showDcmtFormSidebar })
978
+ : _jsxs(TMPanelManagerWithPersistenceProvider, { panels: initialPanels, initialVisibility: allInitialPanelVisibility, defaultDimensions: defaultPanelDimensions, initialDimensions: defaultPanelDimensions, initialMobilePanelId: 'tmDcmtForm', isPersistenceEnabled: !isMobile ? hasSavedLayout() : false, persistPanelStates: !isMobile ? (state) => persistPanelStates(state) : undefined, persistedPanelStates: getPersistedPanelStates(), children: [_jsx(WfButtonStateHandler, { isWFDisabled: isWFDisabled }), _jsx(TMPanelManagerContainer, { panels: initialPanels, direction: "horizontal", parentId: groupId, showToolbar: showDcmtFormSidebar })] }), isOpenDistinctValues &&
979
+ _jsx(TMDistinctValues, { tid: TID, mid: focusedMetadataValue?.mid, isModal: true, showHeader: false, layoutMode: layoutMode, onSelectionChanged: (e) => {
980
+ if (!e)
981
+ return;
982
+ setFormData((prevItems) => prevItems.map((item) => item.tid == e.tid && item.mid === e.mid ? { ...item, value: e.newValue } : item));
983
+ } }), isOpenFormulaEditor &&
984
+ _jsx(TMFormulaEditor, { isModal: true, formMode: FormModes.Update, inputData: getFormula(), showBack: false, onClose: () => setIsOpenFormulaEditor(false), onApplied: (newFormula) => {
985
+ setFormData((prevItems) => prevItems.map((item) => item.tid == newFormula.tid && item.mid === newFormula.mid ? { ...item, value: FormulaHelper.addFormulaTag(newFormula.expression), isSelected: true, isEditable: true } : item));
986
+ setFocusedMetadataValue(prevState => ({
987
+ ...prevState,
988
+ isSelected: true,
989
+ isEditable: true,
990
+ value: FormulaHelper.addFormulaTag(newFormula.expression)
991
+ }));
992
+ } }), showApprovePopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, TID: approvalVID, DID: DID, isReject: 0, onClose: () => setShowApprovePopup(false) }), showRejectPopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, TID: approvalVID, DID: DID, isReject: 1, onClose: () => setShowRejectPopup(false) }), showReAssignPopup && _jsx(WorkFlowReAssignPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, TID: approvalVID, DID: DID, onClose: () => setShowReAssignPopup(false) }), showMoreInfoPopup && _jsx(WorkFlowMoreInfoPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, TID: approvalVID, DID: DID, onClose: () => setShowMoreInfoPopup(false) }), (isModal && onClose) && _jsx("div", { id: "TMDcmtFormShowConfirmForClose-" + id })] }), showToppyForApprove && (_jsx(ToppyHelpCenter, { deviceType: deviceType, usePortal: false, content: workItems.length === 1 ?
993
+ _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: '10px' }, children: _jsx(WorkFlowOperationButtons, { deviceType: deviceType, onApprove: () => setShowApprovePopup(true), onSignApprove: handleSignApprove, onReject: () => setShowRejectPopup(true), onReAssign: () => setShowReAssignPopup(true), onMoreInfo: () => setShowMoreInfoPopup(true) }) })
994
+ :
995
+ _jsxs("div", { style: { padding: 10, color: 'white', maxWidth: '180px', borderRadius: 10, background: '#1B1464 0% 0% no-repeat padding-box', border: '1px solid #FFFFFF' }, children: [`Devi approvare ${workItems.length} workitem(s) per questo documento.`, `Vai alla sezione di approvazione.`] }) })), showToppyForCompleteMoreInfo && (_jsx(ToppyHelpCenter, { deviceType: deviceType, usePortal: false, content: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 10 }, children: [_jsx("div", { style: { padding: 10, color: 'white', maxWidth: '180px', borderRadius: 10, background: '#1B1464 0% 0% no-repeat padding-box', border: '1px solid #FFFFFF' }, children: `${SDKUI_Localizator.MoreInfoCompleteRequestSentBy} ${taskMoreInfo?.fromName}!` }), _jsx(TMButton, { caption: SDKUI_Localizator.CommentAndComplete, color: 'success', showTooltip: false, onClick: () => {
996
+ setShowCommentForm(true);
997
+ } })] }) })), (showCommentForm && TID && DID) &&
998
+ _jsx(TMBlogCommentForm, { context: { engine: 'SearchEngine', object: { tid: TID, did: DID } }, onClose: () => setShowCommentForm(false), refreshCallback: handleCompleteMoreInfo, participants: [], showAttachmentsSection: false, allArchivedDocumentsFileItems: [] }), isOpenDetails &&
999
+ _jsx(StyledModalContainer, { style: { backgroundColor: 'white' }, children: _jsx(TMMasterDetailDcmts, { deviceType: deviceType, isForMaster: false, inputDcmts: getSelectionDcmtInfo(), allowNavigation: allowNavigation, canNext: canNext, canPrev: canPrev, onNext: onNext, onPrev: onPrev, onBack: () => setIsOpenDetails(false) }) }), isOpenMaster &&
1000
+ _jsxs(StyledModalContainer, { style: { backgroundColor: 'white' }, children: [_jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: getSelectionDcmtInfo(), isForMaster: true, allowNavigation: allowNavigation, canNext: canNext, canPrev: canPrev, onNext: onNext, onPrev: onPrev, onBack: () => setIsOpenMaster(false), appendMasterDcmts: handleAddItem }), secondaryMasterDcmts.length > 0 && secondaryMasterDcmts.map((dcmt, index) => {
1001
+ return (_jsx(StyledModalContainer, { style: { backgroundColor: 'white' }, children: _jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: [dcmt], isForMaster: true, allowNavigation: false, onBack: () => handleRemoveItem(dcmt.TID, dcmt.DID), appendMasterDcmts: handleAddItem }) }, `${index}-${dcmt.DID}`));
1002
+ })] }), taskFormDialogComponent, s4TViewerDialogComponent] }));
1003
+ };
1004
+ return (_jsx(_Fragment, { children: (isModal && onClose)
1005
+ ? _jsx(TMModal, { title: titleModal, onClose: handleClose, width: widthModal ?? '100%', height: heightModal ?? '100%', hidePopup: false, askClosingConfirm: true, children: _jsx("div", { style: { width: "100%", height: "100%", display: 'block', padding: "4px", position: 'relative' }, children: renderDcmtForm() }) })
1006
+ : renderDcmtForm() }));
1007
+ };
1008
+ export default TMDcmtForm;
1009
+ /**
1010
+ * Utility function to apply metadata filtering logic
1011
+ * @param data - Array of metadata values to filter
1012
+ * @param showAll - Whether to show all items or limit to maxItems
1013
+ * @param listMaxItems - Maximum number of items to show when showAll is false
1014
+ * @param TID - Document type ID to determine specific filtering rules
1015
+ * @returns Filtered array of metadata values
1016
+ */
1017
+ const applyMetadataFilter = (data, showAll, listMaxItems, TID) => {
1018
+ // Early return for empty data
1019
+ if (!data || data.length === 0)
1020
+ return [];
1021
+ // Base filter: include only metadata with mid > 100
1022
+ const baseFilter = (o) => Boolean(o.mid && o.mid > 100);
1023
+ // Special filter for Draft document type: includes base filter + system fields
1024
+ const draftFilter = (o) => baseFilter(o) ||
1025
+ o.mid === SystemMIDsAsNumber.FileExt ||
1026
+ o.mid === SystemMIDsAsNumber.FileSize ||
1027
+ o.mid === SystemMIDsAsNumber.LastUpdateTime ||
1028
+ o.mid === SystemMIDsAsNumber.CreationTime;
1029
+ // Select the appropriate filter based on document type
1030
+ const currentFilter = TID === SystemTIDs.Drafts ? draftFilter : baseFilter;
1031
+ // Apply filter once
1032
+ const filteredData = data.filter(currentFilter);
1033
+ // Return all filtered data or slice to max items
1034
+ return showAll ? filteredData : filteredData.slice(0, listMaxItems);
1035
+ };
1036
+ //#region Validaion
1037
+ const validateMetadataList = (mvdList = []) => {
1038
+ if (!Array.isArray(mvdList)) {
1039
+ throw new TypeError("metadataList must be an array of ITMMetadataProps.");
1040
+ }
1041
+ return mvdList.reduce((validationItems, mvd) => {
1042
+ const value = mvd.value?.toString() ?? "";
1043
+ if (isValidForValidation(mvd)) {
1044
+ validateRequiredField(mvd, value, validationItems);
1045
+ validateMaxLength(mvd, value, validationItems);
1046
+ }
1047
+ return validationItems;
1048
+ }, []);
1049
+ };
1050
+ const isValidForValidation = (mvd) => { return mvd.mid > 99; };
1051
+ const validateRequiredField = (mvd, value, validationItems) => {
1052
+ if (mvd.isRequired === '1' && !value.trim()) {
1053
+ const message = SDKUI_Localizator.RequiredField;
1054
+ validationItems.push(new ValidationItem(ResultTypes.ERROR, mvd.md?.nameLoc ?? "", message));
1055
+ }
1056
+ };
1057
+ const validateMaxLength = (mvd, value, validationItems) => {
1058
+ const regex = /[!?[\],./*-+'<>:";]/g;
1059
+ const maxLength = mvd.md?.length ?? 0;
1060
+ const isTextOrNumber = mvd.md?.dataType === MetadataDataTypes.Varchar || mvd.md?.dataType === MetadataDataTypes.Number;
1061
+ const isFormula = FormulaHelper.isFormula(value);
1062
+ if (isTextOrNumber && !isFormula && mvd.md?.length && value.replace(regex, '').length > maxLength) {
1063
+ const message = `"${mvd.md.nameLoc ?? "no-name"}" ha superata massimo lunghezza di ${maxLength} caratteri.`;
1064
+ validationItems.push(new ValidationItem(ResultTypes.ERROR, mvd.md.nameLoc ?? "", message));
1065
+ }
1066
+ };
1067
+ //#endregion Validation
1068
+ // Questo componente non renderizza nulla (return null)
1069
+ // ma viene utilizzato come child del Provider per disabilitare il bottone
1070
+ const WfButtonStateHandler = ({ isWFDisabled }) => {
1071
+ const { setToolbarButtonDisabled } = useTMPanelManagerContext();
1072
+ useEffect(() => {
1073
+ setToolbarButtonDisabled('tmWF', isWFDisabled);
1074
+ }, [isWFDisabled, setToolbarButtonDisabled]);
1075
+ return null; // Non renderizza elementi nel DOM
1076
+ };
1077
+ const TMDcmtPreviewWrapper = ({ currentDcmt, layoutMode, fromDTD, dcmtFile, deviceType, isVisible, onFileUpload, enableDragDropOverlay = false }) => {
1078
+ const { setPanelVisibilityById, toggleMaximize, isResizingActive, countVisibleLeafPanels, panelVisibility } = useTMPanelManagerContext();
1079
+ const isMobile = deviceType === DeviceType.MOBILE;
1080
+ return (layoutMode === LayoutModes.Update ?
1081
+ _jsx(TMDcmtPreview, { isVisible: isVisible, onClosePanel: (!isMobile && countVisibleLeafPanels() > 1) ? () => setPanelVisibilityById('tmDcmtPreview', false) : undefined, allowMaximize: !isMobile && countVisibleLeafPanels() > 1, onMaximizePanel: (!isMobile && countVisibleLeafPanels() > 1) ? () => toggleMaximize("tmDcmtPreview") : undefined, dcmtData: currentDcmt, isResizingActive: isResizingActive }) :
1082
+ _jsx(TMFileUploader, { onFileUpload: onFileUpload, onClose: (!isMobile && countVisibleLeafPanels() > 1) ? () => setPanelVisibilityById('tmDcmtPreview', false) : undefined, isRequired: fromDTD?.archiveConstraint === ArchiveConstraints.ContentCompulsory && dcmtFile === null, defaultBlob: dcmtFile, deviceType: deviceType, isResizingActive: isResizingActive, enableDragDropOverlay: panelVisibility['tmDcmtPreview'] && enableDragDropOverlay }));
1083
+ };