@genexus/genexus-ide-ui 1.1.71 → 1.1.72

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 (32) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js +28 -17
  3. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js.map +1 -1
  4. package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js +18 -51
  5. package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js.map +1 -1
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/collection/components/select-kb-items/select-kb-items.js +75 -28
  8. package/dist/collection/components/select-kb-items/select-kb-items.js.map +1 -1
  9. package/dist/collection/components/team-dev/history/history.js +50 -69
  10. package/dist/collection/components/team-dev/history/history.js.map +1 -1
  11. package/dist/components/gx-ide-team-dev-history.js +21 -58
  12. package/dist/components/gx-ide-team-dev-history.js.map +1 -1
  13. package/dist/components/select-kb-items.js +32 -20
  14. package/dist/components/select-kb-items.js.map +1 -1
  15. package/dist/esm/genexus-ide-ui.js +1 -1
  16. package/dist/esm/gx-ide-select-kb-items.entry.js +28 -17
  17. package/dist/esm/gx-ide-select-kb-items.entry.js.map +1 -1
  18. package/dist/esm/gx-ide-team-dev-history.entry.js +18 -51
  19. package/dist/esm/gx-ide-team-dev-history.entry.js.map +1 -1
  20. package/dist/esm/loader.js +1 -1
  21. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  22. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  23. package/dist/genexus-ide-ui/{p-8897c6de.entry.js → p-2d6228e8.entry.js} +201 -194
  24. package/dist/genexus-ide-ui/p-2d6228e8.entry.js.map +1 -0
  25. package/dist/genexus-ide-ui/{p-3ca03a38.entry.js → p-74f8bd45.entry.js} +60 -90
  26. package/dist/genexus-ide-ui/p-74f8bd45.entry.js.map +1 -0
  27. package/dist/types/components/select-kb-items/select-kb-items.d.ts +12 -3
  28. package/dist/types/components/team-dev/history/history.d.ts +3 -12
  29. package/dist/types/components.d.ts +22 -20
  30. package/package.json +1 -1
  31. package/dist/genexus-ide-ui/p-3ca03a38.entry.js.map +0 -1
  32. package/dist/genexus-ide-ui/p-8897c6de.entry.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ACTIVE_ITEM_DEFAULT_ICON","getIconPath","category","name","colorType","convertItemsNodeListToFlattenedTreeViewModel","itemsList","checkboxType","itemsListFlattenedTreeViewModel","processNode","item","startImgSrc","active","iconStart","leaf","_a","nodes","length","checkbox","metaData","JSON","stringify","versionType","type","push","caption","checked","endImgSrc","iconEnd","expanded","id","toString","items","metadata","parts","selected","order","forEach","childNode","convertItemsListToTreeViewModel","itemsListTreeViewModel","parseInt","findItemNode","itemNode","result","findItemInArray","itemsNodes","setAllLeafsCheckedFalse","uncheck","unselectAllNodes","unselect","checkItems","idsChecked","itemFind","expandItems","selectItems","idsSelected","searchInNode","node","parents","searchParentsItems","ids","rootItem","results","findFirstActiveNode","findActiveWithPath","nodeList","currentPath","nodePath","path","selectKbItemsCss","CSS_BUNDLES","SYSTEM_SEARCH_ICON","VIEW_AS_TREE_ID","VIEW_AS_LIST_ID","TOGGLE_CHECKBOXES_CHECKED_VALUE","GxIdeSelectKbItems","_GxIdeSelectKbItems__componentLocale","set","this","_GxIdeSelectKbItems_chShortcutsEl","_GxIdeSelectKbItems_selectedNodesIds","_GxIdeSelectKbItems_shortcutsSrc","getAssetPath","_GxIdeSelectKbItems_updatedModelList","_GxIdeSelectKbItems_viewItemsAsModel","_GxIdeSelectKbItems_treeViewRenderEl","_GxIdeSelectKbItems_cancelHandler","cancelCallback","_GxIdeSelectKbItems_checkedItemsChangeHandler","async","e","checkedNodesIds","detail","singleChecks","lastCheckedId","find","includes","__classPrivateFieldGet","updateItemsProperties","Array","from","keys","filter","__classPrivateFieldSet","checkedChanged","_GxIdeSelectKbItems_confirmHandler","confirmCallback","_GxIdeSelectKbItems_contextMenuHandler","itemContextMenuCallback","info","isSelected","clientX","contextmenuEvent","clientY","selection","_GxIdeSelectKbItems_executeDialogAction","callback","_GxIdeSelectKbItems_patternSearchValueChangedHandler","event","searchPatternValue","_GxIdeSelectKbItems_renderActionButtons","h","dialogActions","map","action","class","part","onClick","call","disabled","loading","_GxIdeSelectKbItems_renderFooter","footer","cancel","select","_GxIdeSelectKbItems_selectedItemsChangeHandler","selectedNodesIds","selectionChanged","_GxIdeSelectKbItems_toggleAndSelectNodesInModelItems","selectedItemsIds","nodesToToggle","newItemsSelected","newItemsExpanded","_GxIdeSelectKbItems_updateViews","_GxIdeSelectKbItems_toggleCheckedNodesInModelItems","newItemsList","nodeVersionsListTreeModel","nodeListFlattenedTreeModel","_GxIdeSelectKbItems_viewItemsAsChangedHandler","selectedViewType","nodesVersionsViewType","_GxIdeSelectKbItems_toggleCheckboxesChangedHandler","toggleCheckboxes","_GxIdeSelectKbItems_scrollIntoActiveVersionNode","doScrollIntoView","activeItemNode","scrollIntoVisible","activeItemCallback","componentWillLoad","Locale","getComponentStrings","el","showToggleCheckboxes","value","main","tree","renderFooter","_GxIdeSelectKbItems_instances","_GxIdeSelectKbItems_loadItems","reloadItems","suspendShortcuts","suspend","updateSelection","updateCheckedItems","checkedItemsIds","render","Host","widget","model","src","ref","htmlFor","onChange","checkedValue","onInput","showActiveItemLink","placeholder","header","searchPatternPlaceholder","accessibleName","containerRef","activeItem","useLoader","loaderTitle","loader","title","description","show","expandableButton","onItemContextmenu","onCheckedItemsChange","onSelectedItemsChange","expandOnClick","multiSelection","filterType","loadItemsCallback","error","console"],"sources":["src/components/select-kb-items/helpers.tsx","src/components/select-kb-items/select-kb-items.scss?tag=gx-ide-select-kb-items&encapsulation=shadow","src/components/select-kb-items/select-kb-items.tsx"],"sourcesContent":["import { ItemNode, CheckboxType, ActiveNode } from \"./select-kb-items\";\nimport { TreeViewItemModel } from \"@genexus/chameleon-controls-library\";\nimport { getIconPath } from \"@genexus/mercury\";\n\nexport const ACTIVE_ITEM_DEFAULT_ICON = getIconPath({\n category: \"system\",\n name: \"check-circle\",\n colorType: \"primary\"\n});\n\nexport const convertItemsNodeListToFlattenedTreeViewModel = (\n itemsList: ItemNode[],\n checkboxType: CheckboxType\n): TreeViewItemModel[] => {\n const itemsListFlattenedTreeViewModel: TreeViewItemModel[] = [];\n\n const processNode = (item: ItemNode) => {\n const startImgSrc =\n item.active && !item.iconStart\n ? ACTIVE_ITEM_DEFAULT_ICON\n : item.iconStart;\n const leaf = !item.nodes?.length;\n const checkbox =\n checkboxType === \"all\" ||\n (checkboxType === \"custom\" && item.checkbox) ||\n (checkboxType === \"leaf\" && leaf);\n const metaData = JSON.stringify({\n versionType: item.type\n });\n itemsListFlattenedTreeViewModel.push({\n caption: item.name,\n checkbox: checkbox,\n checked: item.checked,\n startImgSrc: startImgSrc,\n endImgSrc: item.iconEnd,\n expanded: item.expanded,\n id: item.id.toString(),\n items: null,\n leaf: leaf,\n metadata: metaData,\n parts: item.parts,\n selected: item.selected,\n order: item.order\n });\n\n if (item.nodes) {\n item.nodes.forEach(childNode => processNode(childNode));\n }\n };\n\n itemsList.forEach(item => processNode(item));\n return itemsListFlattenedTreeViewModel;\n};\n\nexport const convertItemsListToTreeViewModel = (\n itemsList: ItemNode[],\n checkboxType: CheckboxType\n): TreeViewItemModel[] => {\n const itemsListTreeViewModel: TreeViewItemModel[] = [];\n itemsList.forEach(item => {\n const startImgSrc =\n item.active && !item.iconStart\n ? ACTIVE_ITEM_DEFAULT_ICON\n : item.iconStart;\n const leaf = !item.nodes?.length;\n const checkbox =\n checkboxType === \"all\" ||\n (checkboxType === \"custom\" && item.checkbox) ||\n (checkboxType === \"leaf\" && leaf);\n const expanded = item.expanded;\n const iconStart = startImgSrc;\n const iconEnd = item.iconEnd;\n const metaData = JSON.stringify({\n versionType: item.type\n });\n const order = parseInt(item.id);\n itemsListTreeViewModel.push({\n caption: item.name,\n checkbox: checkbox,\n checked: item.checked,\n startImgSrc: iconStart,\n endImgSrc: iconEnd,\n expanded: expanded,\n id: item.id.toString(),\n items: !leaf\n ? convertItemsListToTreeViewModel(item.nodes, checkboxType)\n : null,\n leaf: leaf,\n metadata: metaData,\n parts: item.parts,\n order: order,\n selected: item.selected\n });\n });\n\n return itemsListTreeViewModel;\n};\n\nconst findItemNode = (id: string, item: ItemNode): ItemNode | null => {\n if (item.id === id) {\n return item;\n }\n\n if (item.nodes) {\n for (const itemNode of item.nodes) {\n const result = findItemNode(id, itemNode);\n if (result) {\n return result;\n }\n }\n }\n return null;\n};\n\nfunction findItemInArray(itemsNodes: ItemNode[], id: string): ItemNode | null {\n for (const item of itemsNodes) {\n const result = findItemNode(id, item);\n if (result) {\n return result;\n }\n }\n return null;\n}\nconst setAllLeafsCheckedFalse = (itemsList: ItemNode[]): ItemNode[] => {\n const uncheck = (itemNode: ItemNode) => {\n itemNode.checked = false;\n if (itemNode.nodes?.length) {\n itemNode.nodes.forEach(childNode => uncheck(childNode));\n }\n };\n\n itemsList.forEach(item => uncheck(item));\n return itemsList;\n};\n\nexport const unselectAllNodes = (itemsList: ItemNode[]) => {\n const unselect = (itemNode: ItemNode) => {\n itemNode.selected = false;\n if (itemNode.nodes?.length) {\n itemNode.nodes.forEach(childNode => unselect(childNode));\n }\n };\n\n itemsList.forEach(item => unselect(item));\n};\n\nexport const checkItems = (\n itemsList: ItemNode[],\n idsChecked: string[]\n): ItemNode[] => {\n setAllLeafsCheckedFalse(itemsList);\n idsChecked.forEach(id => {\n const itemFind = findItemInArray(itemsList, id);\n if (itemFind) {\n itemFind.checked = true;\n }\n });\n\n return itemsList;\n};\n\nexport const expandItems = (\n itemsList: ItemNode[],\n idsChecked: string[]\n): ItemNode[] => {\n idsChecked.forEach(id => {\n const itemFind = findItemInArray(itemsList, id);\n if (itemFind) {\n itemFind.expanded = true;\n }\n });\n\n return itemsList;\n};\n\nexport const selectItems = (\n itemsList: ItemNode[],\n idsSelected: string[]\n): ItemNode[] => {\n idsSelected.forEach(id => {\n const itemFind = findItemInArray(itemsList, id);\n if (itemFind) {\n itemFind.selected = true;\n }\n });\n return itemsList;\n};\n\nfunction searchInNode(item: ItemNode, id: string): string[] | null {\n // If the current node is the searched node, we return an empty list (it has no parents in this branch)\n if (item.id === id) {\n return [];\n }\n\n // We traverse each child looking for the target node\n if (item.nodes?.length) {\n for (const node of item.nodes) {\n const parents = searchInNode(node, id);\n if (parents !== null) {\n // If we find it, we include the current node at the beginning of the path and return\n return [item.id, ...parents];\n }\n }\n }\n return null;\n}\n\nexport const searchParentsItems = (\n items: ItemNode[],\n ids: string[]\n): string[] | null => {\n const parents: string[] = [];\n for (const id of ids) {\n for (const rootItem of items) {\n const results = searchInNode(rootItem, id);\n if (results !== null) {\n results.forEach(result => {\n parents.push(result);\n });\n }\n }\n }\n return parents;\n};\n\n/**\n * Recursively searches for the first node with the active=true property\n * @param nodes Array of nodes to search through\n * @returns An object with caption, iconStart, and path to the first active node found, or null if none is found\n */\nexport const findFirstActiveNode = (nodes: ItemNode[]): ActiveNode | null => {\n // Helper function that keeps track of the path during recursion\n const findActiveWithPath = (\n nodeList: ItemNode[],\n currentPath: string[] = []\n ): ActiveNode | null => {\n // Base case: if nodes is undefined or empty\n if (!nodeList || nodeList.length === 0) {\n return null;\n }\n\n // Iterate through each node in the array\n for (const node of nodeList) {\n // Create a new path that includes the current node\n const nodePath = [...currentPath, node.id];\n\n // Check if the current node is active\n if (node.active === true) {\n return {\n caption: node.name,\n iconStart: node.iconStart,\n path: nodePath\n };\n }\n\n // If the node has children, search through them with the updated path\n if (node.nodes && node.nodes.length > 0) {\n const result = findActiveWithPath(node.nodes, nodePath);\n // If we find an active node in this subtree, return it immediately\n if (result !== null) {\n return result;\n }\n }\n }\n\n // No active node found in any of the nodes\n return null;\n };\n\n // Start the search with an empty path\n return findActiveWithPath(nodes);\n};\n",":host {\n --search-input-max-inline-size: 400px;\n display: grid;\n block-size: 100%;\n}\n:host(:not(.has-footer)) {\n grid-template-rows: max-content 1fr;\n}\n:host(.has-footer) {\n grid-template-rows: max-content 1fr max-content;\n}\n\n.header.has-active-item {\n grid-area: header;\n}\n\n.section {\n display: contents;\n}\n\n// header\n.header {\n &__first-row,\n &__second-row {\n display: grid;\n grid-auto-flow: column;\n }\n &__first-row {\n column-gap: var(--field-group__column-gap);\n grid-auto-columns: max-content;\n }\n &__second-row {\n column-gap: 12px;\n grid-template-columns: minmax(150px, var(--search-input-max-inline-size)) max-content;\n\n &--one-row {\n grid-template-columns: minmax(150px, var(--search-input-max-inline-size));\n }\n }\n}\n\n.active-item {\n background-color: var(--mer-surface__elevation--01);\n border-radius: var(--mer-border__radius--sm);\n padding: var(--mer-spacing--xs) var(--mer-spacing--sm);\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--xs);\n}\n.active-item {\n &__icon-container {\n display: contents;\n }\n &__icon {\n pointer-events: none; // We do not want the icon to change the colors, since the clickable area is the caption only\n }\n &__link {\n text-decoration: underline;\n // TODO: There should be a class in Merucry to apply link styles\n color: var(--mer-text__primary);\n cursor: pointer;\n &:hover {\n color: var(--mer-text__primary--hover);\n }\n &:active {\n color: var(--mer-text__primary--active);\n }\n }\n}\n\n.dummy-control-block-size {\n // WA: Make as tall as a regular contorl (ie.: a input, a combo-box) in order to\n // make the label vertically aligned with this control.\n block-size: 32px;\n}\n\n.trees {\n position: relative;\n}\n","import {\n Component,\n Element,\n getAssetPath,\n Host,\n h,\n Prop,\n State,\n Method\n} from \"@stencil/core\";\n\nimport {\n ChCheckboxCustomEvent,\n TreeViewItemModel,\n TreeViewItemModelExtended\n} from \"@genexus/chameleon-controls-library\";\n\nimport {\n checkItems,\n convertItemsListToTreeViewModel,\n convertItemsNodeListToFlattenedTreeViewModel,\n expandItems,\n searchParentsItems,\n selectItems,\n unselectAllNodes,\n findFirstActiveNode\n} from \"./helpers\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\nimport { ContextMenuInfo } from \"../../common/types\";\nimport { RadioGroupItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/radio-group/types\";\n\nimport { ACTIVE_ITEM_DEFAULT_ICON } from \"./helpers\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"chameleon/scrollbar\",\n \"components/tooltip\",\n \"components/tree-view\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/spacing\",\n \"utils/typography\"\n];\n\nconst SYSTEM_SEARCH_ICON = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-surface\"\n});\n\nconst VIEW_AS_TREE_ID: NodesVersionsViewType = \"tree\";\nconst VIEW_AS_LIST_ID: NodesVersionsViewType = \"list\";\n\nconst TOGGLE_CHECKBOXES_CHECKED_VALUE = \"on\";\n\n@Component({\n tag: \"gx-ide-select-kb-items\",\n styleUrl: \"select-kb-items.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/select-kb-items\"]\n})\nexport class GxIdeSelectKbItems {\n #_componentLocale: any;\n #chShortcutsEl: HTMLChShortcutsElement;\n #selectedNodesIds: string[] = [];\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/select-kb-items/shortcuts.json`\n );\n #updatedModelList: ItemNode[] = [];\n #viewItemsAsModel: RadioGroupItemModel[];\n #treeViewRenderEl: HTMLChTreeViewRenderElement;\n\n @Element() el: HTMLGxIdeSelectKbItemsElement;\n\n /**\n * Represents the active version node caption and icon (if any)\n */\n @State() activeItemNode: ActiveNode;\n\n /**\n * Represents the selected nodes ids\n */\n @State() checkedNodesIds: string[] = [];\n\n /**\n * If true, the footer will be rendered\n */\n @State() renderFooter: boolean = false;\n\n /**\n * Represents the nodes list model\n */\n @State() nodeListFlattenedTreeModel: TreeViewItemModel[] = [];\n\n /**\n * To show a loader when the component is loading\n */\n @State() loading: boolean = true;\n\n /**\n * View type for the nodes.\n */\n @State() nodesVersionsViewType: NodesVersionsViewType = \"tree\";\n\n /**\n * Represents the nodes tree model\n */\n @State() nodeVersionsListTreeModel: TreeViewItemModel[] = [];\n\n /**\n * \"Search Pattern\" input value, used to filter the nodes tree/list.\n */\n @State() searchPatternValue: string = null;\n\n /**\n * It maps to the ch-tree-view-render \"toggleCheckboxes\" property.\n */\n @State() toggleCheckboxes: boolean;\n\n /**\n * Represents the itemLis list model\n */\n @State() itemsList: ItemNode[] = [];\n\n /**\n * Callback emitted when the user clicks on the \"Active item\"\n */\n @Prop() readonly activeItemCallback?: () => Promise<void>;\n\n /**\n * Callback emitted when the 'cancel' button is pressed\n */\n @Prop() readonly cancelCallback?: () => Promise<void>;\n\n /**\n * Defines which nodes of the component have checkboxes.\n */\n @Prop() readonly checkboxType: CheckboxType;\n\n /**\n * Define if a item node is expanded on click interaction. If false item-node will only be expanded on double click.\n */\n @Prop() readonly expandOnClick: boolean = true;\n\n /**\n * Callback emitted when the items checked items change\n */\n @Prop() readonly checkedChanged?: (checkedItems: string[]) => Promise<void>;\n\n /**\n * Callback emitted when the 'select' button is pressed\n */\n @Prop() readonly confirmCallback?: (checkedItems: string[]) => Promise<void>;\n\n /**\n * Set of additional actions (callbacks) to those already provided by default by the selector (cancelCallback and selectCallback)\n */\n @Prop() readonly dialogActions: DialogAction[] = [];\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 to load the items list model\n */\n @Prop() readonly loadItemsCallback!: () => Promise<ItemNode[]>;\n\n /**\n * Used to define if the component must show the \"Toggle Checkboxes\" option or not\n */\n @Prop() readonly showToggleCheckboxes: boolean = true;\n\n /**\n * This define if the selection is unique or not\n */\n @Prop() readonly multiSelection?: boolean = false;\n\n /**\n * This define if the checks are unique or not\n */\n @Prop() readonly singleChecks?: boolean = false;\n\n /**\n * Used to define if the component must show the \"Active item\" link or not\n */\n @Prop() readonly showActiveItemLink?: boolean = false;\n\n /**\n * Defines whether to show a loader while loading items\n */\n @Prop() readonly useLoader?: boolean = true;\n\n /**\n * Callback emitted when the items selection change\n */\n @Prop() readonly selectionChanged?: (selectedItem: string[]) => Promise<void>;\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n this.toggleCheckboxes = this.showToggleCheckboxes;\n this.#viewItemsAsModel = [\n { value: VIEW_AS_TREE_ID, caption: this.#_componentLocale.main.tree },\n { value: VIEW_AS_LIST_ID, caption: \"List\" }\n ];\n this.renderFooter =\n this.dialogActions.length > 0 ||\n !!this.cancelCallback ||\n !!this.confirmCallback;\n\n this.#loadItems();\n }\n\n @Method()\n async reloadItems() {\n await this.#loadItems();\n }\n\n /**\n * Suspends or reactivates the shortcuts\n */\n @Method()\n async suspendShortcuts(suspendShortcuts: boolean) {\n if (suspendShortcuts) {\n this.#chShortcutsEl.suspend = true;\n } else {\n this.#chShortcutsEl.suspend = false;\n }\n }\n\n /**\n * Allow to update the selected items\n */\n @Method()\n async updateSelection(selectedItemsIds: string[]) {\n // first clear selected\n this.#treeViewRenderEl.updateItemsProperties(this.#selectedNodesIds, {\n selected: false\n });\n // then select\n this.#treeViewRenderEl.updateItemsProperties(selectedItemsIds, {\n selected: true\n });\n }\n\n /**\n * Allow to update the checked items\n */\n @Method()\n async updateCheckedItems(checkedItemsIds: string[]) {\n // first clear checks\n this.#treeViewRenderEl.updateItemsProperties(this.checkedNodesIds, {\n checked: false\n });\n // then select\n this.#treeViewRenderEl.updateItemsProperties(checkedItemsIds, {\n checked: true\n });\n this.checkedNodesIds = checkedItemsIds;\n }\n\n async #loadItems() {\n try {\n this.loading = true;\n this.itemsList = await this.loadItemsCallback();\n this.#updateViews(this.itemsList);\n // Check and update activeItem\n this.activeItemNode = findFirstActiveNode(this.itemsList);\n } catch (error) {\n console.error(\"Error loading items:\", error);\n } finally {\n this.loading = false;\n }\n }\n\n #cancelHandler = () => {\n if (this.cancelCallback) {\n this.cancelCallback();\n }\n };\n\n #checkedItemsChangeHandler = async (\n e: CustomEvent<Map<string, TreeViewItemModelExtended>>\n ) => {\n let checkedNodesIds: string[] = [];\n e.detail.forEach(node => {\n if (node.item.checked) {\n checkedNodesIds.push(node.item.id);\n }\n });\n\n if (this.singleChecks) {\n // Detect the last change by comparing previous and new state\n let lastCheckedId: string | null = null;\n // If there are more in the new state, it was a check; if less, it was an uncheck\n if (checkedNodesIds.length > this.checkedNodesIds.length) {\n // Find the newly checked item\n lastCheckedId =\n checkedNodesIds.find(id => !this.checkedNodesIds.includes(id)) ||\n null;\n } else if (checkedNodesIds.length < this.checkedNodesIds.length) {\n // Find the unchecked item (not used in single check, but kept for clarity)\n lastCheckedId =\n this.checkedNodesIds.find(id => !checkedNodesIds.includes(id)) ||\n null;\n }\n\n // Only allow one if multiChecks is false\n if (this.singleChecks && checkedNodesIds.length > 1) {\n // If we detected the last checked, keep it; otherwise, keep the first\n checkedNodesIds = lastCheckedId\n ? [lastCheckedId]\n : [checkedNodesIds[0]];\n // Uncheck the others\n this.#treeViewRenderEl.updateItemsProperties(\n Array.from(e.detail.keys()).filter(id => id !== checkedNodesIds[0]),\n { checked: false }\n );\n }\n }\n\n this.checkedNodesIds = checkedNodesIds;\n this.#updatedModelList = checkItems(this.itemsList, this.checkedNodesIds);\n\n if (this.checkedChanged) {\n this.checkedChanged(this.checkedNodesIds);\n }\n };\n\n #confirmHandler = () => {\n if (this.confirmCallback) {\n this.confirmCallback(this.checkedNodesIds);\n }\n };\n\n #contextMenuHandler = async (\n e: CustomEvent<{\n id: string;\n itemRef: HTMLChTreeViewItemElement;\n metadata: string;\n contextmenuEvent: PointerEvent;\n }>\n ) => {\n if (this.itemContextMenuCallback) {\n let info: ContextMenuInfo;\n const isSelected = this.#selectedNodesIds.find(id => id === e.detail.id);\n if (!this.#selectedNodesIds.length || !isSelected) {\n await this.#treeViewRenderEl.updateItemsProperties(\n this.#selectedNodesIds,\n { selected: false }\n );\n await this.#treeViewRenderEl.updateItemsProperties([e.detail.id], {\n selected: true\n });\n info = {\n clientX: e.detail.contextmenuEvent.clientX,\n clientY: e.detail.contextmenuEvent.clientY,\n selection: [e.detail.id]\n };\n } else {\n info = {\n clientX: e.detail.contextmenuEvent.clientX,\n clientY: e.detail.contextmenuEvent.clientY,\n selection: this.#selectedNodesIds\n };\n }\n this.itemContextMenuCallback(info);\n }\n };\n\n #executeDialogAction = (\n callback: (checkedNodesIds: string[], selectedNodesIds: string[]) => void\n ) => {\n return () => {\n callback(this.checkedNodesIds, this.#selectedNodesIds);\n };\n };\n\n #patternSearchValueChangedHandler = (\n event: CustomEvent<string> | InputEvent\n ) => {\n this.searchPatternValue = event.detail.toString();\n };\n\n #renderActionButtons = (): HTMLElement[] => {\n return (\n <div>\n {this.dialogActions.map(action => {\n return (\n <button\n class={\"button-tertiary\"}\n part={`button button-${action.name}`}\n onClick={this.#executeDialogAction(action.callback)}\n disabled={this.loading}\n >\n {action.name}\n </button>\n );\n })}\n </div>\n );\n };\n\n #renderFooter = (): HTMLElement => {\n return (\n <footer class=\"footer control-footer-with-border spacing-body-inline spacing-body-block-end control-footer-space-between\">\n {this.#renderActionButtons()}\n <div class=\"buttons-spacer \">\n {this.cancelCallback && (\n <button\n class={\"button-secondary\"}\n part={\"cancel-button\"}\n onClick={this.#cancelHandler}\n >\n {this.#_componentLocale.footer.cancel}\n </button>\n )}\n {this.confirmCallback && (\n <button\n class={\"button-primary\"}\n part={\"confirm-button\"}\n onClick={this.#confirmHandler}\n disabled={this.loading || this.checkedNodesIds?.length === 0}\n >\n {this.#_componentLocale.footer.select}\n </button>\n )}\n </div>\n </footer>\n );\n };\n\n #selectedItemsChangeHandler = (\n e: CustomEvent<TreeViewItemModelExtended[]>\n ) => {\n const selectedNodesIds: string[] = [];\n unselectAllNodes(this.itemsList);\n e.detail.forEach(node => {\n selectedNodesIds.push(node.item.id);\n });\n this.#selectedNodesIds = selectedNodesIds;\n if (this.selectionChanged) {\n this.selectionChanged(this.#selectedNodesIds);\n }\n\n this.#updatedModelList = selectItems(this.itemsList, selectedNodesIds);\n };\n\n #toggleAndSelectNodesInModelItems = async (selectedItemsIds: string[]) => {\n const nodesToToggle = searchParentsItems(this.itemsList, selectedItemsIds);\n const newItemsSelected = selectItems(this.itemsList, selectedItemsIds);\n const newItemsExpanded = expandItems(newItemsSelected, nodesToToggle);\n this.#updateViews(newItemsExpanded);\n };\n\n #toggleCheckedNodesInModelItems = async (selectedItemsIds: string[]) => {\n const nodesToToggle = searchParentsItems(this.itemsList, selectedItemsIds);\n const newItemsExpanded = expandItems(this.itemsList, nodesToToggle);\n this.#updateViews(newItemsExpanded);\n };\n\n #updateViews = (newItemsList: ItemNode[]) => {\n this.nodeVersionsListTreeModel = convertItemsListToTreeViewModel(\n newItemsList,\n this.checkboxType\n );\n\n this.nodeListFlattenedTreeModel =\n convertItemsNodeListToFlattenedTreeViewModel(\n newItemsList,\n this.checkboxType\n );\n };\n\n #viewItemsAsChangedHandler = async (event: CustomEvent<string>) => {\n const selectedViewType = event.detail as NodesVersionsViewType;\n this.nodesVersionsViewType = selectedViewType;\n if (this.nodesVersionsViewType === \"tree\") {\n await this.#toggleAndSelectNodesInModelItems(this.#selectedNodesIds);\n await this.#toggleCheckedNodesInModelItems(this.checkedNodesIds);\n }\n this.#updateViews(this.#updatedModelList);\n };\n\n #toggleCheckboxesChangedHandler = (\n event: ChCheckboxCustomEvent<string> | InputEvent\n ) => {\n this.toggleCheckboxes = event.detail === TOGGLE_CHECKBOXES_CHECKED_VALUE;\n };\n\n #scrollIntoActiveVersionNode = async () => {\n const doScrollIntoView =\n this.#treeViewRenderEl && this.activeItemNode?.path;\n if (doScrollIntoView) {\n await this.#treeViewRenderEl.scrollIntoVisible(this.activeItemNode.path);\n }\n\n if (this.activeItemCallback) {\n await this.activeItemCallback();\n }\n };\n\n render() {\n return (\n <Host class={{ \"widget\": true, \"has-footer\": this.renderFooter }}>\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-shortcuts\n src={this.#shortcutsSrc}\n ref={(el: HTMLChShortcutsElement) =>\n (this.#chShortcutsEl = el as HTMLChShortcutsElement)\n }\n ></ch-shortcuts>\n <section class=\"section\">\n <header\n part=\"header\"\n class=\"header control-header field-group spacing-body-block-start spacing-body-inline\"\n >\n <div class=\"header__first-row\">\n <div class=\"field field-inline\">\n <label class=\"label\" htmlFor=\"view-mode\">\n Select view mode:\n </label>\n <ch-radio-group-render\n class=\"radio-group dummy-control-block-size\"\n id=\"view-mode\"\n model={this.#viewItemsAsModel}\n onChange={this.#viewItemsAsChangedHandler}\n value={this.#viewItemsAsModel[0].value}\n ></ch-radio-group-render>\n </div>\n\n {this.checkboxType !== \"none\" && this.showToggleCheckboxes && (\n <div class=\"field field-inline\">\n <label class=\"label\" htmlFor=\"toggle-checkboxes\">\n Toggle Checkboxes\n </label>\n <ch-checkbox\n class=\"checkbox dummy-control-block-size\"\n id=\"toggle-checkboxes\"\n checkedValue={TOGGLE_CHECKBOXES_CHECKED_VALUE}\n value={TOGGLE_CHECKBOXES_CHECKED_VALUE}\n onInput={this.#toggleCheckboxesChangedHandler}\n ></ch-checkbox>\n </div>\n )}\n </div>\n\n <div\n class={{\n \"header__second-row\": true,\n \"header__second-row--one-row\": !this.showActiveItemLink\n }}\n >\n <ch-edit\n class=\"input\"\n placeholder={\n this.#_componentLocale.header.searchPatternPlaceholder\n }\n startImgSrc={SYSTEM_SEARCH_ICON}\n onInput={this.#patternSearchValueChangedHandler}\n accessibleName=\"search pattern\"\n ></ch-edit>\n {this.activeItemNode && this.showActiveItemLink && (\n <div class=\"active-item\">\n <span\n class=\"active-item__icon-container\"\n // make this span the icon container, to prevent icon state changes when\n // interacting with div.active-item\n >\n <ch-image\n class=\"icon-md active-item__icon\"\n src={\n this.activeItemNode.iconStart ||\n ACTIVE_ITEM_DEFAULT_ICON\n }\n containerRef={null}\n ></ch-image>\n </span>\n {this.#_componentLocale.header.activeItem}\n <button\n class=\"active-item__link\"\n onClick={this.#scrollIntoActiveVersionNode}\n >\n {this.activeItemNode.caption}\n </button>\n </div>\n )}\n </div>\n </header>\n\n <div class=\"spacing-body-inline-start trees\">\n {this.useLoader && this.loading ? (\n <gx-ide-loader\n loaderTitle={this.#_componentLocale.loader.title}\n description={this.#_componentLocale.loader.description}\n show\n ></gx-ide-loader>\n ) : (\n <ch-tree-view-render\n class=\"tree-view\"\n model={\n this.nodesVersionsViewType === \"tree\"\n ? this.nodeVersionsListTreeModel\n : this.nodeListFlattenedTreeModel\n }\n show-lines={\n this.nodesVersionsViewType === \"tree\" ? \"all\" : \"none\"\n }\n expandableButton={\n this.nodesVersionsViewType === \"tree\" ? \"decorative\" : \"no\"\n }\n onItemContextmenu={this.#contextMenuHandler}\n onCheckedItemsChange={this.#checkedItemsChangeHandler}\n onSelectedItemsChange={this.#selectedItemsChangeHandler}\n expandOnClick={this.expandOnClick}\n multiSelection={this.multiSelection}\n filter={this.searchPatternValue}\n filterType=\"caption\"\n toggleCheckboxes={this.toggleCheckboxes}\n ref={(el: HTMLChTreeViewRenderElement) => {\n this.#treeViewRenderEl = el as HTMLChTreeViewRenderElement;\n }}\n ></ch-tree-view-render>\n )}\n </div>\n {this.renderFooter && this.#renderFooter()}\n </section>\n </Host>\n );\n }\n}\n\nexport type CheckboxType = \"none\" | \"all\" | \"leaf\" | \"custom\";\n\nexport type DialogAction = {\n name: string;\n callback: DialogActionCallback;\n};\n\nexport type DialogActionCallback = (...args: any[]) => void;\n\nexport type ItemCommon = {\n icon: string;\n expanded: boolean;\n};\n\nexport type ItemNode = {\n active?: boolean;\n checkbox?: boolean;\n checked?: boolean;\n expanded?: boolean;\n iconStart?: string;\n iconEnd?: string;\n id: string;\n name: string;\n guid?: string;\n nodes?: ItemNode[];\n parts?: string;\n selected?: boolean;\n type?: ItemType;\n order?: number;\n};\n\nexport type ActiveNode = {\n caption: string;\n iconStart?: string;\n path: string[]; // for using the scrollIntoVisible method of the tree-view-render\n};\n\nexport type ItemType = {\n id: string;\n name: string;\n};\n\ntype NodesVersionsViewType = \"tree\" | \"list\";\n"],"mappings":"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"}
@@ -6,7 +6,7 @@ import { f as r } from "./p-5bab65ea.js";
6
6
 
7
7
  import { L as l } from "./p-311eedf3.js";
8
8
 
9
- import { r as n, a as o, I as d } from "./p-32b37b3d.js";
9
+ import { r as n, a as o, I as c } from "./p-32b37b3d.js";
10
10
 
11
11
  import "./p-d42e842b.js";
12
12
 
@@ -24,19 +24,7 @@ const mapObjectTypeToComboBoxItemModel = t => t.map((t => ({
24
24
  startImgSrc: t.icon
25
25
  })));
26
26
 
27
- const hasActiveNode = t => {
28
- if (t.active) {
29
- return true;
30
- }
31
- if (Array.isArray(t.nodes)) {
32
- return t.nodes.some(hasActiveNode);
33
- }
34
- return false;
35
- };
36
-
37
- const hasActiveVersionInList = t => t.some(hasActiveNode);
38
-
39
- const c = '.custom-icon-text-wrapper{display:flex;align-items:center;gap:10px}.warning-error-description{display:flex;align-items:center;gap:8px;padding:8px;max-inline-size:800px;line-height:1.5}.warning-error-icon{flex-shrink:0}:host{display:grid;grid-template-columns:max-content 1fr;block-size:100%;overflow:auto}.sidebar{background-color:transparent !important;border-inline-end:var(--section-common-border)}.sidebar::part(expand-button){border-radius:var(--control__border-radius)}gx-ide-select-kb-items{--search-input-max-inline-size:300px;opacity:0;transition:opacity var(--mer-timing--fast)}gx-ide-select-kb-items.sidebar-expanded{opacity:1}ch-tabular-grid.tabular-grid--empty::part(main){overflow:hidden}ch-tabular-grid-rowset-empty{position:relative}.main{display:grid;grid-template-rows:max-content 1fr;grid-row-gap:var(--mer-spacing--sm);overflow:auto}.main__header{display:grid}.main__content{position:relative;overflow:auto;display:grid;grid-template-rows:1fr max-content 2fr;grid-row-gap:var(--mer-spacing--sm)}.tabular-grid{overflow:auto}.search-filter{display:grid;grid-template-columns:1fr max-content max-content;gap:var(--gx-ide-grid-column-gap)}.action-buttons{justify-self:flex-end}.filters-grid{display:grid;grid-template-columns:repeat(6, 1fr);grid-template-areas:"from from to to type type" "user user user revision revision revision";grid-gap:var(--gx-ide-grid-column-gap);padding-block-start:var(--mer-spacing--sm)}.filters-container{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--mer-timing--fast)}.filters-container-visible{grid-template-rows:1fr}.filters-container>div{overflow:hidden}.field-from{grid-area:from}.field-to{grid-area:to}.field-type{grid-area:type}.field-user{grid-area:user}.field-revision{grid-area:revision}.commits-grid ch-tabular-grid-cell:is(:nth-child(2)){padding-block:var(--grid-cell__padding-block);padding-inline:var(--grid-cell__padding-inline);align-items:start;justify-content:start;min-inline-size:200px}.affected-objects-grid ch-tabular-grid-cell:is(:nth-child(5)){padding-block:var(--grid-cell__padding-block);padding-inline:var(--grid-cell__padding-inline);align-items:start;justify-content:start;min-inline-size:200px}.button-tertiary.button-icon-only{border-color:var(--control__border-color--enabled)}';
27
+ const d = '.custom-icon-text-wrapper{display:flex;align-items:center;gap:10px}.warning-error-description{display:flex;align-items:center;gap:8px;padding:8px;max-inline-size:800px;line-height:1.5}.warning-error-icon{flex-shrink:0}:host{display:grid;grid-template-columns:max-content 1fr;block-size:100%;overflow:auto}.sidebar{background-color:transparent !important;border-inline-end:var(--section-common-border)}.sidebar::part(expand-button){border-radius:var(--control__border-radius)}gx-ide-select-kb-items{--search-input-max-inline-size:300px;opacity:0;transition:opacity var(--mer-timing--fast)}gx-ide-select-kb-items.sidebar-expanded{opacity:1}ch-tabular-grid.tabular-grid--empty::part(main){overflow:hidden}ch-tabular-grid-rowset-empty{position:relative}.main{display:grid;grid-template-rows:max-content 1fr;grid-row-gap:var(--mer-spacing--sm);overflow:auto}.main__header{display:grid}.main__content{position:relative;overflow:auto;display:grid;grid-template-rows:1fr max-content 2fr;grid-row-gap:var(--mer-spacing--sm)}.tabular-grid{overflow:auto}.search-filter{display:grid;grid-template-columns:1fr max-content max-content;gap:var(--gx-ide-grid-column-gap)}.action-buttons{justify-self:flex-end}.filters-grid{display:grid;grid-template-columns:repeat(6, 1fr);grid-template-areas:"from from to to type type" "user user user revision revision revision";grid-gap:var(--gx-ide-grid-column-gap);padding-block-start:var(--mer-spacing--sm)}.filters-container{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--mer-timing--fast)}.filters-container-visible{grid-template-rows:1fr}.filters-container>div{overflow:hidden}.field-from{grid-area:from}.field-to{grid-area:to}.field-type{grid-area:type}.field-user{grid-area:user}.field-revision{grid-area:revision}.commits-grid ch-tabular-grid-cell:is(:nth-child(2)){padding-block:var(--grid-cell__padding-block);padding-inline:var(--grid-cell__padding-inline);align-items:start;justify-content:start;min-inline-size:200px}.affected-objects-grid ch-tabular-grid-cell:is(:nth-child(5)){padding-block:var(--grid-cell__padding-block);padding-inline:var(--grid-cell__padding-inline);align-items:start;justify-content:start;min-inline-size:200px}.button-tertiary.button-icon-only{border-color:var(--control__border-color--enabled)}';
40
28
 
41
29
  var h = undefined && undefined.__classPrivateFieldGet || function(t, i, e, a) {
42
30
  if (e === "a" && !a) throw new TypeError("Private accessor was defined without a getter");
@@ -51,39 +39,45 @@ var u = undefined && undefined.__classPrivateFieldSet || function(t, i, e, a, s)
51
39
  return a === "a" ? s.call(t, e) : s ? s.value = e : i.set(t, e), e;
52
40
  };
53
41
 
54
- var f, m, g, p, b, v, w, y, x, k, _, M, W, j, C, z, T, E, F;
42
+ var f, m, p, g, b, v, w, y, x, k, _, M, W, j, z, C, T, E, F, D, I, A;
55
43
 
56
- const I = [ "resets/box-sizing", "utils/form--full", "utils/layout", "utils/spacing", "utils/typography", "chameleon/scrollbar", "components/tabular-grid", "components/accordion", "components/sidebar" ];
44
+ const S = [ "resets/box-sizing", "utils/form--full", "utils/layout", "utils/spacing", "utils/typography", "chameleon/scrollbar", "components/tabular-grid", "components/accordion", "components/sidebar" ];
57
45
 
58
- const L = class {
46
+ const $ = class {
59
47
  constructor(e) {
60
48
  t(this, e);
61
49
  f.set(this, void 0);
62
50
  m.set(this, []);
63
- g.set(this, void 0);
64
51
  p.set(this, void 0);
52
+ g.set(this, void 0);
65
53
  b.set(this, void 0);
66
54
  v.set(this, void 0);
67
55
  w.set(this, void 0);
68
56
  y.set(this, void 0);
69
57
  x.set(this, void 0);
70
58
  k.set(this, void 0);
71
- _.set(this, (async (t, i) => {
59
+ _.set(this, void 0);
60
+ M.set(this, (async t => {
61
+ if (this.selectedVersionChangeCallback) {
62
+ await this.selectedVersionChangeCallback(t);
63
+ }
64
+ await h(this, W, "f").call(this, t[0], true);
65
+ }));
66
+ W.set(this, (async (t, i) => {
72
67
  var e;
73
68
  this.loading = true;
74
69
  const a = {
75
70
  search: h(this, b, "f").value ? h(this, b, "f").value : "",
76
- from: h(this, g, "f").value ? new Date(h(this, g, "f").value) : null,
71
+ from: h(this, p, "f").value ? new Date(h(this, p, "f").value) : null,
77
72
  to: h(this, v, "f").value ? new Date(h(this, v, "f").value) : null,
78
- revision: h(this, p, "f").value ? h(this, p, "f").value : "",
73
+ revision: h(this, g, "f").value ? h(this, g, "f").value : "",
79
74
  user: h(this, y, "f").value ? h(this, y, "f").value : "",
80
75
  type: h(this, w, "f").value === "all" ? "" : h(this, w, "f").value
81
76
  };
82
77
  try {
83
78
  this.objects = await this.loadCallback(a, t, i);
84
- await h(this, M, "f").call(this, (e = this.objects[0]) === null || e === void 0 ? void 0 : e.id);
79
+ await h(this, j, "f").call(this, (e = this.objects[0]) === null || e === void 0 ? void 0 : e.id);
85
80
  } catch (t) {
86
- this.versions = [];
87
81
  this.objects = [];
88
82
  this.historyDetail = null;
89
83
  this.selectedRevisionId = null;
@@ -91,35 +85,35 @@ const L = class {
91
85
  this.loading = false;
92
86
  }
93
87
  }));
94
- M.set(this, (async t => {
88
+ j.set(this, (async t => {
95
89
  if (t) {
96
90
  this.historyDetail = await this.loadDetailCallback(t);
97
- this.historyDetail.title = h(this, F, "f").call(this, this.historyDetail.title);
91
+ this.historyDetail.title = h(this, I, "f").call(this, this.historyDetail.title);
98
92
  this.selectedRevisionId = t;
99
93
  } else {
100
94
  this.historyDetail = null;
101
95
  }
102
96
  }));
103
- W.set(this, (() => {
97
+ z.set(this, (() => {
104
98
  if (h(this, k, "f")) {
105
99
  h(this, k, "f").addEventListener("contextmenu", (t => {
106
100
  t.preventDefault();
107
101
  t.stopPropagation();
108
- h(this, j, "f").call(this, t);
102
+ h(this, C, "f").call(this, t);
109
103
  }));
110
104
  }
111
105
  }));
112
- j.set(this, (async t => {
106
+ C.set(this, (async t => {
113
107
  this.gridContextMenuCallback({
114
108
  selection: [ this.selectedRevisionId ],
115
109
  clientX: t.clientX,
116
110
  clientY: t.clientY
117
111
  });
118
112
  }));
119
- C.set(this, (() => {
113
+ T.set(this, (() => {
120
114
  this.filtersHidden = !this.filtersHidden;
121
115
  }));
122
- z.set(this, (() => {
116
+ E.set(this, (() => {
123
117
  var t;
124
118
  const e = ((t = this.objects) === null || t === void 0 ? void 0 : t.length) === 0 || !this.objects;
125
119
  return i("ch-tabular-grid", {
@@ -129,13 +123,13 @@ const L = class {
129
123
  "tabular-grid--empty": e
130
124
  },
131
125
  onSelectionChanged: t => {
132
- this.objects.length > 0 && h(this, M, "f").call(this, t.detail.rowsId[0]);
126
+ this.objects.length > 0 && h(this, j, "f").call(this, t.detail.rowsId[0]);
133
127
  },
134
128
  ref: t => {
135
129
  var i;
136
130
  if (t && h(this, k, "f") !== t) {
137
131
  u(this, k, t, "f");
138
- h(this, W, "f").call(this);
132
+ h(this, z, "f").call(this);
139
133
  if (this.objects.length > 0) {
140
134
  h(this, k, "f").selectRow((i = this.objects[0]) === null || i === void 0 ? void 0 : i.id, true);
141
135
  }
@@ -190,7 +184,7 @@ const L = class {
190
184
  class: "tabular-grid-row"
191
185
  }));
192
186
  }));
193
- T.set(this, (() => {
187
+ F.set(this, (() => {
194
188
  var t, e;
195
189
  const a = this.historyDetail ? this.historyDetail.objects : [];
196
190
  const r = ((e = (t = this.historyDetail) === null || t === void 0 ? void 0 : t.objects) === null || e === void 0 ? void 0 : e.length) === 0 || !this.historyDetail;
@@ -241,29 +235,32 @@ const L = class {
241
235
  }, o(t.state)))))) : i("ch-tabular-grid-rowset", {
242
236
  class: "tabular-grid-rowset"
243
237
  }, i("ch-tabular-grid-rowset-empty", null, i("gx-ide-empty-state", {
244
- stateIconSrc: d.filter,
238
+ stateIconSrc: c.filter,
245
239
  stateTitle: h(this, f, "f").emptyHistoryDetailText,
246
240
  isAnimated: true
247
241
  }))), i("ch-tabular-grid-row", {
248
242
  class: "tabular-grid-row"
249
243
  }));
250
244
  }));
251
- E.set(this, (() => this.loading && i("div", {
245
+ D.set(this, (() => this.loading && i("div", {
252
246
  class: "main__content scrollable"
253
247
  }, i("gx-ide-loader", {
254
248
  loaderTitle: h(this, f, "f").loader.title,
255
249
  show: true,
256
250
  description: h(this, f, "f").loader.description
257
251
  }))));
258
- F.set(this, (t => {
252
+ I.set(this, (t => {
259
253
  const i = t.split(" - ");
260
254
  const e = new Date(i[1]);
261
255
  const a = r(e, "date-time");
262
256
  return `${i[0]} - ${a} - ${i[2]}`;
263
257
  }));
258
+ A.set(this, (async () => {
259
+ this.loading = true;
260
+ await h(this, _, "f").reloadItems();
261
+ }));
264
262
  this.historyDetail = undefined;
265
263
  this.objects = [];
266
- this.isFirstLoad = true;
267
264
  this.sidebarExpanded = true;
268
265
  this.filtersHidden = true;
269
266
  this.loading = true;
@@ -272,37 +269,11 @@ const L = class {
272
269
  this.types = undefined;
273
270
  this.itemContextMenuCallback = undefined;
274
271
  this.gridContextMenuCallback = undefined;
275
- this.selectedVersionId = undefined;
276
- this.versions = undefined;
272
+ this.loadVersionsCallback = undefined;
277
273
  this.loadCallback = undefined;
278
274
  this.loadDetailCallback = undefined;
279
275
  this.selectedVersionChangeCallback = undefined;
280
276
  }
281
- async selectedVersionIdChanged(t, i) {
282
- var e;
283
- if (t === i) {
284
- return;
285
- }
286
- // Reset filters
287
- h(this, b, "f").value = null;
288
- h(this, g, "f").value = null;
289
- h(this, v, "f").value = null;
290
- h(this, p, "f").value = null;
291
- h(this, y, "f").value = null;
292
- h(this, w, "f").value = (e = h(this, m, "f")[0]) === null || e === void 0 ? void 0 : e.value;
293
- await h(this, _, "f").call(this, t, false);
294
- }
295
- async versionsListChanged(t) {
296
- this.versions = t;
297
- this.hasActiveVersion = hasActiveVersionInList(t);
298
- if (t.length > 0 && this.selectedVersionId && this.isFirstLoad) {
299
- await h(this, _, "f").call(this, this.selectedVersionId, false);
300
- this.isFirstLoad = false;
301
- } else if (t.length === 0 && this.isFirstLoad) {
302
- this.loading = false;
303
- this.isFirstLoad = false;
304
- }
305
- }
306
277
  async componentWillLoad() {
307
278
  u(this, f, await l.getComponentStrings(this.el), "f");
308
279
  u(this, m, mapObjectTypeToComboBoxItemModel(this.types), "f");
@@ -312,12 +283,15 @@ const L = class {
312
283
  this.sidebarExpanded = t.detail;
313
284
  }));
314
285
  }
286
+ async reload() {
287
+ await h(this, A, "f").call(this);
288
+ }
315
289
  render() {
316
290
  var t;
317
291
  return i(e, {
318
292
  class: "widget"
319
293
  }, i("ch-theme", {
320
- model: I
294
+ model: S
321
295
  }), i("ch-sidebar", {
322
296
  ref: t => u(this, x, t, "f"),
323
297
  class: "sidebar",
@@ -331,10 +305,11 @@ const L = class {
331
305
  "has-active-version": this.hasActiveVersion
332
306
  },
333
307
  checkboxType: "none",
334
- itemsList: this.versions,
308
+ loadItemsCallback: () => this.loadVersionsCallback(),
335
309
  expandOnClick: false,
336
- selectionChanged: this.selectedVersionChangeCallback,
337
- itemContextMenuCallback: this.itemContextMenuCallback
310
+ selectionChanged: h(this, M, "f"),
311
+ itemContextMenuCallback: t => this.itemContextMenuCallback(t),
312
+ ref: t => u(this, _, t, "f")
338
313
  })), i("main", {
339
314
  class: "main spacing-body-block-start spacing-body-inline"
340
315
  }, i("div", {
@@ -349,7 +324,7 @@ const L = class {
349
324
  }, h(this, f, "f").filters.search), i("ch-edit", {
350
325
  value: "",
351
326
  class: "input",
352
- startImgSrc: d.search,
327
+ startImgSrc: c.search,
353
328
  part: "search",
354
329
  id: "search",
355
330
  ref: t => u(this, b, t, "f")
@@ -359,18 +334,18 @@ const L = class {
359
334
  "aria-label": h(this, f, "f").searchFilter.filterAriaLabel,
360
335
  "aria-expanded": this.filtersHidden ? "false" : "true",
361
336
  "aria-controls": "filters-container",
362
- onClick: () => h(this, C, "f").call(this)
337
+ onClick: () => h(this, T, "f").call(this)
363
338
  }, i("ch-image", {
364
339
  class: "icon-md",
365
- src: d.filter
340
+ src: c.filter
366
341
  })), i("button", {
367
342
  class: "button-tertiary button-icon-only",
368
343
  "aria-label": h(this, f, "f").searchFilter.reloadAriaLabel,
369
- onClick: () => h(this, _, "f").call(this, this.selectedVersionId, true),
344
+ onClick: () => h(this, A, "f").call(this),
370
345
  part: h(this, f, "f").searchFilter.reloadAriaLabel
371
346
  }, i("ch-image", {
372
347
  class: "icon-md",
373
- src: d.refresh
348
+ src: c.refresh
374
349
  }))), i("div", {
375
350
  id: "filters-container",
376
351
  "aria-labelledby": "filter-toggle-button",
@@ -393,7 +368,7 @@ const L = class {
393
368
  type: "date",
394
369
  part: "from",
395
370
  id: "from",
396
- ref: t => u(this, g, t, "f")
371
+ ref: t => u(this, p, t, "f")
397
372
  })), i("div", {
398
373
  class: "field field-block field-to"
399
374
  }, i("label", {
@@ -438,10 +413,10 @@ const L = class {
438
413
  part: "revision",
439
414
  class: "input",
440
415
  id: "revision",
441
- ref: t => u(this, p, t, "f")
442
- })))))), h(this, E, "f").call(this), !this.loading && i("div", {
416
+ ref: t => u(this, g, t, "f")
417
+ })))))), h(this, D, "f").call(this), !this.loading && i("div", {
443
418
  class: "main__content scrollable"
444
- }, h(this, z, "f").call(this), i("div", {
419
+ }, h(this, E, "f").call(this), i("div", {
445
420
  class: "field field-block"
446
421
  }, i("label", {
447
422
  class: "label",
@@ -454,7 +429,7 @@ const L = class {
454
429
  readonly: true,
455
430
  part: "comment-area",
456
431
  id: "comment-area"
457
- })), h(this, T, "f").call(this))));
432
+ })), h(this, F, "f").call(this))));
458
433
  }
459
434
  static get assetsDirs() {
460
435
  return [ "gx-ide-assets/team-dev-history" ];
@@ -462,20 +437,15 @@ const L = class {
462
437
  get el() {
463
438
  return a(this);
464
439
  }
465
- static get watchers() {
466
- return {
467
- selectedVersionId: [ "selectedVersionIdChanged" ],
468
- versions: [ "versionsListChanged" ]
469
- };
470
- }
471
440
  };
472
441
 
473
- f = new WeakMap, m = new WeakMap, g = new WeakMap, p = new WeakMap, b = new WeakMap,
442
+ f = new WeakMap, m = new WeakMap, p = new WeakMap, g = new WeakMap, b = new WeakMap,
474
443
  v = new WeakMap, w = new WeakMap, y = new WeakMap, x = new WeakMap, k = new WeakMap,
475
- _ = new WeakMap, M = new WeakMap, W = new WeakMap, j = new WeakMap, C = new WeakMap,
476
- z = new WeakMap, T = new WeakMap, E = new WeakMap, F = new WeakMap;
444
+ _ = new WeakMap, M = new WeakMap, W = new WeakMap, j = new WeakMap, z = new WeakMap,
445
+ C = new WeakMap, T = new WeakMap, E = new WeakMap, F = new WeakMap, D = new WeakMap,
446
+ I = new WeakMap, A = new WeakMap;
477
447
 
478
- L.style = c;
448
+ $.style = d;
479
449
 
480
- export { L as gx_ide_team_dev_history };
481
- //# sourceMappingURL=p-3ca03a38.entry.js.map
450
+ export { $ as gx_ide_team_dev_history };
451
+ //# sourceMappingURL=p-74f8bd45.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["mapObjectTypeToComboBoxItemModel","objectTypeModel","map","objectType","value","id","caption","name","startImgSrc","icon","historyCss","CSS_BUNDLES","GxIdeTeamDevHistory","_GxIdeTeamDevHistory__componentLocale","set","this","_GxIdeTeamDevHistory_types","_GxIdeTeamDevHistory_fromEl","_GxIdeTeamDevHistory_revisionEl","_GxIdeTeamDevHistory_searchEl","_GxIdeTeamDevHistory_toEl","_GxIdeTeamDevHistory_typesEl","_GxIdeTeamDevHistory_userEl","_GxIdeTeamDevHistory_sidebarEl","_GxIdeTeamDevHistory_revisionsGridEl","_GxIdeTeamDevHistory_selectKBItemsEL","_GxIdeTeamDevHistory_selectedVersionChanged","async","selectedVersion","selectedVersionChangeCallback","__classPrivateFieldGet","_GxIdeTeamDevHistory_getObjectsFromVersion","call","versionId","isRefresh","loading","filters","search","from","Date","to","revision","user","type","objects","loadCallback","_GxIdeTeamDevHistory_getSelectedRevision","_a","error","historyDetail","selectedRevisionId","revisionId","loadDetailCallback","title","_GxIdeTeamDevHistory_formatHistoryDetailDate","_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","_b","affectedObjectsGrid","config","tabularGrid","colSize","maxContent","types","description","auto","action","renderObjectTypeWithIcon","renderObjectStateWithIcon","state","stateIconSrc","ICONS","filter","emptyHistoryDetailText","_GxIdeTeamDevHistory_renderLoader","loaderTitle","loader","show","parts","split","datePart","formattedDate","_GxIdeTeamDevHistory_reloadHandler","reloadItems","componentWillLoad","Locale","getComponentStrings","componentDidLoad","e","sidebarExpanded","reload","render","Host","model","expanded","expandButtonCollapseAccessibleName","sidebar","collapseAriaLabel","expandButtonExpandAccessibleName","expandAriaLabel","showExpandButton","hasActiveVersion","checkboxType","loadItemsCallback","loadVersionsCallback","expandOnClick","selectionChanged","itemContextMenuCallback","info","htmlFor","part","searchFilter","filterAriaLabel","onClick","src","reloadAriaLabel","refresh","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\n.button-tertiary.button-icon-only {\n border-color: var(--control__border-color--enabled);\n}\n","/* STENCIL IMPORTS */\nimport {\n Component,\n Element,\n h,\n Host,\n Method,\n Prop,\n State\n} from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\n/* CUSTOM IMPORTS */\nimport { ComboBoxItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/combo-box/types\";\nimport { 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 renderObjectStateWithIcon,\n renderObjectTypeWithIcon\n} from \"../common/utilities\";\nimport ICONS from \"../version-control/common/constants\";\nimport { ObjectState } from \"../version-control/common/types\";\nimport { mapObjectTypeToComboBoxItemModel } from \"./helpers\";\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\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 #selectKBItemsEL: HTMLGxIdeSelectKbItemsElement;\n\n @State() historyDetail: RevisionDetailData;\n\n /**\n * The files rendered in the table\n */\n @State() objects: RevisionData[] = [];\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 * Callback to load the items list model\n */\n @Prop() readonly loadVersionsCallback!: () => Promise<ItemNode[]>;\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 @Method()\n async reload(): Promise<void> {\n await this.#reloadHandler();\n }\n\n #selectedVersionChanged = async (selectedVersion: string[]) => {\n if (this.selectedVersionChangeCallback) {\n await this.selectedVersionChangeCallback(selectedVersion);\n }\n await this.#getObjectsFromVersion(selectedVersion[0], true);\n };\n\n #getObjectsFromVersion = async (\n versionId: string,\n isRefresh: boolean\n ): 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 try {\n this.objects = await this.loadCallback(filters, versionId, isRefresh);\n await this.#getSelectedRevision(this.objects[0]?.id);\n } catch (error) {\n this.objects = [];\n this.historyDetail = null;\n this.selectedRevisionId = null;\n } finally {\n this.loading = false;\n }\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={ICONS.filter}\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 #reloadHandler = async (): Promise<void> => {\n this.loading = true;\n await this.#selectKBItemsEL.reloadItems();\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 loadItemsCallback={() => this.loadVersionsCallback()}\n expandOnClick={false}\n selectionChanged={this.#selectedVersionChanged}\n itemContextMenuCallback={(info: ContextMenuInfo) =>\n this.itemContextMenuCallback(info)\n }\n ref={(el: HTMLGxIdeSelectKbItemsElement) =>\n (this.#selectKBItemsEL = el as HTMLGxIdeSelectKbItemsElement)\n }\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={ICONS.search}\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-tertiary 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={ICONS.filter}></ch-image>\n </button>\n\n <button\n class=\"button-tertiary button-icon-only\"\n aria-label={this.#_componentLocale.searchFilter.reloadAriaLabel}\n onClick={() => this.#reloadHandler()}\n part={this.#_componentLocale.searchFilter.reloadAriaLabel}\n >\n <ch-image class=\"icon-md\" src={ICONS.refresh}></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 isRefresh: boolean\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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"}
@@ -39,6 +39,10 @@ export declare class GxIdeSelectKbItems {
39
39
  * It maps to the ch-tree-view-render "toggleCheckboxes" property.
40
40
  */
41
41
  toggleCheckboxes: boolean;
42
+ /**
43
+ * Represents the itemLis list model
44
+ */
45
+ itemsList: ItemNode[];
42
46
  /**
43
47
  * Callback emitted when the user clicks on the "Active item"
44
48
  */
@@ -72,14 +76,13 @@ export declare class GxIdeSelectKbItems {
72
76
  */
73
77
  readonly itemContextMenuCallback: (info: ContextMenuInfo) => Promise<void>;
74
78
  /**
75
- * Represents the itemLis list model
79
+ * Callback to load the items list model
76
80
  */
77
- readonly itemsList: ItemNode[];
81
+ readonly loadItemsCallback: () => Promise<ItemNode[]>;
78
82
  /**
79
83
  * Used to define if the component must show the "Toggle Checkboxes" option or not
80
84
  */
81
85
  readonly showToggleCheckboxes: boolean;
82
- watchNodeListHandler(newItemsList: ItemNode[]): void;
83
86
  /**
84
87
  * This define if the selection is unique or not
85
88
  */
@@ -92,11 +95,16 @@ export declare class GxIdeSelectKbItems {
92
95
  * Used to define if the component must show the "Active item" link or not
93
96
  */
94
97
  readonly showActiveItemLink?: boolean;
98
+ /**
99
+ * Defines whether to show a loader while loading items
100
+ */
101
+ readonly useLoader?: boolean;
95
102
  /**
96
103
  * Callback emitted when the items selection change
97
104
  */
98
105
  readonly selectionChanged?: (selectedItem: string[]) => Promise<void>;
99
106
  componentWillLoad(): Promise<void>;
107
+ reloadItems(): Promise<void>;
100
108
  /**
101
109
  * Suspends or reactivates the shortcuts
102
110
  */
@@ -130,6 +138,7 @@ export type ItemNode = {
130
138
  iconEnd?: string;
131
139
  id: string;
132
140
  name: string;
141
+ guid?: string;
133
142
  nodes?: ItemNode[];
134
143
  parts?: string;
135
144
  selected?: boolean;