@topconsultnpm/sdkui-react 6.17.0-test9

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 (698) 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 +63 -0
  306. package/lib/components/base/Styled.js +337 -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/TMCustomButton.d.ts +11 -0
  328. package/lib/components/base/TMCustomButton.js +116 -0
  329. package/lib/components/base/TMDataGrid.d.ts +56 -0
  330. package/lib/components/base/TMDataGrid.js +237 -0
  331. package/lib/components/base/TMDataGridExportForm.d.ts +15 -0
  332. package/lib/components/base/TMDataGridExportForm.js +215 -0
  333. package/lib/components/base/TMDeviceProvider.d.ts +15 -0
  334. package/lib/components/base/TMDeviceProvider.js +41 -0
  335. package/lib/components/base/TMDropDownMenu.d.ts +23 -0
  336. package/lib/components/base/TMDropDownMenu.js +45 -0
  337. package/lib/components/base/TMEditorBase.d.ts +39 -0
  338. package/lib/components/base/TMEditorBase.js +1 -0
  339. package/lib/components/base/TMFileManager.d.ts +45 -0
  340. package/lib/components/base/TMFileManager.js +233 -0
  341. package/lib/components/base/TMFileManagerDataGridView.d.ts +16 -0
  342. package/lib/components/base/TMFileManagerDataGridView.js +101 -0
  343. package/lib/components/base/TMFileManagerThumbnailItems.d.ts +18 -0
  344. package/lib/components/base/TMFileManagerThumbnailItems.js +148 -0
  345. package/lib/components/base/TMFileManagerThumbnailsView.d.ts +19 -0
  346. package/lib/components/base/TMFileManagerThumbnailsView.js +46 -0
  347. package/lib/components/base/TMFileManagerUtils.d.ts +78 -0
  348. package/lib/components/base/TMFileManagerUtils.js +207 -0
  349. package/lib/components/base/TMFloatingToolbar.d.ts +9 -0
  350. package/lib/components/base/TMFloatingToolbar.js +101 -0
  351. package/lib/components/base/TMLayout.d.ts +55 -0
  352. package/lib/components/base/TMLayout.js +201 -0
  353. package/lib/components/base/TMList.d.ts +9 -0
  354. package/lib/components/base/TMList.js +54 -0
  355. package/lib/components/base/TMListView.d.ts +42 -0
  356. package/lib/components/base/TMListView.js +387 -0
  357. package/lib/components/base/TMModal.d.ts +16 -0
  358. package/lib/components/base/TMModal.js +70 -0
  359. package/lib/components/base/TMPanel.d.ts +32 -0
  360. package/lib/components/base/TMPanel.js +181 -0
  361. package/lib/components/base/TMPopUp.d.ts +33 -0
  362. package/lib/components/base/TMPopUp.js +267 -0
  363. package/lib/components/base/TMProgressBar.d.ts +11 -0
  364. package/lib/components/base/TMProgressBar.js +32 -0
  365. package/lib/components/base/TMResizableMenu.d.ts +20 -0
  366. package/lib/components/base/TMResizableMenu.js +98 -0
  367. package/lib/components/base/TMRightSidebar.d.ts +19 -0
  368. package/lib/components/base/TMRightSidebar.js +80 -0
  369. package/lib/components/base/TMShowAllOrMaxItemsButton.d.ts +8 -0
  370. package/lib/components/base/TMShowAllOrMaxItemsButton.js +20 -0
  371. package/lib/components/base/TMSpinner.d.ts +14 -0
  372. package/lib/components/base/TMSpinner.js +160 -0
  373. package/lib/components/base/TMTab.d.ts +20 -0
  374. package/lib/components/base/TMTab.js +42 -0
  375. package/lib/components/base/TMToggleButton.d.ts +10 -0
  376. package/lib/components/base/TMToggleButton.js +58 -0
  377. package/lib/components/base/TMToolbarCard.d.ts +19 -0
  378. package/lib/components/base/TMToolbarCard.js +51 -0
  379. package/lib/components/base/TMTooltip.d.ts +14 -0
  380. package/lib/components/base/TMTooltip.js +20 -0
  381. package/lib/components/base/TMTreeView.d.ts +32 -0
  382. package/lib/components/base/TMTreeView.js +356 -0
  383. package/lib/components/base/TMUserAvatar.d.ts +8 -0
  384. package/lib/components/base/TMUserAvatar.js +34 -0
  385. package/lib/components/base/TMVilViewer.d.ts +5 -0
  386. package/lib/components/base/TMVilViewer.js +22 -0
  387. package/lib/components/base/TMWaitPanel.d.ts +32 -0
  388. package/lib/components/base/TMWaitPanel.js +44 -0
  389. package/lib/components/choosers/TMCultureIDPicker.d.ts +9 -0
  390. package/lib/components/choosers/TMCultureIDPicker.js +72 -0
  391. package/lib/components/choosers/TMDataListItemChooser.d.ts +17 -0
  392. package/lib/components/choosers/TMDataListItemChooser.js +49 -0
  393. package/lib/components/choosers/TMDataListItemPicker.d.ts +9 -0
  394. package/lib/components/choosers/TMDataListItemPicker.js +96 -0
  395. package/lib/components/choosers/TMDcmtTypeChooser.d.ts +25 -0
  396. package/lib/components/choosers/TMDcmtTypeChooser.js +61 -0
  397. package/lib/components/choosers/TMDiskChooser.d.ts +10 -0
  398. package/lib/components/choosers/TMDiskChooser.js +41 -0
  399. package/lib/components/choosers/TMDistinctValues.d.ts +21 -0
  400. package/lib/components/choosers/TMDistinctValues.js +140 -0
  401. package/lib/components/choosers/TMDynDataListItemChooser.d.ts +40 -0
  402. package/lib/components/choosers/TMDynDataListItemChooser.js +159 -0
  403. package/lib/components/choosers/TMGroupChooser.d.ts +7 -0
  404. package/lib/components/choosers/TMGroupChooser.js +37 -0
  405. package/lib/components/choosers/TMInvoiceRetrieveFormats.d.ts +4 -0
  406. package/lib/components/choosers/TMInvoiceRetrieveFormats.js +22 -0
  407. package/lib/components/choosers/TMMetadataChooser.d.ts +54 -0
  408. package/lib/components/choosers/TMMetadataChooser.js +142 -0
  409. package/lib/components/choosers/TMOrderRetrieveFormats.d.ts +4 -0
  410. package/lib/components/choosers/TMOrderRetrieveFormats.js +22 -0
  411. package/lib/components/choosers/TMPathChooser.d.ts +12 -0
  412. package/lib/components/choosers/TMPathChooser.js +147 -0
  413. package/lib/components/choosers/TMRelationChooser.d.ts +31 -0
  414. package/lib/components/choosers/TMRelationChooser.js +94 -0
  415. package/lib/components/choosers/TMUserChooser.d.ts +40 -0
  416. package/lib/components/choosers/TMUserChooser.js +141 -0
  417. package/lib/components/editors/TMCheckBox.d.ts +9 -0
  418. package/lib/components/editors/TMCheckBox.js +90 -0
  419. package/lib/components/editors/TMDateBox.d.ts +17 -0
  420. package/lib/components/editors/TMDateBox.js +75 -0
  421. package/lib/components/editors/TMDropDown.d.ts +10 -0
  422. package/lib/components/editors/TMDropDown.js +62 -0
  423. package/lib/components/editors/TMEditorStyled.d.ts +41 -0
  424. package/lib/components/editors/TMEditorStyled.js +90 -0
  425. package/lib/components/editors/TMFormulaEditor.d.ts +49 -0
  426. package/lib/components/editors/TMFormulaEditor.js +727 -0
  427. package/lib/components/editors/TMHtmlContentDisplay.d.ts +7 -0
  428. package/lib/components/editors/TMHtmlContentDisplay.js +78 -0
  429. package/lib/components/editors/TMHtmlEditor.d.ts +38 -0
  430. package/lib/components/editors/TMHtmlEditor.js +203 -0
  431. package/lib/components/editors/TMLocalizedTextBox.d.ts +19 -0
  432. package/lib/components/editors/TMLocalizedTextBox.js +125 -0
  433. package/lib/components/editors/TMMetadataEditor.d.ts +29 -0
  434. package/lib/components/editors/TMMetadataEditor.js +140 -0
  435. package/lib/components/editors/TMMetadataValues.d.ts +46 -0
  436. package/lib/components/editors/TMMetadataValues.js +530 -0
  437. package/lib/components/editors/TMRadioButton.d.ts +10 -0
  438. package/lib/components/editors/TMRadioButton.js +57 -0
  439. package/lib/components/editors/TMSummary.d.ts +20 -0
  440. package/lib/components/editors/TMSummary.js +92 -0
  441. package/lib/components/editors/TMTextArea.d.ts +17 -0
  442. package/lib/components/editors/TMTextArea.js +155 -0
  443. package/lib/components/editors/TMTextBox.d.ts +20 -0
  444. package/lib/components/editors/TMTextBox.js +249 -0
  445. package/lib/components/editors/TMTextExpression.d.ts +25 -0
  446. package/lib/components/editors/TMTextExpression.js +174 -0
  447. package/lib/components/editors/TMTreeDropDown.d.ts +18 -0
  448. package/lib/components/editors/TMTreeDropDown.js +66 -0
  449. package/lib/components/features/archive/TMArchive.d.ts +29 -0
  450. package/lib/components/features/archive/TMArchive.js +193 -0
  451. package/lib/components/features/assistant/ToppyHelpCenter.d.ts +12 -0
  452. package/lib/components/features/assistant/ToppyHelpCenter.js +173 -0
  453. package/lib/components/features/blog/TMBlogCommentForm.d.ts +17 -0
  454. package/lib/components/features/blog/TMBlogCommentForm.js +333 -0
  455. package/lib/components/features/documents/TMBatchUpdateForm.d.ts +17 -0
  456. package/lib/components/features/documents/TMBatchUpdateForm.js +159 -0
  457. package/lib/components/features/documents/TMDcmtBlog.d.ts +23 -0
  458. package/lib/components/features/documents/TMDcmtBlog.js +65 -0
  459. package/lib/components/features/documents/TMDcmtForm.d.ts +64 -0
  460. package/lib/components/features/documents/TMDcmtForm.js +1245 -0
  461. package/lib/components/features/documents/TMDcmtIcon.d.ts +18 -0
  462. package/lib/components/features/documents/TMDcmtIcon.js +93 -0
  463. package/lib/components/features/documents/TMDcmtPreview.d.ts +31 -0
  464. package/lib/components/features/documents/TMDcmtPreview.js +446 -0
  465. package/lib/components/features/documents/TMDcmtTasks.d.ts +13 -0
  466. package/lib/components/features/documents/TMDcmtTasks.js +24 -0
  467. package/lib/components/features/documents/TMDragDropOverlay.d.ts +6 -0
  468. package/lib/components/features/documents/TMDragDropOverlay.js +97 -0
  469. package/lib/components/features/documents/TMFileUploader.d.ts +14 -0
  470. package/lib/components/features/documents/TMFileUploader.js +115 -0
  471. package/lib/components/features/documents/TMMasterDetailDcmts.d.ts +26 -0
  472. package/lib/components/features/documents/TMMasterDetailDcmts.js +288 -0
  473. package/lib/components/features/documents/TMRelationViewer.d.ts +121 -0
  474. package/lib/components/features/documents/TMRelationViewer.js +753 -0
  475. package/lib/components/features/search/TMSavedQueryForm.d.ts +9 -0
  476. package/lib/components/features/search/TMSavedQueryForm.js +41 -0
  477. package/lib/components/features/search/TMSavedQuerySelector.d.ts +16 -0
  478. package/lib/components/features/search/TMSavedQuerySelector.js +226 -0
  479. package/lib/components/features/search/TMSearch.d.ts +40 -0
  480. package/lib/components/features/search/TMSearch.js +253 -0
  481. package/lib/components/features/search/TMSearchQueryEditor.d.ts +15 -0
  482. package/lib/components/features/search/TMSearchQueryEditor.js +367 -0
  483. package/lib/components/features/search/TMSearchQueryPanel.d.ts +29 -0
  484. package/lib/components/features/search/TMSearchQueryPanel.js +438 -0
  485. package/lib/components/features/search/TMSearchResult.d.ts +53 -0
  486. package/lib/components/features/search/TMSearchResult.js +1092 -0
  487. package/lib/components/features/search/TMSearchResultFloatingActionButton.d.ts +16 -0
  488. package/lib/components/features/search/TMSearchResultFloatingActionButton.js +50 -0
  489. package/lib/components/features/search/TMSearchResultsMenuItems.d.ts +11 -0
  490. package/lib/components/features/search/TMSearchResultsMenuItems.js +725 -0
  491. package/lib/components/features/search/TMTreeSelector.d.ts +12 -0
  492. package/lib/components/features/search/TMTreeSelector.js +270 -0
  493. package/lib/components/features/tasks/TMTaskForm.d.ts +38 -0
  494. package/lib/components/features/tasks/TMTaskForm.js +387 -0
  495. package/lib/components/features/tasks/TMTasksAgenda.d.ts +17 -0
  496. package/lib/components/features/tasks/TMTasksAgenda.js +107 -0
  497. package/lib/components/features/tasks/TMTasksCalendar.d.ts +21 -0
  498. package/lib/components/features/tasks/TMTasksCalendar.js +240 -0
  499. package/lib/components/features/tasks/TMTasksHeader.d.ts +14 -0
  500. package/lib/components/features/tasks/TMTasksHeader.js +37 -0
  501. package/lib/components/features/tasks/TMTasksPanelContent.d.ts +20 -0
  502. package/lib/components/features/tasks/TMTasksPanelContent.js +65 -0
  503. package/lib/components/features/tasks/TMTasksUtils.d.ts +132 -0
  504. package/lib/components/features/tasks/TMTasksUtils.js +634 -0
  505. package/lib/components/features/tasks/TMTasksUtilsView.d.ts +39 -0
  506. package/lib/components/features/tasks/TMTasksUtilsView.js +140 -0
  507. package/lib/components/features/tasks/TMTasksView.d.ts +40 -0
  508. package/lib/components/features/tasks/TMTasksView.js +560 -0
  509. package/lib/components/features/wg/TMWGsCopyMoveForm.d.ts +39 -0
  510. package/lib/components/features/wg/TMWGsCopyMoveForm.js +439 -0
  511. package/lib/components/features/workflow/TMWorkflowPopup.d.ts +42 -0
  512. package/lib/components/features/workflow/TMWorkflowPopup.js +286 -0
  513. package/lib/components/features/workflow/diagram/ConnectionComponent.d.ts +14 -0
  514. package/lib/components/features/workflow/diagram/ConnectionComponent.js +90 -0
  515. package/lib/components/features/workflow/diagram/ConnectionForm.d.ts +9 -0
  516. package/lib/components/features/workflow/diagram/ConnectionForm.js +73 -0
  517. package/lib/components/features/workflow/diagram/DiagramItemComponent.d.ts +18 -0
  518. package/lib/components/features/workflow/diagram/DiagramItemComponent.js +264 -0
  519. package/lib/components/features/workflow/diagram/DiagramItemForm.d.ts +10 -0
  520. package/lib/components/features/workflow/diagram/DiagramItemForm.js +686 -0
  521. package/lib/components/features/workflow/diagram/DiagramItemSvgContent.d.ts +12 -0
  522. package/lib/components/features/workflow/diagram/DiagramItemSvgContent.js +97 -0
  523. package/lib/components/features/workflow/diagram/RecipientList.d.ts +27 -0
  524. package/lib/components/features/workflow/diagram/RecipientList.js +204 -0
  525. package/lib/components/features/workflow/diagram/WFDiagram.d.ts +9 -0
  526. package/lib/components/features/workflow/diagram/WFDiagram.js +1680 -0
  527. package/lib/components/features/workflow/diagram/WorkitemRecipientsEditor.d.ts +18 -0
  528. package/lib/components/features/workflow/diagram/WorkitemRecipientsEditor.js +97 -0
  529. package/lib/components/features/workflow/diagram/interfaces.d.ts +126 -0
  530. package/lib/components/features/workflow/diagram/interfaces.js +26 -0
  531. package/lib/components/features/workflow/diagram/metadataParser.d.ts +14 -0
  532. package/lib/components/features/workflow/diagram/metadataParser.js +54 -0
  533. package/lib/components/features/workflow/diagram/queryDescriptorParser.d.ts +3 -0
  534. package/lib/components/features/workflow/diagram/queryDescriptorParser.js +188 -0
  535. package/lib/components/features/workflow/diagram/workflowHelpers.d.ts +122 -0
  536. package/lib/components/features/workflow/diagram/workflowHelpers.js +488 -0
  537. package/lib/components/features/workflow/diagram/xmlParser.d.ts +10 -0
  538. package/lib/components/features/workflow/diagram/xmlParser.js +490 -0
  539. package/lib/components/filesystem/ProgressBar.d.ts +7 -0
  540. package/lib/components/filesystem/ProgressBar.js +25 -0
  541. package/lib/components/forms/Login/ChangePassword.d.ts +9 -0
  542. package/lib/components/forms/Login/ChangePassword.js +22 -0
  543. package/lib/components/forms/Login/ChangePasswordInputs.d.ts +14 -0
  544. package/lib/components/forms/Login/ChangePasswordInputs.js +80 -0
  545. package/lib/components/forms/Login/Chooser.d.ts +28 -0
  546. package/lib/components/forms/Login/Chooser.js +145 -0
  547. package/lib/components/forms/Login/LOGINLocalizator.d.ts +29 -0
  548. package/lib/components/forms/Login/LOGINLocalizator.js +247 -0
  549. package/lib/components/forms/Login/LoginValidatorService.d.ts +50 -0
  550. package/lib/components/forms/Login/LoginValidatorService.js +162 -0
  551. package/lib/components/forms/Login/Menu.d.ts +10 -0
  552. package/lib/components/forms/Login/Menu.js +48 -0
  553. package/lib/components/forms/Login/OTPReader.d.ts +14 -0
  554. package/lib/components/forms/Login/OTPReader.js +90 -0
  555. package/lib/components/forms/Login/PasswordStrengthChecker.d.ts +7 -0
  556. package/lib/components/forms/Login/PasswordStrengthChecker.js +45 -0
  557. package/lib/components/forms/Login/RapidAccessLogin.d.ts +25 -0
  558. package/lib/components/forms/Login/RapidAccessLogin.js +310 -0
  559. package/lib/components/forms/Login/RecoverPasswordFlow.d.ts +11 -0
  560. package/lib/components/forms/Login/RecoverPasswordFlow.js +111 -0
  561. package/lib/components/forms/Login/SelectBox.d.ts +23 -0
  562. package/lib/components/forms/Login/SelectBox.js +96 -0
  563. package/lib/components/forms/Login/StepIndicator.d.ts +7 -0
  564. package/lib/components/forms/Login/StepIndicator.js +19 -0
  565. package/lib/components/forms/Login/TMLoginForm.d.ts +44 -0
  566. package/lib/components/forms/Login/TMLoginForm.js +737 -0
  567. package/lib/components/forms/Login/TextBox.d.ts +27 -0
  568. package/lib/components/forms/Login/TextBox.js +111 -0
  569. package/lib/components/forms/TMApplyForm.d.ts +4 -0
  570. package/lib/components/forms/TMApplyForm.js +105 -0
  571. package/lib/components/forms/TMChooserForm.d.ts +3 -0
  572. package/lib/components/forms/TMChooserForm.js +94 -0
  573. package/lib/components/forms/TMResultDialog.d.ts +20 -0
  574. package/lib/components/forms/TMResultDialog.js +44 -0
  575. package/lib/components/forms/TMSaveForm.d.ts +31 -0
  576. package/lib/components/forms/TMSaveForm.js +176 -0
  577. package/lib/components/grids/TMBlogAttachments.d.ts +42 -0
  578. package/lib/components/grids/TMBlogAttachments.js +43 -0
  579. package/lib/components/grids/TMBlogHeader.d.ts +31 -0
  580. package/lib/components/grids/TMBlogHeader.js +41 -0
  581. package/lib/components/grids/TMBlogsPost.d.ts +87 -0
  582. package/lib/components/grids/TMBlogsPost.js +644 -0
  583. package/lib/components/grids/TMBlogsPostUtils.d.ts +113 -0
  584. package/lib/components/grids/TMBlogsPostUtils.js +250 -0
  585. package/lib/components/grids/TMRecentsManager.d.ts +13 -0
  586. package/lib/components/grids/TMRecentsManager.js +155 -0
  587. package/lib/components/grids/TMValidationItemsList.d.ts +6 -0
  588. package/lib/components/grids/TMValidationItemsList.js +82 -0
  589. package/lib/components/index.d.ts +115 -0
  590. package/lib/components/index.js +137 -0
  591. package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +10 -0
  592. package/lib/components/layout/panelManager/TMPanelManagerContainer.js +215 -0
  593. package/lib/components/layout/panelManager/TMPanelManagerContext.d.ts +39 -0
  594. package/lib/components/layout/panelManager/TMPanelManagerContext.js +257 -0
  595. package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +11 -0
  596. package/lib/components/layout/panelManager/TMPanelManagerToolbar.js +83 -0
  597. package/lib/components/layout/panelManager/TMPanelManagerWithPersistenceProvider.d.ts +21 -0
  598. package/lib/components/layout/panelManager/TMPanelManagerWithPersistenceProvider.js +64 -0
  599. package/lib/components/layout/panelManager/TMPanelWrapper.d.ts +8 -0
  600. package/lib/components/layout/panelManager/TMPanelWrapper.js +59 -0
  601. package/lib/components/layout/panelManager/types.d.ts +42 -0
  602. package/lib/components/layout/panelManager/types.js +1 -0
  603. package/lib/components/layout/panelManager/utils.d.ts +21 -0
  604. package/lib/components/layout/panelManager/utils.js +208 -0
  605. package/lib/components/pages/TMPage.d.ts +38 -0
  606. package/lib/components/pages/TMPage.js +220 -0
  607. package/lib/components/query/TMQueryEditor.d.ts +58 -0
  608. package/lib/components/query/TMQueryEditor.js +1001 -0
  609. package/lib/components/query/TMQuerySummary.d.ts +16 -0
  610. package/lib/components/query/TMQuerySummary.js +35 -0
  611. package/lib/components/settings/SettingsAppearance.d.ts +14 -0
  612. package/lib/components/settings/SettingsAppearance.js +73 -0
  613. package/lib/components/sidebar/TMAboutApp.d.ts +8 -0
  614. package/lib/components/sidebar/TMAboutApp.js +14 -0
  615. package/lib/components/sidebar/TMCommandsPanel.d.ts +16 -0
  616. package/lib/components/sidebar/TMCommandsPanel.js +27 -0
  617. package/lib/components/sidebar/TMHeader.d.ts +43 -0
  618. package/lib/components/sidebar/TMHeader.js +616 -0
  619. package/lib/components/sidebar/TMSidebar.d.ts +21 -0
  620. package/lib/components/sidebar/TMSidebar.js +61 -0
  621. package/lib/components/sidebar/TMSidebarItem.d.ts +15 -0
  622. package/lib/components/sidebar/TMSidebarItem.js +39 -0
  623. package/lib/components/viewers/TMDataListItemViewer.d.ts +10 -0
  624. package/lib/components/viewers/TMDataListItemViewer.js +80 -0
  625. package/lib/components/viewers/TMMidViewer.d.ts +36 -0
  626. package/lib/components/viewers/TMMidViewer.js +128 -0
  627. package/lib/components/viewers/TMTidViewer.d.ts +256 -0
  628. package/lib/components/viewers/TMTidViewer.js +343 -0
  629. package/lib/components/wizard/TMStepIndicator.d.ts +11 -0
  630. package/lib/components/wizard/TMStepIndicator.js +165 -0
  631. package/lib/components/wizard/TMWizard.d.ts +18 -0
  632. package/lib/components/wizard/TMWizard.js +93 -0
  633. package/lib/css/tm-sdkui.css +1 -0
  634. package/lib/helper/DeepCompareHelper.d.ts +7 -0
  635. package/lib/helper/DeepCompareHelper.js +106 -0
  636. package/lib/helper/Enum_Localizator.d.ts +18 -0
  637. package/lib/helper/Enum_Localizator.js +247 -0
  638. package/lib/helper/GlobalStyles.d.ts +2 -0
  639. package/lib/helper/GlobalStyles.js +10 -0
  640. package/lib/helper/Globalization.d.ts +15 -0
  641. package/lib/helper/Globalization.js +110 -0
  642. package/lib/helper/SDKUI_Globals.d.ts +96 -0
  643. package/lib/helper/SDKUI_Globals.js +174 -0
  644. package/lib/helper/SDKUI_Localizator.d.ts +738 -0
  645. package/lib/helper/SDKUI_Localizator.js +7288 -0
  646. package/lib/helper/TMCommandsContextMenu.d.ts +14 -0
  647. package/lib/helper/TMCommandsContextMenu.js +6 -0
  648. package/lib/helper/TMConditionalWrapper.d.ts +8 -0
  649. package/lib/helper/TMConditionalWrapper.js +4 -0
  650. package/lib/helper/TMCustomSearchBar.d.ts +8 -0
  651. package/lib/helper/TMCustomSearchBar.js +54 -0
  652. package/lib/helper/TMIcons.d.ts +274 -0
  653. package/lib/helper/TMIcons.js +673 -0
  654. package/lib/helper/TMImageLibrary.d.ts +4 -0
  655. package/lib/helper/TMImageLibrary.js +466 -0
  656. package/lib/helper/TMToppyMessage.d.ts +7 -0
  657. package/lib/helper/TMToppyMessage.js +42 -0
  658. package/lib/helper/TMUtils.d.ts +26 -0
  659. package/lib/helper/TMUtils.js +212 -0
  660. package/lib/helper/dcmtsHelper.d.ts +8 -0
  661. package/lib/helper/dcmtsHelper.js +49 -0
  662. package/lib/helper/helpers.d.ts +84 -0
  663. package/lib/helper/helpers.js +826 -0
  664. package/lib/helper/index.d.ts +13 -0
  665. package/lib/helper/index.js +13 -0
  666. package/lib/helper/queryHelper.d.ts +19 -0
  667. package/lib/helper/queryHelper.js +336 -0
  668. package/lib/hooks/useDcmtOperations.d.ts +24 -0
  669. package/lib/hooks/useDcmtOperations.js +482 -0
  670. package/lib/hooks/useForm.d.ts +24 -0
  671. package/lib/hooks/useForm.js +157 -0
  672. package/lib/hooks/useInputDialog.d.ts +9 -0
  673. package/lib/hooks/useInputDialog.js +105 -0
  674. package/lib/hooks/useOutsideClick.d.ts +2 -0
  675. package/lib/hooks/useOutsideClick.js +38 -0
  676. package/lib/hooks/usePreventFileDrop.d.ts +3 -0
  677. package/lib/hooks/usePreventFileDrop.js +37 -0
  678. package/lib/hooks/useQueryParametersDialog.d.ts +2 -0
  679. package/lib/hooks/useQueryParametersDialog.js +71 -0
  680. package/lib/hooks/useRelatedDocuments.d.ts +72 -0
  681. package/lib/hooks/useRelatedDocuments.js +655 -0
  682. package/lib/hooks/useResizeObserver.d.ts +4 -0
  683. package/lib/hooks/useResizeObserver.js +22 -0
  684. package/lib/hooks/useWorkflowApprove.d.ts +11 -0
  685. package/lib/hooks/useWorkflowApprove.js +57 -0
  686. package/lib/index.d.ts +12 -0
  687. package/lib/index.js +15 -0
  688. package/lib/services/index.d.ts +1 -0
  689. package/lib/services/index.js +1 -0
  690. package/lib/services/platform_services.d.ts +18 -0
  691. package/lib/services/platform_services.js +492 -0
  692. package/lib/ts/index.d.ts +1 -0
  693. package/lib/ts/index.js +1 -0
  694. package/lib/ts/types.d.ts +310 -0
  695. package/lib/ts/types.js +100 -0
  696. package/lib/utils/theme.d.ts +69 -0
  697. package/lib/utils/theme.js +81 -0
  698. package/package.json +54 -0
@@ -0,0 +1,1245 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
+ import TMDcmtPreview from './TMDcmtPreview';
4
+ import { AccessLevels, ArchiveConstraints, ArchiveEngineByID, DcmtTypeListCacheService, LayoutCacheService, LayoutModes, MetadataDataTypes, ObjectClasses, ResultTypes, SDK_Globals, SDK_Localizator, SystemMIDsAsNumber, SystemTIDs, Task_States, TemplateTIDs, TID_DID, 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, IconCheck, IconActivity, TMImageLibrary } from '../../../helper';
12
+ import { hasDetailRelations, hasMasterRelations, isXMLFileExt } from '../../../helper/dcmtsHelper';
13
+ import { Gutters, TMColors } from '../../../utils/theme';
14
+ import { StyledFormButtonsContainer, StyledLoadingContainer, StyledModalContainer, StyledReferenceButton, 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
+ import TMDcmtTasks from './TMDcmtTasks';
39
+ import TMToppyMessage from '../../../helper/TMToppyMessage';
40
+ import { getTaskAssignedToMe } from '../tasks/TMTasksUtils';
41
+ import TMCustomButton from '../../base/TMCustomButton';
42
+ let abortControllerLocal = new AbortController();
43
+ //#endregion
44
+ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers, showHeader = true, onSaveRecents, layoutMode = LayoutModes.Update, showBackButton = true, 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, isSharedDcmt = false, sharedSourceTID, sharedSourceDID, allowButtonsRefs = false, onReferenceClick, }) => {
45
+ const [id, setID] = useState('');
46
+ const [showWaitPanelLocal, setShowWaitPanelLocal] = useState(false);
47
+ const [waitPanelTitleLocal, setWaitPanelTitleLocal] = useState('');
48
+ const [showPrimaryLocal, setShowPrimaryLocal] = useState(false);
49
+ const [waitPanelTextPrimaryLocal, setWaitPanelTextPrimaryLocal] = useState('');
50
+ const [waitPanelValuePrimaryLocal, setWaitPanelValuePrimaryLocal] = useState(0);
51
+ const [waitPanelMaxValuePrimaryLocal, setWaitPanelMaxValuePrimaryLocal] = useState(0);
52
+ const [showSecondaryLocal, setShowSecondaryLocal] = useState(false);
53
+ const [waitPanelTextSecondaryLocal, setWaitPanelTextSecondaryLocal] = useState('');
54
+ const [waitPanelValueSecondaryLocal, setWaitPanelValueSecondaryLocal] = useState(0);
55
+ const [waitPanelMaxValueSecondaryLocal, setWaitPanelMaxValueSecondaryLocal] = useState(0);
56
+ const [useWaitPanelLocalState, setUseWaitPanelLocalState] = useState(false);
57
+ const [formData, setFormData] = useState([]);
58
+ const [formDataOrig, setFormDataOrig] = useState([]);
59
+ const [validationItems, setValidationItems] = useState([]);
60
+ const [fromDTD, setFromDTD] = useState();
61
+ const [showApprovePopup, setShowApprovePopup] = useState(false);
62
+ const [showRejectPopup, setShowRejectPopup] = useState(false);
63
+ const [showReAssignPopup, setShowReAssignPopup] = useState(false);
64
+ const [showMoreInfoPopup, setShowMoreInfoPopup] = useState(false);
65
+ const [layout, setLayout] = useState();
66
+ const [customButtonsLayout, setCustomButtonsLayout] = useState();
67
+ const [customButton, setCustomButton] = useState();
68
+ const appliedInputMidsRef = useRef(null);
69
+ // Refs per evitare stale closure nei callback
70
+ // I useCallback catturano i valori delle dipendenze al momento della creazione.
71
+ // Questi ref vengono sincronizzati tramite useEffect e permettono di accedere
72
+ // sempre ai valori correnti senza dover ricreare i callback ad ogni cambio di stato.
73
+ const formDataOrigRef = useRef([]);
74
+ const formDataRef = useRef([]);
75
+ const fromDTDRef = useRef();
76
+ const dcmtFileRef = useRef(null);
77
+ const [isOpenDetails, setIsOpenDetails] = useState(false);
78
+ const [isOpenMaster, setIsOpenMaster] = useState(false);
79
+ const [secondaryMasterDcmts, setSecondaryMasterDcmts] = useState([]);
80
+ const [isOpenDistinctValues, setIsOpenDistinctValues] = useState(false);
81
+ const [isOpenFormulaEditor, setIsOpenFormulaEditor] = useState(false);
82
+ const [currentTIDHasDetailRelations, setCurrentTIDHasDetailRelations] = useState();
83
+ const [currentTIDHasMasterRelations, setCurrentTIDHasMasterRelations] = useState();
84
+ const [currentDcmt, setCurrentDcmt] = useState();
85
+ const [dcmtFile, setDcmtFile] = useState(null);
86
+ const [focusedMetadataValue, setFocusedMetadataValue] = useState();
87
+ const [showAll, setShowAll] = useState(layoutMode === LayoutModes.Ark);
88
+ const [fetchError, setFetchError] = useState(false);
89
+ const [isWFDataLoading, setIsWFDataLoading] = useState(false);
90
+ const [workItems, setWorkItems] = useState([]);
91
+ const [workflows, setWorkflows] = useState([]);
92
+ const [showCommentForm, setShowCommentForm] = useState(false);
93
+ const [isInitialLoading, setIsInitialLoading] = useState(true);
94
+ const [isNavigating, setIsNavigating] = useState(false);
95
+ const [dcmtReferences, setDcmtReferences] = useState(undefined);
96
+ // Dcmt Blog states
97
+ const [blogsDatasource, setBlogsDatasource] = useState([]);
98
+ const [hasLoadedDataOnce, setHasLoadedDataOnce] = useState(false); //traccia se *qualsiasi* dato è stato caricato per la prima volta
99
+ const [lastLoadedDid, setLastLoadedDid] = useState(undefined); // `lastLoadedDid` tiene traccia dell'ultimo `did` per cui abbiamo caricato i dati
100
+ useEffect(() => {
101
+ if (!allowButtonsRefs)
102
+ setDcmtReferences(undefined);
103
+ }, [allowButtonsRefs]);
104
+ const { openConfirmAttachmentsDialog, ConfirmAttachmentsDialog } = useInputAttachmentsDialog();
105
+ const { abortController, showWaitPanel, waitPanelTitle, showPrimary, waitPanelTextPrimary, waitPanelValuePrimary, waitPanelMaxValuePrimary, showSecondary, waitPanelTextSecondary, waitPanelValueSecondary, waitPanelMaxValueSecondary, downloadDcmtsAsync } = useDcmtOperations();
106
+ // Custom hook to manage workflow approval data
107
+ const { workflowApproveData } = useWorkflowApprove();
108
+ const fetchErrorShownRef = useRef(false);
109
+ const deviceType = useDeviceType();
110
+ const getDcmts = useCallback(() => {
111
+ return [{ TID: currentDcmt?.tid, DID: currentDcmt?.did, FILEEXT: currentDcmt?.fileExt }];
112
+ }, [currentDcmt?.tid, currentDcmt?.did, currentDcmt?.fileExt]);
113
+ const handleReset = useCallback(() => {
114
+ setDcmtFile(null);
115
+ }, []);
116
+ const setMetadataList = useCallback(async (mdList, getMetadataResult = undefined, archived = false, currentDID) => {
117
+ try {
118
+ let did = currentDID ?? DID;
119
+ if (!did)
120
+ return;
121
+ TMSpinner.show({ description: 'Loading Metadata...' });
122
+ let res = getMetadataResult ?? await SDK_Globals.tmSession?.NewSearchEngine().GetMetadataAsync(TID, did, true);
123
+ let dtd = res?.dtdResult;
124
+ let rows = dtd.rows ? dtd.rows[0] : [];
125
+ let mids = res?.selectMIDs;
126
+ let metadataList = searchResultToMetadataValues(TID, dtd, rows, mids, mdList, layoutMode);
127
+ if (archived) {
128
+ // Usa setFormData con funzione callback per accedere allo stato precedente
129
+ // invece di dipendere da formDataOrig nell'array di dipendenze
130
+ setFormData(prevFormDataOrig => {
131
+ let tempMetadataList = [];
132
+ for (let md of metadataList) {
133
+ if (md.value === null) {
134
+ if (prevFormDataOrig.find(metadata => metadata.mid === md.mid)?.value === '') {
135
+ tempMetadataList.push({ ...md, value: '' });
136
+ }
137
+ if (prevFormDataOrig.find(metadata => metadata.mid === md.mid)?.value === undefined) {
138
+ tempMetadataList.push({ ...md, value: undefined });
139
+ }
140
+ if (prevFormDataOrig.find(metadata => metadata.mid === md.mid)?.value === null) {
141
+ tempMetadataList.push(md);
142
+ }
143
+ }
144
+ else {
145
+ tempMetadataList.push(md);
146
+ }
147
+ }
148
+ return tempMetadataList;
149
+ });
150
+ return;
151
+ }
152
+ setFormDataOrig(structuredClone(metadataList));
153
+ setFormData(structuredClone(metadataList));
154
+ // Sincronizza il ref con i dati caricati per evitare stale closure in handleSave
155
+ formDataOrigRef.current = structuredClone(metadataList);
156
+ }
157
+ catch (e) {
158
+ TMExceptionBoxManager.show({ exception: e });
159
+ }
160
+ finally {
161
+ TMSpinner.hide();
162
+ }
163
+ }, [TID, DID, layoutMode]);
164
+ const fetchData = useCallback(async () => {
165
+ try {
166
+ setFetchError(false);
167
+ if (!TID)
168
+ return;
169
+ if (!DID && layoutMode === LayoutModes.Update)
170
+ return;
171
+ // Esegui chiamate in parallelo per ottimizzare le performance
172
+ const parallelCalls = [
173
+ // 1. GetMetadataAsync - solo se layoutMode === Update
174
+ layoutMode === LayoutModes.Update
175
+ ? SDK_Globals.tmSession?.NewSearchEngine().GetMetadataAsync(TID, DID, true) ?? Promise.resolve(undefined)
176
+ : Promise.resolve(undefined),
177
+ // 2. Layout per il layoutMode corrente
178
+ LayoutCacheService.GetAsync(TID, layoutMode),
179
+ // 3. CustomButtonsLayout - solo se layoutMode === Update
180
+ layoutMode === LayoutModes.Update
181
+ ? LayoutCacheService.GetAsync(TID, LayoutModes.None)
182
+ : Promise.resolve(undefined),
183
+ // 4. Opcionalmente FindAllReferencesAsync se abilitato nelle impostazioni e se i bottoni sono richiesti
184
+ (() => {
185
+ const refs = SDKUI_Globals?.userSettings?.searchSettings?.autoFindReferences ?? [];
186
+ const hasRefs = allowButtonsRefs && Array.isArray(refs) && refs.length > 0;
187
+ return hasRefs
188
+ ? SDK_Globals.tmSession?.NewSearchEngine().FindAllReferencesAsync(TID, DID, refs) ?? Promise.resolve(undefined)
189
+ : Promise.resolve(undefined);
190
+ })()
191
+ ];
192
+ const results = await Promise.all(parallelCalls);
193
+ // Destructuring: first three are always the original ones, fourth is references (or undefined)
194
+ const getMetadataResult = results[0];
195
+ const resLayout = results[1];
196
+ const customButtonsLayoutResult = results[2];
197
+ const findRefsResult = results[3];
198
+ // Save references result into state (may be undefined)
199
+ setDcmtReferences(findRefsResult);
200
+ // Imposta il layout e customButtonsLayout immediatamente
201
+ setLayout(resLayout);
202
+ if (layoutMode === LayoutModes.Update && customButtonsLayoutResult) {
203
+ setCustomButtonsLayout(customButtonsLayoutResult);
204
+ }
205
+ // Carica DTD e metadata
206
+ let dtd = await DcmtTypeListCacheService.GetWithNotGrantedAsync(TID, DID, getMetadataResult);
207
+ setFromDTD(dtd);
208
+ if (layoutMode === LayoutModes.Update || (layoutMode === LayoutModes.Ark && DID)) {
209
+ await setMetadataList(dtd?.metadata ?? [], getMetadataResult);
210
+ }
211
+ else {
212
+ const renderedMetadata = dtd?.metadata?.filter((metadata) => handleArchiveVisibility(metadata)) ?? [];
213
+ const metadataList = searchResultToMetadataValues(dtd?.id, undefined, [], [], renderedMetadata, layoutMode);
214
+ setFormDataOrig(structuredClone(metadataList));
215
+ setFormData(structuredClone(metadataList));
216
+ formDataOrigRef.current = structuredClone(metadataList);
217
+ }
218
+ (layoutMode === LayoutModes.Ark && !inputFile) && handleReset();
219
+ }
220
+ catch (e) {
221
+ setFetchError(true);
222
+ throw e;
223
+ }
224
+ finally {
225
+ setIsInitialLoading(false);
226
+ setIsNavigating(false);
227
+ }
228
+ }, [TID, DID, layoutMode, inputFile, setMetadataList, handleReset, allowButtonsRefs]);
229
+ const createChange = useCallback((mid, metadataType, modifiedValue) => {
230
+ return { mid, metadataType, modifiedValue };
231
+ }, []);
232
+ const getSpecificChangedKeysWithValues = useCallback((originalList, modifiedList) => {
233
+ const changes = [];
234
+ if (!originalList || !modifiedList)
235
+ return changes;
236
+ const originalMap = new Map(originalList.map(item => [item.mid, item]));
237
+ for (const modified of modifiedList) {
238
+ if (modified.mid === undefined)
239
+ continue;
240
+ const original = originalMap.get(modified.mid);
241
+ if (!original)
242
+ continue;
243
+ if (original.value !== modified.value) {
244
+ changes.push(createChange(modified.mid, modified.md?.dataType ?? MetadataDataTypes.Varchar, modified.value));
245
+ }
246
+ }
247
+ return changes;
248
+ }, [createChange]);
249
+ useEffect(() => { setID(genUniqueId()); }, []);
250
+ // Sincronizza i ref con gli stati correnti per evitare stale closure nei callback.
251
+ // I useCallback catturano le variabili delle dipendenze al momento della loro creazione,
252
+ // quindi se uno stato cambia frequentemente, il callback avrebbe sempre valori vecchi.
253
+ // Usando i ref, possiamo accedere sempre ai valori più recenti senza dover ricreare i callback.
254
+ useEffect(() => {
255
+ formDataRef.current = formData;
256
+ }, [formData]);
257
+ useEffect(() => {
258
+ fromDTDRef.current = fromDTD;
259
+ }, [fromDTD]);
260
+ useEffect(() => {
261
+ dcmtFileRef.current = dcmtFile;
262
+ }, [dcmtFile]);
263
+ useEffect(() => {
264
+ if (!inputFile || inputFile === null)
265
+ return;
266
+ setDcmtFile(inputFile);
267
+ }, [inputFile]);
268
+ useEffect(() => {
269
+ const run = async () => {
270
+ try {
271
+ fetchErrorShownRef.current = false; // Reset flag all'inizio
272
+ // Distinguish between initial load and navigation
273
+ if (isInitialLoading) {
274
+ // First load - keep isInitialLoading true
275
+ await fetchData();
276
+ }
277
+ else {
278
+ // Navigation - use isNavigating instead
279
+ setIsNavigating(true);
280
+ await fetchData();
281
+ }
282
+ }
283
+ catch (e) {
284
+ // Mostra l'errore solo se non è già stato mostrato (evita duplicati in StrictMode)
285
+ if (!fetchErrorShownRef.current) {
286
+ fetchErrorShownRef.current = true;
287
+ TMExceptionBoxManager.show({ exception: e });
288
+ // Se il caricamento fallisce, chiudi il form
289
+ onClose?.();
290
+ }
291
+ }
292
+ };
293
+ run();
294
+ }, [TID, DID, fetchData]);
295
+ useEffect(() => {
296
+ if (formData.length > 0) {
297
+ setValidationItems(validateMetadataList(formData));
298
+ const newDcmt = {
299
+ tid: formData.find(o => o.mid == SystemMIDsAsNumber.TID)?.value,
300
+ did: formData.find(o => o.mid == SystemMIDsAsNumber.DID)?.value,
301
+ fileCount: formData.find(o => o.mid == SystemMIDsAsNumber.FileCount)?.value,
302
+ fileSize: formData.find(o => o.mid == SystemMIDsAsNumber.FileSize)?.value,
303
+ fileExt: formData.find(o => o.mid == SystemMIDsAsNumber.FileExt)?.value
304
+ };
305
+ if (!currentDcmt ||
306
+ currentDcmt.tid !== newDcmt.tid ||
307
+ currentDcmt.did !== newDcmt.did ||
308
+ currentDcmt.fileExt !== newDcmt.fileExt ||
309
+ currentDcmt.fileSize !== newDcmt.fileSize ||
310
+ currentDcmt.fileCount !== newDcmt.fileCount) {
311
+ setCurrentDcmt(newDcmt);
312
+ }
313
+ }
314
+ }, [formData, formDataOrig, getSpecificChangedKeysWithValues, currentDcmt]);
315
+ useEffect(() => {
316
+ hasDetailRelations(TID).then((value) => setCurrentTIDHasDetailRelations(value));
317
+ hasMasterRelations(TID).then((value) => setCurrentTIDHasMasterRelations(value));
318
+ }, [TID]);
319
+ useEffect(() => {
320
+ if (layoutMode !== LayoutModes.Ark)
321
+ return;
322
+ setFocusedMetadataValue(undefined);
323
+ appliedInputMidsRef.current = null;
324
+ }, [fromDTD, layoutMode]);
325
+ useEffect(() => {
326
+ if (!inputMids || inputMids.length === 0)
327
+ return;
328
+ if (layoutMode !== LayoutModes.Ark)
329
+ return;
330
+ if (!formData || formData.length === 0)
331
+ return;
332
+ if (!formDataOrig || formDataOrig.length === 0)
333
+ return;
334
+ // Check if formData has actual user metadata (mid > 99), not just system metadata
335
+ if (!formData.some(md => md.mid && md.mid > 99))
336
+ return;
337
+ if (appliedInputMidsRef.current && deepCompare(appliedInputMidsRef.current, inputMids))
338
+ return;
339
+ let data = structuredClone(formData);
340
+ for (let md of data) {
341
+ if (!md.mid)
342
+ continue;
343
+ if (md.mid > 99) {
344
+ const defaultValue = md.md?.defaultValue;
345
+ if (defaultValue) {
346
+ if (FormulaHelper.isFormula(defaultValue)) {
347
+ md.value = undefined;
348
+ }
349
+ else {
350
+ md.value = defaultValue;
351
+ }
352
+ }
353
+ else if (formDataOrig.find(metadata => metadata.mid === md.mid)?.value === undefined) {
354
+ if (md.value)
355
+ md.value = undefined;
356
+ }
357
+ else if (md.value && md.value.length > 0) {
358
+ md.value = '';
359
+ }
360
+ }
361
+ }
362
+ inputMids.forEach(inputMid => {
363
+ const md = data.find(m => m.mid === inputMid.mid);
364
+ if (md) {
365
+ md.value = inputMid.value;
366
+ }
367
+ });
368
+ setFormData(data);
369
+ appliedInputMidsRef.current = inputMids;
370
+ }, [inputMids, layoutMode, formData, formDataOrig]);
371
+ // Memoizza solo il valore WI_SetID per evitare re-render quando altri metadata cambiano
372
+ const workItemSetIDValue = useMemo(() => formData.find(o => o.md?.name === WorkItemMetadataNames.WI_SetID)?.value, [formData]);
373
+ useEffect(() => {
374
+ const loadAllWfData = async () => {
375
+ if (layoutMode !== LayoutModes.Update || !DID) {
376
+ setWorkItems([]);
377
+ setWorkflows([]);
378
+ return;
379
+ }
380
+ setIsWFDataLoading(true);
381
+ try {
382
+ // 1. item da processare in modo sincrono
383
+ const itemsToProcess = [];
384
+ for (const workflow of workflowApproveData) {
385
+ for (const dataRow of workflow.dtdResult?.rows ?? []) {
386
+ const did = Number(dataRow?.[1]);
387
+ if (did === Number(DID)) {
388
+ const tid = Number(dataRow?.[0]);
389
+ itemsToProcess.push({ tid, did });
390
+ }
391
+ }
392
+ }
393
+ if (itemsToProcess.length === 0) {
394
+ setWorkItems([]);
395
+ setWorkflows([]);
396
+ setIsWFDataLoading(false);
397
+ return;
398
+ }
399
+ // promises per i setID in modo condizionale
400
+ let setIDPromises;
401
+ if (workItemSetIDValue !== undefined) {
402
+ // Se abbiamo il setID dal form, non facciamo chiamate di rete.
403
+ setIDPromises = itemsToProcess.map(() => Promise.resolve(workItemSetIDValue));
404
+ }
405
+ else {
406
+ // Altrimenti, procediamo con le chiamate di rete come prima.
407
+ setIDPromises = itemsToProcess.map(item => getWorkItemSetIDAsync(item.tid, item.did));
408
+ }
409
+ // Crea un array di Promise per tutte le chiamate a GetWFInfoAsync
410
+ const workflowInfoPromises = itemsToProcess.map(item => WorkflowCacheService.GetWFInfoAsync(item.tid));
411
+ // Esegui tutte le chiamate in parallelo e attendi i risultati
412
+ const setIDResults = await Promise.all(setIDPromises);
413
+ const workflowInfoResults = await Promise.all(workflowInfoPromises);
414
+ // Combina i risultati
415
+ const finalWorkItems = itemsToProcess.map((item, index) => ({
416
+ ...item,
417
+ setID: setIDResults[index],
418
+ }));
419
+ const validWorkflows = workflowInfoResults.filter(Boolean);
420
+ // Aggiorna lo stato una sola volta con i dati finali
421
+ setWorkItems(finalWorkItems);
422
+ setWorkflows(validWorkflows);
423
+ }
424
+ catch (error) {
425
+ console.error("Errore durante il caricamento dei dati del workflow:", error);
426
+ setWorkItems([]);
427
+ setWorkflows([]);
428
+ }
429
+ finally {
430
+ setIsWFDataLoading(false);
431
+ }
432
+ };
433
+ if (workItemSetIDValue !== undefined || workflowApproveData.length > 0)
434
+ loadAllWfData();
435
+ }, [workItemSetIDValue, workflowApproveData, DID, layoutMode]);
436
+ const getSelectionDcmtInfo = useCallback(() => {
437
+ let dcmts = [];
438
+ dcmts.push({ TID: TID ?? 0, DID: DID ?? 0 });
439
+ return dcmts;
440
+ }, [TID, DID]);
441
+ const handleAddItem = useCallback((tid, did) => {
442
+ let newItem = { TID: tid ?? 0, DID: did ?? 0 };
443
+ setSecondaryMasterDcmts((prevItems) => [...prevItems, newItem]);
444
+ }, []);
445
+ const handleRemoveItem = useCallback((tid, did) => {
446
+ setSecondaryMasterDcmts((prevItems) => prevItems.filter(item => item.TID !== tid && item.DID !== did));
447
+ }, []);
448
+ const handlePassToSearch = useCallback(() => {
449
+ if (!passToSearch)
450
+ return;
451
+ const outputMids = formData
452
+ .filter(md => md.mid && md.mid > 100 && md.value && md.value.length > 0)
453
+ .map(md => ({ mid: md.mid, value: md.value }));
454
+ passToSearch(outputMids, TID);
455
+ }, [passToSearch, formData, TID]);
456
+ const isPreviewDisabled = useMemo(() => layoutMode === LayoutModes.Ark && fromDTD?.archiveConstraint === ArchiveConstraints.OnlyMetadata, [layoutMode, fromDTD?.archiveConstraint]);
457
+ const isBoardDisabled = useMemo(() => layoutMode !== LayoutModes.Update || fromDTD?.hasBlog !== 1, [layoutMode, fromDTD?.hasBlog]);
458
+ const isSysMetadataDisabled = useMemo(() => layoutMode !== LayoutModes.Update, [layoutMode]);
459
+ const isDetailsDisabled = useMemo(() => layoutMode !== LayoutModes.Update || !DID, [layoutMode, DID]);
460
+ const isMasterDisabled = useMemo(() => layoutMode !== LayoutModes.Update || !DID, [layoutMode, DID]);
461
+ const isWFDisabled = useMemo(() => layoutMode !== LayoutModes.Update || fetchError || workItems.length <= 0, [layoutMode, fetchError, workItems.length]);
462
+ const showToppyForApprove = useMemo(() => layoutMode === LayoutModes.Update && !fetchError && workItems.length > 0 && !isOpenDetails && !isOpenMaster, [layoutMode, fetchError, workItems.length, isOpenDetails, isOpenMaster]);
463
+ const showToppyForCompleteMoreInfo = useMemo(() => layoutMode === LayoutModes.Update && isTaskMoreInfo(taskMoreInfo?.name) && taskMoreInfo?.state !== Task_States.Completed, [layoutMode, taskMoreInfo?.name, taskMoreInfo?.state]);
464
+ const showToppyForReferences = useMemo(() => allowButtonsRefs && layoutMode === LayoutModes.Update && dcmtReferences && dcmtReferences.length > 0 && !isOpenDetails && !isOpenMaster, [allowButtonsRefs, layoutMode, dcmtReferences, isOpenDetails, isOpenMaster]);
465
+ const isMobile = useMemo(() => deviceType === DeviceType.MOBILE, [deviceType]);
466
+ const isApprView = useMemo(() => fromDTD?.templateTID === TemplateTIDs.WF_WIApprView, [fromDTD?.templateTID]);
467
+ const workitemSetID = useMemo(() => workItems.find(o => o.did === Number(DID))?.setID || formData.find(o => o.md?.name === WorkItemMetadataNames.WI_SetID)?.value, [workItems, DID, formData]);
468
+ const approvalVID = useMemo(() => workItems.length > 0 ? Number(workItems[0].tid) : -1, [workItems]);
469
+ const commandsMenuItems = useMemo(() => {
470
+ const items = [
471
+ { icon: svgToString(_jsx(IconDownload, {})), operationType: 'singleRow', disabled: fromDTD?.perm?.canRetrieveFile !== AccessLevels.Yes, text: "Download file", onClick: async () => await downloadDcmtsAsync(getDcmts(), DownloadTypes.Dcmt, "download") },
472
+ { icon: svgToString(_jsx(IconDownload, {})), operationType: 'singleRow', disabled: !isXMLFileExt(currentDcmt?.fileExt), text: "Download allegati XML", onClick: async () => await downloadDcmtsAsync(getDcmts(), DownloadTypes.Attachment, "download", undefined, openConfirmAttachmentsDialog) },
473
+ ...(allowRelations && currentTIDHasMasterRelations ? [{ icon: svgToString(_jsx(IconDetailDcmts, { transform: 'scale(-1, 1)' })), operationType: 'singleRow', disabled: isMasterDisabled, text: SDKUI_Localizator.DcmtsMaster, onClick: () => { if (!isMasterDisabled)
474
+ setIsOpenMaster(!isOpenMaster); } }] : []),
475
+ ...(allowRelations && currentTIDHasDetailRelations ? [{ icon: svgToString(_jsx(IconDetailDcmts, {})), operationType: 'singleRow', disabled: isDetailsDisabled, text: SDKUI_Localizator.DcmtsDetail, onClick: () => { if (!isDetailsDisabled)
476
+ setIsOpenDetails(!isOpenDetails); } }] : []),
477
+ ];
478
+ // Aggiungi submenu "Bottoni personalizzati" se esistono customButtons
479
+ if (customButtonsLayout?.customButtons && Array.isArray(customButtonsLayout.customButtons) && customButtonsLayout.customButtons.length > 0) {
480
+ const customButtonsItems = customButtonsLayout.customButtons
481
+ .filter((customButton) => customButton.isForUpdate && customButton.isForUpdate > 0)
482
+ .map((customButton) => ({
483
+ icon: svgToString(TMImageLibrary({ imageID: customButton.glyphID, showPath: true })),
484
+ text: customButton.title || 'Bottone personalizzato',
485
+ onClick: () => setCustomButton(customButton)
486
+ }));
487
+ items.push({
488
+ icon: svgToString(_jsx(IconCheck, {})),
489
+ text: SDKUI_Localizator.CustomButtons,
490
+ items: customButtonsItems
491
+ });
492
+ }
493
+ return items;
494
+ }, [fromDTD?.perm?.canRetrieveFile, currentDcmt?.fileExt, allowRelations, currentTIDHasMasterRelations, isMasterDisabled, currentTIDHasDetailRelations, isDetailsDisabled, customButtonsLayout, getDcmts, downloadDcmtsAsync, openConfirmAttachmentsDialog]);
495
+ const isModified = useMemo(() => calcIsModified(formData, formDataOrig), [formData, formDataOrig]);
496
+ 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 &&
497
+ _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]);
498
+ const handleUndo = useCallback(() => {
499
+ setFormData(structuredClone(formDataOrig));
500
+ }, [formDataOrig]);
501
+ const handleConfirmAction = useCallback(async () => {
502
+ TMMessageBoxManager.show({
503
+ parentId: isModal ? "TMDcmtFormShowConfirmForClose-" + id : undefined,
504
+ buttons: [ButtonNames.YES, ButtonNames.NO],
505
+ message: layoutMode === LayoutModes.Update ? SDKUI_Localizator.SaveQuestion : 'Sei sicuro di voler archiviare questo documento?',
506
+ onButtonClick(e) {
507
+ if (e !== ButtonNames.YES)
508
+ return;
509
+ layoutMode === LayoutModes.Update ? handleSave() : handleArchiveCompleted();
510
+ },
511
+ });
512
+ }, [isModal, id, layoutMode]);
513
+ const handleSave = useCallback(async () => {
514
+ const ue = new UpdateEngineByID(SDK_Globals.tmSession);
515
+ ue.DID = DID;
516
+ ue.TID = TID;
517
+ ue.Metadata_ClearAll();
518
+ try {
519
+ TMSpinner.show({ description: 'Aggiornamento in corso...' });
520
+ // Usa i ref invece degli stati per evitare stale closure.
521
+ // handleSave è un useCallback che verrebbe ricreato ogni volta che formData/formDataOrig cambiano,
522
+ // causando problemi di performance. Usando i ref, possiamo mantenere lo stesso callback
523
+ // ma accedere sempre ai valori correnti tramite formDataRef.current e formDataOrigRef.current.
524
+ const changes = getSpecificChangedKeysWithValues(formDataOrigRef.current, formDataRef.current);
525
+ for (let metadata of changes) {
526
+ if (!metadata.modifiedValue)
527
+ ue.Metadata_AddNull(metadata.mid);
528
+ else {
529
+ switch (metadata.metadataType) {
530
+ case MetadataDataTypes.DateTime:
531
+ ue.Metadata_AddDateTime(metadata.mid, new Date(metadata.modifiedValue));
532
+ break;
533
+ case MetadataDataTypes.Number:
534
+ ue.Metadata_AddNumber(metadata.mid, metadata.modifiedValue);
535
+ break;
536
+ case MetadataDataTypes.Varchar:
537
+ ue.Metadata_AddString(metadata.mid, metadata.modifiedValue);
538
+ break;
539
+ default: ue.Metadata_AddNull(metadata.mid);
540
+ }
541
+ }
542
+ }
543
+ await ue.UpdateAsync();
544
+ // Aggiorna lo stato locale immediatamente dopo il salvataggio riuscito
545
+ // Questo garantisce che isModified diventi false anche se il reload fallisce
546
+ const savedFormData = structuredClone(formDataRef.current);
547
+ setFormDataOrig(savedFormData);
548
+ formDataOrigRef.current = savedFormData;
549
+ // Tenta di ottenere i metadati aggiornati
550
+ let metadataResult = undefined;
551
+ let hasGetMetadataError = false;
552
+ try {
553
+ metadataResult = await SDK_Globals.tmSession?.NewSearchEngine().GetMetadataAsync(TID, DID, true);
554
+ }
555
+ catch (metadataError) {
556
+ hasGetMetadataError = true;
557
+ // Estrai ErrorCode dal campo detail se disponibile
558
+ let errorCode = undefined;
559
+ if (metadataError?.isApiException && metadataError?.response?.detail) {
560
+ try {
561
+ const detailObj = JSON.parse(metadataError.response.detail);
562
+ errorCode = detailObj?.ErrorCode;
563
+ }
564
+ catch (parseError) {
565
+ console.log("Impossibile parsare il detail dell'eccezione:", parseError);
566
+ }
567
+ }
568
+ // Se ErrorCode è -5, mostra messaggio personalizzato, altrimenti mostra l'eccezione originale
569
+ if (errorCode === -5) {
570
+ TMMessageBoxManager.show({
571
+ message: SDKUI_Localizator.DcmtOutOfView,
572
+ buttons: [ButtonNames.OK],
573
+ });
574
+ }
575
+ else {
576
+ TMExceptionBoxManager.show({ exception: metadataError });
577
+ }
578
+ // Usa null per indicare al callback che c'è stato un errore e non deve ritentare
579
+ metadataResult = null;
580
+ }
581
+ // Esegui sempre il callback:
582
+ // - Se metadataResult è un oggetto: refresh normale
583
+ // - Se metadataResult è null: GetMetadataAsync fallito, rimuove il documento dalla griglia senza ritentare
584
+ // - Se metadataResult è undefined: nessun parametro passato, il callback può decidere cosa fare
585
+ await onSavedAsyncCallback?.(TID, DID, metadataResult === null ? null : metadataResult);
586
+ // Mostra messaggio di successo solo se non ci sono stati errori critici
587
+ if (!hasGetMetadataError) {
588
+ if (metadataResult && metadataResult !== null) {
589
+ // Usa fromDTDRef.current invece di fromDTD per evitare stale closure.
590
+ // fromDTD potrebbe essere undefined/vuoto nel callback se lo stato è cambiato,
591
+ // mentre fromDTDRef.current contiene sempre il valore corrente sincronizzato tramite useEffect.
592
+ await setMetadataList(fromDTDRef.current?.metadata ?? [], metadataResult);
593
+ }
594
+ ShowAlert({ mode: 'success', title: 'Form di documento', message: 'Le modifiche sono state salvate con successo', duration: 3000 });
595
+ }
596
+ else
597
+ onClose?.();
598
+ }
599
+ catch (e) {
600
+ TMExceptionBoxManager.show({ exception: e });
601
+ }
602
+ finally {
603
+ TMSpinner.hide();
604
+ }
605
+ }, [DID, TID, getSpecificChangedKeysWithValues, onSavedAsyncCallback, onClose, setMetadataList]);
606
+ const handleArchiveCompleted = useCallback(async () => {
607
+ let firstBlock = true;
608
+ let maxFileSize = 0;
609
+ let operationTitle = 'Archiviazione';
610
+ setUseWaitPanelLocalState(true);
611
+ setShowWaitPanelLocal(true);
612
+ setShowPrimaryLocal(false);
613
+ setShowSecondaryLocal(true);
614
+ setWaitPanelTitleLocal(operationTitle);
615
+ abortControllerLocal = new AbortController();
616
+ const ae = new ArchiveEngineByID(SDK_Globals.tmSession);
617
+ ae.TID = TID;
618
+ ae.Metadata_ClearAll();
619
+ try {
620
+ // Usa formDataRef.current invece di formData per evitare stale closure.
621
+ // Questo garantisce di avere sempre i valori più recenti dei metadati da archiviare.
622
+ for (let metadata of formDataRef.current) {
623
+ if (!metadata.value)
624
+ continue;
625
+ switch (metadata.md?.dataType) {
626
+ case MetadataDataTypes.DateTime:
627
+ ae.Metadata_AddDateTime(metadata.mid, new Date(metadata.value));
628
+ break;
629
+ case MetadataDataTypes.Number:
630
+ ae.Metadata_AddNumber(metadata.mid, parseFloat(metadata.value));
631
+ break;
632
+ case MetadataDataTypes.Varchar:
633
+ ae.Metadata_AddString(metadata.mid, metadata.value);
634
+ break;
635
+ default: ae.Metadata_AddNull(metadata.mid);
636
+ }
637
+ }
638
+ if (connectorFileSave) {
639
+ let file = await connectorFileSave();
640
+ ae.ArchivingFile = file;
641
+ }
642
+ else {
643
+ ae.ArchivingFile = dcmtFileRef.current;
644
+ }
645
+ if (isSharedDcmt && sharedSourceTID && sharedSourceDID) {
646
+ const sharedDcmt = new TID_DID();
647
+ sharedDcmt.tid = sharedSourceTID;
648
+ sharedDcmt.did = sharedSourceDID;
649
+ ae.SharedDcmt = sharedDcmt;
650
+ }
651
+ let newDID = await ae.ArchiveAsync(abortControllerLocal.signal, (pd) => {
652
+ if (firstBlock) {
653
+ maxFileSize = pd.ProgressBarMaximum ?? 0;
654
+ setWaitPanelMaxValueSecondaryLocal(maxFileSize);
655
+ firstBlock = false;
656
+ }
657
+ setWaitPanelValueSecondaryLocal(pd.ProgressBarValue);
658
+ setWaitPanelTextSecondaryLocal(`Archiviazione... ${Globalization.getNumberDisplayValue(pd.ProgressBarValue, true)} / ${Globalization.getNumberDisplayValue(maxFileSize, true)}`);
659
+ if (pd.ProgressBarValue === pd.ProgressBarMaximum) {
660
+ setWaitPanelMaxValueSecondaryLocal(0);
661
+ setWaitPanelValueSecondaryLocal(0);
662
+ setWaitPanelTextSecondaryLocal('');
663
+ firstBlock = true;
664
+ }
665
+ });
666
+ // Aggiorna lo stato locale immediatamente dopo il salvataggio riuscito
667
+ // Questo garantisce che isModified diventi false anche se il reload fallisce
668
+ const savedFormData = structuredClone(formDataRef.current);
669
+ setFormDataOrig(savedFormData);
670
+ formDataOrigRef.current = savedFormData;
671
+ await onSavedAsyncCallback?.(ae.TID, newDID);
672
+ // Usa fromDTDRef.current invece di fromDTD per evitare stale closure,
673
+ // garantendo di avere il descrittore del tipo documento corrente.
674
+ await setMetadataList(fromDTDRef.current?.metadata ?? [], undefined, true, newDID);
675
+ handleReset();
676
+ let newMruTIDS = updateMruTids(SDKUI_Globals.userSettings.archivingSettings.mruTIDs, TID);
677
+ SDKUI_Globals.userSettings.archivingSettings.mruTIDs = newMruTIDS;
678
+ onSaveRecents?.(newMruTIDS);
679
+ ShowAlert({ mode: 'success', title: 'Archiviazione', message: 'Il documento è stato archiviato con successo', duration: 3000 });
680
+ const isDuplication = layoutMode === LayoutModes.Ark && DID;
681
+ if (isDuplication)
682
+ onClose?.();
683
+ }
684
+ catch (err) {
685
+ TMExceptionBoxManager.show({ exception: err });
686
+ }
687
+ finally {
688
+ setWaitPanelTextPrimaryLocal('');
689
+ setWaitPanelMaxValuePrimaryLocal(0);
690
+ setWaitPanelValuePrimaryLocal(0);
691
+ setWaitPanelTextSecondaryLocal('');
692
+ setWaitPanelMaxValueSecondaryLocal(0);
693
+ setWaitPanelValueSecondaryLocal(0);
694
+ setShowWaitPanelLocal(false);
695
+ setUseWaitPanelLocalState(false);
696
+ }
697
+ }, [TID, connectorFileSave, onSavedAsyncCallback, onSaveRecents, onClose, DID, setMetadataList, handleReset, layoutMode, isSharedDcmt]);
698
+ const handleClearForm = useCallback(() => {
699
+ let data = structuredClone(formData);
700
+ if (!data || data.length === 0)
701
+ return;
702
+ for (let md of data) {
703
+ if (!md.mid)
704
+ continue;
705
+ if (md.mid > 99) {
706
+ const defaultValue = md.md?.defaultValue;
707
+ if (defaultValue) {
708
+ if (FormulaHelper.isFormula(defaultValue)) {
709
+ md.value = undefined;
710
+ }
711
+ else {
712
+ md.value = defaultValue;
713
+ }
714
+ }
715
+ else if (formDataOrig.find(metadata => metadata.mid === md.mid)?.value === undefined) {
716
+ if (md.value)
717
+ md.value = undefined;
718
+ }
719
+ else if (md.value && md.value.length > 0) {
720
+ md.value = '';
721
+ }
722
+ }
723
+ }
724
+ setFormData(data);
725
+ }, [formData, formDataOrig]);
726
+ const clearFormBtnDisabled = useMemo(() => formData.filter(md => md.mid && md.value && md.mid > 99 && md.value.length > 0).length > 0, [formData]);
727
+ const archiveBtnDisabled = useMemo(() => layoutMode === LayoutModes.Update || (fromDTD?.archiveConstraint === ArchiveConstraints.ContentCompulsory && !dcmtFile) || validationItems.length > 0, [layoutMode, fromDTD?.archiveConstraint, dcmtFile, validationItems.length]);
728
+ const undoBtnDisabled = useMemo(() => layoutMode === LayoutModes.Update || !isModified, [layoutMode, isModified]);
729
+ const listMaxItems = useMemo(() => getListMaxItems(deviceType ?? DeviceType.DESKTOP), [deviceType]);
730
+ const totalItems = useMemo(() => formData.filter(o => o.mid && o.mid > 100).length, [formData]);
731
+ const metadataValuesSource = useMemo(() => {
732
+ return applyMetadataFilter(formData, showAll, listMaxItems, TID);
733
+ }, [showAll, formData, listMaxItems, TID]);
734
+ const metadataValuesSourceOrig = useMemo(() => {
735
+ return applyMetadataFilter(formDataOrig, showAll, listMaxItems, TID);
736
+ }, [showAll, formDataOrig, listMaxItems, TID]);
737
+ const handleClose = useCallback(() => {
738
+ if (!isModified) {
739
+ onClose?.();
740
+ return;
741
+ }
742
+ TMMessageBoxManager.show({
743
+ parentId: isModal ? "TMDcmtFormShowConfirmForClose-" + id : undefined,
744
+ message: SDKUI_Localizator.SaveQuestion, buttons: [ButtonNames.YES, ButtonNames.NO, ButtonNames.CANCEL],
745
+ onButtonClick: async (e) => {
746
+ try {
747
+ if (e == ButtonNames.CANCEL)
748
+ return;
749
+ if (e == ButtonNames.YES)
750
+ await handleSave();
751
+ onClose?.();
752
+ }
753
+ catch (ex) {
754
+ TMExceptionBoxManager.show({ exception: ex });
755
+ }
756
+ }
757
+ });
758
+ }, [isModified, onClose, isModal, id, handleSave]);
759
+ const getFormula = useCallback(() => {
760
+ let fd = new FormulaDescriptor();
761
+ fd.expression = FormulaHelper.isFormula(focusedMetadataValue?.value) ? FormulaHelper.removeFormulaTag(focusedMetadataValue?.value) : undefined;
762
+ fd.formulaTarget = FormulaTargets.BatchUpdate;
763
+ fd.items = FormulaHelper.TreeViewList(TID ?? 0, getSystemMetadata(true), undefined, FormulaTargets.BatchUpdate, SDK_Globals.dbBrand);
764
+ fd.mid = focusedMetadataValue?.mid ?? 0;
765
+ fd.tid = TID;
766
+ return fd;
767
+ }, [focusedMetadataValue?.value, focusedMetadataValue?.mid, TID]);
768
+ const handleWFOperationCompleted = useCallback(async () => {
769
+ await onWFOperationCompleted?.();
770
+ onClose?.();
771
+ }, [onWFOperationCompleted, onClose]);
772
+ // Determina se showAll deve essere automaticamente true
773
+ // Best practice: usa useMemo per calcolare valori derivati invece di useEffect con setState
774
+ const shouldShowAll = useMemo(() => {
775
+ // Mostra sempre tutti i metadati se:
776
+ // 1. È presente un layout personalizzato (per renderizzare correttamente la gerarchia)
777
+ // 2. È una vista di approvazione workflow
778
+ // 3. È il tipo documento Drafts
779
+ const hasCustomLayout = layout && layout.items && layout.items.length > 0;
780
+ return hasCustomLayout || isApprView || TID === SystemTIDs.Drafts;
781
+ }, [layout, isApprView, TID]);
782
+ // Aggiorna showAll quando shouldShowAll cambia
783
+ useEffect(() => {
784
+ if (shouldShowAll && !showAll) {
785
+ setShowAll(true);
786
+ }
787
+ }, [shouldShowAll, showAll]);
788
+ const fetchBlogDataAsync = useCallback(async (tid, did) => {
789
+ try {
790
+ TMSpinner.show({ description: 'Caricamento - Bacheca...' });
791
+ const res = await SDK_Globals.tmSession?.NewSearchEngine().BlogRetrieveAsync(tid, did);
792
+ setBlogsDatasource(res ?? []);
793
+ setHasLoadedDataOnce(true);
794
+ setLastLoadedDid(did);
795
+ }
796
+ catch (e) {
797
+ let err = e;
798
+ TMExceptionBoxManager.show({ exception: err });
799
+ }
800
+ finally {
801
+ TMSpinner.hide();
802
+ }
803
+ }, []);
804
+ const afterTaskSaved = useCallback(async (task, formMode, forceRefresh = false) => {
805
+ const shouldRefresh = forceRefresh || (task && task.state === Task_States.Completed) || formMode === FormModes.Create || formMode === FormModes.Duplicate;
806
+ if (TID && DID && shouldRefresh) {
807
+ await fetchBlogDataAsync(TID, DID);
808
+ }
809
+ }, [TID, DID]);
810
+ const tmDcmtForm = useMemo(() => {
811
+ return _jsx(_Fragment, { children: metadataValuesSource.length > 0 &&
812
+ _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) => {
813
+ setFormData((prevItems) => prevItems.map((item) => {
814
+ const newItem = newItems.find((newItem) => newItem.tid === item.tid && newItem.mid === item.mid);
815
+ return newItem ? { ...item, ...newItem } : item;
816
+ }));
817
+ }, onAdvancedMenuClick: (e) => {
818
+ switch (e.button) {
819
+ case AdvancedMenuButtons.DistinctValues:
820
+ setIsOpenDistinctValues(!isOpenDistinctValues);
821
+ break;
822
+ case AdvancedMenuButtons.FormulaEditor:
823
+ setIsOpenFormulaEditor(!isOpenFormulaEditor);
824
+ break;
825
+ }
826
+ } }), _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 })] }) :
827
+ _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 })] }) }) }), customButton && _jsx(TMCustomButton, { button: customButton, formData: formData, selectedItems: [], onClose: () => setCustomButton(undefined) }), totalItems > listMaxItems &&
828
+ !isApprView &&
829
+ TID !== SystemTIDs.Drafts &&
830
+ !shouldShowAll &&
831
+ _jsx(TMShowAllOrMaxItemsButton, { showAll: showAll, dataSourceLength: totalItems, onClick: () => { setShowAll(!showAll); } })] }), _jsx(ConfirmAttachmentsDialog, {})] }) });
832
+ }, [
833
+ TID,
834
+ DID,
835
+ metadataValuesSource,
836
+ metadataValuesSourceOrig,
837
+ isExpertMode,
838
+ isOpenDistinctValues,
839
+ focusedMetadataValue?.mid,
840
+ formMode,
841
+ layoutMode,
842
+ deviceType,
843
+ validationItems,
844
+ inputMids,
845
+ layout,
846
+ isModified,
847
+ archiveBtnDisabled,
848
+ clearFormBtnDisabled,
849
+ undoBtnDisabled,
850
+ totalItems,
851
+ listMaxItems,
852
+ isApprView,
853
+ shouldShowAll,
854
+ showAll,
855
+ handleConfirmAction,
856
+ handleUndo,
857
+ handleClearForm
858
+ ]);
859
+ const tmBlog = useMemo(() => _jsx(TMDcmtBlog, { blogsDatasource: blogsDatasource, hasLoadedDataOnce: hasLoadedDataOnce, lastLoadedDid: lastLoadedDid, setBlogsDatasource: setBlogsDatasource, setHasLoadedDataOnce: setHasLoadedDataOnce, setLastLoadedDid: setLastLoadedDid, fetchBlogDataAsync: fetchBlogDataAsync, tid: TID, did: DID, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), [blogsDatasource, hasLoadedDataOnce, lastLoadedDid, TID, DID, allTasks]);
860
+ 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]);
861
+ const tmDcmtPreview = useMemo(() => _jsx(TMDcmtPreviewWrapper, { currentDcmt: currentDcmt, dcmtFile: dcmtFile ?? inputFile, deviceType: deviceType, fromDTD: fromDTD, layoutMode: layoutMode, onFileUpload: (file) => {
862
+ setDcmtFile(file);
863
+ }, enableDragDropOverlay: enableDragDropOverlay }), [currentDcmt, dcmtFile, deviceType, fromDTD, layoutMode, inputFile, enableDragDropOverlay, setDcmtFile]);
864
+ const tmWF = useMemo(() => {
865
+ if (isWFDataLoading) {
866
+ return (_jsx("div", { style: {
867
+ display: 'flex',
868
+ alignItems: 'center',
869
+ justifyContent: 'center',
870
+ width: '100%',
871
+ height: '100%',
872
+ minHeight: '200px'
873
+ }, children: _jsxs(StyledLoadingContainer, { children: [_jsx(StyledSpinner, {}), _jsx("span", { children: `${'Caricamento dati workflow'}...` })] }) }));
874
+ }
875
+ const isAuthorized = !!workflows?.[0]?.diagram;
876
+ return (_jsxs("div", { style: { position: 'relative', width: '100%', height: '100%', display: 'flex', flexDirection: 'column', gap: 3 }, children: [workItems.length > 0
877
+ ? (isAuthorized
878
+ ? _jsx(WFDiagram, { xmlDiagramString: workflows?.[0]?.diagram || '', allowEdit: false, currentSetID: workitemSetID })
879
+ : _jsx("div", { style: {
880
+ position: 'absolute',
881
+ top: '50%',
882
+ left: '50%',
883
+ transform: 'translate(-50%, -50%)',
884
+ fontSize: '1.1rem',
885
+ color: TMColors.primaryColor,
886
+ textAlign: 'center',
887
+ }, children: SDKUI_Localizator.WorkflowDiagramNotAuthorized }))
888
+ : _jsx("div", { style: {
889
+ position: 'absolute',
890
+ top: '50%',
891
+ left: '50%',
892
+ transform: 'translate(-50%, -50%)',
893
+ fontSize: '1.1rem',
894
+ color: TMColors.primaryColor,
895
+ textAlign: 'center',
896
+ }, children: SDKUI_Localizator.WorkitemsToApproveNone }), isAuthorized && !workitemSetID && workItems.length > 0 &&
897
+ _jsx("div", { style: {
898
+ padding: 5,
899
+ backgroundColor: 'khaki',
900
+ borderRadius: 8
901
+ }, children: SDKUI_Localizator.WorkItemTechnicalNote_SetID })] }));
902
+ }, [workflows, formData, workitemSetID, workItems, isWFDataLoading]);
903
+ const tmDcmtTasks = useMemo(() => {
904
+ const isReady = TID && DID && getAllTasks && deleteTaskByIdsCallback && addTaskCallback && editTaskCallback;
905
+ if (!isReady) {
906
+ return _jsx(TMToppyMessage, { message: SDKUI_Localizator.TasksEmpty });
907
+ }
908
+ return (_jsx(TMDcmtTasks, { taskContext: {
909
+ document: {
910
+ tid: Number(TID),
911
+ did: Number(DID),
912
+ name: fromDTD?.nameLoc ?? SDKUI_Localizator.Widget_Activities,
913
+ },
914
+ }, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, afterTaskSaved: afterTaskSaved }));
915
+ }, [allTasks, TID, DID, fromDTD]);
916
+ const normalizedTID = TID !== undefined ? Number(TID) : undefined;
917
+ const defaultPanelDimensions = {
918
+ 'tmDcmtForm': { width: '16.66%', height: '100%' },
919
+ 'tmBlog': { width: '16.66%', height: '100%' },
920
+ 'tmSysMetadata': { width: '16.66%', height: '100%' },
921
+ 'tmDcmtPreview': { width: '16.66%', height: '100%' },
922
+ 'tmWF': { width: '16.66%', height: '100%' },
923
+ 'tmDcmtTasks': { width: '16.66%', height: '100%' },
924
+ };
925
+ const allInitialPanelVisibility = {
926
+ 'tmDcmtForm': true,
927
+ 'tmBlog': false,
928
+ 'tmSysMetadata': false,
929
+ 'tmDcmtPreview': true,
930
+ 'tmWF': false,
931
+ 'tmDcmtTasks': false,
932
+ };
933
+ const initialPanels = useMemo(() => [
934
+ {
935
+ id: 'tmDcmtForm',
936
+ name: SDK_Localizator.Metadatas,
937
+ contentOptions: {
938
+ component: tmDcmtForm,
939
+ isClosable: isClosable,
940
+ panelContainer: {
941
+ showHeader: showHeader,
942
+ title: fromDTD?.nameLoc,
943
+ allowMaximize: !isMobile,
944
+ onBack: showBackButton ? (isClosable && deviceType !== DeviceType.MOBILE) ? undefined : handleClose : undefined,
945
+ onClose: isClosable ? () => { } : undefined,
946
+ toolbar: allowNavigation ? formToolbar : _jsx(_Fragment, {})
947
+ },
948
+ },
949
+ toolbarOptions: {
950
+ icon: _jsx(IconPreview, { fontSize: 24 }),
951
+ visible: true,
952
+ orderNumber: 1,
953
+ isActive: allInitialPanelVisibility['tmDcmtForm']
954
+ }
955
+ },
956
+ {
957
+ id: 'tmBlog',
958
+ name: SDKUI_Localizator.BlogCase,
959
+ contentOptions: { component: tmBlog, panelContainer: { title: SDKUI_Localizator.BlogCase, allowMaximize: !isMobile } },
960
+ toolbarOptions: {
961
+ icon: _jsx(IconBoard, { fontSize: 24 }),
962
+ visible: true,
963
+ disabled: isBoardDisabled,
964
+ orderNumber: 2,
965
+ isActive: allInitialPanelVisibility['tmBlog']
966
+ }
967
+ },
968
+ {
969
+ id: 'tmSysMetadata',
970
+ name: SDKUI_Localizator.MetadataSystem,
971
+ contentOptions: { component: tmSysMetadata, panelContainer: { title: SDKUI_Localizator.MetadataSystem, allowMaximize: !isMobile } },
972
+ toolbarOptions: { icon: _jsx(IconDcmtTypeSys, { fontSize: 24 }), visible: true, disabled: isSysMetadataDisabled, orderNumber: 3, isActive: allInitialPanelVisibility['tmSysMetadata'] }
973
+ },
974
+ {
975
+ id: 'tmDcmtPreview',
976
+ name: SDKUI_Localizator.PreviewDocument,
977
+ contentOptions: { component: tmDcmtPreview },
978
+ toolbarOptions: { icon: _jsx(IconShow, { fontSize: 24 }), disabled: isPreviewDisabled, visible: true, orderNumber: 4, isActive: allInitialPanelVisibility['tmDcmtPreview'] }
979
+ },
980
+ {
981
+ id: 'tmWF',
982
+ name: "Workflow",
983
+ contentOptions: {
984
+ component: tmWF,
985
+ panelContainer: {
986
+ title: "Workflow", allowMaximize: !isMobile
987
+ }
988
+ },
989
+ toolbarOptions: {
990
+ icon: _jsx(IconWorkflow, { fontSize: 24 }),
991
+ visible: true,
992
+ disabled: isWFDisabled,
993
+ orderNumber: 5,
994
+ isActive: allInitialPanelVisibility['tmWF']
995
+ }
996
+ },
997
+ {
998
+ id: 'tmDcmtTasks',
999
+ name: SDKUI_Localizator.Widget_Activities,
1000
+ contentOptions: {
1001
+ component: tmDcmtTasks,
1002
+ },
1003
+ toolbarOptions: {
1004
+ icon: _jsx(IconActivity, { fontSize: 24 }),
1005
+ visible: layoutMode !== LayoutModes.Ark,
1006
+ orderNumber: 6,
1007
+ isActive: allInitialPanelVisibility['tmDcmtTasks'],
1008
+ count: (TID && DID && allTasks && allTasks.length > 0) ?
1009
+ getTaskAssignedToMe(allTasks).filter(task => task.iD1?.toString() === TID.toString()
1010
+ && task.iD2?.toString() === DID.toString()
1011
+ && task.state !== Task_States.Completed).length ?? 0
1012
+ : 0
1013
+ }
1014
+ },
1015
+ ], [fromDTD, showBackButton, tmDcmtForm, tmBlog, tmSysMetadata, tmDcmtPreview, tmWF, tmDcmtTasks, isPreviewDisabled, isSysMetadataDisabled, isBoardDisabled, isWFDisabled, inputFile, isClosable, allTasks, DID, TID]);
1016
+ // Retrieves the current document form setting based on the normalized TID
1017
+ const getCurrentDcmtFormSetting = () => {
1018
+ const settings = SDKUI_Globals.userSettings.dcmtFormSettings;
1019
+ // Find the index of the setting that matches the normalized TID
1020
+ const idx = settings.findIndex(s => Number(s.TID) === normalizedTID);
1021
+ // Return both the index and the corresponding setting (or empty object if not found)
1022
+ return { idx, setting: settings[idx] ?? {} };
1023
+ };
1024
+ // Checks if there's a saved panel layout for the current context (ToDo or general)
1025
+ const hasSavedLayout = () => {
1026
+ const { setting } = getCurrentDcmtFormSetting();
1027
+ if (invokedByTodo) {
1028
+ // If invoked by ToDo, check for existence of layoutToDo and that it has keys
1029
+ return setting.layoutToDo !== undefined && Object.keys(setting.layoutToDo).length > 0;
1030
+ }
1031
+ else {
1032
+ // Otherwise, check for general layout
1033
+ return setting.layout !== undefined && Object.keys(setting.layout).length > 0;
1034
+ }
1035
+ };
1036
+ // Persists the current panel states (layout) into user settings
1037
+ const persistPanelStates = (state) => {
1038
+ // If no valid TID or empty state, skip saving
1039
+ if (normalizedTID === undefined || Object.keys(state).length === 0)
1040
+ return;
1041
+ const settings = SDKUI_Globals.userSettings.dcmtFormSettings;
1042
+ const { idx, setting: existingSetting } = getCurrentDcmtFormSetting();
1043
+ // Prepare the new setting object with updated layout depending on context
1044
+ const newSetting = {
1045
+ TID: normalizedTID,
1046
+ layout: invokedByTodo ? (existingSetting.layout ?? {}) : state,
1047
+ layoutToDo: invokedByTodo ? state : (existingSetting.layoutToDo ?? {}),
1048
+ };
1049
+ // Replace existing setting if found, otherwise push a new one
1050
+ if (idx >= 0) {
1051
+ settings[idx] = newSetting;
1052
+ }
1053
+ else {
1054
+ settings.push(newSetting);
1055
+ }
1056
+ // Assign the updated settings array back to the global settings
1057
+ SDKUI_Globals.userSettings.dcmtFormSettings = [...settings];
1058
+ };
1059
+ // Retrieves the persisted panel states (layout) for the current context
1060
+ const getPersistedPanelStates = () => {
1061
+ // Do not return layout on mobile devices
1062
+ if (isMobile)
1063
+ return undefined;
1064
+ const settings = getCurrentDcmtFormSetting()?.setting;
1065
+ // Return the appropriate layout based on context
1066
+ return invokedByTodo ? settings?.layoutToDo : settings?.layout;
1067
+ };
1068
+ const handleCompleteMoreInfo = useCallback(async () => {
1069
+ try {
1070
+ TMSpinner.show();
1071
+ let newTask = { ...taskMoreInfo, state: Task_States.Completed };
1072
+ await SDK_Globals.tmSession?.NewTaskEngine().UpdateAsync(newTask);
1073
+ onTaskCompleted?.(newTask);
1074
+ onClose?.();
1075
+ ShowAlert({ mode: 'success', title: SDKUI_Localizator.MoreInformation, message: SDKUI_Localizator.MoreInfoCompleted, duration: 3000 });
1076
+ }
1077
+ catch (e) {
1078
+ TMSpinner.hide();
1079
+ TMExceptionBoxManager.show({ exception: e });
1080
+ }
1081
+ finally {
1082
+ TMSpinner.hide();
1083
+ }
1084
+ }, [taskMoreInfo, onTaskCompleted, onClose]);
1085
+ const handleSignApprove = useCallback(() => {
1086
+ if (onOpenS4TViewerRequest && TID && DID) {
1087
+ onOpenS4TViewerRequest([{ TID, DID }]);
1088
+ return;
1089
+ }
1090
+ ShowAlert({
1091
+ message: "TODO",
1092
+ mode: "info",
1093
+ duration: 3000,
1094
+ title: SDKUI_Localizator.SignatureAndApprove,
1095
+ });
1096
+ }, [onOpenS4TViewerRequest, TID, DID]);
1097
+ const handleNavigateToReference = useCallback((ref) => {
1098
+ if (onReferenceClick) {
1099
+ try {
1100
+ onReferenceClick(ref);
1101
+ }
1102
+ catch (e) {
1103
+ console.error('onReferenceClick handler failed', e);
1104
+ }
1105
+ return;
1106
+ }
1107
+ }, [onReferenceClick]);
1108
+ // Mapping for objClass specific label/action. Easy to extend for future objClass types.
1109
+ const referenceActionMap = useMemo(() => ({
1110
+ [ObjectClasses.Dossier]: { label: 'Vai a pratica' },
1111
+ [ObjectClasses.WorkingGroup]: { label: 'Vai a gruppo di lavoro' },
1112
+ // add other ObjectClasses here as needed
1113
+ }), []);
1114
+ const renderDcmtForm = () => {
1115
+ // Show flat spinner during initial load (before component is mounted)
1116
+ if (isInitialLoading) {
1117
+ return _jsx(Spinner, { description: SDKUI_Localizator.Loading, flat: true });
1118
+ }
1119
+ return (_jsxs("div", { style: {
1120
+ display: 'flex',
1121
+ flexDirection: deviceType === DeviceType.MOBILE ? 'column' : 'row',
1122
+ justifyContent: 'space-between',
1123
+ gap: Gutters.getGutters(),
1124
+ width: '100%',
1125
+ height: '100%',
1126
+ position: 'relative',
1127
+ overflow: 'hidden'
1128
+ }, children: [_jsxs("div", { style: { width: '100%', height: '100%', display: isOpenDetails || isOpenMaster ? 'none' : 'flex' }, 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)
1129
+ ? _jsx(TMPanelManagerContainer, { panels: initialPanels, direction: "horizontal", parentId: groupId, showToolbar: showDcmtFormSidebar })
1130
+ : _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 &&
1131
+ _jsx(TMDistinctValues, { tid: TID, mid: focusedMetadataValue?.mid, isModal: true, showHeader: false, layoutMode: layoutMode, onSelectionChanged: (e) => {
1132
+ if (!e)
1133
+ return;
1134
+ setFormData((prevItems) => prevItems.map((item) => item.tid == e.tid && item.mid === e.mid ? { ...item, value: e.newValue } : item));
1135
+ } }), isOpenFormulaEditor &&
1136
+ _jsx(TMFormulaEditor, { isModal: true, formMode: FormModes.Update, inputData: getFormula(), showBack: false, onClose: () => setIsOpenFormulaEditor(false), onApplied: (newFormula) => {
1137
+ setFormData((prevItems) => prevItems.map((item) => item.tid == newFormula.tid && item.mid === newFormula.mid ? { ...item, value: FormulaHelper.addFormulaTag(newFormula.expression), isSelected: true, isEditable: true } : item));
1138
+ setFocusedMetadataValue(prevState => ({
1139
+ ...prevState,
1140
+ isSelected: true,
1141
+ isEditable: true,
1142
+ value: FormulaHelper.addFormulaTag(newFormula.expression)
1143
+ }));
1144
+ } }), 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 || showToppyForCompleteMoreInfo || showToppyForReferences) && (_jsx(ToppyHelpCenter, { deviceType: deviceType, usePortal: false, content: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '10px' }, children: [showToppyForApprove && (workItems.length === 1 ?
1145
+ _jsx(WorkFlowOperationButtons, { deviceType: deviceType, onApprove: () => setShowApprovePopup(true), onSignApprove: handleSignApprove, onReject: () => setShowRejectPopup(true), onReAssign: () => setShowReAssignPopup(true), onMoreInfo: () => setShowMoreInfoPopup(true), dtd: fromDTD })
1146
+ :
1147
+ _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 && (_jsxs(_Fragment, { 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: () => {
1148
+ setShowCommentForm(true);
1149
+ } })] })), showToppyForReferences && dcmtReferences && dcmtReferences
1150
+ .filter(ref => ref.objClass === ObjectClasses.Dossier || ref.objClass === ObjectClasses.WorkingGroup) // keep only known objClass types
1151
+ .map((ref, index, arr) => {
1152
+ const mapEntry = referenceActionMap[String(ref.objClass)];
1153
+ const label = mapEntry?.label ?? 'Vai a riferimento';
1154
+ return (_jsxs(React.Fragment, { children: [index === 0 && (showToppyForApprove || showToppyForCompleteMoreInfo) && (_jsx("div", { style: {
1155
+ height: 1,
1156
+ backgroundColor: 'rgba(255,255,255,0.2)',
1157
+ margin: '6px 0'
1158
+ } })), _jsxs(StyledReferenceButton, { onClick: () => handleNavigateToReference(ref), children: [_jsx("span", { children: label }), _jsx("span", { children: `"${ref.objName}"` })] }, `ref-${index}-${ref.objID}`)] }, `ref-frag-${index}-${ref.objID}`));
1159
+ })] }) }))] }), (showCommentForm && TID && DID) &&
1160
+ _jsx(TMBlogCommentForm, { context: { engine: 'SearchEngine', object: { tid: TID, did: DID } }, onClose: () => setShowCommentForm(false), refreshCallback: handleCompleteMoreInfo, participants: [], showAttachmentsSection: false, allArchivedDocumentsFileItems: [] }), isOpenDetails &&
1161
+ _jsx(StyledModalContainer, { children: _jsx(TMMasterDetailDcmts, { deviceType: deviceType, isForMaster: false, inputDcmts: getSelectionDcmtInfo(), allowNavigation: allowNavigation, canNext: canNext, canPrev: canPrev, onNext: onNext, onPrev: onPrev, onBack: () => setIsOpenDetails(false), allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }) }), isOpenMaster &&
1162
+ _jsxs(StyledModalContainer, { children: [_jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: getSelectionDcmtInfo(), isForMaster: true, allowNavigation: allowNavigation, canNext: canNext, canPrev: canPrev, onNext: onNext, onPrev: onPrev, onBack: () => setIsOpenMaster(false), appendMasterDcmts: handleAddItem, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), secondaryMasterDcmts.length > 0 && secondaryMasterDcmts.map((dcmt, index) => {
1163
+ return (_jsx(StyledModalContainer, { children: _jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: [dcmt], isForMaster: true, allowNavigation: false, onBack: () => handleRemoveItem(dcmt.TID, dcmt.DID), appendMasterDcmts: handleAddItem, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }) }, `${index}-${dcmt.DID}`));
1164
+ })] }), taskFormDialogComponent, s4TViewerDialogComponent] }));
1165
+ };
1166
+ return (_jsx(_Fragment, { children: (isModal && onClose)
1167
+ ? _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() }) })
1168
+ : renderDcmtForm() }));
1169
+ };
1170
+ export default TMDcmtForm;
1171
+ /**
1172
+ * Utility function to apply metadata filtering logic
1173
+ * @param data - Array of metadata values to filter
1174
+ * @param showAll - Whether to show all items or limit to maxItems
1175
+ * @param listMaxItems - Maximum number of items to show when showAll is false
1176
+ * @param TID - Document type ID to determine specific filtering rules
1177
+ * @returns Filtered array of metadata values
1178
+ */
1179
+ const applyMetadataFilter = (data, showAll, listMaxItems, TID) => {
1180
+ // Early return for empty data
1181
+ if (!data || data.length === 0)
1182
+ return [];
1183
+ // Base filter: include only metadata with mid > 100
1184
+ const baseFilter = (o) => Boolean(o.mid && o.mid > 100);
1185
+ // Special filter for Draft document type: includes base filter + system fields
1186
+ const draftFilter = (o) => baseFilter(o) ||
1187
+ o.mid === SystemMIDsAsNumber.FileExt ||
1188
+ o.mid === SystemMIDsAsNumber.FileSize ||
1189
+ o.mid === SystemMIDsAsNumber.LastUpdateTime ||
1190
+ o.mid === SystemMIDsAsNumber.CreationTime;
1191
+ // Select the appropriate filter based on document type
1192
+ const currentFilter = TID === SystemTIDs.Drafts ? draftFilter : baseFilter;
1193
+ // Apply filter once
1194
+ const filteredData = data.filter(currentFilter);
1195
+ // Return all filtered data or slice to max items
1196
+ return showAll ? filteredData : filteredData.slice(0, listMaxItems);
1197
+ };
1198
+ //#region Validaion
1199
+ export const validateMetadataList = (mvdList = []) => {
1200
+ if (!Array.isArray(mvdList)) {
1201
+ throw new TypeError("metadataList must be an array of ITMMetadataProps.");
1202
+ }
1203
+ return mvdList.reduce((validationItems, mvd) => {
1204
+ const value = mvd.value?.toString() ?? "";
1205
+ if (isValidForValidation(mvd)) {
1206
+ validateRequiredField(mvd, value, validationItems);
1207
+ validateMaxLength(mvd, value, validationItems);
1208
+ }
1209
+ return validationItems;
1210
+ }, []);
1211
+ };
1212
+ const isValidForValidation = (mvd) => { return mvd.mid > 99; };
1213
+ const validateRequiredField = (mvd, value, validationItems) => {
1214
+ if (mvd.isRequired === '1' && !value.trim()) {
1215
+ const message = SDKUI_Localizator.RequiredField;
1216
+ validationItems.push(new ValidationItem(ResultTypes.ERROR, mvd.md?.nameLoc ?? "", message));
1217
+ }
1218
+ };
1219
+ const validateMaxLength = (mvd, value, validationItems) => {
1220
+ const regex = /[!?[\],./*-+'<>:";]/g;
1221
+ const maxLength = mvd.md?.length ?? 0;
1222
+ const isTextOrNumber = mvd.md?.dataType === MetadataDataTypes.Varchar || mvd.md?.dataType === MetadataDataTypes.Number;
1223
+ const isFormula = FormulaHelper.isFormula(value);
1224
+ if (isTextOrNumber && !isFormula && mvd.md?.length && value.replace(regex, '').length > maxLength) {
1225
+ const message = `"${mvd.md.nameLoc ?? "no-name"}" ha superata massimo lunghezza di ${maxLength} caratteri.`;
1226
+ validationItems.push(new ValidationItem(ResultTypes.ERROR, mvd.md.nameLoc ?? "", message));
1227
+ }
1228
+ };
1229
+ //#endregion Validation
1230
+ // Questo componente non renderizza nulla (return null)
1231
+ // ma viene utilizzato come child del Provider per disabilitare il bottone
1232
+ const WfButtonStateHandler = ({ isWFDisabled }) => {
1233
+ const { setToolbarButtonDisabled } = useTMPanelManagerContext();
1234
+ useEffect(() => {
1235
+ setToolbarButtonDisabled('tmWF', isWFDisabled);
1236
+ }, [isWFDisabled, setToolbarButtonDisabled]);
1237
+ return null; // Non renderizza elementi nel DOM
1238
+ };
1239
+ const TMDcmtPreviewWrapper = ({ currentDcmt, layoutMode, fromDTD, dcmtFile, deviceType, isVisible, onFileUpload, enableDragDropOverlay = false }) => {
1240
+ const { setPanelVisibilityById, toggleMaximize, isResizingActive, countVisibleLeafPanels, panelVisibility } = useTMPanelManagerContext();
1241
+ const isMobile = deviceType === DeviceType.MOBILE;
1242
+ return (layoutMode === LayoutModes.Update ?
1243
+ _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 }) :
1244
+ _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 }));
1245
+ };