@genexus/genexus-ide-ui 1.1.35 → 1.1.37
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.
- package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
- package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js +59 -17
- package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-team-dev-bring-changes.cjs.entry.js +1 -1
- package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +645 -296
- package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js +1 -1
- package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +8 -3
- package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-ww-files.cjs.entry.js +4 -25
- package/dist/cjs/gx-ide-ww-files.cjs.entry.js.map +1 -1
- package/dist/cjs/helpers-8fb178a2.js +30 -0
- package/dist/cjs/helpers-8fb178a2.js.map +1 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{utilities-11683cc0.js → utilities-0e316b39.js} +6 -6
- package/dist/cjs/utilities-0e316b39.js.map +1 -0
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/kb-manager-import/helpers.js +6 -3
- package/dist/collection/components/kb-manager-import/helpers.js.map +1 -1
- package/dist/collection/components/kb-manager-import/kb-manager-import.css +5 -0
- package/dist/collection/components/kb-manager-import/kb-manager-import.js +56 -12
- package/dist/collection/components/kb-manager-import/kb-manager-import.js.map +1 -1
- package/dist/collection/components/team-dev/bring-changes/bring-changes.js +1 -1
- package/dist/collection/components/team-dev/common/utilities.js +5 -5
- package/dist/collection/components/team-dev/common/utilities.js.map +1 -1
- package/dist/collection/components/team-dev/history/history.js.map +1 -1
- package/dist/collection/components/team-dev/update/update.js +1 -1
- package/dist/collection/components/team-dev/update/update.js.map +1 -1
- package/dist/collection/components/team-dev/version-control/commit/commit.css +344 -0
- package/dist/collection/components/team-dev/version-control/commit/commit.js +801 -0
- package/dist/collection/components/team-dev/version-control/commit/commit.js.map +1 -0
- package/dist/collection/components/team-dev/version-control/commit/gx-ide-assets/team-dev-commit/langs/team-dev-commit.lang.en.json +78 -0
- package/dist/collection/components/team-dev/version-control/commit/gx-ide-assets/team-dev-commit/langs/team-dev-commit.lang.ja.json +78 -0
- package/dist/collection/components/team-dev/version-control/commit/gx-ide-assets/team-dev-commit/langs/team-dev-commit.lang.zh.json +78 -0
- package/dist/collection/components/team-dev/version-control/commit/utilities/categories-to-combo-box.js +7 -0
- package/dist/collection/components/team-dev/version-control/commit/utilities/categories-to-combo-box.js.map +1 -0
- package/dist/collection/components/team-dev/version-control/commit/utilities/changeset-to-combo-box.js +11 -0
- package/dist/collection/components/team-dev/version-control/commit/utilities/changeset-to-combo-box.js.map +1 -0
- package/dist/collection/components/team-dev/version-control/commit/utilities/folders-to-combo-box.js +5 -0
- package/dist/collection/components/team-dev/version-control/commit/utilities/folders-to-combo-box.js.map +1 -0
- package/dist/collection/components/team-dev/version-control/commit/utilities/types-to-combo-box.js +6 -0
- package/dist/collection/components/team-dev/version-control/commit/utilities/types-to-combo-box.js.map +1 -0
- package/dist/collection/components/team-dev/version-control/common/clear-grid-selection.js +37 -0
- package/dist/collection/components/team-dev/version-control/common/clear-grid-selection.js.map +1 -0
- package/dist/collection/components/team-dev/version-control/common/constants.js +70 -0
- package/dist/collection/components/team-dev/version-control/common/constants.js.map +1 -0
- package/dist/collection/components/team-dev/version-control/common/header-renders.js +12 -0
- package/dist/collection/components/team-dev/version-control/common/header-renders.js.map +1 -0
- package/dist/collection/components/team-dev/version-control/common/object-type-to-combo-box.js +6 -0
- package/dist/collection/components/team-dev/version-control/common/object-type-to-combo-box.js.map +1 -0
- package/dist/collection/components/team-dev/version-control/common/tabular-grid-render.js +112 -0
- package/dist/collection/components/team-dev/version-control/common/tabular-grid-render.js.map +1 -0
- package/dist/collection/components/team-dev/version-control/common/types.js.map +1 -0
- package/dist/components/gx-ide-kb-manager-import.js +59 -18
- package/dist/components/gx-ide-kb-manager-import.js.map +1 -1
- package/dist/components/gx-ide-team-dev-commit.js +682 -316
- package/dist/components/gx-ide-team-dev-commit.js.map +1 -1
- package/dist/components/gx-ide-team-dev-history.js.map +1 -1
- package/dist/components/gx-ide-team-dev-update.js +6 -1
- package/dist/components/gx-ide-team-dev-update.js.map +1 -1
- package/dist/components/gx-ide-ww-files.js +2 -23
- package/dist/components/gx-ide-ww-files.js.map +1 -1
- package/dist/components/helpers2.js +24 -10
- package/dist/components/helpers2.js.map +1 -1
- package/dist/components/utilities.js +5 -5
- package/dist/components/utilities.js.map +1 -1
- package/dist/esm/genexus-ide-ui.js +1 -1
- package/dist/esm/gx-ide-kb-manager-import.entry.js +59 -17
- package/dist/esm/gx-ide-kb-manager-import.entry.js.map +1 -1
- package/dist/esm/gx-ide-team-dev-bring-changes.entry.js +1 -1
- package/dist/esm/gx-ide-team-dev-commit.entry.js +646 -297
- package/dist/esm/gx-ide-team-dev-commit.entry.js.map +1 -1
- package/dist/esm/gx-ide-team-dev-history.entry.js +1 -1
- package/dist/esm/gx-ide-team-dev-history.entry.js.map +1 -1
- package/dist/esm/gx-ide-team-dev-update.entry.js +7 -2
- package/dist/esm/gx-ide-team-dev-update.entry.js.map +1 -1
- package/dist/esm/gx-ide-ww-files.entry.js +2 -23
- package/dist/esm/gx-ide-ww-files.entry.js.map +1 -1
- package/dist/esm/helpers-4d080d9f.js +27 -0
- package/dist/esm/helpers-4d080d9f.js.map +1 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{utilities-482e01e6.js → utilities-6624d90e.js} +6 -6
- package/dist/esm/utilities-6624d90e.js.map +1 -0
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
- package/dist/genexus-ide-ui/gx-ide-assets/team-dev-commit/langs/team-dev-commit.lang.en.json +67 -28
- package/dist/genexus-ide-ui/gx-ide-assets/team-dev-commit/langs/team-dev-commit.lang.ja.json +68 -29
- package/dist/genexus-ide-ui/gx-ide-assets/team-dev-commit/langs/team-dev-commit.lang.zh.json +67 -28
- package/dist/genexus-ide-ui/{p-1f7ef8ba.entry.js → p-34447b77.entry.js} +2 -2
- package/dist/genexus-ide-ui/{p-d1374a00.entry.js → p-42f37527.entry.js} +155 -151
- package/dist/genexus-ide-ui/p-42f37527.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-56c0c556.entry.js → p-48e87e4f.entry.js} +180 -145
- package/dist/genexus-ide-ui/p-48e87e4f.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-13f4b647.entry.js → p-585fac4a.entry.js} +2 -2
- package/dist/genexus-ide-ui/p-585fac4a.entry.js.map +1 -0
- package/dist/genexus-ide-ui/p-723d25ae.entry.js +912 -0
- package/dist/genexus-ide-ui/p-723d25ae.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-f242ae04.entry.js → p-9b8a8487.entry.js} +251 -272
- package/dist/genexus-ide-ui/p-9b8a8487.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-2ee77587.js → p-a24571ca.js} +6 -6
- package/dist/genexus-ide-ui/p-a24571ca.js.map +1 -0
- package/dist/genexus-ide-ui/p-edcd0022.js +27 -0
- package/dist/genexus-ide-ui/p-edcd0022.js.map +1 -0
- package/dist/types/components/kb-manager-import/helpers.d.ts +2 -1
- package/dist/types/components/kb-manager-import/kb-manager-import.d.ts +0 -1
- package/dist/types/components/team-dev/common/utilities.d.ts +1 -1
- package/dist/types/components/team-dev/history/history.d.ts +1 -1
- package/dist/types/components/team-dev/version-control/commit/commit.d.ts +192 -0
- package/dist/types/components/team-dev/version-control/commit/utilities/categories-to-combo-box.d.ts +3 -0
- package/dist/types/components/team-dev/version-control/commit/utilities/changeset-to-combo-box.d.ts +3 -0
- package/dist/types/components/team-dev/version-control/commit/utilities/folders-to-combo-box.d.ts +3 -0
- package/dist/types/components/team-dev/version-control/commit/utilities/types-to-combo-box.d.ts +3 -0
- package/dist/types/components/team-dev/version-control/common/clear-grid-selection.d.ts +11 -0
- package/dist/types/components/team-dev/version-control/common/constants.d.ts +24 -0
- package/dist/types/components/team-dev/version-control/common/header-renders.d.ts +5 -0
- package/dist/types/components/team-dev/{commit/helpers.d.ts → version-control/common/object-type-to-combo-box.d.ts} +1 -2
- package/dist/types/components/team-dev/version-control/common/tabular-grid-render.d.ts +8 -0
- package/dist/types/components/team-dev/version-control/common/types.d.ts +52 -0
- package/dist/types/components.d.ts +61 -77
- package/package.json +1 -1
- package/dist/cjs/helpers-456ecc75.js +0 -16
- package/dist/cjs/helpers-456ecc75.js.map +0 -1
- package/dist/cjs/utilities-11683cc0.js.map +0 -1
- package/dist/collection/components/team-dev/commit/commit.css +0 -100
- package/dist/collection/components/team-dev/commit/commit.js +0 -708
- package/dist/collection/components/team-dev/commit/commit.js.map +0 -1
- package/dist/collection/components/team-dev/commit/gx-ide-assets/team-dev-commit/langs/team-dev-commit.lang.en.json +0 -39
- package/dist/collection/components/team-dev/commit/gx-ide-assets/team-dev-commit/langs/team-dev-commit.lang.ja.json +0 -39
- package/dist/collection/components/team-dev/commit/gx-ide-assets/team-dev-commit/langs/team-dev-commit.lang.zh.json +0 -39
- package/dist/collection/components/team-dev/commit/helpers.js +0 -10
- package/dist/collection/components/team-dev/commit/helpers.js.map +0 -1
- package/dist/collection/components/team-dev/common/types.js.map +0 -1
- package/dist/esm/helpers-e1db579e.js +0 -13
- package/dist/esm/helpers-e1db579e.js.map +0 -1
- package/dist/esm/utilities-482e01e6.js.map +0 -1
- package/dist/genexus-ide-ui/p-13f4b647.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-2ee77587.js.map +0 -1
- package/dist/genexus-ide-ui/p-49f765ef.entry.js +0 -674
- package/dist/genexus-ide-ui/p-49f765ef.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-56c0c556.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-821431b4.js +0 -13
- package/dist/genexus-ide-ui/p-821431b4.js.map +0 -1
- package/dist/genexus-ide-ui/p-d1374a00.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-f242ae04.entry.js.map +0 -1
- package/dist/types/components/team-dev/commit/commit.d.ts +0 -115
- package/dist/types/components/team-dev/common/types.d.ts +0 -1
- /package/dist/collection/components/team-dev/{common → version-control/common}/types.js +0 -0
- /package/dist/genexus-ide-ui/{p-1f7ef8ba.entry.js.map → p-34447b77.entry.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MAX_CATEGORY_ITEMS_FIRST_RENDER","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","lazy","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_importedCategoryData","_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","checkedObjectsIds","model","obj","checked","find","cat","importCallback","then","_GxIdeKbManagerImport_loadFileHandler","file","__classPrivateFieldSet","loadCallback","clear","object","importCategoryTreeData","objectsTreeModel","_GxIdeKbManagerImport_lazyLoadTreeItems","treeItemId","_GxIdeKbManagerImport_objectsTreeCheckedItemsChangedHandler","event","allItems","detail","checkedItemIds","pendingCheckedItemIds","item","pendingCheckedItemId","size","selectAllCheckboxValue","selectAllCheckboxIndeterminate","_GxIdeKbManagerImport_objectsTreeContextMenuHandler","objectContextMenuCallback","selection","clientX","contextmenuEvent","screenX","clientY","screenY","_GxIdeKbManagerImport_objectsTreeSelectedItemsChangedHandler","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","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","lazyLoadTreeItemsCallback","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\nconst MAX_CATEGORY_ITEMS_FIRST_RENDER = 30;\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\nexport const 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: importCategory.items.length <= MAX_CATEGORY_ITEMS_FIRST_RENDER,\n lazy: importCategory.items.length > MAX_CATEGORY_ITEMS_FIRST_RENDER,\n leaf: false,\n startImgSrc: importCategory.icon,\n metadata: KB_CATEGORY,\n items: importCategory.items.length <= MAX_CATEGORY_ITEMS_FIRST_RENDER ? \n 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\n// WA: prevent crashes when the items collection contains too many elements\n.tree-view-import::part(item) {\n content-visibility: auto;\n contain-intrinsic-size: auto 22px;\n // TODO: Check if 22px can be calculated. Not \"secure\" since font-size\n // (body-regular-s) defines the total height. If the typographic style\n // changes, this calculation will break. Ideally, tree item font-size\n // should use a variable like \"--tree-item-font-size\".\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 convertImportCategoryItemToTreeItem\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 #importedCategoryData: ImportCategoryData[];\n\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\n /*\n Process checked objects manually, considering lazy loading. \n Example: \n 1. The \"Attributes\" category is lazy-loaded and marked as checked. \n 2. The user runs the import without expanding the node. \n 3. No attribute objects appear as checked, since lazy load was not triggered. \n 4. Still, all attribute objects must be included, because the category itself is checked. \n\n This avoids forcing users to expand nodes just to select objects. \n Large categories are not expanded by default to improve performance, which is crucial \n for very large imports (1000+ objects). \n */\n const checkedObjectsIds:string[] = [];\n for(let category of this.#objectsTreeEl.model) {\n if (category.items?.length > 0) {\n for(let obj of category.items) {\n if (obj.checked)\n checkedObjectsIds.push(obj.id);\n }\n }\n else if (category.lazy && category.checked) {\n const categoryData = this.#importedCategoryData.find(cat => cat.id == category.id);\n for(let obj of categoryData.items) {\n checkedObjectsIds.push(obj.id);\n }\n }\n }\n this.importCallback(checkedObjectsIds).then(() => {\n this.importingIsInProcess = false;\n });\n };\n\n #loadFileHandler = async (file: File) => {\n this.#importedCategoryData = await this.loadCallback(file);\n this.#categoryItemMap.clear();\n this.#objectCategoryItemMap.clear();\n\n this.#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(this.#importedCategoryData);\n this.objectsTreeModel = importCategoryTreeData;\n };\n\n #lazyLoadTreeItems = async (treeItemId: string) => {\n const category = this.#importedCategoryData.find(cat => cat.id === treeItemId);\n return category && category.items.length > 0 ? \n convertImportCategoryItemToTreeItem(category.icon, category.items) : \n [];\n }\n\n #objectsTreeCheckedItemsChangedHandler = (\n event: CustomEvent<Map<string, TreeViewItemModelExtended>>\n ) => {\n const allItems = event.detail;\n const checkedItemIds: string[] = [];\n const pendingCheckedItemIds: string[] = [];\n const checkedObjectsIds: string[] = [];\n allItems.forEach(item => {\n if (item.item.checked) {\n checkedItemIds.push(item.item.id);\n if (item.item.lazy && !item.item.items)\n pendingCheckedItemIds.push(item.item.id);\n }\n if (item.item.checked && item.item.metadata === KB_OBJECT) {\n checkedObjectsIds.push(item.item.id);\n }\n });\n\n for(let pendingCheckedItemId of pendingCheckedItemIds) {\n const category = this.#importedCategoryData.find(cat => cat.id === pendingCheckedItemId);\n if (category) {\n for(let item of category.items) {\n if (checkedObjectsIds.indexOf(item.id) < 0)\n checkedObjectsIds.push(item.id);\n }\n }\n }\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 tree-view-import\"\n model={this.objectsTreeModel}\n dragDisabled={true}\n dropDisabled={true}\n toggleCheckboxes={true}\n checkbox={true}\n checked={true}\n lazyLoadTreeItemsCallback={this.#lazyLoadTreeItems}\n onCheckedItemsChange={\n this.#objectsTreeCheckedItemsChangedHandler\n }\n onSelectedItemsChange={\n this.#objectsTreeSelectedItemsChangedHandler\n }\n onItemContextmenu={this.#objectsTreeContextMenuHandler}\n ref={(el: HTMLChTreeViewRenderElement) =>\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 tree-view-import\"\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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"}
|
|
@@ -8,7 +8,7 @@ import { f as l } from "./p-8c15538c.js";
|
|
|
8
8
|
|
|
9
9
|
import { L as n } from "./p-311eedf3.js";
|
|
10
10
|
|
|
11
|
-
import { r as o, a as c } from "./p-
|
|
11
|
+
import { r as o, a as c } from "./p-a24571ca.js";
|
|
12
12
|
|
|
13
13
|
const mapObjectTypeToComboBoxItemModel = t => t.map((t => ({
|
|
14
14
|
value: t.id,
|
|
@@ -481,4 +481,4 @@ z = new WeakMap, T = new WeakMap, E = new WeakMap, F = new WeakMap;
|
|
|
481
481
|
$.style = d;
|
|
482
482
|
|
|
483
483
|
export { $ as gx_ide_team_dev_history };
|
|
484
|
-
//# sourceMappingURL=p-
|
|
484
|
+
//# sourceMappingURL=p-585fac4a.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["mapObjectTypeToComboBoxItemModel","objectTypeModel","map","objectType","value","id","caption","name","startImgSrc","icon","hasActiveNode","node","active","Array","isArray","nodes","some","hasActiveVersionInList","versionsList","historyCss","CSS_BUNDLES","FILTER_ICON_PRIMARY","getIconPath","category","colorType","FILTER_ICON","RESET_ICON","SEARCH_ICON","GxIdeTeamDevHistory","_GxIdeTeamDevHistory__componentLocale","set","this","_GxIdeTeamDevHistory_types","_GxIdeTeamDevHistory_fromEl","_GxIdeTeamDevHistory_revisionEl","_GxIdeTeamDevHistory_searchEl","_GxIdeTeamDevHistory_toEl","_GxIdeTeamDevHistory_typesEl","_GxIdeTeamDevHistory_userEl","_GxIdeTeamDevHistory_sidebarEl","_GxIdeTeamDevHistory_revisionsGridEl","_GxIdeTeamDevHistory_getObjectsFromVersion","async","versionId","loading","filters","search","__classPrivateFieldGet","from","Date","to","revision","user","type","objects","loadCallback","_GxIdeTeamDevHistory_getSelectedRevision","call","_a","revisionId","historyDetail","loadDetailCallback","title","_GxIdeTeamDevHistory_formatHistoryDetailDate","selectedRevisionId","_GxIdeTeamDevHistory_registerGridContextMenuListener","addEventListener","ev","preventDefault","stopPropagation","_GxIdeTeamDevHistory_gridContextMenuCallbackHandler","gridContextMenuCallback","selection","clientX","clientY","_GxIdeTeamDevHistory_toggleFiltersHandler","filtersHidden","_GxIdeTeamDevHistory_renderCommitsGrid","tabularGridEmpty","length","h","class","onSelectionChanged","detail","rowsId","ref","el","__classPrivateFieldSet","selectRow","mainGrid","columns","settingable","size","comment","commitDate","obj","rowid","key","formatDate","stateTitle","emptyRevisionsText","isAnimated","_GxIdeTeamDevHistory_renderAffectedObjectsGrid","iterable","affectedObjectsGrid","config","tabularGrid","colSize","maxContent","types","description","auto","action","renderObjectTypeWithIcon","renderObjectStateWithIcon","state","stateIconSrc","emptyHistoryDetailText","_GxIdeTeamDevHistory_renderLoader","loaderTitle","loader","show","parts","split","datePart","formattedDate","selectedVersionIdChanged","newSelectedVersionId","selectedVersionId","versionsListChanged","newVersionsList","versions","hasActiveVersion","isFirstLoad","componentWillLoad","Locale","getComponentStrings","componentDidLoad","e","sidebarExpanded","render","Host","model","expanded","expandButtonCollapseAccessibleName","sidebar","collapseAriaLabel","expandButtonExpandAccessibleName","expandAriaLabel","showExpandButton","checkboxType","itemsList","expandOnClick","selectionChanged","selectedVersionChangeCallback","itemContextMenuCallback","htmlFor","part","searchFilter","filterAriaLabel","onClick","src","reloadAriaLabel","inert","hidden","accessibleName","multiline","autoGrow","readonly"],"sources":["src/components/team-dev/history/helpers.ts","src/components/team-dev/history/history.scss?tag=gx-ide-team-dev-history&encapsulation=shadow","src/components/team-dev/history/history.tsx"],"sourcesContent":["import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { ObjectType, GxOption } from \"../../../common/types\";\nimport { ComboBoxItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/combo-box/types\";\nimport { ItemNode } from \"../../select-kb-items/select-kb-items\";\n\nexport const mapObjectTypeToComboBoxItemModel = (\n objectTypeModel: ObjectType[]\n): ComboBoxItemModel[] =>\n objectTypeModel.map(objectType => ({\n value: objectType.id,\n caption: objectType.name,\n startImgSrc: objectType.icon\n }));\n\nexport const mapCategoryToComboBoxItemModel = (\n categoryModel: GxOption[]\n): ComboBoxModel =>\n categoryModel.map(category => ({\n value: category.id,\n caption: category.label\n }));\n\nconst hasActiveNode = (node: any): boolean => {\n if (node.active) {\n return true;\n }\n if (Array.isArray(node.nodes)) {\n return node.nodes.some(hasActiveNode);\n }\n return false;\n};\n\nexport const hasActiveVersionInList = (versionsList: ItemNode[]): boolean => {\n return versionsList.some(hasActiveNode);\n};\n","@import \"../../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\";\n@import \"../common/styles.scss\";\n\n// TODO: this should be a class on Mercury.\n// Not sure if applying \".field-group\" is the right thing to do.\n$commonRowGap: var(--mer-spacing--sm);\n\n:host {\n display: grid;\n grid-template-columns: max-content 1fr;\n block-size: 100%;\n overflow: auto;\n}\n\n.sidebar {\n background-color: transparent !important; // TODO: Apply elevation classes on Mercury.\n border-inline-end: var(--section-common-border);\n}\n\n.sidebar::part(expand-button) {\n border-radius: var(--control__border-radius);\n}\n\ngx-ide-select-kb-items {\n --search-input-max-inline-size: 300px;\n opacity: 0;\n transition: opacity var(--mer-timing--fast);\n}\ngx-ide-select-kb-items.sidebar-expanded {\n opacity: 1;\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}\n\nch-tabular-grid-rowset-empty {\n position: relative; // makes this the bounder element for the loader\n}\n\n.main {\n display: grid;\n grid-template-rows: max-content 1fr;\n grid-row-gap: $commonRowGap;\n overflow: auto;\n}\n.main__header {\n display: grid;\n}\n.main__content {\n position: relative;\n overflow: auto;\n display: grid;\n grid-template-rows: 1fr max-content 2fr;\n grid-row-gap: $commonRowGap;\n}\n\n.tabular-grid {\n overflow: auto;\n}\n\n/*SECOND GRID*/\n.search-filter {\n display: grid;\n grid-template-columns: 1fr max-content max-content;\n gap: var(--gx-ide-grid-column-gap);\n}\n\n.action-buttons {\n justify-self: flex-end;\n}\n\n.filters-grid {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n grid-template-areas:\n \"from from to to type type\"\n \"user user user revision revision revision\";\n grid-gap: var(--gx-ide-grid-column-gap);\n padding-block-start: $commonRowGap;\n}\n\n.filters-container {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows var(--mer-timing--fast);\n}\n\n.filters-container-visible {\n grid-template-rows: 1fr;\n}\n\n.filters-container > div {\n overflow: hidden;\n}\n\n.field-from {\n grid-area: from;\n}\n\n.field-to {\n grid-area: to;\n}\n.field-type {\n grid-area: type;\n}\n.field-user {\n grid-area: user;\n}\n.field-revision {\n grid-area: revision;\n}\n\n// commits grid \"comment\" column\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".commits-grid\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-min-inline-size: 200px,\n $tabular-grid-affected-columns-nth-list: (\n 2\n )\n);\n\n// affected objects grid \"description\" column\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".affected-objects-grid\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-min-inline-size: 200px,\n $tabular-grid-affected-columns-nth-list: (\n 5\n )\n);\n","/* STENCIL IMPORTS */\nimport { Component, Element, h, Host, Prop, State, Watch } from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\n/* CUSTOM IMPORTS */\nimport { ComboBoxItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/combo-box/types\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { config } from \"../../../common/config\";\nimport { formatDate } from \"../../../common/helpers\";\nimport { Locale } from \"../../../common/locale\";\nimport { ContextMenuInfo } from \"../../../components\";\nimport { ItemNode } from \"../../select-kb-items/select-kb-items\";\nimport {\n hasActiveVersionInList,\n mapObjectTypeToComboBoxItemModel\n} from \"./helpers\";\nimport {\n renderObjectStateWithIcon,\n renderObjectTypeWithIcon\n} from \"../common/utilities\";\nimport { ObjectState } from \"../version-control/common/types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/spacing\",\n \"utils/typography\",\n \"chameleon/scrollbar\",\n \"components/tabular-grid\",\n \"components/accordion\",\n \"components/sidebar\"\n];\n\nconst FILTER_ICON_PRIMARY = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"primary\"\n});\n\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-surface\"\n});\n\nconst RESET_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"reset\",\n colorType: \"primary\"\n});\n\nconst SEARCH_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"search\",\n colorType: \"on-surface\"\n});\n\n@Component({\n tag: \"gx-ide-team-dev-history\",\n styleUrl: \"history.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/team-dev-history\"]\n})\nexport class GxIdeTeamDevHistory {\n #_componentLocale: any;\n\n #types: ComboBoxItemModel[] = [];\n\n @Element() el: HTMLGxIdeTeamDevHistoryElement;\n\n #fromEl?: HTMLChEditElement;\n #revisionEl?: HTMLChEditElement;\n #searchEl: HTMLChEditElement;\n #toEl?: HTMLChEditElement;\n #typesEl?: HTMLChComboBoxRenderElement;\n #userEl?: HTMLChEditElement;\n #sidebarEl: HTMLChSidebarElement;\n #revisionsGridEl: HTMLChTabularGridElement;\n\n @State() historyDetail: RevisionDetailData;\n\n /**\n * The files rendered in the table\n */\n @State() objects: RevisionData[] = [];\n\n /**\n * Used to call getObjectsFromVersion from the versionsChanged method only once after receiving the versions for the first time.\n */\n @State() isFirstLoad: boolean = true;\n\n /**\n * Used to hide the select-kb-items when collapsed\n */\n @State() sidebarExpanded: boolean = true;\n\n /**\n * Used to show or hide the filters section\n */\n @State() filtersHidden = true;\n\n /**\n * To show a loader when the component is loading\n */\n @State() loading: boolean = true;\n\n /**\n * The Id of the selected revision in the revisions grid\n */\n @State() selectedRevisionId: string;\n\n /**\n * Used to customize the select-kb-items \"header\" part grid layout\n */\n @State() hasActiveVersion: boolean = false; // TODO:\n\n /**\n * Possible values of type filter\n */\n @Prop() readonly types: ObjectType[];\n\n /**\n * Callback emitted when the user right click on an item\n */\n @Prop() readonly itemContextMenuCallback: (\n info: ContextMenuInfo\n ) => Promise<void>;\n\n /**\n * Callback invoked when user right-clicks on the grid\n */\n @Prop() readonly gridContextMenuCallback: (\n info: ContextMenuInfo\n ) => Promise<void>;\n\n /**\n * The Id of the selected version in the select-kb-items component\n */\n @Prop({ mutable: true }) selectedVersionId: string;\n @Watch(\"selectedVersionId\")\n async selectedVersionIdChanged(newSelectedVersionId: string) {\n this.selectedVersionId = newSelectedVersionId;\n\n // Reset filters\n this.#searchEl.value = null;\n this.#fromEl.value = null;\n this.#toEl.value = null;\n this.#revisionEl.value = null;\n this.#userEl.value = null;\n this.#typesEl.value = this.#types[0]?.value;\n\n await this.#getObjectsFromVersion(newSelectedVersionId);\n }\n\n /**\n * List of versions to show in the versions tree\n */\n @Prop({ mutable: true }) versions: ItemNode[] = [];\n @Watch(\"versions\")\n async versionsListChanged(newVersionsList: ItemNode[]) {\n this.versions = newVersionsList;\n this.hasActiveVersion = hasActiveVersionInList(newVersionsList);\n\n if (\n newVersionsList.length > 0 &&\n this.selectedVersionId &&\n this.isFirstLoad\n ) {\n await this.#getObjectsFromVersion(this.selectedVersionId);\n this.isFirstLoad = false;\n }\n }\n\n /**\n * Callback invoked when is necessary to reload the history info. Receive the filters as parameters and only returns the info corresponding to the master grid.\n\n */\n @Prop() readonly loadCallback: LoadCallback;\n\n /**\n * Callback invoked to obtain detailed info from a revision. As parameter receive internal revision id\n */\n @Prop() readonly loadDetailCallback: LoadDetailCallback;\n\n /**\n * Callback invoked when the selected version changes. As parameter receive the selected version id\n */\n @Prop() readonly selectedVersionChangeCallback: SelectedVersionChangeCallback;\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n this.#types = mapObjectTypeToComboBoxItemModel(this.types);\n }\n\n async componentDidLoad() {\n this.#sidebarEl.addEventListener(\n \"expandedChange\",\n (e: CustomEvent<boolean>) => {\n this.sidebarExpanded = e.detail;\n }\n );\n }\n\n #getObjectsFromVersion = async (versionId: string): Promise<void> => {\n this.loading = true;\n\n const filters: FiltersData = {\n search: this.#searchEl.value ? this.#searchEl.value : \"\",\n from: this.#fromEl.value ? new Date(this.#fromEl.value) : null,\n to: this.#toEl.value ? new Date(this.#toEl.value) : null,\n revision: this.#revisionEl.value ? this.#revisionEl.value : \"\",\n user: this.#userEl.value ? this.#userEl.value : \"\",\n type: this.#typesEl.value === \"all\" ? \"\" : this.#typesEl.value\n };\n\n this.objects = await this.loadCallback(filters, versionId);\n await this.#getSelectedRevision(this.objects[0]?.id);\n this.loading = false;\n };\n\n #getSelectedRevision = async (revisionId: string) => {\n if (revisionId) {\n this.historyDetail = await this.loadDetailCallback(revisionId);\n this.historyDetail.title = this.#formatHistoryDetailDate(\n this.historyDetail.title\n );\n this.selectedRevisionId = revisionId;\n } else {\n this.historyDetail = null;\n }\n };\n\n #registerGridContextMenuListener = (): void => {\n if (this.#revisionsGridEl) {\n this.#revisionsGridEl.addEventListener(\n \"contextmenu\",\n (ev: MouseEvent): void => {\n ev.preventDefault();\n ev.stopPropagation();\n this.#gridContextMenuCallbackHandler(ev);\n }\n );\n }\n };\n\n #gridContextMenuCallbackHandler = async (ev: MouseEvent): Promise<void> => {\n this.gridContextMenuCallback({\n selection: [this.selectedRevisionId],\n clientX: ev.clientX,\n clientY: ev.clientY\n });\n };\n\n #toggleFiltersHandler = () => {\n this.filtersHidden = !this.filtersHidden;\n };\n\n #renderCommitsGrid = (): Element => {\n const tabularGridEmpty = this.objects?.length === 0 || !this.objects;\n return (\n <ch-tabular-grid\n class={{\n \"commits-grid\": true,\n \"tabular-grid\": true,\n \"tabular-grid--empty\": tabularGridEmpty\n }}\n onSelectionChanged={(ev: any) => {\n this.objects.length > 0 &&\n this.#getSelectedRevision(ev.detail.rowsId[0]);\n }}\n ref={(el: HTMLChTabularGridElement) => {\n if (el && this.#revisionsGridEl !== el) {\n this.#revisionsGridEl = el as HTMLChTabularGridElement;\n\n this.#registerGridContextMenuListener();\n\n if (this.objects.length > 0) {\n this.#revisionsGridEl.selectRow(this.objects[0]?.id, true);\n }\n }\n }}\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.mainGrid.columns.id}\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size=\"max-content\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.mainGrid.columns.comment}\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size=\"1fr\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.mainGrid.columns.user}\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size=\"max-content\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.mainGrid.columns.commitDate}\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size=\"max-content\"\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n {this.objects.length > 0 ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.objects.map((obj: RevisionData) => (\n <ch-tabular-grid-row\n rowid={obj.id}\n key={obj.id}\n class=\"tabular-grid-row\"\n >\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.id}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.comment}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.user}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {`${formatDate(obj.commitDate, \"date-time\")}`}\n </ch-tabular-grid-cell>\n </ch-tabular-grid-row>\n ))}\n </ch-tabular-grid-rowset>\n ) : (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty>\n <gx-ide-empty-state\n stateTitle={this.#_componentLocale.emptyRevisionsText}\n isAnimated={true}\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n\n <ch-tabular-grid-row class=\"tabular-grid-row\"></ch-tabular-grid-row>\n </ch-tabular-grid>\n );\n };\n\n #renderAffectedObjectsGrid = (): Element => {\n const iterable = this.historyDetail ? this.historyDetail.objects : [];\n const tabularGridEmpty =\n this.historyDetail?.objects.length === 0 || !this.historyDetail;\n return (\n <ch-tabular-grid\n class={{\n \"affected-objects-grid\": true,\n \"tabular-grid\": true,\n \"tabular-grid--empty\": tabularGridEmpty\n }}\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n column-name={\n this.#_componentLocale.affectedObjectsGrid.columns.name\n }\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={\n this.#_componentLocale.affectedObjectsGrid.columns.types\n }\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={\n this.#_componentLocale.affectedObjectsGrid.columns.description\n }\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size={config.tabularGrid.colSize.auto}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={\n this.#_componentLocale.affectedObjectsGrid.columns.action\n }\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n {this.historyDetail && this.historyDetail.objects.length > 0 ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {iterable.map((obj: ObjectData) => (\n <ch-tabular-grid-row class=\"tabular-grid-row\">\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.name}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {renderObjectTypeWithIcon(obj.type)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.description}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {renderObjectStateWithIcon(obj.state)}\n </ch-tabular-grid-cell>\n </ch-tabular-grid-row>\n ))}\n </ch-tabular-grid-rowset>\n ) : (\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.emptyHistoryDetailText}\n isAnimated={true}\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n\n <ch-tabular-grid-row class=\"tabular-grid-row\"></ch-tabular-grid-row>\n </ch-tabular-grid>\n );\n };\n\n #renderLoader = (): Element => {\n return (\n this.loading && (\n <div class=\"main__content scrollable\">\n <gx-ide-loader\n loaderTitle={this.#_componentLocale.loader.title}\n show\n description={this.#_componentLocale.loader.description}\n ></gx-ide-loader>\n </div>\n )\n );\n };\n\n #formatHistoryDetailDate = (title: string): string => {\n const parts = title.split(\" - \");\n const datePart = new Date(parts[1]);\n const formattedDate = formatDate(datePart, \"date-time\");\n return `${parts[0]} - ${formattedDate} - ${parts[2]}`;\n };\n\n render() {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <ch-sidebar\n ref={(el: HTMLChSidebarElement) =>\n (this.#sidebarEl = el as HTMLChSidebarElement)\n }\n class=\"sidebar\"\n expanded={this.sidebarExpanded}\n expandButtonCollapseAccessibleName={\n this.#_componentLocale.sidebar.collapseAriaLabel\n }\n expandButtonExpandAccessibleName={\n this.#_componentLocale.sidebar.expandAriaLabel\n }\n showExpandButton\n >\n <gx-ide-select-kb-items\n class={{\n \"sidebar-expanded\": this.sidebarExpanded,\n \"has-active-version\": this.hasActiveVersion\n }}\n checkboxType=\"none\"\n itemsList={this.versions}\n expandOnClick={false}\n selectionChanged={this.selectedVersionChangeCallback}\n itemContextMenuCallback={this.itemContextMenuCallback}\n ></gx-ide-select-kb-items>\n </ch-sidebar>\n\n <main class=\"main spacing-body-block-start spacing-body-inline\">\n <div class=\"main__header\">\n <div class=\"search-filter\">\n <div class=\"field field-inline\">\n <label class=\"label\" htmlFor=\"search\">\n {this.#_componentLocale.filters.search}\n </label>\n <ch-edit\n value=\"\"\n class=\"input\"\n startImgSrc={SEARCH_ICON}\n part=\"search\"\n id=\"search\"\n ref={(el: HTMLChEditElement) =>\n (this.#searchEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n\n <button\n id=\"filter-toggle-button\"\n class=\"button-teritary button-icon-only\"\n aria-label={this.#_componentLocale.searchFilter.filterAriaLabel}\n aria-expanded={this.filtersHidden ? \"false\" : \"true\"}\n aria-controls=\"filters-container\"\n onClick={() => this.#toggleFiltersHandler()}\n >\n <ch-image class=\"icon-md\" src={FILTER_ICON_PRIMARY}></ch-image>\n </button>\n\n <button\n class=\"button-teritary button-icon-only\"\n aria-label={this.#_componentLocale.searchFilter.reloadAriaLabel}\n onClick={() =>\n this.#getObjectsFromVersion(this.selectedVersionId)\n }\n part={this.#_componentLocale.searchFilter.reloadAriaLabel}\n >\n <ch-image class=\"icon-md\" src={RESET_ICON}></ch-image>\n </button>\n </div>\n\n <div\n id=\"filters-container\"\n aria-labelledby=\"filter-toggle-button\"\n class={{\n \"filters-container-visible\": !this.filtersHidden,\n \"filters-container\": true\n }}\n inert={this.filtersHidden}\n hidden={this.filtersHidden}\n >\n <div>\n <div class=\"filters-grid\">\n <div class=\"field field-block field-from\">\n <label class=\"label\" htmlFor=\"from\">\n {this.#_componentLocale.filters.from}\n </label>\n <ch-edit\n value=\"\"\n class=\"input\"\n type=\"date\"\n part=\"from\"\n id=\"from\"\n ref={(el: HTMLChEditElement) =>\n (this.#fromEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n\n <div class=\"field field-block field-to\">\n <label class=\"label\" htmlFor=\"to\">\n {this.#_componentLocale.filters.to}\n </label>\n <ch-edit\n value=\"\"\n class=\"input\"\n type=\"date\"\n id=\"to\"\n ref={(el: HTMLChEditElement) =>\n (this.#toEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n\n <div class=\"field field-block field-type\">\n <label class=\"label\" htmlFor=\"type\">\n {this.#_componentLocale.filters.type}\n </label>\n\n <ch-combo-box-render\n accessibleName=\"types\"\n class=\"combo-box\"\n part=\"type\"\n model={this.#types}\n value={this.#types[0]?.value}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#typesEl = el as HTMLChComboBoxRenderElement)\n }\n ></ch-combo-box-render>\n </div>\n\n <div class=\"field field-block field-user\">\n <label class=\"label\" htmlFor=\"user\">\n {this.#_componentLocale.filters.user}\n </label>\n\n <ch-edit\n value=\"\"\n part=\"user\"\n class=\"input\"\n id=\"user\"\n ref={(el: HTMLChEditElement) =>\n (this.#userEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n\n <div class=\"field field-block field-revision\">\n <label class=\"label\" htmlFor=\"revision\">\n {this.#_componentLocale.filters.revision}\n </label>\n\n <ch-edit\n value=\"\"\n part=\"revision\"\n class=\"input\"\n id=\"revision\"\n ref={(el: HTMLChEditElement) =>\n (this.#revisionEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {this.#renderLoader()}\n\n {!this.loading && (\n <div class=\"main__content scrollable\">\n {this.#renderCommitsGrid()}\n\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"comment-area\">\n {this.historyDetail ? this.historyDetail.title : null}\n </label>\n <ch-edit\n class=\"input comment-text-area\"\n value={this.historyDetail ? this.historyDetail.comment : null}\n multiline\n autoGrow\n readonly={true}\n part=\"comment-area\"\n id=\"comment-area\"\n ></ch-edit>\n </div>\n\n {this.#renderAffectedObjectsGrid()}\n </div>\n )}\n </main>\n </Host>\n );\n }\n}\n\n// Types\nexport type ObjectType = {\n id: string;\n name: string;\n icon?: string;\n};\n\nexport type FiltersData = {\n search: string;\n from?: Date;\n to?: Date;\n user?: string;\n revision?: string;\n type?: string;\n};\nexport type RevisionData = {\n id: string;\n comment: string;\n user: string;\n commitDate: Date;\n};\n\nexport type RevisionDetailData = {\n title: string;\n comment: string;\n objects: ObjectData[];\n};\nexport type ObjectData = {\n typeIcon: string;\n state: ObjectState;\n name: string;\n type: ObjectType;\n description: string;\n action: string;\n};\n\nexport type LoadCallback = (\n filters: FiltersData,\n versionId: string\n) => Promise<RevisionData[]>;\n\nexport type LoadDetailCallback = (\n revision: string\n) => Promise<RevisionDetailData>;\n\nexport type SelectedVersionChangeCallback = (\n selectedVersion: string[]\n) => Promise<void>;\n"],"mappings":"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"}
|