@genexus/genexus-ide-ui 1.0.5 → 1.0.7

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/assets-manager-64c42a1e.js.map +1 -1
  2. package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js +5 -5
  3. package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js.map +1 -1
  4. package/dist/cjs/gx-ide-object-selector.cjs.entry.js +38 -5
  5. package/dist/cjs/gx-ide-object-selector.cjs.entry.js.map +1 -1
  6. package/dist/collection/components/kb-manager-export/kb-manager-export.css +9 -16
  7. package/dist/collection/components/kb-manager-export/kb-manager-export.js +4 -4
  8. package/dist/collection/components/kb-manager-export/kb-manager-export.js.map +1 -1
  9. package/dist/collection/components/object-selector/object-selector.css +4 -598
  10. package/dist/collection/components/object-selector/object-selector.js +37 -4
  11. package/dist/collection/components/object-selector/object-selector.js.map +1 -1
  12. package/dist/components/assets-manager.js.map +1 -1
  13. package/dist/components/gx-ide-kb-manager-export.js +5 -5
  14. package/dist/components/gx-ide-kb-manager-export.js.map +1 -1
  15. package/dist/components/gx-ide-object-selector.js +38 -5
  16. package/dist/components/gx-ide-object-selector.js.map +1 -1
  17. package/dist/esm/assets-manager-120996e9.js.map +1 -1
  18. package/dist/esm/gx-ide-kb-manager-export.entry.js +5 -5
  19. package/dist/esm/gx-ide-kb-manager-export.entry.js.map +1 -1
  20. package/dist/esm/gx-ide-object-selector.entry.js +38 -5
  21. package/dist/esm/gx-ide-object-selector.entry.js.map +1 -1
  22. package/dist/genexus-ide-ui/genexus-ide-ui.css +7 -0
  23. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  24. package/dist/genexus-ide-ui/p-3824978b.entry.js +525 -0
  25. package/dist/genexus-ide-ui/p-3824978b.entry.js.map +1 -0
  26. package/dist/genexus-ide-ui/{p-2cb766ce.entry.js → p-69e879be.entry.js} +33 -31
  27. package/dist/genexus-ide-ui/p-69e879be.entry.js.map +1 -0
  28. package/dist/genexus-ide-ui/p-6df9fab1.js.map +1 -1
  29. package/package.json +5 -5
  30. package/dist/genexus-ide-ui/p-2cb766ce.entry.js.map +0 -1
  31. package/dist/genexus-ide-ui/p-b7384b06.entry.js +0 -507
  32. package/dist/genexus-ide-ui/p-b7384b06.entry.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"names":["mapObjectTypeToComboBoxItemModel","objectTypeModel","map","objectType","value","id","caption","name","mapCategoryToComboBoxItemModel","categoryModel","category","label","objectSelectorCss","CSS_BUNDLES","FILTER_ICON","getIconPath","colorType","USER_ICON","MODIFIED_ACCORDION_MODEL","expanded","TODAY","GxIdeObjectSelector","_GxIdeObjectSelector_componentLocale","set","this","_GxIdeObjectSelector_shortcutsSrc","getAssetPath","_GxIdeObjectSelector_afterModel","_GxIdeObjectSelector_patternInput","_GxIdeObjectSelector_typeComboBox","_GxIdeObjectSelector_categoryComboBox","_GxIdeObjectSelector_moduleEntitySelector","_GxIdeObjectSelector_afterTypeComboBox","_GxIdeObjectSelector_userInput","_GxIdeObjectSelector_modifiedDateInput","_GxIdeObjectSelector_objectsGrid","_GxIdeObjectSelector_shortcutsEl","_GxIdeObjectSelector_cancelCallbackHandler","cancelCallback","_GxIdeObjectSelector_chGridKeyDownHandler","e","key","__classPrivateFieldGet","_GxIdeObjectSelector_openSelectionCallbackHandler","call","_GxIdeObjectSelector_deselectAll","selectAllRows","_GxIdeObjectSelector_evaluateObjectsCount","type","locale","selectedObjectsIdsArray","length","objCount","selected","none","one","many","objects","matching","_GxIdeObjectSelector_getToday","now","Date","date","toISOString","split","time","slice","_GxIdeObjectSelector_handleAfterValueChange","event","modifiedAfterValue","detail","FILTER_AFTER","DATE_TIME","_GxIdeObjectSelector_refreshUIWithNewConfiguration","_GxIdeObjectSelector_handleObjectsSelectionChange","rowsId","_GxIdeObjectSelector_hostKeyPressHandler","stopPropagation","_GxIdeObjectSelector_newObjectCallbackHandler","newObjectCallback","openSelectionCallback","modifiedAfter","user","_b","_a","trim","filters","pattern","_c","module","_e","_d","modifiedBy","modifiedDate","_f","loading","loadCallback","then","_GxIdeObjectSelector_sortObjectsByName","_GxIdeObjectSelector_renderFilter","h","class","htmlFor","filter","accessibleName","debounce","config","inputDebounce","part","patternValue","mode","ref","el","__classPrivateFieldSet","onInput","disabled","types","defaultType","model","categories","defaultCategory","defaultModule","labelCaption","labelPosition","onValueChanged","defaultValue","selectEntityCallback","selectModuleCallback","slot","after","startImgSrc","dateTime","max","_GxIdeObjectSelector_renderFooter","onClick","undefined","footer","btnNew","btnCancel","btnConfirm","multiSelection","_GxIdeObjectSelector_selectAll","btnSelectAll","_GxIdeObjectSelector_renderObjects","rowSelectionMode","onKeyDown","onSelectionChanged","onDblClick","settingable","size","tabularGrid","colSize","maxContent","tableHead","description","commonDouble","importDate","obj","rowid","src","icon","formatDate","loader","loaderTitle","title","show","stateIconSrc","stateTitle","emptyState","_GxIdeObjectSelector_setAfterDefaultValue","NONE","_GxIdeObjectSelector_setAfterOptions","afterNone","IMPORT","LAST_BUILD","sort","a","b","nameA","toLowerCase","nameB","connectedCallback","componentWillLoad","Locale","getComponentStrings","componentDidLoad","focus","componentDidRender","suspendShortcuts","suspend","validate","isValid","render","Host","onKeyPress"],"sources":["src/components/object-selector/helpers.ts","src/components/object-selector/object-selector.scss?tag=gx-ide-object-selector&encapsulation=shadow","src/components/object-selector/object-selector.tsx"],"sourcesContent":["import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { ObjectType, GxOption } from \"../../common/types\";\n// - - - - - - - - - - - -\n// Data Mappings\n// - - - - - - - - - - - -\n\n// ch-combo-box-render\n\nexport const mapObjectTypeToComboBoxItemModel = (\n objectTypeModel: ObjectType[]\n): ComboBoxModel =>\n objectTypeModel.map(objectType => ({\n value: objectType.id,\n caption: objectType.name\n }));\nexport const mapCategoryToComboBoxItemModel = (\n categoryModel: GxOption[]\n): ComboBoxModel =>\n categoryModel.map(category => ({\n value: category.id,\n caption: category.label\n }));\n","@import \"../../../node_modules/@genexus/mercury/dist/mercury.scss\"; // for the tabular-grid-cell-layout mixin\n\n:host {\n block-size: 100%;\n display: grid;\n grid-template-rows: auto 1fr auto;\n overflow: auto;\n}\n\n.section {\n display: contents;\n}\n\n/* Filters */\n.filter-layout {\n grid-template:\n \"pattern type\"\n \"category module\"\n \"modified modified\";\n grid-template-columns: 1fr 1fr;\n}\n.pattern {\n grid-area: pattern;\n}\n.type {\n grid-area: type;\n}\n.category {\n grid-area: category;\n}\n.module {\n grid-area: module;\n}\n.modified-accordion {\n grid-area: modified;\n display: flex;\n flex-direction: column;\n}\n.field-group-modified {\n grid-template-columns: 1fr 1fr 1fr;\n}\n\ngx-ide-container::part(content) {\n // only apply display grid when the loader is being displayed, to stretch the container.\n display: grid;\n}\n\n/*tabular grid*/\nch-tabular-grid {\n overflow: auto;\n}\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".tabular-grid-object-selector\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-apply-ellipsis: true,\n $tabular-grid-affected-columns-nth-list: (\n 5\n )\n);\n\n// Objects Table\n.objects-count {\n display: grid;\n grid-template-columns: 1fr 1fr;\n border-block-start: var(--mer-border__width--sm) solid\n var(--mer-color__elevation--04);\n}\n.objects-selected,\n.objects-matching {\n padding-block-end: var(--mer-spacing--xs);\n}\n\nch-tabular-grid-rowset-empty {\n position: relative; // makes this the bounder element for the loader\n}\n\nch-tabular-grid.empty-result::part(main) {\n // WA to avoid scrollbar flickering when displaying the empty-state message\n overflow: hidden;\n}\n\ninput::-webkit-datetime-edit-fields-wrapper {\n // WA remove padding to force this input block-size to be the same as other\n // mercury controls block size.\n padding: none;\n}\n","import {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method,\n getAssetPath\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport {\n AccordionModel,\n ComboBoxModel,\n TabularGridSelectionChangedEvent\n} from \"@genexus/chameleon-controls-library\";\n\nimport { Locale } from \"../../common/locale\";\nimport { config } from \"../../common/config\";\nimport { EntityData, GxOption, ObjectType } from \"../../common/types\";\nimport { formatDate } from \"../../common/helpers\";\nimport {\n mapObjectTypeToComboBoxItemModel,\n mapCategoryToComboBoxItemModel\n} from \"./helpers\";\nimport { FILTER_AFTER, FilterAfterValue } from \"../../common/constants\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form--full\",\n \"components/accordion\",\n \"components/tabular-grid\",\n \"utils/typography\",\n \"utils/layout\"\n];\n\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-elevation\"\n});\nconst USER_ICON = getIconPath({\n category: \"system\",\n name: \"user\",\n colorType: \"on-elevation\"\n});\n\nconst MODIFIED_ACCORDION_MODEL: AccordionModel = [\n {\n id: \"modified\",\n caption: \"Modified\",\n expanded: false\n }\n];\n\nlet TODAY: string = null;\n\n@Component({\n tag: \"gx-ide-object-selector\",\n styleUrl: \"object-selector.scss\",\n shadow: { delegatesFocus: true },\n assetsDirs: [\"gx-ide-assets/object-selector\"]\n})\nexport class GxIdeObjectSelector {\n #componentLocale: any;\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/object-selector/shortcuts.json`\n );\n\n #afterModel: ComboBoxModel = null;\n\n @Element() el: HTMLGxIdeObjectSelectorElement;\n\n /* References needed to collect data */\n #patternInput!: HTMLChEditElement;\n #typeComboBox!: HTMLChComboBoxRenderElement;\n #categoryComboBox!: HTMLChComboBoxRenderElement;\n #moduleEntitySelector!: HTMLGxIdeEntitySelectorElement;\n #afterTypeComboBox!: HTMLChComboBoxRenderElement;\n #userInput!: HTMLChEditElement;\n #modifiedDateInput!: HTMLInputElement;\n #objectsGrid!: HTMLChTabularGridElement;\n #shortcutsEl: HTMLChShortcutsElement;\n\n /**\n * For show or hide the filters relative to modifiers\n */\n @State() filterModified = false;\n\n /**\n * True if loadCallback has been called and has not been resolved yet.\n */\n @State() loading: boolean = false;\n\n /**\n * The \"modified after\" value\n */\n @State() modifiedAfterValue: FilterAfterValue;\n\n /**\n * The objects rendered in the table\n */\n @State() objects: ObjectData[] = [];\n\n /**\n * The selected objects in the table of objects\n */\n @State() selectedObjectsIdsArray: string[] = [];\n\n /**\n * Callback invoked when the user wishes to cancel the selection of objects.\n */\n @Prop() readonly cancelCallback!: CancelCallback;\n\n /**\n * The categories render in the filter category selector\n */\n @Prop() readonly categories!: GxOption[];\n\n /**\n * The default id value for the category filter\n */\n @Prop() readonly defaultCategory: string;\n\n /**\n * The default value for the module/folder filter\n */\n @Prop() readonly defaultModule: EntityData;\n\n /**\n * The default value for the type filter\n */\n @Prop() readonly defaultType: string;\n\n /**\n * If true, it will display a loader when needed.\n */\n @Prop() readonly loader = false;\n\n /**\n * Callback invoked when the component needs to reload the list of attributes.\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n * True if multiple object selection is allowed. Default is 'True'\n */\n @Prop() readonly multiSelection: boolean = false;\n\n /**\n * Callback invoked when the user presses the 'New' button.\n */\n @Prop() readonly newObjectCallback!: NewObjectCallback;\n\n /**\n * This is a function provided by the developer for expanded the data of object that is double-clicked or entered.\n */\n @Prop() readonly openSelectionCallback!: OpenSelectionCallback;\n\n /**\n * Current value of the input pattern. It is also used to set the default value when initializing the component\n */\n @Prop() readonly patternValue: string;\n\n /**\n * Callback invoked when the action is executed in the Module/Folder filter. It returns the information of the selected object (id and name) or 'undefined' if it was canceled.\n */\n @Prop() readonly selectModuleCallback: SelectModuleCallback;\n\n /**\n * The types render in the filter type selector\n */\n @Prop() readonly types!: ObjectType[];\n\n async connectedCallback() {\n TODAY = this.#getToday();\n }\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.#setAfterOptions();\n this.#setAfterDefaultValue();\n }\n\n componentDidLoad() {\n this.#refreshUIWithNewConfiguration();\n this.#patternInput.focus();\n }\n\n componentDidRender() {}\n\n /**\n * Suspends or reactivates the shortcuts\n */\n @Method()\n async suspendShortcuts(suspendShortcuts: boolean) {\n if (suspendShortcuts) {\n this.#shortcutsEl.suspend = true;\n } else {\n this.#shortcutsEl.suspend = false;\n }\n }\n\n /**\n * Validate necessary data input\n */\n @Method()\n async validate(): Promise<boolean> {\n const isValid = true;\n return isValid;\n }\n\n #cancelCallbackHandler = (): void => {\n this.cancelCallback();\n };\n\n #chGridKeyDownHandler = (e: KeyboardEvent) => {\n if (e.key === \"Enter\") {\n this.#openSelectionCallbackHandler(e);\n }\n };\n\n #deselectAll = (): void => {\n (this.#objectsGrid as any).selectAllRows(false);\n };\n\n #evaluateObjectsCount = (type: \"selected\" | \"matching\"): string => {\n const locale = this.#componentLocale;\n\n if (type === \"selected\") {\n if (this.selectedObjectsIdsArray.length === 0) {\n return locale.objCount.selected.none;\n }\n if (this.selectedObjectsIdsArray.length === 1) {\n return `1 ${locale.objCount.selected.one}`;\n }\n return `${this.selectedObjectsIdsArray.length} ${locale.objCount.selected.many}`;\n }\n\n // type === \"matching\"\n if (this.objects.length === 0) {\n return locale.objCount.matching.none;\n }\n if (this.objects.length === 1) {\n return `1 ${locale.objCount.matching.one}`;\n }\n return `${this.objects.length} ${locale.objCount.matching.many}`;\n };\n\n #getToday = (): string => {\n const now = new Date();\n const date = now.toISOString().split(\"T\")[0];\n const time = now.toISOString().split(\"T\")[1].slice(0, 5); // Only take 'HH:MM' part\n return `${date}T${time}`;\n };\n\n #handleAfterValueChange = (event: CustomEvent<string> | InputEvent) => {\n this.modifiedAfterValue = event.detail as FilterAfterValue;\n if (\n this.modifiedAfterValue !== FILTER_AFTER.DATE_TIME ||\n (this.modifiedAfterValue === FILTER_AFTER.DATE_TIME &&\n this.#modifiedDateInput.value)\n ) {\n // if \"modified\" is \"after date/time\" only refresh ui if date/time is valid.\n this.#refreshUIWithNewConfiguration();\n }\n };\n\n #handleObjectsSelectionChange = (\n event: CustomEvent<TabularGridSelectionChangedEvent>\n ) => {\n this.selectedObjectsIdsArray = event.detail.rowsId;\n };\n\n #hostKeyPressHandler = (e: KeyboardEvent) => {\n // just prevent keypress propagation\n if (e.key === \"Enter\") {\n e.stopPropagation();\n }\n };\n\n #newObjectCallbackHandler = (): void => {\n this.newObjectCallback();\n };\n\n #openSelectionCallbackHandler = (e: MouseEvent | KeyboardEvent): void => {\n e.stopPropagation();\n this.openSelectionCallback(this.selectedObjectsIdsArray);\n };\n\n #refreshUIWithNewConfiguration = (): void => {\n /* 'modified' checkbox, should only be considered if 'date' || 'user' */\n const modifiedAfter = this.#afterTypeComboBox.value;\n const user = this.#userInput?.value?.trim();\n const filters: ObjectFiltersData = {\n pattern: this.#patternInput?.value,\n type: this.#typeComboBox.value,\n category: this.#categoryComboBox.value,\n module: this.#moduleEntitySelector?.value?.id,\n modifiedAfter: modifiedAfter ? modifiedAfter : null,\n modifiedBy: user ? user : null,\n modifiedDate:\n modifiedAfter === FILTER_AFTER.DATE_TIME\n ? new Date(this.#modifiedDateInput?.value)\n : null\n };\n this.loading = true;\n this.objects = [];\n this.loadCallback(filters).then((objects: ObjectData[]) => {\n if (objects) {\n this.objects = this.#sortObjectsByName(objects);\n }\n this.selectedObjectsIdsArray = [];\n this.#deselectAll();\n this.loading = false;\n });\n };\n\n #renderFilter = (): Element => {\n return (\n <header class=\"control-header spacing-body-inline spacing-body-block-start\">\n <form class=\"field-group filter-layout\">\n <div class=\"field field-block pattern\">\n <label\n // pattern\n class=\"label\"\n htmlFor=\"pattern\"\n >\n {this.#componentLocale.filter.pattern}\n </label>\n\n <ch-edit\n accessibleName={this.#componentLocale.filter.pattern}\n debounce={config.inputDebounce}\n class=\"form-input\"\n part=\"filter-pattern\"\n id=\"pattern\"\n name=\"pattern\"\n value={this.patternValue}\n mode=\"text\"\n ref={(el: HTMLChEditElement) =>\n (this.#patternInput = el as HTMLChEditElement)\n }\n onInput={this.#refreshUIWithNewConfiguration}\n ></ch-edit>\n </div>\n\n <div class=\"field field-block type\">\n <label\n // type\n class=\"label\"\n htmlFor=\"type\"\n >\n {this.#componentLocale.filter.type}\n </label>\n <ch-combo-box-render\n accessibleName={this.#componentLocale.filter.type}\n class=\"combo-box\"\n disabled={!this.types}\n value={this.defaultType}\n part=\"filter-type\"\n id=\"type\"\n model={mapObjectTypeToComboBoxItemModel(this.types)}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#typeComboBox = el as HTMLChComboBoxRenderElement)\n }\n onInput={this.#refreshUIWithNewConfiguration}\n ></ch-combo-box-render>\n </div>\n\n <div class=\"field field-block category\">\n <label\n // category\n class=\"label\"\n htmlFor=\"category\"\n >\n {this.#componentLocale.filter.category}\n </label>\n <ch-combo-box-render\n id=\"category\"\n class=\"combo-box\"\n accessibleName={this.#componentLocale.filter.category}\n disabled={!this.categories}\n model={mapCategoryToComboBoxItemModel(this.categories)}\n value={this.defaultCategory}\n part=\"filter-category\"\n onInput={this.categories && this.#refreshUIWithNewConfiguration}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#categoryComboBox = el as HTMLChComboBoxRenderElement)\n }\n ></ch-combo-box-render>\n </div>\n\n <gx-ide-entity-selector\n // module\n class=\"module\"\n id=\"module\"\n value={this.defaultModule}\n ref={(el: HTMLGxIdeEntitySelectorElement) =>\n (this.#moduleEntitySelector =\n el as HTMLGxIdeEntitySelectorElement)\n }\n labelCaption={this.#componentLocale.filter.module}\n labelPosition=\"block-start\"\n onValueChanged={this.#refreshUIWithNewConfiguration}\n defaultValue={this.defaultModule}\n selectEntityCallback={this.selectModuleCallback}\n ></gx-ide-entity-selector>\n\n <ch-accordion-render\n // modified\n class=\"accordion-outlined modified-accordion\"\n model={MODIFIED_ACCORDION_MODEL}\n >\n <div slot=\"modified\" class=\"spacing-body\">\n <div class=\"field-group field-group-modified\">\n <div class=\"field field-block after\">\n <label\n // after\n class=\"label\"\n htmlFor=\"after-type\"\n >\n {this.#componentLocale.filter.after}\n </label>\n <ch-combo-box-render\n class=\"combo-box\"\n value={this.modifiedAfterValue}\n part=\"filter-after-type\"\n id=\"after-type\"\n model={this.#afterModel}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#afterTypeComboBox =\n el as HTMLChComboBoxRenderElement)\n }\n onInput={this.#handleAfterValueChange}\n ></ch-combo-box-render>\n </div>\n\n <div class=\"field field-block\">\n <label\n // user\n class=\"label\"\n htmlFor=\"user-name\"\n >\n {this.#componentLocale.filter.user}\n </label>\n <ch-edit\n class=\"form-input\"\n part=\"filter-user\"\n value={this.patternValue}\n ref={(el: HTMLChEditElement) =>\n (this.#userInput = el as HTMLChEditElement)\n }\n id=\"user-name\"\n name=\"userName\"\n startImgSrc={USER_ICON}\n onInput={this.#refreshUIWithNewConfiguration}\n ></ch-edit>\n </div>\n\n <div class=\"field field-block\">\n <label\n // date\n class={{\n \"label\": true,\n \"label--disabled\":\n this.modifiedAfterValue !== \"afterDateTime\"\n }}\n htmlFor=\"modified-date\"\n >\n {this.#componentLocale.filter.dateTime}\n </label>\n\n <input\n type=\"datetime-local\"\n class=\"form-input input-date-time\"\n id=\"modified-date\"\n name=\"modifiedDate\"\n part=\"filter-pattern\"\n value={this.patternValue}\n max={TODAY}\n ref={(el: HTMLInputElement) =>\n (this.#modifiedDateInput = el as HTMLInputElement)\n }\n disabled={this.modifiedAfterValue !== \"afterDateTime\"}\n onInput={this.#refreshUIWithNewConfiguration}\n ></input>\n </div>\n </div>\n </div>\n </ch-accordion-render>\n </form>\n </header>\n );\n };\n\n #renderFooter = (): Element => {\n return (\n <footer class=\"footer\">\n <div\n class=\"control-footer control-footer-space-between objects-count spacing-body-inline\"\n slot=\"footer-above\"\n >\n <p\n class=\"text-body-regular-s objects-selected\"\n part=\"objects-selected\"\n >\n {this.#evaluateObjectsCount(\"selected\")}\n </p>\n <p\n class=\"text-body-regular-s objects-matching\"\n part=\"objects-matching\"\n >\n {this.#evaluateObjectsCount(\"matching\")}\n </p>\n </div>\n\n <div class=\"control-footer-with-border control-footer-space-between spacing-body-inline spacing-body-block-end\">\n <button\n // button new object\n class=\"button-secondary\"\n part=\"button button-new\"\n onClick={!this.loading ? this.#newObjectCallbackHandler : undefined}\n disabled={this.loading}\n >\n {this.#componentLocale.footer.btnNew}\n </button>\n <div class=\"end buttons-container\">\n <button\n // button cancel\n class=\"button-secondary\"\n part=\"button button-cancel\"\n onClick={this.#cancelCallbackHandler}\n >\n {this.#componentLocale.footer.btnCancel}\n </button>\n <button\n // button confirm\n class=\"button-primary\"\n part=\"button button-confirm\"\n onClick={this.#openSelectionCallbackHandler}\n disabled={this.loading}\n >\n {this.#componentLocale.footer.btnConfirm}\n </button>\n {this.multiSelection ? (\n <button\n class=\"button-secondary\"\n onClick={this.#selectAll}\n part=\"button button-select-all\"\n >\n {this.#componentLocale.footer.btnSelectAll}\n </button>\n ) : null}\n </div>\n </div>\n </footer>\n );\n };\n\n #renderObjects = (): Element => {\n return (\n <ch-tabular-grid\n class={{\n \"tabular-grid\": true,\n \"tabular-grid-object-selector\": true,\n \"empty-result\": this.objects.length === 0\n }}\n rowSelectionMode={this.multiSelection ? \"multiple\" : \"single\"}\n ref={(el: HTMLChTabularGridElement) => (this.#objectsGrid = el)}\n part=\"ch-grid-objects\"\n onKeyDown={this.#chGridKeyDownHandler}\n onSelectionChanged={this.#handleObjectsSelectionChange}\n onDblClick={this.#openSelectionCallbackHandler}\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.name}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.type}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.module}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.description}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.commonDouble}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.modifiedDate}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.importDate}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n\n {this.objects.length ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.objects.map((obj: ObjectData) => (\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 <ch-image src={obj.icon} class=\"icon-md\"></ch-image>\n </ch-tabular-grid-cell>\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 {obj.type}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.module}\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 {`${formatDate(obj.modifiedDate, \"date-time\")}`}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {`${formatDate(obj.importDate, \"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 {this.loader && this.loading ? (\n <gx-ide-loader\n loaderTitle={this.#componentLocale.loader.title}\n show\n ></gx-ide-loader>\n ) : (\n <gx-ide-empty-state\n stateIconSrc={FILTER_ICON}\n stateTitle={this.#componentLocale.emptyState.title}\n ></gx-ide-empty-state>\n )}\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid>\n );\n };\n\n #selectAll = (): void => {\n (this.#objectsGrid as any).selectAllRows();\n };\n\n #setAfterDefaultValue = (): void => {\n this.modifiedAfterValue = FILTER_AFTER.NONE;\n };\n\n #setAfterOptions = (): void => {\n this.#afterModel = [\n {\n caption: this.#componentLocale.filter.afterNone,\n value: FILTER_AFTER.NONE\n },\n {\n caption: this.#componentLocale.filter[FILTER_AFTER.DATE_TIME],\n value: FILTER_AFTER.DATE_TIME\n },\n {\n caption: this.#componentLocale.filter[FILTER_AFTER.IMPORT],\n value: FILTER_AFTER.IMPORT\n },\n {\n caption: this.#componentLocale.filter[FILTER_AFTER.LAST_BUILD],\n value: FILTER_AFTER.LAST_BUILD\n }\n ];\n };\n\n #sortObjectsByName = (objects: ObjectData[]): ObjectData[] => {\n return objects.sort((a, b) => {\n const nameA = a.name.toLowerCase(),\n nameB = b.name.toLowerCase();\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n return 0;\n });\n };\n\n render(): void {\n return (\n <Host onKeyPress={this.#hostKeyPressHandler} class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-shortcuts\n src={this.#shortcutsSrc}\n ref={(el: HTMLChShortcutsElement) =>\n (this.#shortcutsEl = el as HTMLChShortcutsElement)\n }\n ></ch-shortcuts>\n <section class=\"section\">\n {this.#renderFilter()}\n {this.#renderObjects()}\n {this.#renderFooter()}\n </section>\n </Host>\n );\n }\n}\n\nexport type NewObjectCallback = () => Promise<void>;\n\nexport type CancelCallback = () => Promise<void>;\n\nexport type SelectModuleCallback = () => Promise<EntityData | undefined>;\n\nexport type OpenSelectionCallback = (ids: string[]) => Promise<void>;\n\nexport type LoadCallback = (\n filters: ObjectFiltersData\n) => Promise<ObjectData[]>;\n\nexport type ObjectFiltersData = {\n pattern?: string;\n type: string;\n category?: string;\n module?: string;\n modifiedAfter?: string;\n modifiedBy?: string;\n modifiedDate?: Date;\n};\n\nexport type ObjectData = {\n id: string;\n icon: string;\n name: string;\n type: string;\n description: string;\n module: string;\n modifiedDate?: Date;\n importDate?: Date;\n};\n"],"mappings":"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"}
@@ -119,7 +119,7 @@ const updateObjectsTreeModel = (t, e, s, i) => {
119
119
  * any items with metadata of type `KB_PROPERTY`.
120
120
  */ const clearKbPropertiesFromTree = t => t.filter((t => t.metadata !== o));
121
121
 
122
- const c = '.section{display:grid;block-size:100%;grid-template:"export-file-name buttons-container buttons-container buttons-container" max-content "checkboxes checkboxes checkboxes checkboxes" max-content "main main main main" 1fr "footer footer footer footer" max-content/1fr max-content max-content max-content}.header{display:contents}.header .export-file-name{grid-area:export-file-name}.header__buttons-container{grid-area:buttons-container;display:flex;gap:var(--mer-spacing--sm)}.header__checkboxes{grid-area:checkboxes;grid-template-columns:max-content 1fr}.main{grid-area:main;position:relative}.footer{grid-area:footer;justify-content:space-between}.footer .clear-btn{margin-inline-end:auto}';
122
+ const c = 'section{display:grid;block-size:100%;grid-template-rows:max-content 1fr max-content}.header__field-group{grid-template:"export-file-name buttons-container" max-content "checkboxes checkboxes" max-content/1fr max-content}.export-file-name{grid-area:export-file-name}.header__buttons-container{grid-area:buttons-container}.header__checkboxes{grid-area:checkboxes;grid-template-columns:max-content 1fr}.main{position:relative;padding-block:var(--content-block-spacing)}';
123
123
 
124
124
  var h = undefined && undefined.__classPrivateFieldSet || function(t, e, s, i, n) {
125
125
  if (i === "m") throw new TypeError("Private method is not writable");
@@ -134,7 +134,7 @@ var d = undefined && undefined.__classPrivateFieldGet || function(t, e, s, i) {
134
134
  return s === "m" ? i : s === "a" ? i.call(t) : i ? i.value : e.get(t);
135
135
  };
136
136
 
137
- var f, l, p, u, b, m, w, k, y, g, x, v, M, W, T, j, C, _, I, S, E, z, V, L;
137
+ var l, f, p, u, b, m, w, k, y, g, x, v, M, W, T, C, _, j, I, S, E, z, V, L;
138
138
 
139
139
  const A = a({
140
140
  category: "gemini-tools",
@@ -172,8 +172,8 @@ const K = [ "resets/box-sizing", "components/button", "components/checkbox", "co
172
172
  const q = class {
173
173
  constructor(s) {
174
174
  t(this, s);
175
- f.add(this);
176
- l.set(this, void 0);
175
+ l.add(this);
176
+ f.set(this, void 0);
177
177
  p.set(this, void 0);
178
178
  u.set(this, false);
179
179
  b.set(this, void 0);
@@ -220,7 +220,7 @@ const q = class {
220
220
  W.set(this, (() => {
221
221
  this.objectsTreeViewModel = [];
222
222
  d(this, y, "f").clear();
223
- d(this, l, "f").value = undefined;
223
+ d(this, f, "f").value = undefined;
224
224
  d(this, b, "f").value = undefined;
225
225
  }));
226
226
  T.set(this, (() => {
@@ -255,7 +255,7 @@ const q = class {
255
255
  checked: true,
256
256
  dragDisabled: true,
257
257
  dropDisabled: true,
258
- filter: d(this, C, "f").call(this),
258
+ filter: d(this, _, "f").call(this),
259
259
  filterType: this.addKbPropertiesIsChecked && !this.exportAllIsChecked ? "none" : "metadata",
260
260
  model: this.objectsTreeViewModel,
261
261
  showLines: "last",
@@ -264,10 +264,10 @@ const q = class {
264
264
  onCheckedItemsChange: d(this, E, "f")
265
265
  });
266
266
  }));
267
- j.set(this, (() => {
267
+ C.set(this, (() => {
268
268
  this.hasObjects = this.objectsTreeViewModel && this.objectsTreeViewModel.length > 0;
269
269
  }));
270
- C.set(this, (() => {
270
+ _.set(this, (() => {
271
271
  if (this.addKbPropertiesIsChecked && this.exportAllIsChecked) {
272
272
  return o;
273
273
  // only show properties
@@ -278,8 +278,8 @@ const q = class {
278
278
  }
279
279
  return "none";
280
280
  }));
281
- _.set(this, (t => {
282
- this.exportAllIsChecked = t.detail.target.value !== "undefined";
281
+ j.set(this, (t => {
282
+ this.exportAllIsChecked = t.detail;
283
283
  }));
284
284
  I.set(this, (async () => {
285
285
  this.exportingIsInProcess = true;
@@ -321,13 +321,15 @@ const q = class {
321
321
  const t = this.atLeastOneObjectItemIsChecked;
322
322
  const s = this.objectsTreeViewModel.length > 0;
323
323
  return e("footer", {
324
- class: "footer control-footer-with-border"
324
+ class: "footer control-footer-with-border control-footer-space-between space-body spacing-body-inline spacing-body-block-end"
325
325
  }, e("button", {
326
326
  class: "button-tertiary clear-btn",
327
327
  disabled: !s,
328
328
  part: "clear-button",
329
329
  onClick: s && d(this, W, "f")
330
- }, d(this, p, "f").footer.clearButton), e("button", {
330
+ }, d(this, p, "f").footer.clearButton), e("div", {
331
+ class: "buttons-spacer"
332
+ }, e("button", {
331
333
  class: "button-secondary button-icon-and-text",
332
334
  part: "references-button",
333
335
  disabled: !t,
@@ -346,7 +348,7 @@ const q = class {
346
348
  class: "icon-sm",
347
349
  disabled: this.exportAllIsChecked,
348
350
  src: F
349
- }), d(this, p, "f").footer.addButton));
351
+ }), d(this, p, "f").footer.addButton)));
350
352
  }));
351
353
  L.set(this, (t => {
352
354
  if (t.length) {
@@ -383,24 +385,24 @@ const q = class {
383
385
  }
384
386
  }
385
387
  objectTypesChanged(t) {
386
- d(this, f, "m", S).call(this, t);
388
+ d(this, l, "m", S).call(this, t);
387
389
  }
388
390
  async componentWillLoad() {
389
391
  h(this, p, await n.getComponentStrings(this.el), "f");
390
- d(this, j, "f").call(this);
391
- d(this, f, "m", S).call(this, this.objectTypes);
392
+ d(this, C, "f").call(this);
393
+ d(this, l, "m", S).call(this, this.objectTypes);
392
394
  }
393
395
  render() {
394
396
  const t = this.atLeastOnePropertyItemIsChecked || this.atLeastOneObjectItemIsChecked || this.exportAllIsChecked;
395
397
  const i = this.exportingIsInProcess;
396
398
  return e(s, {
397
- class: "spacing-body-block-start spacing-body-inline"
399
+ class: "widget"
398
400
  }, e("ch-theme", {
399
401
  model: K
400
- }), e("section", {
401
- class: "section field-group"
402
- }, e("header", {
403
- class: "header"
402
+ }), e("section", null, e("header", {
403
+ class: "header control-header-with-border space-body spacing-body-inline spacing-body-block-start"
404
+ }, e("div", {
405
+ class: "field-group header__field-group"
404
406
  }, e("div", {
405
407
  class: "field field-inline export-file-name"
406
408
  }, e("label", {
@@ -415,7 +417,7 @@ const q = class {
415
417
  startImgSrc: A,
416
418
  ref: t => h(this, m, t, "f")
417
419
  })), e("div", {
418
- class: "header__buttons-container"
420
+ class: "header__buttons-container buttons-spacer"
419
421
  }, e("button", {
420
422
  id: "export-kb-btn",
421
423
  class: "button-primary export-btn",
@@ -445,16 +447,16 @@ const q = class {
445
447
  caption: d(this, p, "f").main.addKnowledgeBaseDescription,
446
448
  checkedValue: H,
447
449
  onInput: d(this, g, "f"),
448
- ref: t => h(this, l, t, "f")
450
+ ref: t => h(this, f, t, "f")
449
451
  }), e("ch-checkbox", {
450
452
  class: "checkbox export-all",
451
453
  part: "export-all-checkbox",
452
454
  checkedValue: H,
453
455
  caption: d(this, p, "f").main.exportAll,
454
- onInput: d(this, _, "f"),
456
+ onInput: d(this, j, "f"),
455
457
  ref: t => h(this, b, t, "f")
456
- }))), e("div", {
457
- class: "main"
458
+ })))), e("div", {
459
+ class: "main spacing-body-inline"
458
460
  }, d(this, T, "f").call(this), this.loader && this.exportingIsInProcess && e("gx-ide-loader", {
459
461
  cancelLabel: d(this, p, "f").loader.cancelLabel,
460
462
  loaderTitle: d(this, p, "f").loader.title,
@@ -477,11 +479,11 @@ const q = class {
477
479
  }
478
480
  };
479
481
 
480
- l = new WeakMap, p = new WeakMap, u = new WeakMap, b = new WeakMap, m = new WeakMap,
482
+ f = new WeakMap, p = new WeakMap, u = new WeakMap, b = new WeakMap, m = new WeakMap,
481
483
  w = new WeakMap, k = new WeakMap, y = new WeakMap, g = new WeakMap, x = new WeakMap,
482
- v = new WeakMap, M = new WeakMap, W = new WeakMap, T = new WeakMap, j = new WeakMap,
483
- C = new WeakMap, _ = new WeakMap, I = new WeakMap, E = new WeakMap, z = new WeakMap,
484
- V = new WeakMap, L = new WeakMap, f = new WeakSet, S = function _GxIdeKbManagerExport_objectsTypesArrayToMap(t) {
484
+ v = new WeakMap, M = new WeakMap, W = new WeakMap, T = new WeakMap, C = new WeakMap,
485
+ _ = new WeakMap, j = new WeakMap, I = new WeakMap, E = new WeakMap, z = new WeakMap,
486
+ V = new WeakMap, L = new WeakMap, l = new WeakSet, S = function _GxIdeKbManagerExport_objectsTypesArrayToMap(t) {
485
487
  t.forEach((t => {
486
488
  d(this, k, "f").set(t.id, t);
487
489
  }));
@@ -490,4 +492,4 @@ V = new WeakMap, L = new WeakMap, f = new WeakSet, S = function _GxIdeKbManagerE
490
492
  q.style = c;
491
493
 
492
494
  export { q as gx_ide_kb_manager_export };
493
- //# sourceMappingURL=p-2cb766ce.entry.js.map
495
+ //# sourceMappingURL=p-69e879be.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["KB_PROPERTY","KB_OBJECT","getPropertyIcon","typeId","kbPropertiesTypes","find","propertyType","id","icon","convertObjectTypeToTreeItem","objectType","caption","name","startImgSrc","leaf","parts","expanded","items","convertObjectToTreeItem","object","objectTypes","get","metadata","convertPropertyToTreeItem","property","updateObjectsTreeModel","objects","objectTypesMap","objectsSet","actualTreeState","updatedTreeData","forEach","has","objectTreeItem","objectTypeTreeItemIndex","findIndex","treeItem","objectTypeTreeItem","push","add","convertKbPropertiesDataToTreeItemData","properties","propertyAlreadyExists","node","undefined","propertyTreeItem","unshift","clearKbPropertiesFromTree","filter","item","kbManagerExportCss","FILE_ICON","getIconPath","category","colorType","SETTINGS_ICON","GENERAL_REFERENCES_ICON","MENUS_NEW_OBJECT_ICON","TREE_VIEW_ICON","CHECKBOX_CHECKED_VALUE","CSS_BUNDLES","GxIdeKbManagerExport","_GxIdeKbManagerExport_addKbDescriptionEl","set","this","_GxIdeKbManagerExport_componentLocale","_GxIdeKbManagerExport_animateEmptyState","_GxIdeKbManagerExport_exportAllEl","_GxIdeKbManagerExport_fileNameEl","_GxIdeKbManagerExport_kBPropertiesData","_GxIdeKbManagerExport_objectTypesMap","Map","_GxIdeKbManagerExport_objectsSet","Set","_GxIdeKbManagerExport_addKBPropertiesCallbackHandler","async","e","addKbPropertiesIsChecked","detail","target","value","__classPrivateFieldSet","addKBPropertiesCallback","__classPrivateFieldGet","length","objectsTreeViewModel","_GxIdeKbManagerExport_addObjectsCallbackHandler","exportAllIsChecked","addedObjects","addObjectsCallback","_GxIdeKbManagerExport_updateObjects","call","_GxIdeKbManagerExport_addReferencesCallbackHandler","addReferencesCallback","checkedObjectsIds","_GxIdeKbManagerExport_cancelCallbackHandler","cancelled","cancelCallback","exportingIsInProcess","_GxIdeKbManagerExport_clearButtonHandler","clear","_GxIdeKbManagerExport_evaluateContentToDisplay","hasObjects","h","isAnimated","stateTitle","main","noObjectsToDisplay","key","class","onClick","beginByADdingSomeObjects","stateIconSrc","exportAllMessage","checkbox","checked","dragDisabled","dropDisabled","_GxIdeKbManagerExport_evaluateTreeViewFilters","filterType","model","showLines","toggleCheckboxes","sortItemsCallback","_GxIdeKbManagerExport_sortTreeItems","onCheckedItemsChange","_GxIdeKbManagerExport_objectsTreeCheckedItemsChangedHandler","_GxIdeKbManagerExport_evaluateObjects","_GxIdeKbManagerExport_exportAllChangedHandler","event","_GxIdeKbManagerExport_exportCallbackHandler","fileName","checkedKbPropertiesIds","checkedPropertiesIds","checkedObjectIds","exportCallback","then","allItemsWithCheckbox","values","atLeastOnePropertyItemIsChecked","atLeastOneObjectItemIsChecked","subModel","sort","a","b","localeCompare","_GxIdeKbManagerExport_renderFooter","referencesButtonEnabled","clearButtonEnabled","disabled","part","footer","clearButton","src","addReferencesButton","addButton","objectsDataArray","newObjectsTreeModel","objectsTreeViewModelChanged","newObjectsTreeViewModel","objectTypesChanged","newObjectTypesArray","_GxIdeKbManagerExport_instances","_GxIdeKbManagerExport_objectsTypesArrayToMap","componentWillLoad","Locale","getComponentStrings","el","render","exportButtonEnabled","cancelButtonEnabled","Host","htmlFor","header","exportFileName","autoFocus","ref","exportButton","cancelButton","optionsButton","title","optionsCallback","addKnowledgeBaseDescription","checkedValue","onInput","exportAll","loader","cancelLabel","loaderTitle","show","objectTypesArray"],"sources":["src/components/kb-manager-export/helpers.ts","src/components/kb-manager-export/kb-manager-export.scss?tag=gx-ide-kb-manager-export&encapsulation=shadow","src/components/kb-manager-export/kb-manager-export.tsx"],"sourcesContent":["// /* Tree View */\nimport {\n TreeViewItemModel,\n TreeViewModel\n} from \"@genexus/chameleon-controls-library\";\nimport { ObjectData, KBPropertyData, KBPropertyType } from \"./types\";\nimport { ObjectType } from \"../../common/types\";\nexport const KB_PROPERTY = \"property\";\nexport const KB_OBJECT = \"object\";\n\nconst getPropertyIcon = (\n typeId: string,\n kbPropertiesTypes: KBPropertyType[]\n): string =>\n // The object icon has to be retrieved from the ObjectTypes array, by\n // matching the ObjectData typeId with the ObjectType id\n kbPropertiesTypes.find(propertyType => propertyType.id === typeId).icon;\n\nconst convertObjectTypeToTreeItem = (\n objectType: ObjectType\n): TreeViewItemModel => ({\n caption: objectType.name,\n id: objectType.id,\n startImgSrc: objectType.icon,\n leaf: false,\n parts: \"object-type tree-view-item\",\n expanded: true,\n items: []\n});\n\nconst convertObjectToTreeItem = (\n object: ObjectData,\n objectTypes: Map<string, ObjectType>\n): TreeViewItemModel => ({\n caption: object.name,\n id: object.id,\n startImgSrc: objectTypes.get(object.typeId).icon,\n parts: \"object tree-view-item\",\n metadata: KB_OBJECT,\n leaf: true\n});\n\nconst convertPropertyToTreeItem = (\n property: KBPropertyData,\n kbPropertiesTypes: KBPropertyType[]\n): TreeViewItemModel => ({\n caption: property.name,\n id: property.id,\n startImgSrc: getPropertyIcon(property.typeId, kbPropertiesTypes),\n parts: \"property tree-view-item\",\n metadata: KB_PROPERTY,\n leaf: true\n});\n\n/**\n * Updates the tree model with the provided objects.\n * Objects may already exist and are placed under their parent node.\n * If the parent node doesn't exist (identified by typeId on ObjectTypes),\n * it is created and added at the bottom.\n *\n * @param {ObjectData[] | undefined} objects - The array of objects to update.\n * @param {Map<string, ObjectType>} objectTypesMap - A map of object types by ID.\n * @param {Set<string>} objectsSet - A set of existing object IDs.\n * @param {TreeViewModel} actualTreeState - The current tree state to be updated.\n * @returns {TreeViewModel} - The updated tree view model.\n */\nexport const updateObjectsTreeModel = (\n objects: ObjectData[] | undefined,\n objectTypesMap: Map<string, ObjectType>,\n objectsSet: Set<string>,\n actualTreeState: TreeViewModel\n): TreeViewModel => {\n if (!objects) {\n return [...actualTreeState];\n }\n\n const updatedTreeData: TreeViewModel = [...actualTreeState];\n objects.forEach(object => {\n // objects that already exists in the actual actualTreeState should not be added.\n\n if (objectsSet.has(object.id)) {\n // object already exists\n return;\n }\n\n const objectTreeItem = convertObjectToTreeItem(object, objectTypesMap);\n\n // TODO: Improve the algorithm efficiency. This check visits potentially all nodes\n // from the TreeViewModel on each iteration. Using a Map to pre-store the TreeView\n // nodes would improve efficiency.\n const objectTypeTreeItemIndex = updatedTreeData.findIndex(\n treeItem => treeItem.id === object.typeId\n );\n\n if (objectTypeTreeItemIndex === -1) {\n // Create and add new object type tree item\n const objectType = objectTypesMap.get(object.typeId);\n if (objectType) {\n const objectTypeTreeItem = convertObjectTypeToTreeItem(objectType);\n objectTypeTreeItem.items.push(objectTreeItem);\n updatedTreeData.push(objectTypeTreeItem);\n }\n } else {\n // objectType exists already. insert object as children of the object type tree item.\n updatedTreeData[objectTypeTreeItemIndex].items.push(objectTreeItem);\n }\n\n objectsSet.add(object.id);\n });\n\n return updatedTreeData;\n};\n\n/**\n * Converts an array of KB properties data into tree item data for a tree view.\n *\n * @param {KBPropertyData[]} properties - The array of KB property data.\n * @param {KBPropertyType[]} kbPropertiesTypes - The array of KB property types.\n * @param {TreeViewModel} actualTreeState - The current state of the tree.\n * @returns {TreeViewModel} - The updated tree view item models.\n */\nexport const convertKbPropertiesDataToTreeItemData = (\n properties: KBPropertyData[],\n kbPropertiesTypes: KBPropertyType[],\n actualTreeState: TreeViewModel\n): TreeViewModel => {\n if (!properties) {\n return [...actualTreeState];\n }\n\n const updatedTreeData: TreeViewModel = [...actualTreeState];\n properties.forEach(property => {\n // properties have no parent node, and they should be added at the beginning of the tree\n const propertyAlreadyExists =\n updatedTreeData.find(node => node.id === property.id) !== undefined;\n if (propertyAlreadyExists) {\n return;\n }\n const propertyTreeItem = convertPropertyToTreeItem(\n property,\n kbPropertiesTypes\n );\n updatedTreeData.unshift(propertyTreeItem);\n });\n return updatedTreeData;\n};\n\n/**\n * Removes properties from the tree model.\n *\n * @param {TreeViewModel} actualTreeState - The current state of the tree,\n * containing various tree view items.\n * @returns {TreeViewModel} - A new array of tree view items that excludes\n * any items with metadata of type `KB_PROPERTY`.\n */\nexport const clearKbPropertiesFromTree = (\n actualTreeState: TreeViewModel\n): TreeViewModel =>\n actualTreeState.filter(item => item.metadata !== KB_PROPERTY);\n","section {\n display: grid;\n block-size: 100%;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.header__field-group {\n grid-template:\n \"export-file-name buttons-container\" max-content\n \"checkboxes checkboxes\" max-content\n / 1fr max-content;\n}\n.export-file-name {\n grid-area: export-file-name;\n}\n.header__buttons-container {\n grid-area: buttons-container;\n}\n.header__checkboxes {\n grid-area: checkboxes;\n grid-template-columns: max-content 1fr;\n}\n\n.main {\n position: relative;\n padding-block: var(--content-block-spacing);\n}\n","import { Component, Host, h, Prop, Element, State, Watch } from \"@stencil/core\";\n\nimport { ChCheckboxCustomEvent } from \"@genexus/chameleon-controls-library\";\nimport {\n TreeViewItemModelExtended,\n TreeViewModel\n} from \"@genexus/chameleon-controls-library\";\nimport { MercuryBundles } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\nimport {\n updateObjectsTreeModel,\n convertKbPropertiesDataToTreeItemData,\n clearKbPropertiesFromTree\n} from \"./helpers\";\nimport { ObjectType } from \"../../common/types\";\n\nimport { KB_PROPERTY, KB_OBJECT } from \"./helpers\";\nimport {\n KBPropertiesCallback,\n KBPropertyData,\n KBPropertyType,\n ObjectData,\n ExportFileDirectoryCallback,\n OptionsCallback,\n AddObjectsCallback,\n ExportCallback,\n AddReferencesCallback,\n CancelCallback\n} from \"./types\";\n\nimport { getIconPath } from \"@genexus/mercury\";\n\nconst FILE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"file\",\n colorType: \"on-elevation\"\n});\nconst SETTINGS_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"settings\",\n colorType: \"primary\"\n});\nconst GENERAL_REFERENCES_ICON = getIconPath({\n category: \"window-tools\",\n name: \"references\",\n colorType: \"neutral\"\n});\nconst MENUS_NEW_OBJECT_ICON = getIconPath({\n category: \"menus\",\n name: \"new-object\",\n colorType: \"on-primary\"\n});\nconst TREE_VIEW_ICON = getIconPath({\n category: \"controls\",\n name: \"treeview\"\n});\nconst CHECKBOX_CHECKED_VALUE = \"true\";\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];\n@Component({\n tag: \"gx-ide-kb-manager-export\",\n styleUrl: \"kb-manager-export.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/kb-manager-export\"]\n})\nexport class GxIdeKbManagerExport {\n #addKbDescriptionEl!: HTMLChCheckboxElement;\n #componentLocale: any;\n #animateEmptyState: boolean = false;\n #exportAllEl!: HTMLChCheckboxElement;\n #fileNameEl!: HTMLChEditElement;\n #kBPropertiesData!: KBPropertyData[];\n /**\n * Stores the object types information (name, and icon)\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #objectTypesMap: Map<string, ObjectType> = new Map();\n /**\n * Stores the object's id that have been added.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #objectsSet: Set<string> = new Set();\n\n @Element() el: HTMLGxIdeKbManagerExportElement;\n\n @State() addKbPropertiesIsChecked = false;\n @State() atLeastOnePropertyItemIsChecked = false;\n @State() atLeastOneObjectItemIsChecked = false;\n @State() checkedObjectsIds: string[] = [];\n @State() checkedPropertiesIds: string[] = [];\n @State() exportAllIsChecked = false;\n @State() exportingIsInProcess = false;\n @State() hasObjects: boolean;\n @State() objectsTreeViewModel: TreeViewModel = [];\n @Watch(\"objectsTreeViewModel\")\n objectsTreeViewModelChanged(newObjectsTreeViewModel: TreeViewModel) {\n this.hasObjects =\n newObjectsTreeViewModel && newObjectsTreeViewModel.length > 0;\n if (!this.hasObjects) {\n this.atLeastOnePropertyItemIsChecked = false;\n this.atLeastOneObjectItemIsChecked = false;\n }\n }\n\n /**\n * Callback invoked when the user wants to include KB properties.\n */\n @Prop() readonly addKBPropertiesCallback!: KBPropertiesCallback;\n\n /**\n * Callback invoked when the user wants to add objects.\n */\n @Prop() readonly addObjectsCallback!: AddObjectsCallback;\n\n /**\n *Callback invoked when the user wants to add all the references for the selected objects.\n *@param itemIds:string[] The selected item ids\n *@returns : Returns an object with the items and its references\n */\n @Prop() readonly addReferencesCallback!: AddReferencesCallback;\n\n /**\n * Callback invoked when the user wants to cancel the export process.\n * @returns It returns a boolean indicating whether the process could be canceled or not.\n */\n @Prop() readonly cancelCallback!: CancelCallback;\n\n /**\n *Callback invoked when the user wants to initiate the export process.\n *@param fileName:string\n *@param itemIds:string[] The selected item ids\n *@returns : It returns a boolean indicating whether the process was successful\n */\n @Prop() readonly exportCallback!: ExportCallback;\n\n /**\n * Callback invoked when the user wants to access the export options.\n */\n @Prop() readonly exportFileDirectoryCallback!: ExportFileDirectoryCallback;\n\n /**\n * It allows defining the default Export File Name\n */\n @Prop() readonly fileName: string;\n\n /**\n * Array with the possible types of KB properties\n */\n @Prop() readonly kbPropertiesTypes: KBPropertyType[];\n\n /**\n * If true, it will display a loader when needed.\n */\n @Prop() readonly loader = false;\n\n /**\n * Array of possible object types\n */\n @Prop() readonly objectTypes: ObjectType[];\n @Watch(\"objectTypes\")\n objectTypesChanged(newObjectTypesArray: ObjectType[]) {\n this.#objectsTypesArrayToMap(newObjectTypesArray);\n }\n\n /**\n * Callback invoked when the user wants to access the export options.\n */\n @Prop() readonly optionsCallback: OptionsCallback;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.#evaluateObjects();\n this.#objectsTypesArrayToMap(this.objectTypes);\n }\n\n #addKBPropertiesCallbackHandler = async (\n e: ChCheckboxCustomEvent<any> | InputEvent\n ) => {\n this.addKbPropertiesIsChecked =\n e.detail.target.value === CHECKBOX_CHECKED_VALUE;\n if (this.addKbPropertiesIsChecked) {\n this.#kBPropertiesData = await this.addKBPropertiesCallback();\n if (this.#kBPropertiesData.length) {\n this.objectsTreeViewModel = convertKbPropertiesDataToTreeItemData(\n this.#kBPropertiesData,\n this.kbPropertiesTypes,\n this.objectsTreeViewModel\n );\n }\n } else {\n // previous properties (if any) should be removed\n this.objectsTreeViewModel = clearKbPropertiesFromTree(\n this.objectsTreeViewModel\n );\n }\n };\n\n #addObjectsCallbackHandler = async () => {\n this.#exportAllEl.value = undefined;\n this.exportAllIsChecked = false;\n const addedObjects = await this.addObjectsCallback();\n this.#updateObjects(addedObjects);\n };\n\n #addReferencesCallbackHandler = async () => {\n const objects: ObjectData[] = await this.addReferencesCallback(\n this.checkedObjectsIds\n );\n this.#updateObjects(objects);\n };\n\n #cancelCallbackHandler = async () => {\n const cancelled = await this.cancelCallback();\n if (cancelled) {\n this.exportingIsInProcess = false;\n }\n };\n\n #clearButtonHandler = () => {\n this.objectsTreeViewModel = [];\n this.#objectsSet.clear();\n this.#addKbDescriptionEl.value = undefined;\n this.#exportAllEl.value = undefined;\n };\n\n #evaluateContentToDisplay = () => {\n // Nothing to display on the tree-view\n if (!this.hasObjects && !this.exportAllIsChecked) {\n return (\n <gx-ide-empty-state\n isAnimated={this.#animateEmptyState}\n stateTitle={this.#componentLocale.main.noObjectsToDisplay}\n key=\"no-objects-empty-state\"\n >\n <button\n class=\"button-primary\"\n onClick={this.#addObjectsCallbackHandler}\n >\n {this.#componentLocale.main.beginByADdingSomeObjects}\n </button>\n </gx-ide-empty-state>\n );\n } else {\n this.#animateEmptyState = true; // improve performance if is first render\n }\n\n if (this.exportAllIsChecked) {\n return (\n <gx-ide-empty-state\n isAnimated={this.#animateEmptyState}\n stateIconSrc={TREE_VIEW_ICON}\n stateTitle={this.#componentLocale.main.exportAllMessage}\n key=\"exporting-all-empty-state\"\n ></gx-ide-empty-state>\n );\n } else {\n this.#animateEmptyState = true; // improve performance if is first render\n }\n\n return (\n <ch-tree-view-render\n class=\"tree-view\"\n checkbox\n checked\n dragDisabled\n dropDisabled\n filter={this.#evaluateTreeViewFilters()}\n filterType={\n this.addKbPropertiesIsChecked && !this.exportAllIsChecked\n ? \"none\"\n : \"metadata\"\n }\n model={this.objectsTreeViewModel}\n showLines=\"last\"\n toggleCheckboxes\n sortItemsCallback={this.#sortTreeItems}\n onCheckedItemsChange={this.#objectsTreeCheckedItemsChangedHandler}\n ></ch-tree-view-render>\n );\n };\n\n #evaluateObjects = () => {\n this.hasObjects =\n this.objectsTreeViewModel && this.objectsTreeViewModel.length > 0;\n };\n\n #evaluateTreeViewFilters = (): string => {\n if (this.addKbPropertiesIsChecked && this.exportAllIsChecked) {\n return KB_PROPERTY; // only show properties\n }\n if (!this.addKbPropertiesIsChecked && !this.exportAllIsChecked) {\n return KB_OBJECT; // only show objects\n }\n return \"none\";\n };\n\n #exportAllChangedHandler = (\n event: ChCheckboxCustomEvent<any> | InputEvent\n ) => {\n this.exportAllIsChecked = event.detail;\n };\n\n #exportCallbackHandler = async () => {\n this.exportingIsInProcess = true;\n const fileName: string = this.#fileNameEl.value;\n const checkedKbPropertiesIds = this.addKbPropertiesIsChecked\n ? this.checkedPropertiesIds\n : [];\n const checkedObjectIds = this.exportAllIsChecked\n ? undefined\n : this.checkedObjectsIds;\n this.exportCallback(\n fileName,\n checkedKbPropertiesIds,\n checkedObjectIds\n ).then(() => {\n this.exportingIsInProcess = false;\n });\n // returns Promise<boolean> but no procedure was detailed on the spec.\n };\n\n #objectsTypesArrayToMap(objectTypesArray: ObjectType[]) {\n objectTypesArray.forEach(objectType => {\n this.#objectTypesMap.set(objectType.id, objectType);\n });\n }\n\n #objectsTreeCheckedItemsChangedHandler = (\n event: CustomEvent<Map<string, TreeViewItemModelExtended>>\n ) => {\n // filter 'checked objects' and 'checked properties' ids\n const checkedObjectsIds: string[] = [];\n const checkedPropertiesIds: string[] = [];\n const allItemsWithCheckbox = [...event.detail.values()];\n allItemsWithCheckbox.forEach(node => {\n if (node.item.checked && node.item.metadata === KB_OBJECT) {\n checkedObjectsIds.push(node.item.id);\n } else if (node.item.checked && node.item.metadata === KB_PROPERTY) {\n checkedPropertiesIds.push(node.item.id);\n }\n });\n this.checkedObjectsIds = checkedObjectsIds;\n this.checkedPropertiesIds = checkedPropertiesIds;\n\n this.atLeastOnePropertyItemIsChecked = this.checkedPropertiesIds.length > 0;\n this.atLeastOneObjectItemIsChecked = this.checkedObjectsIds.length > 0;\n };\n\n #sortTreeItems = (subModel: TreeViewModel) => {\n // \"property\" items should be added on top.\n // else sort alphabetically by \"caption\" value.\n return subModel.sort((a, b) => {\n if (a.metadata === \"property\" && b.metadata !== \"property\") {\n return -1;\n }\n if (b.metadata === \"property\" && a.metadata !== \"property\") {\n return 1;\n }\n\n return a.caption.localeCompare(b.caption);\n });\n };\n\n #renderFooter = (): HTMLElement => {\n const referencesButtonEnabled = this.atLeastOneObjectItemIsChecked;\n const clearButtonEnabled = this.objectsTreeViewModel.length > 0;\n return (\n <footer class=\"footer control-footer-with-border control-footer-space-between space-body spacing-body-inline spacing-body-block-end\">\n <button\n class=\"button-tertiary clear-btn\"\n disabled={!clearButtonEnabled}\n part=\"clear-button\"\n onClick={clearButtonEnabled && this.#clearButtonHandler}\n >\n {this.#componentLocale.footer.clearButton}\n </button>\n\n <div class=\"buttons-spacer\">\n <button\n class=\"button-secondary button-icon-and-text\"\n part=\"references-button\"\n disabled={!referencesButtonEnabled}\n onClick={\n referencesButtonEnabled && this.#addReferencesCallbackHandler\n }\n >\n <ch-image\n class=\"icon-sm\"\n disabled={!referencesButtonEnabled}\n src={GENERAL_REFERENCES_ICON}\n ></ch-image>\n {this.#componentLocale.footer.addReferencesButton}\n </button>\n\n <button\n // Add button\n class=\"button-primary button-icon-and-text\"\n disabled={this.exportAllIsChecked}\n part=\"add-button\"\n onClick={\n !this.exportAllIsChecked && this.#addObjectsCallbackHandler\n }\n >\n <ch-image\n class=\"icon-sm\"\n disabled={this.exportAllIsChecked}\n src={MENUS_NEW_OBJECT_ICON}\n ></ch-image>\n {this.#componentLocale.footer.addButton}\n </button>\n </div>\n </footer>\n );\n };\n\n #updateObjects = (objectsDataArray: ObjectData[]) => {\n if (objectsDataArray.length) {\n const newObjectsTreeModel = updateObjectsTreeModel(\n objectsDataArray,\n this.#objectTypesMap,\n this.#objectsSet,\n this.objectsTreeViewModel\n );\n this.objectsTreeViewModel = newObjectsTreeModel;\n }\n };\n\n render(): void {\n const exportButtonEnabled =\n this.atLeastOnePropertyItemIsChecked ||\n this.atLeastOneObjectItemIsChecked ||\n this.exportAllIsChecked;\n\n const cancelButtonEnabled = this.exportingIsInProcess;\n\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <section>\n <header class=\"header control-header-with-border space-body spacing-body-inline spacing-body-block-start\">\n <div class=\"field-group header__field-group\">\n <div class=\"field field-inline export-file-name\">\n <label class=\"label\" htmlFor=\"xpz-file\">\n {this.#componentLocale.header.exportFileName}\n </label>\n <ch-edit\n autoFocus\n id=\"xpz-file\"\n class=\"form-input\"\n part=\"xpz-file\"\n value={this.fileName}\n startImgSrc={FILE_ICON}\n ref={(el: HTMLChEditElement) =>\n (this.#fileNameEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n\n <div class=\"header__buttons-container buttons-spacer\">\n <button\n id=\"export-kb-btn\"\n class=\"button-primary export-btn\"\n part=\"export-btn\"\n disabled={!exportButtonEnabled}\n onClick={exportButtonEnabled && this.#exportCallbackHandler}\n >\n {this.#componentLocale.header.exportButton}\n </button>\n <button\n id=\"cancel-kb-export-btn\"\n class=\"button-secondary cancel-btn\"\n part=\"cancel-button\"\n disabled={!cancelButtonEnabled}\n onClick={cancelButtonEnabled && this.#cancelCallbackHandler}\n >\n {this.#componentLocale.header.cancelButton}\n </button>\n\n <button\n aria-label={this.#componentLocale.header.optionsButton}\n title={this.#componentLocale.header.optionsButton}\n class=\"button-tertiary button-icon-only options-btn\"\n part=\"select-kb-btn\"\n onClick={this.optionsCallback}\n >\n <ch-image class=\"icon-md\" src={SETTINGS_ICON}></ch-image>\n </button>\n </div>\n\n <div class=\"header__checkboxes field-group\">\n <ch-checkbox\n class=\"checkbox add-kb-description\"\n part=\"add-kb-description\"\n caption={\n this.#componentLocale.main.addKnowledgeBaseDescription\n }\n checkedValue={CHECKBOX_CHECKED_VALUE}\n onInput={this.#addKBPropertiesCallbackHandler}\n ref={(el: HTMLChCheckboxElement) =>\n (this.#addKbDescriptionEl = el as HTMLChCheckboxElement)\n }\n ></ch-checkbox>\n\n <ch-checkbox\n class=\"checkbox export-all\"\n part=\"export-all-checkbox\"\n checkedValue={CHECKBOX_CHECKED_VALUE}\n caption={this.#componentLocale.main.exportAll}\n onInput={this.#exportAllChangedHandler}\n ref={(el: HTMLChCheckboxElement) =>\n (this.#exportAllEl = el as HTMLChCheckboxElement)\n }\n ></ch-checkbox>\n </div>\n </div>\n </header>\n\n <div class=\"main spacing-body-inline\">\n {this.#evaluateContentToDisplay()}\n {this.loader && this.exportingIsInProcess && (\n <gx-ide-loader\n cancelLabel={this.#componentLocale.loader.cancelLabel}\n loaderTitle={this.#componentLocale.loader.title}\n cancelCallback={this.#cancelCallbackHandler}\n show\n class=\"loader\"\n ></gx-ide-loader>\n )}\n </div>\n\n {this.#renderFooter()}\n </section>\n </Host>\n );\n }\n}\n"],"mappings":"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"}