@genexus/genexus-ide-ui 1.0.48 → 1.0.50

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 (227) hide show
  1. package/dist/{esm/MERCURY_ASSETS-91a1db9c.js → cjs/MERCURY_ASSETS-ac982891.js} +2 -4
  2. package/dist/cjs/MERCURY_ASSETS-ac982891.js.map +1 -0
  3. package/dist/cjs/assets-manager-7227a74b.js +7 -0
  4. package/dist/cjs/assets-manager-7227a74b.js.map +1 -0
  5. package/dist/cjs/code-render-9b3efb53.js +50 -0
  6. package/dist/cjs/code-render-9b3efb53.js.map +1 -0
  7. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  8. package/dist/cjs/gx-ide-ai-message.cjs.entry.js +3 -2
  9. package/dist/cjs/gx-ide-ai-message.cjs.entry.js.map +1 -1
  10. package/dist/cjs/gx-ide-chat-container.cjs.entry.js +62 -0
  11. package/dist/cjs/gx-ide-chat-container.cjs.entry.js.map +1 -0
  12. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js +4 -3
  13. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js.map +1 -1
  14. package/dist/cjs/gx-ide-current-user-info.cjs.entry.js +3 -2
  15. package/dist/cjs/gx-ide-current-user-info.cjs.entry.js.map +1 -1
  16. package/dist/cjs/gx-ide-dashboard-home.cjs.entry.js +3 -2
  17. package/dist/cjs/gx-ide-dashboard-home.cjs.entry.js.map +1 -1
  18. package/dist/cjs/gx-ide-data-selector.cjs.entry.js +3 -2
  19. package/dist/cjs/gx-ide-data-selector.cjs.entry.js.map +1 -1
  20. package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js +3 -2
  21. package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js.map +1 -1
  22. package/dist/cjs/gx-ide-design-import.cjs.entry.js +8 -7
  23. package/dist/cjs/gx-ide-design-import.cjs.entry.js.map +1 -1
  24. package/dist/cjs/gx-ide-entity-selector.cjs.entry.js +4 -3
  25. package/dist/cjs/gx-ide-entity-selector.cjs.entry.js.map +1 -1
  26. package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js +7 -6
  27. package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js.map +1 -1
  28. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js +6 -5
  29. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js.map +1 -1
  30. package/dist/cjs/gx-ide-manage-module-references-v2.cjs.entry.js +4 -3
  31. package/dist/cjs/gx-ide-manage-module-references-v2.cjs.entry.js.map +1 -1
  32. package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js +4 -3
  33. package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js.map +1 -1
  34. package/dist/cjs/gx-ide-new-kb.cjs.entry.js +3 -2
  35. package/dist/cjs/gx-ide-new-kb.cjs.entry.js.map +1 -1
  36. package/dist/cjs/gx-ide-object-selector.cjs.entry.js +4 -3
  37. package/dist/cjs/gx-ide-object-selector.cjs.entry.js.map +1 -1
  38. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js +286 -0
  39. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js.map +1 -0
  40. package/dist/cjs/gx-ide-share-kb.cjs.entry.js +3 -2
  41. package/dist/cjs/gx-ide-share-kb.cjs.entry.js.map +1 -1
  42. package/dist/cjs/gx-ide-start-page.cjs.entry.js +6 -5
  43. package/dist/cjs/gx-ide-start-page.cjs.entry.js.map +1 -1
  44. package/dist/cjs/gx-ide-welcome-page.cjs.entry.js +3 -2
  45. package/dist/cjs/gx-ide-welcome-page.cjs.entry.js.map +1 -1
  46. package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js +3 -2
  47. package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js.map +1 -1
  48. package/dist/cjs/index.cjs.js +9 -0
  49. package/dist/cjs/index.cjs.js.map +1 -1
  50. package/dist/cjs/loader.cjs.js +1 -1
  51. package/dist/collection/collection-manifest.json +3 -1
  52. package/dist/collection/components/_helpers/chat-container/chat-container.css +178 -0
  53. package/dist/collection/components/_helpers/chat-container/chat-container.js +137 -0
  54. package/dist/collection/components/_helpers/chat-container/chat-container.js.map +1 -0
  55. package/dist/collection/components/_helpers/chat-container/code-render.js +42 -0
  56. package/dist/collection/components/_helpers/chat-container/code-render.js.map +1 -0
  57. package/dist/collection/index.js +1 -0
  58. package/dist/collection/index.js.map +1 -1
  59. package/dist/collection/showcase/chat-container/callbacks.js +247 -0
  60. package/dist/collection/showcase/chat-container/callbacks.js.map +1 -0
  61. package/dist/collection/showcase/chat-container/chat-showcase.css +4 -0
  62. package/dist/collection/showcase/chat-container/chat.showcase.js +57 -0
  63. package/dist/collection/showcase/chat-container/chat.showcase.js.map +1 -0
  64. package/dist/collection/testing/locale.e2e.js +4 -0
  65. package/dist/collection/testing/locale.e2e.js.map +1 -1
  66. package/dist/components/MERCURY_ASSETS.js +0 -4
  67. package/dist/components/MERCURY_ASSETS.js.map +1 -1
  68. package/dist/components/ai-message.js +2 -1
  69. package/dist/components/ai-message.js.map +1 -1
  70. package/dist/components/assets-manager.js +5 -0
  71. package/dist/components/assets-manager.js.map +1 -0
  72. package/dist/components/chat-container.js +78 -0
  73. package/dist/components/chat-container.js.map +1 -0
  74. package/dist/components/code-render.js +47 -0
  75. package/dist/components/code-render.js.map +1 -0
  76. package/dist/components/entity-selector.js +2 -1
  77. package/dist/components/entity-selector.js.map +1 -1
  78. package/dist/components/gx-ide-chat-container.d.ts +11 -0
  79. package/dist/components/gx-ide-chat-container.js +8 -0
  80. package/dist/components/gx-ide-chat-container.js.map +1 -0
  81. package/dist/components/gx-ide-create-kb-from-server.js +2 -1
  82. package/dist/components/gx-ide-create-kb-from-server.js.map +1 -1
  83. package/dist/components/gx-ide-current-user-info.js +2 -1
  84. package/dist/components/gx-ide-current-user-info.js.map +1 -1
  85. package/dist/components/gx-ide-dashboard-home.js +2 -1
  86. package/dist/components/gx-ide-dashboard-home.js.map +1 -1
  87. package/dist/components/gx-ide-data-selector.js +2 -1
  88. package/dist/components/gx-ide-data-selector.js.map +1 -1
  89. package/dist/components/gx-ide-data-type-selector.js +2 -1
  90. package/dist/components/gx-ide-data-type-selector.js.map +1 -1
  91. package/dist/components/gx-ide-design-import.js +2 -1
  92. package/dist/components/gx-ide-design-import.js.map +1 -1
  93. package/dist/components/gx-ide-kb-manager-export.js +2 -1
  94. package/dist/components/gx-ide-kb-manager-export.js.map +1 -1
  95. package/dist/components/gx-ide-kb-manager-import.js +2 -1
  96. package/dist/components/gx-ide-kb-manager-import.js.map +1 -1
  97. package/dist/components/gx-ide-manage-module-references-v2.js +2 -1
  98. package/dist/components/gx-ide-manage-module-references-v2.js.map +1 -1
  99. package/dist/components/gx-ide-manage-module-references.js +2 -1
  100. package/dist/components/gx-ide-manage-module-references.js.map +1 -1
  101. package/dist/components/gx-ide-new-kb.js +2 -1
  102. package/dist/components/gx-ide-new-kb.js.map +1 -1
  103. package/dist/components/gx-ide-object-selector.js +2 -1
  104. package/dist/components/gx-ide-object-selector.js.map +1 -1
  105. package/dist/components/gx-ide-sc-chat-container.d.ts +11 -0
  106. package/dist/components/gx-ide-sc-chat-container.js +308 -0
  107. package/dist/components/gx-ide-sc-chat-container.js.map +1 -0
  108. package/dist/components/gx-ide-share-kb.js +2 -1
  109. package/dist/components/gx-ide-share-kb.js.map +1 -1
  110. package/dist/components/gx-ide-start-page.js +2 -1
  111. package/dist/components/gx-ide-start-page.js.map +1 -1
  112. package/dist/components/gx-ide-welcome-page.js +2 -1
  113. package/dist/components/gx-ide-welcome-page.js.map +1 -1
  114. package/dist/components/gx-ide-ww-attributes.js +2 -1
  115. package/dist/components/gx-ide-ww-attributes.js.map +1 -1
  116. package/dist/components/index.js +2 -0
  117. package/dist/components/index.js.map +1 -1
  118. package/dist/{cjs/MERCURY_ASSETS-fbc83c8c.js → esm/MERCURY_ASSETS-9e4e8ebc.js} +1 -7
  119. package/dist/esm/MERCURY_ASSETS-9e4e8ebc.js.map +1 -0
  120. package/dist/esm/assets-manager-0d129105.js +5 -0
  121. package/dist/esm/assets-manager-0d129105.js.map +1 -0
  122. package/dist/esm/code-render-79798e42.js +47 -0
  123. package/dist/esm/code-render-79798e42.js.map +1 -0
  124. package/dist/esm/genexus-ide-ui.js +1 -1
  125. package/dist/esm/gx-ide-ai-message.entry.js +2 -1
  126. package/dist/esm/gx-ide-ai-message.entry.js.map +1 -1
  127. package/dist/esm/gx-ide-chat-container.entry.js +58 -0
  128. package/dist/esm/gx-ide-chat-container.entry.js.map +1 -0
  129. package/dist/esm/gx-ide-create-kb-from-server.entry.js +2 -1
  130. package/dist/esm/gx-ide-create-kb-from-server.entry.js.map +1 -1
  131. package/dist/esm/gx-ide-current-user-info.entry.js +2 -1
  132. package/dist/esm/gx-ide-current-user-info.entry.js.map +1 -1
  133. package/dist/esm/gx-ide-dashboard-home.entry.js +2 -1
  134. package/dist/esm/gx-ide-dashboard-home.entry.js.map +1 -1
  135. package/dist/esm/gx-ide-data-selector.entry.js +2 -1
  136. package/dist/esm/gx-ide-data-selector.entry.js.map +1 -1
  137. package/dist/esm/gx-ide-data-type-selector.entry.js +2 -1
  138. package/dist/esm/gx-ide-data-type-selector.entry.js.map +1 -1
  139. package/dist/esm/gx-ide-design-import.entry.js +2 -1
  140. package/dist/esm/gx-ide-design-import.entry.js.map +1 -1
  141. package/dist/esm/gx-ide-entity-selector.entry.js +2 -1
  142. package/dist/esm/gx-ide-entity-selector.entry.js.map +1 -1
  143. package/dist/esm/gx-ide-kb-manager-export.entry.js +2 -1
  144. package/dist/esm/gx-ide-kb-manager-export.entry.js.map +1 -1
  145. package/dist/esm/gx-ide-kb-manager-import.entry.js +2 -1
  146. package/dist/esm/gx-ide-kb-manager-import.entry.js.map +1 -1
  147. package/dist/esm/gx-ide-manage-module-references-v2.entry.js +2 -1
  148. package/dist/esm/gx-ide-manage-module-references-v2.entry.js.map +1 -1
  149. package/dist/esm/gx-ide-manage-module-references.entry.js +2 -1
  150. package/dist/esm/gx-ide-manage-module-references.entry.js.map +1 -1
  151. package/dist/esm/gx-ide-new-kb.entry.js +2 -1
  152. package/dist/esm/gx-ide-new-kb.entry.js.map +1 -1
  153. package/dist/esm/gx-ide-object-selector.entry.js +2 -1
  154. package/dist/esm/gx-ide-object-selector.entry.js.map +1 -1
  155. package/dist/esm/gx-ide-sc-chat-container.entry.js +282 -0
  156. package/dist/esm/gx-ide-sc-chat-container.entry.js.map +1 -0
  157. package/dist/esm/gx-ide-share-kb.entry.js +2 -1
  158. package/dist/esm/gx-ide-share-kb.entry.js.map +1 -1
  159. package/dist/esm/gx-ide-start-page.entry.js +2 -1
  160. package/dist/esm/gx-ide-start-page.entry.js.map +1 -1
  161. package/dist/esm/gx-ide-welcome-page.entry.js +2 -1
  162. package/dist/esm/gx-ide-welcome-page.entry.js.map +1 -1
  163. package/dist/esm/gx-ide-ww-attributes.entry.js +2 -1
  164. package/dist/esm/gx-ide-ww-attributes.entry.js.map +1 -1
  165. package/dist/esm/index.js +4 -0
  166. package/dist/esm/index.js.map +1 -1
  167. package/dist/esm/loader.js +1 -1
  168. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  169. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  170. package/dist/genexus-ide-ui/index.esm.js +6 -0
  171. package/dist/genexus-ide-ui/index.esm.js.map +1 -1
  172. package/dist/genexus-ide-ui/{p-aa324232.entry.js → p-1a629aa9.entry.js} +4 -2
  173. package/dist/genexus-ide-ui/{p-aa324232.entry.js.map → p-1a629aa9.entry.js.map} +1 -1
  174. package/dist/genexus-ide-ui/{p-18317dd7.entry.js → p-1e29cd30.entry.js} +4 -2
  175. package/dist/genexus-ide-ui/{p-18317dd7.entry.js.map → p-1e29cd30.entry.js.map} +1 -1
  176. package/dist/genexus-ide-ui/{p-af05e095.entry.js → p-1ea6c3fe.entry.js} +13 -11
  177. package/dist/genexus-ide-ui/{p-af05e095.entry.js.map → p-1ea6c3fe.entry.js.map} +1 -1
  178. package/dist/genexus-ide-ui/{p-a1c5775d.entry.js → p-2145674e.entry.js} +4 -2
  179. package/dist/genexus-ide-ui/{p-a1c5775d.entry.js.map → p-2145674e.entry.js.map} +1 -1
  180. package/dist/genexus-ide-ui/{p-ec6129c7.entry.js → p-2cefd33a.entry.js} +4 -2
  181. package/dist/genexus-ide-ui/{p-ec6129c7.entry.js.map → p-2cefd33a.entry.js.map} +1 -1
  182. package/dist/genexus-ide-ui/{p-f252dd07.entry.js → p-36fecdcb.entry.js} +10 -8
  183. package/dist/genexus-ide-ui/{p-f252dd07.entry.js.map → p-36fecdcb.entry.js.map} +1 -1
  184. package/dist/genexus-ide-ui/{p-f827b9b8.entry.js → p-3ca45936.entry.js} +4 -2
  185. package/dist/genexus-ide-ui/{p-f827b9b8.entry.js.map → p-3ca45936.entry.js.map} +1 -1
  186. package/dist/genexus-ide-ui/{p-a8739942.entry.js → p-440742f3.entry.js} +4 -2
  187. package/dist/genexus-ide-ui/{p-a8739942.entry.js.map → p-440742f3.entry.js.map} +1 -1
  188. package/dist/genexus-ide-ui/{p-a40648dc.entry.js → p-442e30e3.entry.js} +4 -2
  189. package/dist/genexus-ide-ui/{p-a40648dc.entry.js.map → p-442e30e3.entry.js.map} +1 -1
  190. package/dist/genexus-ide-ui/{p-2dcfa6ef.entry.js → p-47d4ec9a.entry.js} +33 -31
  191. package/dist/genexus-ide-ui/{p-2dcfa6ef.entry.js.map → p-47d4ec9a.entry.js.map} +1 -1
  192. package/dist/genexus-ide-ui/p-6e4208d8.js +9 -0
  193. package/dist/genexus-ide-ui/p-6e4208d8.js.map +1 -0
  194. package/dist/genexus-ide-ui/{p-64f2a9f4.entry.js → p-7be438dc.entry.js} +10 -8
  195. package/dist/genexus-ide-ui/{p-64f2a9f4.entry.js.map → p-7be438dc.entry.js.map} +1 -1
  196. package/dist/genexus-ide-ui/p-8558e873.entry.js +224 -0
  197. package/dist/genexus-ide-ui/p-8558e873.entry.js.map +1 -0
  198. package/dist/genexus-ide-ui/{p-8cebb078.entry.js → p-8942f4b6.entry.js} +4 -2
  199. package/dist/genexus-ide-ui/{p-8cebb078.entry.js.map → p-8942f4b6.entry.js.map} +1 -1
  200. package/dist/genexus-ide-ui/{p-9e34f166.entry.js → p-9cfd7800.entry.js} +4 -2
  201. package/dist/genexus-ide-ui/{p-9e34f166.entry.js.map → p-9cfd7800.entry.js.map} +1 -1
  202. package/dist/genexus-ide-ui/{p-1986d34d.js → p-ad5caf61.js} +1 -10
  203. package/dist/genexus-ide-ui/p-ad5caf61.js.map +1 -0
  204. package/dist/genexus-ide-ui/{p-c1162623.entry.js → p-b1eb312d.entry.js} +15 -13
  205. package/dist/genexus-ide-ui/{p-c1162623.entry.js.map → p-b1eb312d.entry.js.map} +1 -1
  206. package/dist/genexus-ide-ui/p-c1791757.entry.js +87 -0
  207. package/dist/genexus-ide-ui/p-c1791757.entry.js.map +1 -0
  208. package/dist/genexus-ide-ui/{p-1feae6ef.entry.js → p-c4c48a1e.entry.js} +4 -2
  209. package/dist/genexus-ide-ui/{p-1feae6ef.entry.js.map → p-c4c48a1e.entry.js.map} +1 -1
  210. package/dist/genexus-ide-ui/{p-e4bbec21.entry.js → p-cfef5956.entry.js} +4 -2
  211. package/dist/genexus-ide-ui/{p-e4bbec21.entry.js.map → p-cfef5956.entry.js.map} +1 -1
  212. package/dist/genexus-ide-ui/{p-92c51f3e.entry.js → p-e14affde.entry.js} +4 -2
  213. package/dist/genexus-ide-ui/{p-92c51f3e.entry.js.map → p-e14affde.entry.js.map} +1 -1
  214. package/dist/genexus-ide-ui/p-f3f1e1f6.js +68 -0
  215. package/dist/genexus-ide-ui/p-f3f1e1f6.js.map +1 -0
  216. package/dist/genexus-ide-ui/{p-0c60c76f.entry.js → p-f7d2a39a.entry.js} +11 -9
  217. package/dist/genexus-ide-ui/{p-0c60c76f.entry.js.map → p-f7d2a39a.entry.js.map} +1 -1
  218. package/dist/types/components/_helpers/chat-container/chat-container.d.ts +23 -0
  219. package/dist/types/components/_helpers/chat-container/code-render.d.ts +4 -0
  220. package/dist/types/components.d.ts +54 -0
  221. package/dist/types/index.d.ts +1 -0
  222. package/dist/types/showcase/chat-container/callbacks.d.ts +6 -0
  223. package/dist/types/showcase/chat-container/chat.showcase.d.ts +6 -0
  224. package/package.json +1 -1
  225. package/dist/cjs/MERCURY_ASSETS-fbc83c8c.js.map +0 -1
  226. package/dist/esm/MERCURY_ASSETS-91a1db9c.js.map +0 -1
  227. package/dist/genexus-ide-ui/p-1986d34d.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["KB_OBJECT","KB_CATEGORY","STATUS_REGEXP_KEY","convertImportCategoryItemToTreeItem","importCatIcon","importItems","importTreeItems","forEach","importItem","push","id","caption","name","expanded","leaf","startImgSrc","metadata","convertImportCategoryDataToTreeView","importCategoryData","treeData","importCategory","importCategoryTreeItem","items","length","icon","createImportResultDataMessages","importItemId","messagesArray","status","messages","message","i","JSON","stringify","createImportResultItem","categoryData","importItemResultData","resultItemId","importResultItem","parts","addImportItemResultDataItem","categoryItemMap","objectCategoryItemMap","importTreeActualState","updatedImportTreeModel","objectCategoryId","get","categoryIndex","findIndex","treeItem","category","resultItem","newItemsLength","kbManagerImportCss","CSS_BUNDLES","NOTICE_ICON","getIconPath","colorType","FILE_ICON","GEMINI_TOOLS_SETTINGS","MENU_DELETE","CHECKBOX_ALL_CHECKED_VALUE","CHECKBOX_ALL_UNCHECKED_VALUE","GxIdeKbManagerImport","_GxIdeKbManagerImport_componentLocale","set","this","_GxIdeKbManagerImport_selectedObjectsInFileIds","_GxIdeKbManagerImport_fileInputEl","_GxIdeKbManagerImport_fileInputHiddenEl","_GxIdeKbManagerImport_objectsTreeEl","_GxIdeKbManagerImport_successItemsIds","Set","_GxIdeKbManagerImport_warningItemsIds","_GxIdeKbManagerImport_errorItemsIds","_GxIdeKbManagerImport_categoryItemMap","Map","_GxIdeKbManagerImport_objectCategoryItemMap","_GxIdeKbManagerImport_cancelImportHandler","cancelCallback","_GxIdeKbManagerImport_clearStatusHandler","importTreeState","statusInfo","error","number","warning","success","_GxIdeKbManagerImport_evaluateImport","noImport","_a","_GxIdeKbManagerImport_evaluateImportStatusMessage","someStatusVisible","display","_GxIdeKbManagerImport_importObjectsHandler","async","__classPrivateFieldGet","call","importingIsInProcess","importCallback","checkedObjectsIds","then","_GxIdeKbManagerImport_loadFileHandler","file","importedCategoryData","loadCallback","clear","object","importCategoryTreeData","objectsTreeModel","_GxIdeKbManagerImport_objectsTreeCheckedItemsChangedHandler","event","allItems","detail","checkedItemIds","item","checked","size","selectAllCheckboxValue","selectAllCheckboxIndeterminate","_GxIdeKbManagerImport_objectsTreeContextMenuHandler","objectContextMenuCallback","selection","clientX","contextmenuEvent","screenX","clientY","screenY","_GxIdeKbManagerImport_objectsTreeSelectedItemsChangedHandler","__classPrivateFieldSet","map","_GxIdeKbManagerImport_optionsHandler","optionsCallback","_GxIdeKbManagerImport_removeFileSelection","selectedFile","value","_GxIdeKbManagerImport_selectFileInputHandler","click","_GxIdeKbManagerImport_selectFileInputChangedHandler","target","files","_GxIdeKbManagerImport_statusButtonsSelectionChangedHandler","activeStates","statuses","errorIndex","state","itemId","warningIndex","successIndex","pattern","statusOptions","join","importedTreeFilterRegExp","RegExp","_GxIdeKbManagerImport_toggleSelectionClickHandler","updateAllItemsProperties","_GxIdeKbManagerImport_updateStatusItemsState","child","add","importTreeStateChanged","watchImportTreeStateHandler","importStatusMessage","main","importStatus","noImportedFiles","importedButHidden","watchObjectsTreeModelHandler","newState","noObjects","selectedFileChanged","newFile","componentDidLoad","focus","componentDidRender","componentWillLoad","Locale","getComponentStrings","el","componentDidLoadEvent","emit","addResultItem","render","h","Host","class","model","slot","htmlFor","header","fileNameLabel","autoFocus","part","type","readonly","placeholder","fileNamePlaceholder","ref","hidden","accept","onChange","removeFileSelection","title","onClick","src","disabled","selectFileButton","objectsInFile","showLines","dragDisabled","dropDisabled","toggleCheckboxes","checkbox","onCheckedItemsChange","onSelectedItemsChange","onItemContextmenu","isAnimated","stateTitle","key","selectFile","checkedValue","unCheckedValue","selectUnselect","onInput","_b","importButton","cancelButton","filter","filterType","filterOptions","autoExpand","hideMatchesAndShowNonMatches","stateIconSrc","clearButton","errors","warnings","successes","hideMessage","compact","minimal","statusMinimal","onSelectionChanged"],"sources":["src/components/kb-manager-import/helpers.ts","src/components/kb-manager-import/kb-manager-import.scss?tag=gx-ide-kb-manager-import&encapsulation=shadow","src/components/kb-manager-import/kb-manager-import.tsx"],"sourcesContent":["/* Tree View */\nimport {\n TreeViewItemModel,\n TreeViewModel\n} from \"@genexus/chameleon-controls-library\";\n\n/* Kb Manager Import Types*/\nimport {\n ImportItemData,\n CategoryItemMap,\n CategoryItemMapValue,\n ObjectCategoryItemMap,\n Status\n} from \"./kb-manager-import\";\nimport { ImportCategoryData, ImportItemResultData } from \"../../common/types\";\n\n/* objects in file metadata*/\nexport const KB_OBJECT = \"object\";\nexport const KB_CATEGORY = \"category\";\n\nexport const STATUS_REGEXP_KEY = \"status\";\n\n// - - - - - - - - - - - - - - - - -\n// Objects In File Tree Model\n// - - - - - - - - - - - - - - - - -\n\nconst convertImportCategoryItemToTreeItem = (\n importCatIcon: string,\n importItems: ImportItemData[]\n) => {\n const importTreeItems: TreeViewItemModel[] = [];\n importItems.forEach(importItem => {\n importTreeItems.push({\n id: importItem.id,\n caption: importItem.name,\n expanded: true,\n leaf: true,\n startImgSrc: importCatIcon,\n metadata: KB_OBJECT\n });\n });\n return importTreeItems;\n};\n\nexport const convertImportCategoryDataToTreeView = (\n importCategoryData: ImportCategoryData[]\n): TreeViewModel => {\n const treeData: TreeViewModel = [];\n if (!importCategoryData) {\n return treeData;\n }\n importCategoryData.forEach(importCategory => {\n const importCategoryTreeItem: TreeViewItemModel = {\n id: importCategory.id,\n caption: `${importCategory.name} (${importCategory.items.length})`,\n expanded: true,\n leaf: false,\n startImgSrc: importCategory.icon,\n metadata: KB_CATEGORY,\n items: convertImportCategoryItemToTreeItem(\n importCategory.icon,\n importCategory.items\n )\n };\n treeData.push(importCategoryTreeItem);\n });\n return treeData;\n};\n\n// - - - - - - - - - - - - - - - - -\n// Import Status Tree Model\n// - - - - - - - - - - - - - - - - -\n\nconst createImportResultDataMessages = (\n importItemId: string,\n messagesArray: string[],\n status: Status\n): TreeViewItemModel[] => {\n const messages: TreeViewItemModel[] = [];\n messagesArray.forEach((message, i) => {\n messages.push({\n id: `${importItemId}-message-${i}`,\n caption: message,\n startImgSrc: \"gemini-tools/list-view/on-surface\",\n leaf: true,\n metadata: JSON.stringify({\n [STATUS_REGEXP_KEY]: status\n })\n });\n });\n return messages;\n};\n\nconst createImportResultItem = (\n categoryData: CategoryItemMapValue,\n importItemResultData: ImportItemResultData\n): TreeViewItemModel => {\n const resultItemId = `${importItemResultData.id}-${importItemResultData.name}`;\n const importResultItem: TreeViewItemModel = {\n id: resultItemId,\n startImgSrc: categoryData.icon,\n caption: importItemResultData.name,\n parts: `tree-view-item tree-view-item--status tree-view-item--${importItemResultData.status}`,\n expanded: true,\n leaf: importItemResultData.messages.length === 0,\n metadata: JSON.stringify({\n [STATUS_REGEXP_KEY]: importItemResultData.status\n }),\n items: createImportResultDataMessages(\n resultItemId,\n importItemResultData.messages,\n importItemResultData.status\n )\n };\n return importResultItem;\n};\n\n// This functions updates the \"Import Status\" model, by adding a new result item.\nexport const addImportItemResultDataItem = (\n importItemResultData: ImportItemResultData,\n categoryItemMap: CategoryItemMap,\n objectCategoryItemMap: ObjectCategoryItemMap,\n importTreeActualState: TreeViewItemModel[]\n) => {\n const updatedImportTreeModel: TreeViewModel = [...importTreeActualState];\n\n // Use the resultItem.id to find the corresponding category in the categoryMap\n const objectCategoryId = objectCategoryItemMap.get(importItemResultData.id);\n const categoryData = categoryItemMap.get(objectCategoryId);\n\n const categoryIndex: number = updatedImportTreeModel.findIndex(\n treeItem => treeItem.id === objectCategoryId\n );\n\n if (categoryIndex === -1) {\n // category does not exists yet.\n const category: TreeViewItemModel = {\n id: objectCategoryId,\n caption: `${categoryData.name} (1)`,\n startImgSrc: `${categoryData.icon}`,\n expanded: true,\n items: [createImportResultItem(categoryData, importItemResultData)]\n };\n\n updatedImportTreeModel.push(category);\n return updatedImportTreeModel;\n }\n\n // else category already exists. Just insert the result item in the category.\n const resultItem: TreeViewItemModel = createImportResultItem(\n categoryData,\n importItemResultData\n );\n updatedImportTreeModel[categoryIndex].items = [\n ...updatedImportTreeModel[categoryIndex].items,\n resultItem\n ];\n\n // update category caption length\n const newItemsLength = updatedImportTreeModel[categoryIndex].items.length;\n updatedImportTreeModel[\n categoryIndex\n ].caption = `${categoryData.name} (${newItemsLength})`;\n\n return updatedImportTreeModel;\n};\n","@import \"../../global/gx-ide-mixins.scss\";\n\n:host {\n display: grid;\n block-size: 100%;\n grid-template:\n \"header header\" max-content\n \"objects-in-file import-status\" 1fr\n \"footer footer\" max-content;\n grid-template-columns: 1fr 1fr;\n}\n\n.section {\n display: contents;\n}\n\n// header\n.header {\n grid-template-columns: 1fr max-content;\n grid-area: header;\n}\n\n// objects in file\n.objects-in-file__section {\n grid-area: objects-in-file;\n}\n.objects-in-file__main {\n border-inline-end: var(--section-common-border);\n grid-template-rows: 1fr max-content;\n}\n.objects-in-file__footer {\n display: grid;\n}\n\n// import status\n.import-status__section {\n grid-area: import-status;\n}\n.import-status__main {\n grid-template-rows: 1fr max-content;\n}\n.import-status__footer {\n display: flex;\n}\n.import-clear-status-btn {\n margin-inline-start: auto;\n}\n\n// objects in file & import status\n.objects-in-file__section,\n.import-status__section {\n display: grid;\n grid-template-rows: max-content 1fr;\n}\n.control-header__objects-in-file,\n.control-header__import-status {\n padding-block-start: var(--mer-spacing--md);\n}\n.objects-in-file__main,\n.import-status__main {\n grid-auto-rows: max-content;\n padding-block: var(--content-block-spacing);\n overflow: auto;\n}\n\n// footer\n.footer {\n display: flex;\n grid-area: footer;\n border-block-start: var(--section-common-border);\n}\n\n// WA / TODO: Add a helper class in Mercury to justify text.\n.text-align-center {\n text-align: center; // should be resolved on mercury\n}\n\n.tree-view::part(item__action tree-view-item--status) {\n grid-template: \"first-img left-img text right-img\" / max-content max-content 1fr max-content;\n &::before {\n grid-area: first-img;\n content: \"\";\n width: var(--mer-spacing--xs);\n height: var(--mer-spacing--xs);\n border-radius: 50%;\n background-color: var(--gray-03);\n margin-inline-end: var(--mer-spacing--xxs);\n }\n}\n\n.tree-view::part(item__action tree-view-item--success) {\n @include tree-item-status(\"success\");\n}\n.tree-view::part(item__action tree-view-item--warning) {\n @include tree-item-status(\"warning\");\n}\n.tree-view::part(item__action tree-view-item--error) {\n @include tree-item-status(\"error\");\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n h,\n Method,\n Prop,\n State,\n Watch\n} from \"@stencil/core\";\n\nimport {\n ChCheckboxCustomEvent,\n // ChEditCustomEvent,\n TreeViewItemContextMenu\n} from \"@genexus/chameleon-controls-library\";\nimport { TreeViewItemModel } from \"@genexus/chameleon-controls-library\";\nimport { TreeViewItemModelExtended } from \"@genexus/chameleon-controls-library\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\n\nimport {\n ImportCategoryData,\n ImportItemResultData,\n ContextMenuInfo\n} from \"../../common/types\";\nimport {\n convertImportCategoryDataToTreeView,\n addImportItemResultDataItem\n} from \"./helpers\";\nimport { CheckedItemsInfo } from \"../_helpers/list-selector/list-selector\";\n\nimport { KB_OBJECT, STATUS_REGEXP_KEY } from \"./helpers\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/checkbox\",\n \"components/edit\",\n \"components/icon\",\n \"components/tree-view\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\"\n];\n\nconst NOTICE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"notice\",\n colorType: \"on-elevation\"\n});\n\nconst FILE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"file\",\n colorType: \"primary\"\n});\n\nconst GEMINI_TOOLS_SETTINGS = getIconPath({\n category: \"gemini-tools\",\n name: \"settings\",\n colorType: \"primary\"\n});\n\nconst MENU_DELETE = getIconPath({\n category: \"menus\",\n name: \"delete\",\n colorType: \"primary\"\n});\n\nconst CHECKBOX_ALL_CHECKED_VALUE = \"allChecked\";\nconst CHECKBOX_ALL_UNCHECKED_VALUE = \"allUnchecked\";\n\n@Component({\n tag: \"gx-ide-kb-manager-import\",\n styleUrl: \"kb-manager-import.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/kb-manager-import\"]\n})\nexport class GxIdeKbManagerImport {\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n\n #selectedObjectsInFileIds: string[] = [];\n\n @Element() el: HTMLGxIdeKbManagerImportElement;\n\n #fileInputEl!: HTMLChEditElement;\n #fileInputHiddenEl!: HTMLInputElement;\n #objectsTreeEl!: HTMLChTreeViewRenderElement;\n #successItemsIds: Set<string> = new Set();\n #warningItemsIds: Set<string> = new Set();\n #errorItemsIds: Set<string> = new Set();\n // #categoryItemMap maps a category id, with the name and icon.\n // required for the \"import status\" tree.\n #categoryItemMap: CategoryItemMap = new Map();\n #objectCategoryItemMap: ObjectCategoryItemMap = new Map();\n\n @State() checkedObjectsIds: string[] = [];\n @State() selectAllCheckboxValue: string;\n @State() selectAllCheckboxIndeterminate: boolean = false;\n @State() importStatusMessage: string;\n @State() importTreeState: TreeViewItemModel[] = [];\n @State() importedTreeFilterRegExp: RegExp;\n @Watch(\"importTreeState\")\n importTreeStateChanged() {\n // this.#filterImportedHandler();\n }\n @State() importingIsInProcess = false;\n @State() importTreeFilterList: string[] = [];\n @State() noImport: boolean;\n @State() noObjects: boolean = true;\n @State() objectsTreeModel: TreeViewItemModel[] = [];\n @State() showHiddenImportsMessage = false;\n @State() someStatusVisible: boolean;\n @State() statusInfo: StatusInfo = {\n error: {\n display: true,\n number: 0\n },\n warning: {\n display: true,\n number: 0\n },\n success: {\n display: true,\n number: 0\n }\n };\n\n @Watch(\"importTreeState\")\n watchImportTreeStateHandler() {\n this.#evaluateImport();\n if (this.noImport) {\n this.importStatusMessage =\n this.#componentLocale.main.importStatus.noImportedFiles;\n } else {\n this.importStatusMessage =\n this.#componentLocale.main.importStatus.importedButHidden;\n }\n }\n @Watch(\"objectsTreeModel\")\n watchObjectsTreeModelHandler(newState: TreeViewItemModel[]) {\n this.noObjects = !newState || newState.length === 0;\n }\n\n /**\n * Callback invoked when user wants to cancel the export process.\n */\n @Prop() readonly cancelCallback!: CancelCallback;\n\n /**\n * Callback invoked when user wants to initiate the import process.\n */\n @Prop() readonly importCallback!: ImportCallback;\n\n /**\n * Callback invoked when user wants to load the xpz information\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n * Displays status buttons (errors, warning, succeeded) with minimal UI (no captions)\n */\n @Prop() readonly objectContextMenuCallback!: ObjectContextMenuCallback;\n\n /**\n * Callback invoked when user wants to access the export options.\n */\n @Prop() readonly optionsCallback!: OptionsCallback;\n\n /**\n * Imported xml or xps file name\n */\n @Prop({ mutable: true }) selectedFile: File;\n @Watch(\"selectedFile\")\n selectedFileChanged(newFile: File) {\n if (newFile) {\n this.#loadFileHandler(newFile);\n }\n }\n\n /**\n * Displays status buttons (error, warning, success) with minimal UI (no captions).\n */\n @Prop() readonly statusMinimal = false;\n\n /**\n * Emitted once just after the component is fully loaded.\n */\n @Event() componentDidLoadEvent: EventEmitter<boolean>;\n\n /**\n * Emitted once just after the component is fully loaded and the first render() occurs\n */\n @Event() componentDidRenderFirstTime: EventEmitter<boolean>;\n\n componentDidLoad() {\n this.#fileInputEl.focus();\n }\n\n componentDidRender() {}\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.componentDidLoadEvent.emit(true);\n // this.#evaluateObjects();\n this.#evaluateImport();\n this.importStatusMessage =\n this.#componentLocale.main.importStatus.noImportedFiles;\n this.#evaluateImportStatusMessage();\n }\n\n /**\n * Add the result of importing an item\n */\n @Method()\n async addResultItem(item: ImportItemResultData) {\n this.importTreeState = addImportItemResultDataItem(\n item,\n this.#categoryItemMap,\n this.#objectCategoryItemMap,\n this.importTreeState\n );\n this.statusInfo[item.status].number++;\n this.#updateStatusItemsState();\n }\n\n #cancelImportHandler = () => {\n this.cancelCallback();\n };\n\n #clearStatusHandler = () => {\n this.importTreeState = [];\n this.statusInfo.error.number = 0;\n this.statusInfo.warning.number = 0;\n this.statusInfo.success.number = 0;\n };\n\n #evaluateImport = () => {\n this.noImport = !!(\n this.importTreeState?.length === 0 || !this.importTreeState\n );\n };\n\n #evaluateImportStatusMessage = () => {\n this.someStatusVisible =\n this.statusInfo.error.display ||\n this.statusInfo.warning.display ||\n this.statusInfo.success.display;\n };\n\n #importObjectsHandler = async () => {\n /* first clear imported objects (this clears errors/warnings/success counts as well)*/\n this.#clearStatusHandler();\n /* then do the import*/\n this.importingIsInProcess = true;\n this.importCallback(this.checkedObjectsIds).then(() => {\n this.importingIsInProcess = false;\n });\n };\n\n #loadFileHandler = async (file: File) => {\n const importedCategoryData = await this.loadCallback(file);\n this.#categoryItemMap.clear();\n this.#objectCategoryItemMap.clear();\n\n importedCategoryData.forEach(category => {\n this.#categoryItemMap.set(category.id, {\n name: category.name,\n icon: category.icon\n });\n category.items.forEach(object => {\n this.#objectCategoryItemMap.set(object.id, category.id);\n });\n });\n\n const importCategoryTreeData =\n convertImportCategoryDataToTreeView(importedCategoryData);\n this.objectsTreeModel = importCategoryTreeData;\n };\n\n #objectsTreeCheckedItemsChangedHandler = (\n event: CustomEvent<Map<string, TreeViewItemModelExtended>>\n ) => {\n const allItems = event.detail;\n const checkedItemIds: string[] = [];\n const checkedObjectsIds: string[] = [];\n allItems.forEach(item => {\n if (item.item.checked) {\n checkedItemIds.push(item.item.id);\n }\n if (item.item.checked && item.item.metadata === KB_OBJECT) {\n checkedObjectsIds.push(item.item.id);\n }\n });\n this.checkedObjectsIds = checkedObjectsIds;\n\n // Evaluate \"Select All / Unselect All\" checkbox state\n if (allItems.size === checkedItemIds.length) {\n this.selectAllCheckboxValue = CHECKBOX_ALL_CHECKED_VALUE;\n this.selectAllCheckboxIndeterminate = false;\n } else if (checkedItemIds.length === 0) {\n this.selectAllCheckboxValue = CHECKBOX_ALL_UNCHECKED_VALUE;\n this.selectAllCheckboxIndeterminate = false;\n } else {\n this.selectAllCheckboxIndeterminate = true;\n }\n };\n\n #objectsTreeContextMenuHandler = (\n event: CustomEvent<TreeViewItemContextMenu>\n ) => {\n if (event.detail.metadata === KB_OBJECT) {\n this.objectContextMenuCallback(\"imported\", {\n selection: this.#selectedObjectsInFileIds,\n clientX: event.detail.contextmenuEvent.screenX,\n clientY: event.detail.contextmenuEvent.screenY\n });\n }\n };\n\n #objectsTreeSelectedItemsChangedHandler = (\n event: CustomEvent<TreeViewItemModelExtended[]>\n ) => {\n this.#selectedObjectsInFileIds = event.detail.map(item => item.item.id);\n };\n\n #optionsHandler = () => {\n if (this.optionsCallback) {\n this.optionsCallback();\n // returns boolean\n }\n };\n\n #removeFileSelection = () => {\n this.selectedFile = null;\n this.#fileInputHiddenEl.value = null;\n };\n\n #selectFileInputHandler = () => {\n this.#fileInputHiddenEl.click();\n };\n\n #selectFileInputChangedHandler = (event: InputEvent) => {\n const target = event.target as HTMLInputElement;\n if (target.files?.length > 0) {\n this.selectedFile = target.files[0];\n }\n };\n\n #statusButtonsSelectionChangedHandler = (\n event: CustomEvent<CheckedItemsInfo>\n ) => {\n const activeStates = event.detail;\n const statuses: Status[] = [];\n\n const errorIndex = activeStates.findIndex(\n state => state.itemId === \"errors\"\n );\n const warningIndex = activeStates.findIndex(\n state => state.itemId === \"warnings\"\n );\n const successIndex = activeStates.findIndex(\n state => state.itemId === \"successes\"\n );\n\n if (errorIndex !== -1) {\n statuses.push(\"error\");\n }\n if (warningIndex !== -1) {\n statuses.push(\"warning\");\n }\n if (successIndex !== -1) {\n statuses.push(\"success\");\n }\n\n let pattern = `\"${STATUS_REGEXP_KEY}\":\"\"`;\n if (statuses.length) {\n const statusOptions = statuses.join(\"|\");\n pattern = `\"${STATUS_REGEXP_KEY}\":\"(${statusOptions})\"`;\n }\n this.importedTreeFilterRegExp = new RegExp(pattern, \"i\");\n\n // Update statusInfo for the status-buttons\n this.statusInfo = {\n error: {\n display: errorIndex !== -1,\n number: this.statusInfo.error.number\n },\n warning: {\n display: warningIndex !== -1,\n number: this.statusInfo.warning.number\n },\n success: {\n display: successIndex !== -1,\n number: this.statusInfo.success.number\n }\n };\n\n this.#evaluateImportStatusMessage();\n };\n\n #toggleSelectionClickHandler = (\n event: ChCheckboxCustomEvent<any> | InputEvent\n ) => {\n if (this.#objectsTreeEl) {\n const checked = event.detail === CHECKBOX_ALL_CHECKED_VALUE;\n this.#objectsTreeEl.updateAllItemsProperties({ checked: checked });\n }\n };\n\n #updateStatusItemsState = () => {\n this.#errorItemsIds.clear();\n this.#warningItemsIds.clear();\n this.#successItemsIds.clear();\n this.importTreeState.forEach(item => {\n const items = item.items;\n items.forEach(child => {\n if (child.metadata === \"error\") {\n this.#errorItemsIds.add(child.id);\n }\n if (child.metadata === \"warning\") {\n this.#warningItemsIds.add(child.id);\n }\n if (child.metadata === \"success\") {\n this.#successItemsIds.add(child.id);\n }\n });\n });\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <section class=\"section\">\n <header\n // header\n class=\"field-group control-header-with-border header header-two-cols spacing-body-block-start spacing-body-inline\"\n slot=\"header\"\n >\n <div\n // select a file\n class=\"field field-inline\"\n >\n <label class=\"label\" htmlFor=\"file-name\">\n {this.#componentLocale.header.fileNameLabel}\n </label>\n <ch-edit\n autoFocus\n id=\"file-name\"\n class=\"input\"\n part=\"file-name\"\n type=\"text\"\n readonly\n value={this.selectedFile?.name}\n placeholder={this.#componentLocale.header.fileNamePlaceholder}\n startImgSrc={FILE_ICON}\n ref={(el: HTMLChEditElement) =>\n (this.#fileInputEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n <input\n hidden\n type=\"file\"\n accept=\".xpz, .xml\"\n onChange={this.#selectFileInputChangedHandler}\n ref={(el: HTMLInputElement) =>\n (this.#fileInputHiddenEl = el as HTMLInputElement)\n }\n />\n </div>\n\n <div class=\"buttons-spacer\">\n <button\n // remove file selection\n aria-label={this.#componentLocale.header.removeFileSelection}\n title={this.#componentLocale.header.removeFileSelection}\n id=\"reset-all-button\"\n class=\"button-tertiary button-icon-only\"\n part=\"reset-all-button\"\n onClick={this.#removeFileSelection}\n >\n <ch-image class=\"icon-md\" src={MENU_DELETE}></ch-image>\n </button>\n\n <button\n // select file\n id=\"select-file-load-button\"\n class=\"button-primary\"\n part=\"select-file-load-button\"\n onClick={this.#selectFileInputHandler}\n disabled={this.importingIsInProcess}\n >\n {this.#componentLocale.header.selectFileButton}\n </button>\n </div>\n </header>\n\n <section\n // objects in file\n class=\"objects-in-file__section\"\n >\n <h2 class=\"control-header control-header-with-border control-header__objects-in-file subtitle-regular-xs\t text-align-center spacing-body-inline\">\n {this.#componentLocale.main.objectsInFile.title}\n </h2>\n\n <div class=\"field-group objects-in-file__main\">\n {!this.noObjects ? (\n <ch-tree-view-render\n // objects in file tree\n showLines=\"last\"\n class=\"tree-view\"\n model={this.objectsTreeModel}\n dragDisabled={true}\n dropDisabled={true}\n toggleCheckboxes={true}\n checkbox={true}\n checked={true}\n onCheckedItemsChange={\n this.#objectsTreeCheckedItemsChangedHandler\n }\n onSelectedItemsChange={\n this.#objectsTreeSelectedItemsChangedHandler\n }\n onItemContextmenu={this.#objectsTreeContextMenuHandler}\n ref={el =>\n (this.#objectsTreeEl = el as HTMLChTreeViewRenderElement)\n }\n ></ch-tree-view-render>\n ) : (\n <gx-ide-empty-state\n isAnimated={false}\n stateTitle={\n this.#componentLocale.main.objectsInFile.noObjects\n }\n key=\"no-objects-empty-state\"\n >\n <button\n // begin by selecting a file\n class=\"button-secondary\"\n onClick={this.#selectFileInputHandler}\n >\n {this.#componentLocale.main.objectsInFile.selectFile}\n </button>\n </gx-ide-empty-state>\n )}\n\n <footer class=\"field-group objects-in-file__footer spacing-body-inline\">\n <ch-checkbox\n // select all / unselect all checkbox\n id=\"select-all-checkbox\"\n class=\"checkbox create-data-in-kb\"\n checkedValue={CHECKBOX_ALL_CHECKED_VALUE}\n unCheckedValue={CHECKBOX_ALL_UNCHECKED_VALUE}\n caption={\n this.#componentLocale.main.objectsInFile.selectUnselect\n }\n value={this.selectAllCheckboxValue}\n onInput={this.#toggleSelectionClickHandler}\n disabled={\n this.importingIsInProcess ||\n this.objectsTreeModel.length === 0\n }\n part=\"select-all-checkbox\"\n ></ch-checkbox>\n\n <div class=\"buttons-spacer\">\n <button\n // import objects button\n id=\"import-btn\"\n class=\"button-primary \"\n onClick={this.#importObjectsHandler}\n disabled={\n this.objectsTreeModel?.length === 0 ||\n this.importingIsInProcess\n }\n >\n {this.#componentLocale.main.objectsInFile.importButton}\n </button>\n\n <button\n // cancel-import button\n id=\"cancel-import-btn\"\n class=\"button-secondary \"\n onClick={this.#cancelImportHandler}\n disabled={!this.importingIsInProcess}\n part=\"cancel-import-button\"\n >\n {this.#componentLocale.main.objectsInFile.cancelButton}\n </button>\n\n <button\n // settings/options button\n id=\"select-kb-btn\"\n class=\"button-tertiary button-icon-only\"\n part=\"select-kb-btn\"\n onClick={this.#optionsHandler}\n >\n <ch-image\n class=\"icon-md\"\n src={GEMINI_TOOLS_SETTINGS}\n ></ch-image>\n </button>\n </div>\n </footer>\n </div>\n </section>\n\n <section\n // import status\n class=\"import-status__section\"\n >\n <h2 class=\"control-header control-header-with-border control-header__import-status subtitle-regular-xs\t text-align-center spacing-body-inline\">\n {this.#componentLocale.main.importStatus.title}\n </h2>\n\n <div class=\"field-group import-status__main\">\n {!this.noImport && this.someStatusVisible ? (\n <ch-tree-view-render\n // import status tree\n model={this.importTreeState}\n toggleCheckboxes={true}\n showLines=\"last\"\n class=\"tree-view\"\n filter={this.importedTreeFilterRegExp}\n filterType=\"metadata\"\n filterOptions={{\n autoExpand: true,\n hideMatchesAndShowNonMatches: false\n }}\n ></ch-tree-view-render>\n ) : (\n <gx-ide-empty-state\n isAnimated={false}\n stateIconSrc={NOTICE_ICON}\n stateTitle={this.importStatusMessage}\n key=\"no-objects-empty-state\"\n ></gx-ide-empty-state>\n )}\n\n <footer class=\"import-status__footer spacing-body-inline\">\n <button\n // clear status button\n class=\"button-secondary import-clear-status-btn\"\n onClick={this.#clearStatusHandler}\n disabled={this.noImport || this.importingIsInProcess}\n part=\"clear-status-btn\"\n >\n {this.#componentLocale.main.importStatus.clearButton}\n </button>\n </footer>\n </div>\n </section>\n\n <footer\n // footer\n class=\"footer\"\n >\n <gx-ide-status-buttons\n errors={this.statusInfo.error.number}\n warnings={this.statusInfo.warning.number}\n successes={this.statusInfo.success.number}\n hideMessage\n compact\n minimal={this.statusMinimal}\n onSelectionChanged={this.#statusButtonsSelectionChangedHandler}\n ></gx-ide-status-buttons>\n </footer>\n </section>\n </Host>\n );\n }\n}\nexport type CancelCallback = () => Promise<boolean>;\n\nexport type ImportCallback = (itemIds: string[]) => Promise<boolean>;\n\nexport type ImportItemData = {\n id: string;\n name: string;\n};\n\nexport type LoadCallback = (file: File) => Promise<ImportCategoryData[]>;\n\nexport type ObjectContextMenuCallback = (\n tree: ObjectsSourceType,\n contextMenuInfo: ContextMenuInfo\n) => Promise<void>;\n\nexport type ObjectsSourceType = \"in-file\" | \"imported\";\n\nexport type OptionsCallback = () => Promise<void>;\n\nexport interface SelectedObject {\n itemId: string;\n subItemsIds: string[];\n}\n\nexport type StatusItemsState = {\n error: string[];\n warning: string[];\n success: string[];\n};\n\ntype StatusInfo = {\n error: {\n display: boolean;\n number: number;\n };\n warning: {\n display: boolean;\n number: number;\n };\n success: {\n display: boolean;\n number: number;\n };\n};\n\nexport type CategoryItemMap = Map<string, CategoryItemMapValue>;\nexport type CategoryItemMapValue = { name: string; icon: string };\nexport type ObjectCategoryItemMap = Map<string, string>;\nexport type Status = \"success\" | \"error\" | \"warning\";\n"],"mappings":"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"}
1
+ {"version":3,"names":["KB_OBJECT","KB_CATEGORY","STATUS_REGEXP_KEY","convertImportCategoryItemToTreeItem","importCatIcon","importItems","importTreeItems","forEach","importItem","push","id","caption","name","expanded","leaf","startImgSrc","metadata","convertImportCategoryDataToTreeView","importCategoryData","treeData","importCategory","importCategoryTreeItem","items","length","icon","createImportResultDataMessages","importItemId","messagesArray","status","messages","message","i","JSON","stringify","createImportResultItem","categoryData","importItemResultData","resultItemId","importResultItem","parts","addImportItemResultDataItem","categoryItemMap","objectCategoryItemMap","importTreeActualState","updatedImportTreeModel","objectCategoryId","get","categoryIndex","findIndex","treeItem","category","resultItem","newItemsLength","kbManagerImportCss","CSS_BUNDLES","NOTICE_ICON","getIconPath","colorType","FILE_ICON","GEMINI_TOOLS_SETTINGS","MENU_DELETE","CHECKBOX_ALL_CHECKED_VALUE","CHECKBOX_ALL_UNCHECKED_VALUE","GxIdeKbManagerImport","_GxIdeKbManagerImport_componentLocale","set","this","_GxIdeKbManagerImport_selectedObjectsInFileIds","_GxIdeKbManagerImport_fileInputEl","_GxIdeKbManagerImport_fileInputHiddenEl","_GxIdeKbManagerImport_objectsTreeEl","_GxIdeKbManagerImport_successItemsIds","Set","_GxIdeKbManagerImport_warningItemsIds","_GxIdeKbManagerImport_errorItemsIds","_GxIdeKbManagerImport_categoryItemMap","Map","_GxIdeKbManagerImport_objectCategoryItemMap","_GxIdeKbManagerImport_cancelImportHandler","cancelCallback","_GxIdeKbManagerImport_clearStatusHandler","importTreeState","statusInfo","error","number","warning","success","_GxIdeKbManagerImport_evaluateImport","noImport","_a","_GxIdeKbManagerImport_evaluateImportStatusMessage","someStatusVisible","display","_GxIdeKbManagerImport_importObjectsHandler","async","__classPrivateFieldGet","call","importingIsInProcess","importCallback","checkedObjectsIds","then","_GxIdeKbManagerImport_loadFileHandler","file","importedCategoryData","loadCallback","clear","object","importCategoryTreeData","objectsTreeModel","_GxIdeKbManagerImport_objectsTreeCheckedItemsChangedHandler","event","allItems","detail","checkedItemIds","item","checked","size","selectAllCheckboxValue","selectAllCheckboxIndeterminate","_GxIdeKbManagerImport_objectsTreeContextMenuHandler","objectContextMenuCallback","selection","clientX","contextmenuEvent","screenX","clientY","screenY","_GxIdeKbManagerImport_objectsTreeSelectedItemsChangedHandler","__classPrivateFieldSet","map","_GxIdeKbManagerImport_optionsHandler","optionsCallback","_GxIdeKbManagerImport_removeFileSelection","selectedFile","value","_GxIdeKbManagerImport_selectFileInputHandler","click","_GxIdeKbManagerImport_selectFileInputChangedHandler","target","files","_GxIdeKbManagerImport_statusButtonsSelectionChangedHandler","activeStates","statuses","errorIndex","state","itemId","warningIndex","successIndex","pattern","statusOptions","join","importedTreeFilterRegExp","RegExp","_GxIdeKbManagerImport_toggleSelectionClickHandler","updateAllItemsProperties","_GxIdeKbManagerImport_updateStatusItemsState","child","add","importTreeStateChanged","watchImportTreeStateHandler","importStatusMessage","main","importStatus","noImportedFiles","importedButHidden","watchObjectsTreeModelHandler","newState","noObjects","selectedFileChanged","newFile","componentDidLoad","focus","componentDidRender","componentWillLoad","Locale","getComponentStrings","el","componentDidLoadEvent","emit","addResultItem","render","h","Host","class","model","slot","htmlFor","header","fileNameLabel","autoFocus","part","type","readonly","placeholder","fileNamePlaceholder","ref","hidden","accept","onChange","removeFileSelection","title","onClick","src","disabled","selectFileButton","objectsInFile","showLines","dragDisabled","dropDisabled","toggleCheckboxes","checkbox","onCheckedItemsChange","onSelectedItemsChange","onItemContextmenu","isAnimated","stateTitle","key","selectFile","checkedValue","unCheckedValue","selectUnselect","onInput","_b","importButton","cancelButton","filter","filterType","filterOptions","autoExpand","hideMatchesAndShowNonMatches","stateIconSrc","clearButton","errors","warnings","successes","hideMessage","compact","minimal","statusMinimal","onSelectionChanged"],"sources":["src/components/kb-manager-import/helpers.ts","src/components/kb-manager-import/kb-manager-import.scss?tag=gx-ide-kb-manager-import&encapsulation=shadow","src/components/kb-manager-import/kb-manager-import.tsx"],"sourcesContent":["/* Tree View */\nimport {\n TreeViewItemModel,\n TreeViewModel\n} from \"@genexus/chameleon-controls-library\";\n\n/* Kb Manager Import Types*/\nimport {\n ImportItemData,\n CategoryItemMap,\n CategoryItemMapValue,\n ObjectCategoryItemMap,\n Status\n} from \"./kb-manager-import\";\nimport { ImportCategoryData, ImportItemResultData } from \"../../common/types\";\n\n/* objects in file metadata*/\nexport const KB_OBJECT = \"object\";\nexport const KB_CATEGORY = \"category\";\n\nexport const STATUS_REGEXP_KEY = \"status\";\n\n// - - - - - - - - - - - - - - - - -\n// Objects In File Tree Model\n// - - - - - - - - - - - - - - - - -\n\nconst convertImportCategoryItemToTreeItem = (\n importCatIcon: string,\n importItems: ImportItemData[]\n) => {\n const importTreeItems: TreeViewItemModel[] = [];\n importItems.forEach(importItem => {\n importTreeItems.push({\n id: importItem.id,\n caption: importItem.name,\n expanded: true,\n leaf: true,\n startImgSrc: importCatIcon,\n metadata: KB_OBJECT\n });\n });\n return importTreeItems;\n};\n\nexport const convertImportCategoryDataToTreeView = (\n importCategoryData: ImportCategoryData[]\n): TreeViewModel => {\n const treeData: TreeViewModel = [];\n if (!importCategoryData) {\n return treeData;\n }\n importCategoryData.forEach(importCategory => {\n const importCategoryTreeItem: TreeViewItemModel = {\n id: importCategory.id,\n caption: `${importCategory.name} (${importCategory.items.length})`,\n expanded: true,\n leaf: false,\n startImgSrc: importCategory.icon,\n metadata: KB_CATEGORY,\n items: convertImportCategoryItemToTreeItem(\n importCategory.icon,\n importCategory.items\n )\n };\n treeData.push(importCategoryTreeItem);\n });\n return treeData;\n};\n\n// - - - - - - - - - - - - - - - - -\n// Import Status Tree Model\n// - - - - - - - - - - - - - - - - -\n\nconst createImportResultDataMessages = (\n importItemId: string,\n messagesArray: string[],\n status: Status\n): TreeViewItemModel[] => {\n const messages: TreeViewItemModel[] = [];\n messagesArray.forEach((message, i) => {\n messages.push({\n id: `${importItemId}-message-${i}`,\n caption: message,\n startImgSrc: \"gemini-tools/list-view/on-surface\",\n leaf: true,\n metadata: JSON.stringify({\n [STATUS_REGEXP_KEY]: status\n })\n });\n });\n return messages;\n};\n\nconst createImportResultItem = (\n categoryData: CategoryItemMapValue,\n importItemResultData: ImportItemResultData\n): TreeViewItemModel => {\n const resultItemId = `${importItemResultData.id}-${importItemResultData.name}`;\n const importResultItem: TreeViewItemModel = {\n id: resultItemId,\n startImgSrc: categoryData.icon,\n caption: importItemResultData.name,\n parts: `tree-view-item tree-view-item--status tree-view-item--${importItemResultData.status}`,\n expanded: true,\n leaf: importItemResultData.messages.length === 0,\n metadata: JSON.stringify({\n [STATUS_REGEXP_KEY]: importItemResultData.status\n }),\n items: createImportResultDataMessages(\n resultItemId,\n importItemResultData.messages,\n importItemResultData.status\n )\n };\n return importResultItem;\n};\n\n// This functions updates the \"Import Status\" model, by adding a new result item.\nexport const addImportItemResultDataItem = (\n importItemResultData: ImportItemResultData,\n categoryItemMap: CategoryItemMap,\n objectCategoryItemMap: ObjectCategoryItemMap,\n importTreeActualState: TreeViewItemModel[]\n) => {\n const updatedImportTreeModel: TreeViewModel = [...importTreeActualState];\n\n // Use the resultItem.id to find the corresponding category in the categoryMap\n const objectCategoryId = objectCategoryItemMap.get(importItemResultData.id);\n const categoryData = categoryItemMap.get(objectCategoryId);\n\n const categoryIndex: number = updatedImportTreeModel.findIndex(\n treeItem => treeItem.id === objectCategoryId\n );\n\n if (categoryIndex === -1) {\n // category does not exists yet.\n const category: TreeViewItemModel = {\n id: objectCategoryId,\n caption: `${categoryData.name} (1)`,\n startImgSrc: `${categoryData.icon}`,\n expanded: true,\n items: [createImportResultItem(categoryData, importItemResultData)]\n };\n\n updatedImportTreeModel.push(category);\n return updatedImportTreeModel;\n }\n\n // else category already exists. Just insert the result item in the category.\n const resultItem: TreeViewItemModel = createImportResultItem(\n categoryData,\n importItemResultData\n );\n updatedImportTreeModel[categoryIndex].items = [\n ...updatedImportTreeModel[categoryIndex].items,\n resultItem\n ];\n\n // update category caption length\n const newItemsLength = updatedImportTreeModel[categoryIndex].items.length;\n updatedImportTreeModel[\n categoryIndex\n ].caption = `${categoryData.name} (${newItemsLength})`;\n\n return updatedImportTreeModel;\n};\n","@import \"../../global/gx-ide-mixins.scss\";\n\n:host {\n display: grid;\n block-size: 100%;\n grid-template:\n \"header header\" max-content\n \"objects-in-file import-status\" 1fr\n \"footer footer\" max-content;\n grid-template-columns: 1fr 1fr;\n}\n\n.section {\n display: contents;\n}\n\n// header\n.header {\n grid-template-columns: 1fr max-content;\n grid-area: header;\n}\n\n// objects in file\n.objects-in-file__section {\n grid-area: objects-in-file;\n}\n.objects-in-file__main {\n border-inline-end: var(--section-common-border);\n grid-template-rows: 1fr max-content;\n}\n.objects-in-file__footer {\n display: grid;\n}\n\n// import status\n.import-status__section {\n grid-area: import-status;\n}\n.import-status__main {\n grid-template-rows: 1fr max-content;\n}\n.import-status__footer {\n display: flex;\n}\n.import-clear-status-btn {\n margin-inline-start: auto;\n}\n\n// objects in file & import status\n.objects-in-file__section,\n.import-status__section {\n display: grid;\n grid-template-rows: max-content 1fr;\n}\n.control-header__objects-in-file,\n.control-header__import-status {\n padding-block-start: var(--mer-spacing--md);\n}\n.objects-in-file__main,\n.import-status__main {\n grid-auto-rows: max-content;\n padding-block: var(--content-block-spacing);\n overflow: auto;\n}\n\n// footer\n.footer {\n display: flex;\n grid-area: footer;\n border-block-start: var(--section-common-border);\n}\n\n// WA / TODO: Add a helper class in Mercury to justify text.\n.text-align-center {\n text-align: center; // should be resolved on mercury\n}\n\n.tree-view::part(item__action tree-view-item--status) {\n grid-template: \"first-img left-img text right-img\" / max-content max-content 1fr max-content;\n &::before {\n grid-area: first-img;\n content: \"\";\n width: var(--mer-spacing--xs);\n height: var(--mer-spacing--xs);\n border-radius: 50%;\n background-color: var(--gray-03);\n margin-inline-end: var(--mer-spacing--xxs);\n }\n}\n\n.tree-view::part(item__action tree-view-item--success) {\n @include tree-item-status(\"success\");\n}\n.tree-view::part(item__action tree-view-item--warning) {\n @include tree-item-status(\"warning\");\n}\n.tree-view::part(item__action tree-view-item--error) {\n @include tree-item-status(\"error\");\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n h,\n Method,\n Prop,\n State,\n Watch\n} from \"@stencil/core\";\n\nimport {\n ChCheckboxCustomEvent,\n // ChEditCustomEvent,\n TreeViewItemContextMenu\n} from \"@genexus/chameleon-controls-library\";\nimport { TreeViewItemModel } from \"@genexus/chameleon-controls-library\";\nimport { TreeViewItemModelExtended } from \"@genexus/chameleon-controls-library\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\n\nimport {\n ImportCategoryData,\n ImportItemResultData,\n ContextMenuInfo\n} from \"../../common/types\";\nimport {\n convertImportCategoryDataToTreeView,\n addImportItemResultDataItem\n} from \"./helpers\";\nimport { CheckedItemsInfo } from \"../_helpers/list-selector/list-selector\";\n\nimport { KB_OBJECT, STATUS_REGEXP_KEY } from \"./helpers\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/checkbox\",\n \"components/edit\",\n \"components/icon\",\n \"components/tree-view\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\"\n];\n\nconst NOTICE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"notice\",\n colorType: \"on-elevation\"\n});\n\nconst FILE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"file\",\n colorType: \"primary\"\n});\n\nconst GEMINI_TOOLS_SETTINGS = getIconPath({\n category: \"gemini-tools\",\n name: \"settings\",\n colorType: \"primary\"\n});\n\nconst MENU_DELETE = getIconPath({\n category: \"menus\",\n name: \"delete\",\n colorType: \"primary\"\n});\n\nconst CHECKBOX_ALL_CHECKED_VALUE = \"allChecked\";\nconst CHECKBOX_ALL_UNCHECKED_VALUE = \"allUnchecked\";\n\n@Component({\n tag: \"gx-ide-kb-manager-import\",\n styleUrl: \"kb-manager-import.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/kb-manager-import\"]\n})\nexport class GxIdeKbManagerImport {\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n\n #selectedObjectsInFileIds: string[] = [];\n\n @Element() el: HTMLGxIdeKbManagerImportElement;\n\n #fileInputEl!: HTMLChEditElement;\n #fileInputHiddenEl!: HTMLInputElement;\n #objectsTreeEl!: HTMLChTreeViewRenderElement;\n #successItemsIds: Set<string> = new Set();\n #warningItemsIds: Set<string> = new Set();\n #errorItemsIds: Set<string> = new Set();\n // #categoryItemMap maps a category id, with the name and icon.\n // required for the \"import status\" tree.\n #categoryItemMap: CategoryItemMap = new Map();\n #objectCategoryItemMap: ObjectCategoryItemMap = new Map();\n\n @State() checkedObjectsIds: string[] = [];\n @State() selectAllCheckboxValue: string;\n @State() selectAllCheckboxIndeterminate: boolean = false;\n @State() importStatusMessage: string;\n @State() importTreeState: TreeViewItemModel[] = [];\n @State() importedTreeFilterRegExp: RegExp;\n @Watch(\"importTreeState\")\n importTreeStateChanged() {\n // this.#filterImportedHandler();\n }\n @State() importingIsInProcess = false;\n @State() importTreeFilterList: string[] = [];\n @State() noImport: boolean;\n @State() noObjects: boolean = true;\n @State() objectsTreeModel: TreeViewItemModel[] = [];\n @State() showHiddenImportsMessage = false;\n @State() someStatusVisible: boolean;\n @State() statusInfo: StatusInfo = {\n error: {\n display: true,\n number: 0\n },\n warning: {\n display: true,\n number: 0\n },\n success: {\n display: true,\n number: 0\n }\n };\n\n @Watch(\"importTreeState\")\n watchImportTreeStateHandler() {\n this.#evaluateImport();\n if (this.noImport) {\n this.importStatusMessage =\n this.#componentLocale.main.importStatus.noImportedFiles;\n } else {\n this.importStatusMessage =\n this.#componentLocale.main.importStatus.importedButHidden;\n }\n }\n @Watch(\"objectsTreeModel\")\n watchObjectsTreeModelHandler(newState: TreeViewItemModel[]) {\n this.noObjects = !newState || newState.length === 0;\n }\n\n /**\n * Callback invoked when user wants to cancel the export process.\n */\n @Prop() readonly cancelCallback!: CancelCallback;\n\n /**\n * Callback invoked when user wants to initiate the import process.\n */\n @Prop() readonly importCallback!: ImportCallback;\n\n /**\n * Callback invoked when user wants to load the xpz information\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n * Displays status buttons (errors, warning, succeeded) with minimal UI (no captions)\n */\n @Prop() readonly objectContextMenuCallback!: ObjectContextMenuCallback;\n\n /**\n * Callback invoked when user wants to access the export options.\n */\n @Prop() readonly optionsCallback!: OptionsCallback;\n\n /**\n * Imported xml or xps file name\n */\n @Prop({ mutable: true }) selectedFile: File;\n @Watch(\"selectedFile\")\n selectedFileChanged(newFile: File) {\n if (newFile) {\n this.#loadFileHandler(newFile);\n }\n }\n\n /**\n * Displays status buttons (error, warning, success) with minimal UI (no captions).\n */\n @Prop() readonly statusMinimal = false;\n\n /**\n * Emitted once just after the component is fully loaded.\n */\n @Event() componentDidLoadEvent: EventEmitter<boolean>;\n\n /**\n * Emitted once just after the component is fully loaded and the first render() occurs\n */\n @Event() componentDidRenderFirstTime: EventEmitter<boolean>;\n\n componentDidLoad() {\n this.#fileInputEl.focus();\n }\n\n componentDidRender() {}\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.componentDidLoadEvent.emit(true);\n // this.#evaluateObjects();\n this.#evaluateImport();\n this.importStatusMessage =\n this.#componentLocale.main.importStatus.noImportedFiles;\n this.#evaluateImportStatusMessage();\n }\n\n /**\n * Add the result of importing an item\n */\n @Method()\n async addResultItem(item: ImportItemResultData) {\n this.importTreeState = addImportItemResultDataItem(\n item,\n this.#categoryItemMap,\n this.#objectCategoryItemMap,\n this.importTreeState\n );\n this.statusInfo[item.status].number++;\n this.#updateStatusItemsState();\n }\n\n #cancelImportHandler = () => {\n this.cancelCallback();\n };\n\n #clearStatusHandler = () => {\n this.importTreeState = [];\n this.statusInfo.error.number = 0;\n this.statusInfo.warning.number = 0;\n this.statusInfo.success.number = 0;\n };\n\n #evaluateImport = () => {\n this.noImport = !!(\n this.importTreeState?.length === 0 || !this.importTreeState\n );\n };\n\n #evaluateImportStatusMessage = () => {\n this.someStatusVisible =\n this.statusInfo.error.display ||\n this.statusInfo.warning.display ||\n this.statusInfo.success.display;\n };\n\n #importObjectsHandler = async () => {\n /* first clear imported objects (this clears errors/warnings/success counts as well)*/\n this.#clearStatusHandler();\n /* then do the import*/\n this.importingIsInProcess = true;\n this.importCallback(this.checkedObjectsIds).then(() => {\n this.importingIsInProcess = false;\n });\n };\n\n #loadFileHandler = async (file: File) => {\n const importedCategoryData = await this.loadCallback(file);\n this.#categoryItemMap.clear();\n this.#objectCategoryItemMap.clear();\n\n importedCategoryData.forEach(category => {\n this.#categoryItemMap.set(category.id, {\n name: category.name,\n icon: category.icon\n });\n category.items.forEach(object => {\n this.#objectCategoryItemMap.set(object.id, category.id);\n });\n });\n\n const importCategoryTreeData =\n convertImportCategoryDataToTreeView(importedCategoryData);\n this.objectsTreeModel = importCategoryTreeData;\n };\n\n #objectsTreeCheckedItemsChangedHandler = (\n event: CustomEvent<Map<string, TreeViewItemModelExtended>>\n ) => {\n const allItems = event.detail;\n const checkedItemIds: string[] = [];\n const checkedObjectsIds: string[] = [];\n allItems.forEach(item => {\n if (item.item.checked) {\n checkedItemIds.push(item.item.id);\n }\n if (item.item.checked && item.item.metadata === KB_OBJECT) {\n checkedObjectsIds.push(item.item.id);\n }\n });\n this.checkedObjectsIds = checkedObjectsIds;\n\n // Evaluate \"Select All / Unselect All\" checkbox state\n if (allItems.size === checkedItemIds.length) {\n this.selectAllCheckboxValue = CHECKBOX_ALL_CHECKED_VALUE;\n this.selectAllCheckboxIndeterminate = false;\n } else if (checkedItemIds.length === 0) {\n this.selectAllCheckboxValue = CHECKBOX_ALL_UNCHECKED_VALUE;\n this.selectAllCheckboxIndeterminate = false;\n } else {\n this.selectAllCheckboxIndeterminate = true;\n }\n };\n\n #objectsTreeContextMenuHandler = (\n event: CustomEvent<TreeViewItemContextMenu>\n ) => {\n if (event.detail.metadata === KB_OBJECT) {\n this.objectContextMenuCallback(\"imported\", {\n selection: this.#selectedObjectsInFileIds,\n clientX: event.detail.contextmenuEvent.screenX,\n clientY: event.detail.contextmenuEvent.screenY\n });\n }\n };\n\n #objectsTreeSelectedItemsChangedHandler = (\n event: CustomEvent<TreeViewItemModelExtended[]>\n ) => {\n this.#selectedObjectsInFileIds = event.detail.map(item => item.item.id);\n };\n\n #optionsHandler = () => {\n if (this.optionsCallback) {\n this.optionsCallback();\n // returns boolean\n }\n };\n\n #removeFileSelection = () => {\n this.selectedFile = null;\n this.#fileInputHiddenEl.value = null;\n };\n\n #selectFileInputHandler = () => {\n this.#fileInputHiddenEl.click();\n };\n\n #selectFileInputChangedHandler = (event: InputEvent) => {\n const target = event.target as HTMLInputElement;\n if (target.files?.length > 0) {\n this.selectedFile = target.files[0];\n }\n };\n\n #statusButtonsSelectionChangedHandler = (\n event: CustomEvent<CheckedItemsInfo>\n ) => {\n const activeStates = event.detail;\n const statuses: Status[] = [];\n\n const errorIndex = activeStates.findIndex(\n state => state.itemId === \"errors\"\n );\n const warningIndex = activeStates.findIndex(\n state => state.itemId === \"warnings\"\n );\n const successIndex = activeStates.findIndex(\n state => state.itemId === \"successes\"\n );\n\n if (errorIndex !== -1) {\n statuses.push(\"error\");\n }\n if (warningIndex !== -1) {\n statuses.push(\"warning\");\n }\n if (successIndex !== -1) {\n statuses.push(\"success\");\n }\n\n let pattern = `\"${STATUS_REGEXP_KEY}\":\"\"`;\n if (statuses.length) {\n const statusOptions = statuses.join(\"|\");\n pattern = `\"${STATUS_REGEXP_KEY}\":\"(${statusOptions})\"`;\n }\n this.importedTreeFilterRegExp = new RegExp(pattern, \"i\");\n\n // Update statusInfo for the status-buttons\n this.statusInfo = {\n error: {\n display: errorIndex !== -1,\n number: this.statusInfo.error.number\n },\n warning: {\n display: warningIndex !== -1,\n number: this.statusInfo.warning.number\n },\n success: {\n display: successIndex !== -1,\n number: this.statusInfo.success.number\n }\n };\n\n this.#evaluateImportStatusMessage();\n };\n\n #toggleSelectionClickHandler = (\n event: ChCheckboxCustomEvent<any> | InputEvent\n ) => {\n if (this.#objectsTreeEl) {\n const checked = event.detail === CHECKBOX_ALL_CHECKED_VALUE;\n this.#objectsTreeEl.updateAllItemsProperties({ checked: checked });\n }\n };\n\n #updateStatusItemsState = () => {\n this.#errorItemsIds.clear();\n this.#warningItemsIds.clear();\n this.#successItemsIds.clear();\n this.importTreeState.forEach(item => {\n const items = item.items;\n items.forEach(child => {\n if (child.metadata === \"error\") {\n this.#errorItemsIds.add(child.id);\n }\n if (child.metadata === \"warning\") {\n this.#warningItemsIds.add(child.id);\n }\n if (child.metadata === \"success\") {\n this.#successItemsIds.add(child.id);\n }\n });\n });\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <section class=\"section\">\n <header\n // header\n class=\"field-group control-header-with-border header header-two-cols spacing-body-block-start spacing-body-inline\"\n slot=\"header\"\n >\n <div\n // select a file\n class=\"field field-inline\"\n >\n <label class=\"label\" htmlFor=\"file-name\">\n {this.#componentLocale.header.fileNameLabel}\n </label>\n <ch-edit\n autoFocus\n id=\"file-name\"\n class=\"input\"\n part=\"file-name\"\n type=\"text\"\n readonly\n value={this.selectedFile?.name}\n placeholder={this.#componentLocale.header.fileNamePlaceholder}\n startImgSrc={FILE_ICON}\n ref={(el: HTMLChEditElement) =>\n (this.#fileInputEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n <input\n hidden\n type=\"file\"\n accept=\".xpz, .xml\"\n onChange={this.#selectFileInputChangedHandler}\n ref={(el: HTMLInputElement) =>\n (this.#fileInputHiddenEl = el as HTMLInputElement)\n }\n />\n </div>\n\n <div class=\"buttons-spacer\">\n <button\n // remove file selection\n aria-label={this.#componentLocale.header.removeFileSelection}\n title={this.#componentLocale.header.removeFileSelection}\n id=\"reset-all-button\"\n class=\"button-tertiary button-icon-only\"\n part=\"reset-all-button\"\n onClick={this.#removeFileSelection}\n >\n <ch-image class=\"icon-md\" src={MENU_DELETE}></ch-image>\n </button>\n\n <button\n // select file\n id=\"select-file-load-button\"\n class=\"button-primary\"\n part=\"select-file-load-button\"\n onClick={this.#selectFileInputHandler}\n disabled={this.importingIsInProcess}\n >\n {this.#componentLocale.header.selectFileButton}\n </button>\n </div>\n </header>\n\n <section\n // objects in file\n class=\"objects-in-file__section\"\n >\n <h2 class=\"control-header control-header-with-border control-header__objects-in-file subtitle-regular-xs\t text-align-center spacing-body-inline\">\n {this.#componentLocale.main.objectsInFile.title}\n </h2>\n\n <div class=\"field-group objects-in-file__main\">\n {!this.noObjects ? (\n <ch-tree-view-render\n // objects in file tree\n showLines=\"last\"\n class=\"tree-view\"\n model={this.objectsTreeModel}\n dragDisabled={true}\n dropDisabled={true}\n toggleCheckboxes={true}\n checkbox={true}\n checked={true}\n onCheckedItemsChange={\n this.#objectsTreeCheckedItemsChangedHandler\n }\n onSelectedItemsChange={\n this.#objectsTreeSelectedItemsChangedHandler\n }\n onItemContextmenu={this.#objectsTreeContextMenuHandler}\n ref={el =>\n (this.#objectsTreeEl = el as HTMLChTreeViewRenderElement)\n }\n ></ch-tree-view-render>\n ) : (\n <gx-ide-empty-state\n isAnimated={false}\n stateTitle={\n this.#componentLocale.main.objectsInFile.noObjects\n }\n key=\"no-objects-empty-state\"\n >\n <button\n // begin by selecting a file\n class=\"button-secondary\"\n onClick={this.#selectFileInputHandler}\n >\n {this.#componentLocale.main.objectsInFile.selectFile}\n </button>\n </gx-ide-empty-state>\n )}\n\n <footer class=\"field-group objects-in-file__footer spacing-body-inline\">\n <ch-checkbox\n // select all / unselect all checkbox\n id=\"select-all-checkbox\"\n class=\"checkbox create-data-in-kb\"\n checkedValue={CHECKBOX_ALL_CHECKED_VALUE}\n unCheckedValue={CHECKBOX_ALL_UNCHECKED_VALUE}\n caption={\n this.#componentLocale.main.objectsInFile.selectUnselect\n }\n value={this.selectAllCheckboxValue}\n onInput={this.#toggleSelectionClickHandler}\n disabled={\n this.importingIsInProcess ||\n this.objectsTreeModel.length === 0\n }\n part=\"select-all-checkbox\"\n ></ch-checkbox>\n\n <div class=\"buttons-spacer\">\n <button\n // import objects button\n id=\"import-btn\"\n class=\"button-primary \"\n onClick={this.#importObjectsHandler}\n disabled={\n this.objectsTreeModel?.length === 0 ||\n this.importingIsInProcess\n }\n >\n {this.#componentLocale.main.objectsInFile.importButton}\n </button>\n\n <button\n // cancel-import button\n id=\"cancel-import-btn\"\n class=\"button-secondary \"\n onClick={this.#cancelImportHandler}\n disabled={!this.importingIsInProcess}\n part=\"cancel-import-button\"\n >\n {this.#componentLocale.main.objectsInFile.cancelButton}\n </button>\n\n <button\n // settings/options button\n id=\"select-kb-btn\"\n class=\"button-tertiary button-icon-only\"\n part=\"select-kb-btn\"\n onClick={this.#optionsHandler}\n >\n <ch-image\n class=\"icon-md\"\n src={GEMINI_TOOLS_SETTINGS}\n ></ch-image>\n </button>\n </div>\n </footer>\n </div>\n </section>\n\n <section\n // import status\n class=\"import-status__section\"\n >\n <h2 class=\"control-header control-header-with-border control-header__import-status subtitle-regular-xs\t text-align-center spacing-body-inline\">\n {this.#componentLocale.main.importStatus.title}\n </h2>\n\n <div class=\"field-group import-status__main\">\n {!this.noImport && this.someStatusVisible ? (\n <ch-tree-view-render\n // import status tree\n model={this.importTreeState}\n toggleCheckboxes={true}\n showLines=\"last\"\n class=\"tree-view\"\n filter={this.importedTreeFilterRegExp}\n filterType=\"metadata\"\n filterOptions={{\n autoExpand: true,\n hideMatchesAndShowNonMatches: false\n }}\n ></ch-tree-view-render>\n ) : (\n <gx-ide-empty-state\n isAnimated={false}\n stateIconSrc={NOTICE_ICON}\n stateTitle={this.importStatusMessage}\n key=\"no-objects-empty-state\"\n ></gx-ide-empty-state>\n )}\n\n <footer class=\"import-status__footer spacing-body-inline\">\n <button\n // clear status button\n class=\"button-secondary import-clear-status-btn\"\n onClick={this.#clearStatusHandler}\n disabled={this.noImport || this.importingIsInProcess}\n part=\"clear-status-btn\"\n >\n {this.#componentLocale.main.importStatus.clearButton}\n </button>\n </footer>\n </div>\n </section>\n\n <footer\n // footer\n class=\"footer\"\n >\n <gx-ide-status-buttons\n errors={this.statusInfo.error.number}\n warnings={this.statusInfo.warning.number}\n successes={this.statusInfo.success.number}\n hideMessage\n compact\n minimal={this.statusMinimal}\n onSelectionChanged={this.#statusButtonsSelectionChangedHandler}\n ></gx-ide-status-buttons>\n </footer>\n </section>\n </Host>\n );\n }\n}\nexport type CancelCallback = () => Promise<boolean>;\n\nexport type ImportCallback = (itemIds: string[]) => Promise<boolean>;\n\nexport type ImportItemData = {\n id: string;\n name: string;\n};\n\nexport type LoadCallback = (file: File) => Promise<ImportCategoryData[]>;\n\nexport type ObjectContextMenuCallback = (\n tree: ObjectsSourceType,\n contextMenuInfo: ContextMenuInfo\n) => Promise<void>;\n\nexport type ObjectsSourceType = \"in-file\" | \"imported\";\n\nexport type OptionsCallback = () => Promise<void>;\n\nexport interface SelectedObject {\n itemId: string;\n subItemsIds: string[];\n}\n\nexport type StatusItemsState = {\n error: string[];\n warning: string[];\n success: string[];\n};\n\ntype StatusInfo = {\n error: {\n display: boolean;\n number: number;\n };\n warning: {\n display: boolean;\n number: number;\n };\n success: {\n display: boolean;\n number: number;\n };\n};\n\nexport type CategoryItemMap = Map<string, CategoryItemMapValue>;\nexport type CategoryItemMapValue = { name: string; icon: string };\nexport type ObjectCategoryItemMap = Map<string, string>;\nexport type Status = \"success\" | \"error\" | \"warning\";\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ const $ = "/";
2
+
3
+ const t = "mer", getIconPath = (n, o = t) => {
4
+ const r = n.colorType ? `${$}${n.colorType}` : "";
5
+ return `${o}${$}${n.category}${$}${n.name}${r}`;
6
+ };
7
+
8
+ export { getIconPath as g };
9
+ //# sourceMappingURL=p-6e4208d8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["g","MERCURY_ALIAS","getIconPath","e","t","r","colorType","category","name"],"sources":["node_modules/@genexus/mercury/dist/assets-manager.js"],"sourcesContent":["\"use strict\";const a={},d={},g=\"/\",u=\":\";export const MERCURY_ALIAS=\"mer\",registerAssets=(e,t,r)=>{a[e]||d[t]||(a[e]=r,d[t]=e)},getAsset=(e,t)=>{const r=d[e]??e,n=a[r];if(!n)return;const o=n.icons[t.category];if(!o)return;const c=o[t.name];if(c)return t.colorType?c[t.colorType]:c},getIconPath=(e,t=MERCURY_ALIAS)=>{const r=e.colorType?`${g}${e.colorType}`:\"\";return`${t}${g}${e.category}${g}${e.name}${r}`},getIconPathExpanded=(e,t,r=MERCURY_ALIAS)=>`${getIconPath(e,r)}${u}${getIconPath(t,r)}`;const l=(e,t,r)=>{const n=t===MERCURY_ALIAS?\"\":`-${t}`;return r?`var(--icon${n}__${e}--${r})`:`var(--icon${n}__${e})`},f=e=>{const t=e.split(g),r=t[0],n=d[r]??r;if(!a[n]){const i=t[0],S=t[1],p=t[2];return{vendor:MERCURY_ALIAS,category:i,name:S,colorType:p}}const c=t[1],s=t[2],m=t[3];return{vendor:r,category:c,name:s,colorType:m}};export const getImagePathCallback=e=>{const{vendor:t,category:r,name:n,colorType:o}=f(e),c=getAsset(t,o?{category:r,name:n,colorType:o}:{category:r,name:n});if(!c)return;const s={base:l(c.enabled.name,t)};return c.hover&&(s.hover=l(c.hover.name,t)),c.active&&(s.active=l(c.active.name,t)),c.disabled&&(s.disabled=l(c.disabled.name,t)),s},getActionMenuImagePathCallback=(e,t)=>{if(!e.startImgSrc&&t===\"start\"||!e.endImgSrc&&t===\"end\")return;const r=t===\"start\"?e.startImgSrc:e.endImgSrc;return getImagePathCallback(r)},getActionListImagePathCallback=e=>e.imgSrc?getImagePathCallback(e.imgSrc):void 0,getNavigationListImagePathCallback=e=>e.startImgSrc?getImagePathCallback(e.startImgSrc):void 0,getTreeViewImagePathCallback=(e,t)=>{if(!e.startImgSrc&&t===\"start\"||!e.endImgSrc&&t===\"end\")return;const n=(t===\"start\"?e.startImgSrc:e.endImgSrc).split(u),o=getImagePathCallback(n[0]);if(o)return n[1]?{default:o,expanded:getImagePathCallback(n[1])}:{default:o}},getComboBoxImagePathCallback=(e,t)=>{if(!e.startImgSrc&&t===\"start\"||!e.endImgSrc&&t===\"end\")return;const r=t===\"start\"?e.startImgSrc:e.endImgSrc;return getImagePathCallback(r)},getImagePathCallbackDefinitions={\"ch-accordion-render\":getImagePathCallback,\"ch-action-menu-render\":getActionMenuImagePathCallback,\"ch-action-list-render\":getActionListImagePathCallback,\"ch-combo-box-render\":getComboBoxImagePathCallback,\"ch-navigation-list-render\":getNavigationListImagePathCallback,\"ch-checkbox\":getImagePathCallback,\"ch-edit\":getImagePathCallback,\"ch-image\":getImagePathCallback,\"ch-tree-view-render\":getTreeViewImagePathCallback};\n"],"mappings":"AAAkB,MAAWA,IAAE;;AAAsB,MAACC,IAAc,OAAsNC,cAAY,CAACC,GAAEC,IAAEH;EAAiB,MAAMI,IAAEF,EAAEG,YAAU,GAAGN,IAAIG,EAAEG,cAAY;EAAG,OAAM,GAAGF,IAAIJ,IAAIG,EAAEI,WAAWP,IAAIG,EAAEK,OAAOH;AAAC"}
@@ -1,6 +1,8 @@
1
1
  import { r as t, h as e, H as i, g as s } from "./p-49712340.js";
2
2
 
3
- import { g as a } from "./p-1986d34d.js";
3
+ import { g as a } from "./p-6e4208d8.js";
4
+
5
+ import "./p-ad5caf61.js";
4
6
 
5
7
  import { c as r } from "./p-13738332.js";
6
8
 
@@ -30,9 +32,9 @@ var c = undefined && undefined.__classPrivateFieldSet || function(t, e, i, s, a)
30
32
  return s === "a" ? a.call(t, i) : a ? a.value = i : e.set(t, i), i;
31
33
  };
32
34
 
33
- var d, h, u, f, m, b, p, g, w, v, y, k, _, x, W, M;
35
+ var d, h, u, f, m, b, p, g, w, v, y, k, _, x, W, j;
34
36
 
35
- const j = [ "resets/box-sizing", "components/button", "components/edit", "components/combo-box", "components/tabular-grid", "components/icon", "utils/form", "utils/layout", "utils/spacing", "chameleon/scrollbar" ];
37
+ const M = [ "resets/box-sizing", "components/button", "components/edit", "components/combo-box", "components/tabular-grid", "components/icon", "utils/form", "utils/layout", "utils/spacing", "chameleon/scrollbar" ];
36
38
 
37
39
  const z = a({
38
40
  category: "window-tools",
@@ -219,7 +221,7 @@ const T = class {
219
221
  value: this.type,
220
222
  model: mapOptionsToComboBoxItemModel((t = this.types) !== null && t !== void 0 ? t : []),
221
223
  part: "filter-type",
222
- onInput: o(this, M, "f")
224
+ onInput: o(this, j, "f")
223
225
  })), e("div", {
224
226
  class: "field field-inline object-selector__field"
225
227
  }, e("label", {
@@ -243,7 +245,7 @@ const T = class {
243
245
  this.name = t.detail.trim();
244
246
  o(this, b, "f").call(this);
245
247
  }));
246
- M.set(this, (t => {
248
+ j.set(this, (t => {
247
249
  this.type = t.detail;
248
250
  o(this, b, "f").call(this);
249
251
  }));
@@ -307,7 +309,7 @@ const T = class {
307
309
  return e(i, {
308
310
  class: "widget"
309
311
  }, e("ch-theme", {
310
- model: j
312
+ model: M
311
313
  }), e("section", {
312
314
  class: "section"
313
315
  }, o(this, _, "f").call(this), o(this, y, "f").call(this), e("footer", {
@@ -333,9 +335,9 @@ const T = class {
333
335
  d = new WeakMap, h = new WeakMap, u = new WeakMap, f = new WeakMap, m = new WeakMap,
334
336
  b = new WeakMap, p = new WeakMap, g = new WeakMap, w = new WeakMap, v = new WeakMap,
335
337
  y = new WeakMap, k = new WeakMap, _ = new WeakMap, x = new WeakMap, W = new WeakMap,
336
- M = new WeakMap;
338
+ j = new WeakMap;
337
339
 
338
340
  T.style = l;
339
341
 
340
342
  export { T as gx_ide_ww_attributes };
341
- //# sourceMappingURL=p-64f2a9f4.entry.js.map
343
+ //# sourceMappingURL=p-7be438dc.entry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["mapOptionsToComboBoxItemModel","options","map","option","value","id","caption","label","startImgSrc","_a","iconName","wwAttributesCss","CSS_BUNDLES","FILTER_ICON","getIconPath","category","name","colorType","GxIdeWWAttributes","_GxIdeWWAttributes__componentLocale","set","this","_GxIdeWWAttributes_chGridEl","_GxIdeWWAttributes_contextMenuCallbackHandler","ev","contextMenuCallback","selection","selectedAttributesIds","clientX","clientY","_GxIdeWWAttributes_deleteSelectionCallbackHandle","deleteSelectionCallback","_GxIdeWWAttributes_deselectAll","__classPrivateFieldGet","selectAllRows","_GxIdeWWAttributes_getAttributes","loading","filters","trim","type","object","loadCallback","then","items","attributes","length","call","_GxIdeWWAttributes_listenChanges","addEventListener","detail","rowsId","selectionChangeCallback","preventDefault","stopPropagation","_GxIdeWWAttributes_openSelectionCallbackHandle","openSelectionCallback","_GxIdeWWAttributes_entityCallbackHandler","async","result","objectActionCallback","iconSrc","Promise","resolve","_GxIdeWWAttributes_entityValueChangedHandler","event","_GxIdeWWAttributes_renderAttributesGrid","tabularGridEmpty","h","class","main","ref","el","__classPrivateFieldSet","part","settingable","size","config","tabularGrid","colSize","maxContent","tableHead","auto","description","_GxIdeWWAttributes_evaluateAttributesGridContent","loaderTitle","loader","title","show","attr","rowid","src","icon","stateIconSrc","stateTitle","emptyStateTitle","isAnimated","_GxIdeWWAttributes_renderFilter","htmlFor","filter","debounce","onInput","_GxIdeWWAttributes_nameInputHandler","disabled","types","model","_GxIdeWWAttributes_typeInputHandler","labelPosition","defaultValue","selectEntityCallback","onValueChanged","_GxIdeWWAttributes_selectAll","e","componentWillLoad","Locale","getComponentStrings","componentDidLoad","keyDownHandler","eventInfo","document","activeElement","key","reload","validate","isValid","render","btnDisabled","matchingAttributesLabel","matchingAttribute","matchingAttributes","attributesLength","_b","Host","onClick","footer","btnSelectAll"],"sources":["src/components/ww-attributes/helpers.tsx","src/components/ww-attributes/ww-attributes.scss?tag=gx-ide-ww-attributes&encapsulation=shadow","src/components/ww-attributes/ww-attributes.tsx"],"sourcesContent":["import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { GxOption } from \"../..\";\n\nexport const mapOptionsToComboBoxItemModel = (\n options: GxOption[]\n): ComboBoxModel => {\n return options.map(option => {\n return {\n value: option.id,\n caption: option.label,\n startImgSrc: option.iconName ?? \"\"\n };\n });\n};\n","@import \"../../../node_modules/@genexus/mercury/dist/mercury.scss\"; // for the tabular-grid-cell-layout mixin\n\n$nameInlineSize: 40px;\n$moreBtnInlineSize: 64px;\n\n:host {\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n// Header\n.header {\n grid-template:\n \"name type\" max-content\n \"object object\" max-content;\n grid-template-columns: 1fr 1fr;\n}\n.name__field {\n grid-area: name;\n}\n.name__label {\n inline-size: $nameInlineSize;\n}\n.type__field {\n grid-area: type;\n}\n.more__btn {\n grid-area: more;\n inline-size: $moreBtnInlineSize;\n}\n.object-selector__field {\n grid-area: object;\n}\n\n// Main\n.main {\n overflow: auto;\n}\n\nch-tabular-grid.tabular-grid--empty::part(main) {\n // WA to avoid scrollbar flickering when displaying the empty-state message\n overflow: hidden;\n}\nch-tabular-grid-rowset-empty {\n position: relative; // makes this the bounder element for the loader\n}\n\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".tabular-grid-row\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-apply-ellipsis: true,\n $tabular-grid-affected-columns-nth-list: (\n 2,\n 3,\n 4\n )\n);\n\n// WA: remove this when Mercury removes margin from p elements\n.matching-attributes {\n margin: 0;\n}\n","/* eslint-disable @stencil-community/own-props-must-be-private */\n// Stencil\nimport {\n Component,\n Element,\n Host,\n Listen,\n Method,\n Prop,\n State,\n h\n} from \"@stencil/core\";\n// Other Libraries\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n// Custom Imports\nimport { config } from \"../../common/config\";\nimport { Locale } from \"../../common/locale\";\nimport { ContextMenuInfo, EntityData, GxOption } from \"../../common/types\";\nimport { mapOptionsToComboBoxItemModel } from \"./helpers\";\nimport { ChEditCustomEvent } from \"@genexus/chameleon-controls-library\";\nimport HTMLChTabularGridRowsetElement from \"@genexus/chameleon-controls-library/dist/types/components/tabular-grid/rowset/tabular-grid-rowset\";\nimport { GxIdeEntitySelectorCustomEvent } from \"../../components\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/edit\",\n \"components/combo-box\",\n \"components/tabular-grid\",\n \"components/icon\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-elevation\"\n});\n\n@Component({\n tag: \"gx-ide-ww-attributes\",\n styleUrl: \"ww-attributes.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/ww-attributes\"]\n})\nexport class GxIdeWWAttributes {\n /**\n * Component hard-coded strings translations.\n */\n #_componentLocale: any;\n\n @Element() el: HTMLGxIdeWwAttributesElement;\n\n /* References needed to collect data */\n #chGridEl!: HTMLChTabularGridElement;\n\n /**\n * Attributes rendered in the table\n */\n @State() attributes: AttributeData[];\n\n /**\n * Selected attributes in the table of attributes\n */\n @State() selectedAttributesIds: string[] = [];\n\n /**\n * Show or hide advanced filters\n */\n @State() filterMore = false;\n\n /**\n * The attribute filter name\n */\n @State() name: string = \"\";\n\n /**\n * True if loadCallback hasn't been resolved yet\n */\n @State() loading: boolean = true;\n\n /**\n * The attribute object value\n */\n @State() object: EntityData;\n\n /**\n * The attribute filter type value\n */\n @State() type: string;\n\n /**\n * Callback invoked when user right-clicks on the grid\n */\n @Prop() readonly contextMenuCallback!: ContextMenuCallback;\n\n /**\n * Callback invoked when user deletes an object\n */\n @Prop() readonly deleteSelectionCallback!: DeleteSelectionCallback;\n\n /**\n * Callback invoked when user filters the objects\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n * Callback invoked when user executes filter action\n */\n @Prop() readonly objectActionCallback!: ObjectActionCallback;\n\n /**\n * Objects rendered in the object selector\n */\n @Prop() readonly objects!: GxOption[];\n\n /**\n * Callback invoked when user opens the selection dialog\n */\n @Prop() readonly openSelectionCallback!: OpenSelectionCallback;\n\n /**\n * Callback invoked when user selects or deselects an object\n */\n @Prop() readonly selectionChangeCallback!: SelectionChangeCallback;\n\n /**\n * Types rendered in the filter type selector\n */\n @Prop() readonly types!: GxOption[];\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n componentDidLoad() {\n this.#listenChanges();\n this.type = this.types[0].id; // before #getAttributes\n this.#getAttributes();\n }\n\n @Listen(\"keydown\", { passive: true })\n keyDownHandler(eventInfo: KeyboardEvent) {\n if (document.activeElement === this.el) {\n switch (eventInfo.key) {\n case \"Enter\":\n this.#openSelectionCallbackHandle();\n break;\n case \"Delete\":\n this.#deleteSelectionCallbackHandle();\n break;\n }\n }\n }\n\n /**\n * Reloads the view, refreshing the filters and attributes table.\n */\n @Method()\n async reload(): Promise<void> {\n this.name = \"\";\n this.type = this.types[0].id;\n this.object = null;\n this.#getAttributes();\n }\n\n /**\n * Validate necessary data input\n */\n @Method()\n async validate(): Promise<boolean> {\n const isValid = true;\n return isValid;\n }\n\n #contextMenuCallbackHandler = (ev: MouseEvent): void => {\n this.contextMenuCallback({\n selection: this.selectedAttributesIds,\n clientX: ev.clientX,\n clientY: ev.clientY\n });\n };\n\n #deleteSelectionCallbackHandle = (): void => {\n this.deleteSelectionCallback(this.selectedAttributesIds);\n };\n\n #deselectAll = (): void => {\n (this.#chGridEl as any).selectAllRows(false);\n };\n\n #getAttributes = (): void => {\n this.loading = true;\n const filters: AttributeFiltersData = {\n name: this.name.trim(),\n type: this.type,\n object: this.object?.id\n };\n this.loadCallback(filters).then((items: AttributeData[]) => {\n this.attributes = items;\n if (this.selectedAttributesIds?.length > 0) {\n this.selectedAttributesIds = [];\n this.#deselectAll();\n }\n this.loading = false;\n });\n };\n\n #listenChanges = (): void => {\n // for grid selection\n this.#chGridEl.addEventListener(\"selectionChanged\", (ev: any): void => {\n this.selectedAttributesIds = ev.detail.rowsId;\n this.selectionChangeCallback(this.selectedAttributesIds);\n });\n this.#chGridEl.addEventListener(\"contextmenu\", (ev: MouseEvent): void => {\n ev.preventDefault();\n ev.stopPropagation();\n this.#contextMenuCallbackHandler(ev);\n });\n\n this.#chGridEl.addEventListener(\"rowDoubleClicked\", (): void => {\n this.#openSelectionCallbackHandle();\n });\n };\n\n #openSelectionCallbackHandle = (): void => {\n this.openSelectionCallback(this.selectedAttributesIds);\n };\n\n #entityCallbackHandler = async (): Promise<null> => {\n const result = await this.objectActionCallback();\n this.object = {\n id: result.id,\n name: result.name,\n iconSrc: result.iconSrc\n };\n return new Promise(resolve => {\n resolve(null);\n });\n };\n\n #entityValueChangedHandler = (\n event: GxIdeEntitySelectorCustomEvent<EntityData>\n ) => {\n this.object = event.detail;\n this.#getAttributes();\n };\n\n #renderAttributesGrid = (): Element => {\n const tabularGridEmpty = this.attributes?.length === 0 || !this.attributes;\n return (\n <ch-tabular-grid\n class={{\n \"tabular-grid\": true,\n \"tabular-grid--empty\": tabularGridEmpty,\n \"main\": true\n }}\n ref={(el: HTMLChTabularGridElement) => (this.#chGridEl = el)}\n row-selection-mode=\"multiple\"\n part=\"ch-grid-attributes\"\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n column-name=\"\"\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.tableHead.name}\n column-name-position=\"text\"\n size={config.tabularGrid.colSize.auto}\n class=\"tabular-grid-column\"\n settingable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.tableHead.type}\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n size={config.tabularGrid.colSize.auto}\n settingable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.tableHead.description}\n column-name-position=\"text\"\n size={config.tabularGrid.colSize.auto}\n class=\"tabular-grid-column\"\n settingable={false}\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n\n {this.#evaluateAttributesGridContent()}\n </ch-tabular-grid>\n );\n };\n\n #evaluateAttributesGridContent = (): HTMLChTabularGridRowsetElement => {\n if (this.loading) {\n return (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty>\n <gx-ide-loader\n loaderTitle={this.#_componentLocale.loader.title}\n description={this.#_componentLocale.loader.description}\n show\n ></gx-ide-loader>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n );\n } else if (this.attributes.length) {\n return (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.attributes.map((attr: AttributeData) => (\n <ch-tabular-grid-row class=\"tabular-grid-row\" rowid={attr.id}>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n <ch-image class=\"icon-sm\" src={attr.icon}></ch-image>\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {attr.name}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {attr.type}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {attr.description}\n </ch-tabular-grid-cell>\n </ch-tabular-grid-row>\n ))}\n </ch-tabular-grid-rowset>\n );\n } else {\n // filter returned none\n return (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty>\n <gx-ide-empty-state\n stateIconSrc={FILTER_ICON}\n stateTitle={this.#_componentLocale.emptyStateTitle}\n isAnimated={true}\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n );\n }\n };\n\n #renderFilter = (): Element => {\n return (\n <header class=\"header field-group control-header-with-border spacing-body\">\n <div class=\"field field-inline name__field\">\n <label class=\"label name__label\" htmlFor=\"name\">\n {this.#_componentLocale.filter.name}\n </label>\n <ch-edit\n // Name\n id=\"name\"\n class=\"input\"\n value={this.name}\n debounce={300}\n onInput={this.#nameInputHandler}\n part=\"filter-name\"\n ></ch-edit>\n </div>\n\n <div class=\"field field-inline type__field\">\n <label class=\"label\" htmlFor=\"type\">\n {this.#_componentLocale.filter.type}\n </label>\n <ch-combo-box-render\n // Type\n id=\"type\"\n class=\"combo-box\"\n disabled={!this.types}\n value={this.type}\n model={mapOptionsToComboBoxItemModel(this.types ?? [])}\n part=\"filter-type\"\n onInput={this.#typeInputHandler}\n ></ch-combo-box-render>\n </div>\n\n {/* <button\n // TODO: Check with Design if it maes sense to have a button that toggles only one control.\n // More\n class=\"button-primary more__btn\"\n onClick={this.#showMoreFilter}\n part=\"button button--more-less\"\n >\n {this.filterMore\n ? this.#_componentLocale.filter.btnLess\n : this.#_componentLocale.filter.btnMore}\n </button> */}\n\n <div class=\"field field-inline object-selector__field\">\n <label class=\"label\" htmlFor=\"object-selector\">\n {this.#_componentLocale.filter.object}\n </label>\n <gx-ide-entity-selector\n // Object\n id=\"object-selector\"\n value={this.object}\n labelPosition=\"none\"\n defaultValue={null}\n selectEntityCallback={this.#entityCallbackHandler}\n onValueChanged={this.#entityValueChangedHandler}\n part=\"filter-module-folder\"\n ></gx-ide-entity-selector>\n </div>\n </header>\n );\n };\n\n #selectAll = (): void => {\n (this.#chGridEl as any).selectAllRows();\n };\n\n #nameInputHandler = (e: ChEditCustomEvent<string> | InputEvent) => {\n this.name = (e as ChEditCustomEvent<string>).detail.trim();\n this.#getAttributes();\n };\n\n #typeInputHandler = (e: CustomEvent<string> | InputEvent) => {\n this.type = e.detail as string;\n this.#getAttributes();\n };\n\n render(): void {\n const btnDisabled = !this.attributes || this.attributes.length === 0;\n const matchingAttributesLabel =\n this.attributes?.length === 1\n ? this.#_componentLocale.matchingAttribute\n : this.#_componentLocale.matchingAttributes;\n const attributesLength = this.attributes?.length || 0;\n\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n {this.#renderFilter()}\n\n {this.#renderAttributesGrid()}\n\n <footer class=\"control-footer control-footer-with-border spacing-body-block-end spacing-body-inline control-footer-space-between\">\n <p class=\"body-regular-s matching-attributes\">\n {`${attributesLength} ${matchingAttributesLabel}`}\n </p>\n\n <button\n id=\"button-select-all\"\n class=\"button-primary\"\n onClick={this.#selectAll}\n disabled={btnDisabled}\n part=\"button button--select-all\"\n >\n {this.#_componentLocale.footer.btnSelectAll}\n </button>\n </footer>\n </section>\n </Host>\n );\n }\n}\n\nexport type ContextMenuCallback = (\n contextMenuInfo: ContextMenuInfo\n) => Promise<void>;\n\nexport type DeleteSelectionCallback = (ids: string[]) => Promise<void>;\n\nexport type LoadCallback = (\n filters: AttributeFiltersData\n) => Promise<AttributeData[]>;\n\nexport type ObjectActionCallback = () => Promise<EntityData | undefined>;\n\nexport type OpenSelectionCallback = (ids: string[]) => Promise<void>;\n\nexport type SelectionChangeCallback = (ids: string[]) => Promise<void>;\n\nexport interface AttributeData {\n id: string;\n icon: string;\n name: string;\n type: string;\n description: string;\n}\n\nexport interface AttributeFiltersData {\n name?: string;\n type?: string;\n object?: string;\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["mapOptionsToComboBoxItemModel","options","map","option","value","id","caption","label","startImgSrc","_a","iconName","wwAttributesCss","CSS_BUNDLES","FILTER_ICON","getIconPath","category","name","colorType","GxIdeWWAttributes","_GxIdeWWAttributes__componentLocale","set","this","_GxIdeWWAttributes_chGridEl","_GxIdeWWAttributes_contextMenuCallbackHandler","ev","contextMenuCallback","selection","selectedAttributesIds","clientX","clientY","_GxIdeWWAttributes_deleteSelectionCallbackHandle","deleteSelectionCallback","_GxIdeWWAttributes_deselectAll","__classPrivateFieldGet","selectAllRows","_GxIdeWWAttributes_getAttributes","loading","filters","trim","type","object","loadCallback","then","items","attributes","length","call","_GxIdeWWAttributes_listenChanges","addEventListener","detail","rowsId","selectionChangeCallback","preventDefault","stopPropagation","_GxIdeWWAttributes_openSelectionCallbackHandle","openSelectionCallback","_GxIdeWWAttributes_entityCallbackHandler","async","result","objectActionCallback","iconSrc","Promise","resolve","_GxIdeWWAttributes_entityValueChangedHandler","event","_GxIdeWWAttributes_renderAttributesGrid","tabularGridEmpty","h","class","main","ref","el","__classPrivateFieldSet","part","settingable","size","config","tabularGrid","colSize","maxContent","tableHead","auto","description","_GxIdeWWAttributes_evaluateAttributesGridContent","loaderTitle","loader","title","show","attr","rowid","src","icon","stateIconSrc","stateTitle","emptyStateTitle","isAnimated","_GxIdeWWAttributes_renderFilter","htmlFor","filter","debounce","onInput","_GxIdeWWAttributes_nameInputHandler","disabled","types","model","_GxIdeWWAttributes_typeInputHandler","labelPosition","defaultValue","selectEntityCallback","onValueChanged","_GxIdeWWAttributes_selectAll","e","componentWillLoad","Locale","getComponentStrings","componentDidLoad","keyDownHandler","eventInfo","document","activeElement","key","reload","validate","isValid","render","btnDisabled","matchingAttributesLabel","matchingAttribute","matchingAttributes","attributesLength","_b","Host","onClick","footer","btnSelectAll"],"sources":["src/components/ww-attributes/helpers.tsx","src/components/ww-attributes/ww-attributes.scss?tag=gx-ide-ww-attributes&encapsulation=shadow","src/components/ww-attributes/ww-attributes.tsx"],"sourcesContent":["import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { GxOption } from \"../..\";\n\nexport const mapOptionsToComboBoxItemModel = (\n options: GxOption[]\n): ComboBoxModel => {\n return options.map(option => {\n return {\n value: option.id,\n caption: option.label,\n startImgSrc: option.iconName ?? \"\"\n };\n });\n};\n","@import \"../../../node_modules/@genexus/mercury/dist/mercury.scss\"; // for the tabular-grid-cell-layout mixin\n\n$nameInlineSize: 40px;\n$moreBtnInlineSize: 64px;\n\n:host {\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n// Header\n.header {\n grid-template:\n \"name type\" max-content\n \"object object\" max-content;\n grid-template-columns: 1fr 1fr;\n}\n.name__field {\n grid-area: name;\n}\n.name__label {\n inline-size: $nameInlineSize;\n}\n.type__field {\n grid-area: type;\n}\n.more__btn {\n grid-area: more;\n inline-size: $moreBtnInlineSize;\n}\n.object-selector__field {\n grid-area: object;\n}\n\n// Main\n.main {\n overflow: auto;\n}\n\nch-tabular-grid.tabular-grid--empty::part(main) {\n // WA to avoid scrollbar flickering when displaying the empty-state message\n overflow: hidden;\n}\nch-tabular-grid-rowset-empty {\n position: relative; // makes this the bounder element for the loader\n}\n\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".tabular-grid-row\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-apply-ellipsis: true,\n $tabular-grid-affected-columns-nth-list: (\n 2,\n 3,\n 4\n )\n);\n\n// WA: remove this when Mercury removes margin from p elements\n.matching-attributes {\n margin: 0;\n}\n","/* eslint-disable @stencil-community/own-props-must-be-private */\n// Stencil\nimport {\n Component,\n Element,\n Host,\n Listen,\n Method,\n Prop,\n State,\n h\n} from \"@stencil/core\";\n// Other Libraries\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n// Custom Imports\nimport { config } from \"../../common/config\";\nimport { Locale } from \"../../common/locale\";\nimport { ContextMenuInfo, EntityData, GxOption } from \"../../common/types\";\nimport { mapOptionsToComboBoxItemModel } from \"./helpers\";\nimport { ChEditCustomEvent } from \"@genexus/chameleon-controls-library\";\nimport HTMLChTabularGridRowsetElement from \"@genexus/chameleon-controls-library/dist/types/components/tabular-grid/rowset/tabular-grid-rowset\";\nimport { GxIdeEntitySelectorCustomEvent } from \"../../components\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/edit\",\n \"components/combo-box\",\n \"components/tabular-grid\",\n \"components/icon\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-elevation\"\n});\n\n@Component({\n tag: \"gx-ide-ww-attributes\",\n styleUrl: \"ww-attributes.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/ww-attributes\"]\n})\nexport class GxIdeWWAttributes {\n /**\n * Component hard-coded strings translations.\n */\n #_componentLocale: any;\n\n @Element() el: HTMLGxIdeWwAttributesElement;\n\n /* References needed to collect data */\n #chGridEl!: HTMLChTabularGridElement;\n\n /**\n * Attributes rendered in the table\n */\n @State() attributes: AttributeData[];\n\n /**\n * Selected attributes in the table of attributes\n */\n @State() selectedAttributesIds: string[] = [];\n\n /**\n * Show or hide advanced filters\n */\n @State() filterMore = false;\n\n /**\n * The attribute filter name\n */\n @State() name: string = \"\";\n\n /**\n * True if loadCallback hasn't been resolved yet\n */\n @State() loading: boolean = true;\n\n /**\n * The attribute object value\n */\n @State() object: EntityData;\n\n /**\n * The attribute filter type value\n */\n @State() type: string;\n\n /**\n * Callback invoked when user right-clicks on the grid\n */\n @Prop() readonly contextMenuCallback!: ContextMenuCallback;\n\n /**\n * Callback invoked when user deletes an object\n */\n @Prop() readonly deleteSelectionCallback!: DeleteSelectionCallback;\n\n /**\n * Callback invoked when user filters the objects\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n * Callback invoked when user executes filter action\n */\n @Prop() readonly objectActionCallback!: ObjectActionCallback;\n\n /**\n * Objects rendered in the object selector\n */\n @Prop() readonly objects!: GxOption[];\n\n /**\n * Callback invoked when user opens the selection dialog\n */\n @Prop() readonly openSelectionCallback!: OpenSelectionCallback;\n\n /**\n * Callback invoked when user selects or deselects an object\n */\n @Prop() readonly selectionChangeCallback!: SelectionChangeCallback;\n\n /**\n * Types rendered in the filter type selector\n */\n @Prop() readonly types!: GxOption[];\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n componentDidLoad() {\n this.#listenChanges();\n this.type = this.types[0].id; // before #getAttributes\n this.#getAttributes();\n }\n\n @Listen(\"keydown\", { passive: true })\n keyDownHandler(eventInfo: KeyboardEvent) {\n if (document.activeElement === this.el) {\n switch (eventInfo.key) {\n case \"Enter\":\n this.#openSelectionCallbackHandle();\n break;\n case \"Delete\":\n this.#deleteSelectionCallbackHandle();\n break;\n }\n }\n }\n\n /**\n * Reloads the view, refreshing the filters and attributes table.\n */\n @Method()\n async reload(): Promise<void> {\n this.name = \"\";\n this.type = this.types[0].id;\n this.object = null;\n this.#getAttributes();\n }\n\n /**\n * Validate necessary data input\n */\n @Method()\n async validate(): Promise<boolean> {\n const isValid = true;\n return isValid;\n }\n\n #contextMenuCallbackHandler = (ev: MouseEvent): void => {\n this.contextMenuCallback({\n selection: this.selectedAttributesIds,\n clientX: ev.clientX,\n clientY: ev.clientY\n });\n };\n\n #deleteSelectionCallbackHandle = (): void => {\n this.deleteSelectionCallback(this.selectedAttributesIds);\n };\n\n #deselectAll = (): void => {\n (this.#chGridEl as any).selectAllRows(false);\n };\n\n #getAttributes = (): void => {\n this.loading = true;\n const filters: AttributeFiltersData = {\n name: this.name.trim(),\n type: this.type,\n object: this.object?.id\n };\n this.loadCallback(filters).then((items: AttributeData[]) => {\n this.attributes = items;\n if (this.selectedAttributesIds?.length > 0) {\n this.selectedAttributesIds = [];\n this.#deselectAll();\n }\n this.loading = false;\n });\n };\n\n #listenChanges = (): void => {\n // for grid selection\n this.#chGridEl.addEventListener(\"selectionChanged\", (ev: any): void => {\n this.selectedAttributesIds = ev.detail.rowsId;\n this.selectionChangeCallback(this.selectedAttributesIds);\n });\n this.#chGridEl.addEventListener(\"contextmenu\", (ev: MouseEvent): void => {\n ev.preventDefault();\n ev.stopPropagation();\n this.#contextMenuCallbackHandler(ev);\n });\n\n this.#chGridEl.addEventListener(\"rowDoubleClicked\", (): void => {\n this.#openSelectionCallbackHandle();\n });\n };\n\n #openSelectionCallbackHandle = (): void => {\n this.openSelectionCallback(this.selectedAttributesIds);\n };\n\n #entityCallbackHandler = async (): Promise<null> => {\n const result = await this.objectActionCallback();\n this.object = {\n id: result.id,\n name: result.name,\n iconSrc: result.iconSrc\n };\n return new Promise(resolve => {\n resolve(null);\n });\n };\n\n #entityValueChangedHandler = (\n event: GxIdeEntitySelectorCustomEvent<EntityData>\n ) => {\n this.object = event.detail;\n this.#getAttributes();\n };\n\n #renderAttributesGrid = (): Element => {\n const tabularGridEmpty = this.attributes?.length === 0 || !this.attributes;\n return (\n <ch-tabular-grid\n class={{\n \"tabular-grid\": true,\n \"tabular-grid--empty\": tabularGridEmpty,\n \"main\": true\n }}\n ref={(el: HTMLChTabularGridElement) => (this.#chGridEl = el)}\n row-selection-mode=\"multiple\"\n part=\"ch-grid-attributes\"\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n column-name=\"\"\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.tableHead.name}\n column-name-position=\"text\"\n size={config.tabularGrid.colSize.auto}\n class=\"tabular-grid-column\"\n settingable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.tableHead.type}\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n size={config.tabularGrid.colSize.auto}\n settingable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.tableHead.description}\n column-name-position=\"text\"\n size={config.tabularGrid.colSize.auto}\n class=\"tabular-grid-column\"\n settingable={false}\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n\n {this.#evaluateAttributesGridContent()}\n </ch-tabular-grid>\n );\n };\n\n #evaluateAttributesGridContent = (): HTMLChTabularGridRowsetElement => {\n if (this.loading) {\n return (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty>\n <gx-ide-loader\n loaderTitle={this.#_componentLocale.loader.title}\n description={this.#_componentLocale.loader.description}\n show\n ></gx-ide-loader>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n );\n } else if (this.attributes.length) {\n return (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.attributes.map((attr: AttributeData) => (\n <ch-tabular-grid-row class=\"tabular-grid-row\" rowid={attr.id}>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n <ch-image class=\"icon-sm\" src={attr.icon}></ch-image>\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {attr.name}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {attr.type}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {attr.description}\n </ch-tabular-grid-cell>\n </ch-tabular-grid-row>\n ))}\n </ch-tabular-grid-rowset>\n );\n } else {\n // filter returned none\n return (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty>\n <gx-ide-empty-state\n stateIconSrc={FILTER_ICON}\n stateTitle={this.#_componentLocale.emptyStateTitle}\n isAnimated={true}\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n );\n }\n };\n\n #renderFilter = (): Element => {\n return (\n <header class=\"header field-group control-header-with-border spacing-body\">\n <div class=\"field field-inline name__field\">\n <label class=\"label name__label\" htmlFor=\"name\">\n {this.#_componentLocale.filter.name}\n </label>\n <ch-edit\n // Name\n id=\"name\"\n class=\"input\"\n value={this.name}\n debounce={300}\n onInput={this.#nameInputHandler}\n part=\"filter-name\"\n ></ch-edit>\n </div>\n\n <div class=\"field field-inline type__field\">\n <label class=\"label\" htmlFor=\"type\">\n {this.#_componentLocale.filter.type}\n </label>\n <ch-combo-box-render\n // Type\n id=\"type\"\n class=\"combo-box\"\n disabled={!this.types}\n value={this.type}\n model={mapOptionsToComboBoxItemModel(this.types ?? [])}\n part=\"filter-type\"\n onInput={this.#typeInputHandler}\n ></ch-combo-box-render>\n </div>\n\n {/* <button\n // TODO: Check with Design if it maes sense to have a button that toggles only one control.\n // More\n class=\"button-primary more__btn\"\n onClick={this.#showMoreFilter}\n part=\"button button--more-less\"\n >\n {this.filterMore\n ? this.#_componentLocale.filter.btnLess\n : this.#_componentLocale.filter.btnMore}\n </button> */}\n\n <div class=\"field field-inline object-selector__field\">\n <label class=\"label\" htmlFor=\"object-selector\">\n {this.#_componentLocale.filter.object}\n </label>\n <gx-ide-entity-selector\n // Object\n id=\"object-selector\"\n value={this.object}\n labelPosition=\"none\"\n defaultValue={null}\n selectEntityCallback={this.#entityCallbackHandler}\n onValueChanged={this.#entityValueChangedHandler}\n part=\"filter-module-folder\"\n ></gx-ide-entity-selector>\n </div>\n </header>\n );\n };\n\n #selectAll = (): void => {\n (this.#chGridEl as any).selectAllRows();\n };\n\n #nameInputHandler = (e: ChEditCustomEvent<string> | InputEvent) => {\n this.name = (e as ChEditCustomEvent<string>).detail.trim();\n this.#getAttributes();\n };\n\n #typeInputHandler = (e: CustomEvent<string> | InputEvent) => {\n this.type = e.detail as string;\n this.#getAttributes();\n };\n\n render(): void {\n const btnDisabled = !this.attributes || this.attributes.length === 0;\n const matchingAttributesLabel =\n this.attributes?.length === 1\n ? this.#_componentLocale.matchingAttribute\n : this.#_componentLocale.matchingAttributes;\n const attributesLength = this.attributes?.length || 0;\n\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n {this.#renderFilter()}\n\n {this.#renderAttributesGrid()}\n\n <footer class=\"control-footer control-footer-with-border spacing-body-block-end spacing-body-inline control-footer-space-between\">\n <p class=\"body-regular-s matching-attributes\">\n {`${attributesLength} ${matchingAttributesLabel}`}\n </p>\n\n <button\n id=\"button-select-all\"\n class=\"button-primary\"\n onClick={this.#selectAll}\n disabled={btnDisabled}\n part=\"button button--select-all\"\n >\n {this.#_componentLocale.footer.btnSelectAll}\n </button>\n </footer>\n </section>\n </Host>\n );\n }\n}\n\nexport type ContextMenuCallback = (\n contextMenuInfo: ContextMenuInfo\n) => Promise<void>;\n\nexport type DeleteSelectionCallback = (ids: string[]) => Promise<void>;\n\nexport type LoadCallback = (\n filters: AttributeFiltersData\n) => Promise<AttributeData[]>;\n\nexport type ObjectActionCallback = () => Promise<EntityData | undefined>;\n\nexport type OpenSelectionCallback = (ids: string[]) => Promise<void>;\n\nexport type SelectionChangeCallback = (ids: string[]) => Promise<void>;\n\nexport interface AttributeData {\n id: string;\n icon: string;\n name: string;\n type: string;\n description: string;\n}\n\nexport interface AttributeFiltersData {\n name?: string;\n type?: string;\n object?: string;\n}\n"],"mappings":"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"}