@topconsultnpm/sdkui-react 6.20.0-dev1.15 → 6.20.0-dev1.16

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