@genexus/genexus-ide-ui 1.1.24 → 1.1.25

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 (31) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-ww-files.cjs.entry.js +235 -211
  3. package/dist/cjs/gx-ide-ww-files.cjs.entry.js.map +1 -1
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/collection/components/ww-files/gx-ide-assets/ww-files/langs/ww-files.lang.en.json +10 -1
  6. package/dist/collection/components/ww-files/gx-ide-assets/ww-files/langs/ww-files.lang.ja.json +9 -0
  7. package/dist/collection/components/ww-files/gx-ide-assets/ww-files/langs/ww-files.lang.zh.json +9 -0
  8. package/dist/collection/components/ww-files/helpers.js +12 -0
  9. package/dist/collection/components/ww-files/helpers.js.map +1 -1
  10. package/dist/collection/components/ww-files/ww-files.css +49 -63
  11. package/dist/collection/components/ww-files/ww-files.js +270 -421
  12. package/dist/collection/components/ww-files/ww-files.js.map +1 -1
  13. package/dist/components/gx-ide-ww-files.js +258 -233
  14. package/dist/components/gx-ide-ww-files.js.map +1 -1
  15. package/dist/esm/genexus-ide-ui.js +1 -1
  16. package/dist/esm/gx-ide-ww-files.entry.js +236 -212
  17. package/dist/esm/gx-ide-ww-files.entry.js.map +1 -1
  18. package/dist/esm/loader.js +1 -1
  19. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  20. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  21. package/dist/genexus-ide-ui/gx-ide-assets/ww-files/langs/ww-files.lang.en.json +10 -1
  22. package/dist/genexus-ide-ui/gx-ide-assets/ww-files/langs/ww-files.lang.ja.json +9 -0
  23. package/dist/genexus-ide-ui/gx-ide-assets/ww-files/langs/ww-files.lang.zh.json +9 -0
  24. package/dist/genexus-ide-ui/p-163bfc6a.entry.js +611 -0
  25. package/dist/genexus-ide-ui/p-163bfc6a.entry.js.map +1 -0
  26. package/dist/types/components/ww-files/helpers.d.ts +1 -0
  27. package/dist/types/components/ww-files/ww-files.d.ts +36 -76
  28. package/dist/types/components.d.ts +10 -89
  29. package/package.json +1 -1
  30. package/dist/genexus-ide-ui/p-385c9544.entry.js +0 -564
  31. package/dist/genexus-ide-ui/p-385c9544.entry.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"names":["mapOptionsToComboBoxItemModel","options","map","option","value","id","caption","label","startImgSrc","_a","iconName","wwFilesCss","CSS_BUNDLES","FILTER_AFTER_DATE_TIME","FILTER_AFTER_LAST_BUILD","FILTER_AFTER_IMPORT","GxIdeWWFiles","_GxIdeWWFiles_componentLocale","set","this","_GxIdeWWFiles_ACCORDION_FILTER_ID","_GxIdeWWFiles_ACCORDION_MODEL","_GxIdeWWFiles_chGridEl","_GxIdeWWFiles_filterAfterTypeEl","_GxIdeWWFiles_filterAllDescendantsEl","_GxIdeWWFiles_filterCategoryEl","_GxIdeWWFiles_filterModifiedDateEl","_GxIdeWWFiles_filterModuleEl","_GxIdeWWFiles_filterModifiedEl","_GxIdeWWFiles_filterNameEl","_GxIdeWWFiles_filterSearchContentsEl","_GxIdeWWFiles_filterUserEl","_GxIdeWWFiles_renderHeader","h","class","htmlFor","__classPrivateFieldGet","filter","name","ref","el","__classPrivateFieldSet","filterFilesInputValue","onInput","_GxIdeWWFiles_handleFilterInput","part","moduleFolder","labelPosition","defaultModule","defaultValue","selectEntityCallback","selectModuleCallback","model","onExpandedChange","_GxIdeWWFiles_expandedHandler","slot","showSearchContents","content","_GxIdeWWFiles_handleSearchContentsInput","category","defaultCategory","disabled","categories","categoriesComboBoxModel","_GxIdeWWFiles_getObjects","allDescendants","checkedValue","modified","_GxIdeWWFiles_filterModifiedCallbackHandle","hide","filterModified","after","afterCurrentValue","filterAfterOptions","_GxIdeWWFiles_filterAfterTypeCallbackHandle","user","dateTime","type","_GxIdeWWFiles_renderObjects","rowSelectionMode","columnName","columnNameHidden","settingable","size","config","tabularGrid","colSize","maxContent","tableHead","common","showType","module","showDescription","description","commonDouble","showModifiedDate","modifiedDate","showLastUser","lastUser","showImportDate","importDate","showLastBuildDate","lastBuildDate","filteredFiles","length","obj","rowid","src","icon","_GxIdeWWFiles_hiChar","call","toLowerCase","_GxIdeWWFiles_formatDate","text","search","parts","split","RegExp","i","key","date","toISOString","slice","filters","searchContents","parent","modifiedAfter","modifiedBy","Date","loadCallback","then","items","objects","_GxIdeWWFiles_filterFiles","selectedObjectsIds","_GxIdeWWFiles_deselectAll","filterValue","_b","file","nameMatch","includes","typeMatch","moduleMatch","descriptionMatch","modifiedDateMatch","toString","lastUserMatch","_c","importDateMatch","_d","contentsMatch","_e","event","detail","_GxIdeWWFiles_deleteSelectionCallbackHandle","deleteSelectionCallback","selectAllRows","e","advancedFilterAccordionExpanded","expanded","filterMore","enabledModifiedControls","newValue","_GxIdeWWFiles_listenChanges","addEventListener","ev","rowsId","selectionChangeCallback","_GxIdeWWFiles_openSelectionCallbackHandle","preventDefault","stopPropagation","contextMenuCallback","selection","selectedRowsId","clientX","clientY","_GxIdeWWFiles_newFileCallbackHandle","newFileCallback","openSelectionCallback","_GxIdeWWFiles_selectAll","categoriesChanged","newCategories","componentWillLoad","Locale","getComponentStrings","accordionCaption","componentDidLoadEvent","emit","componentDidLoad","keyDownHandler","eventInfo","document","activeElement","validate","isValid","reload","undefined","render","Host","objCount","matching","onClick","footer","btnSelectAll","btnNew"],"sources":["src/components/ww-files/helpers.tsx","src/components/ww-files/ww-files.scss?tag=gx-ide-ww-files&encapsulation=shadow","src/components/ww-files/ww-files.tsx"],"sourcesContent":["import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { GxOption } from \"../..\";\n\nexport const mapOptionsToComboBoxItemModel = (\n options: GxOption[]\n): ComboBoxModel => {\n return options.map(option => {\n return {\n value: option.id,\n caption: option.label,\n startImgSrc: option.iconName ?? \"\"\n };\n });\n};\n","@import \"../../global/gx-ide-mixins.scss\";\n@import \"../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\";\n\n:host {\n container-type: inline-size;\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.hide {\n display: none !important;\n}\n\n.section {\n display: contents;\n}\n\n// - - - - - - - - - - - -\n// Header\n// - - - - - - - - - - - -\n\n.header {\n grid-template-areas:\n \"name module-folder\"\n \"advanced-filter-accordion advanced-filter-accordion\";\n grid-template-columns: 1fr 1fr;\n grid-auto-rows: max-content max-content;\n}\n\n.name {\n grid-area: name;\n}\n\n.module-folder {\n grid-area: module-folder;\n}\n\n.advanced-filter-accordion {\n grid-area: advanced-filter-accordion;\n}\n\n// - - - - - - - - - - - -\n// Main\n// - - - - - - - - - - - -\n\n.main {\n display: grid;\n grid-template-columns: 1fr auto;\n gap: var(--mer-spacing--md);\n overflow: auto;\n padding-block-start: var(--mer-spacing--md);\n}\n\n.main__grid {\n display: grid;\n grid-template-rows: max-content 1fr;\n gap: var(--mer-spacing--md);\n overflow: auto;\n}\n\n.main__filter {\n display: grid;\n grid-auto-rows: max-content;\n gap: var(--mer-spacing--sm);\n overflow: auto;\n}\n\n// Search Content\n.search-content {\n inline-size: 100%;\n}\n\n// Category and Checkboxes Row\n.filter-row {\n display: grid;\n grid-template-columns: 1fr 2fr;\n gap: var(--mer-spacing--md);\n}\n\n.category-column {\n grid-column: 1;\n}\n\n.checkboxes-column {\n grid-column: 2;\n display: flex;\n flex-direction: row;\n gap: var(--mer-spacing--md);\n align-items: center;\n min-block-size: 100%;\n justify-content: flex-start;\n padding-block-start: 1.75rem;\n}\n\n// Modified Inputs\n.modified-inputs {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: var(--mer-spacing--md);\n margin-block-start: var(--mer-spacing--sm);\n\n .field {\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--sm);\n\n &.hide {\n display: none;\n }\n\n .input,\n .combo-box {\n width: 100%;\n }\n }\n}\n\n// - - - - - - - - - - - -\n// Grid\n// - - - - - - - - - - - -\n\n.tabular-grid-ww-files {\n overflow: auto;\n inline-size: 100%;\n border-inline-end: var(--section-common-border);\n}\n\n.main__files-container {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: var(--mer-spacing--xs);\n position: relative;\n z-index: 1;\n}\n\n@include hiChar;\n\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".tabular-grid-ww-files\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-apply-ellipsis: true,\n $tabular-grid-affected-columns-nth-list: (\n 4\n )\n);\n\n// - - - - - - - - - - - -\n// Responsive\n// - - - - - - - - - - - -\n\n@container (max-width: 992px) {\n .main__files-container {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n","import {\n Component,\n Host,\n h,\n Prop,\n Element,\n Event,\n EventEmitter,\n State,\n Method,\n Listen,\n Watch\n} from \"@stencil/core\";\n\nimport { ChGridRowContextMenuEvent } from \"@genexus/chameleon-controls-library\";\n\nimport { MercuryBundles } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\nimport { GxOption } from \"../../common/types\";\nimport { EntityData, ContextMenuInfo } from \"../../common/types\";\nimport { config } from \"../../common/config\";\nimport { mapOptionsToComboBoxItemModel } from \"./helpers\";\nimport {\n AccordionModel,\n ComboBoxModel\n} from \"@genexus/chameleon-controls-library\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/checkbox\",\n \"components/combo-box\",\n \"components/accordion\",\n \"components/edit\",\n \"components/tabular-grid\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\"\n];\n\nconst FILTER_AFTER_DATE_TIME = \"afterDateTime\";\nconst FILTER_AFTER_LAST_BUILD = \"afterLastBuild\";\nconst FILTER_AFTER_IMPORT = \"afterImport\";\n\n@Component({\n tag: \"gx-ide-ww-files\",\n styleUrl: \"ww-files.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/ww-files\"]\n})\nexport class GxIdeWWFiles {\n #componentLocale: any;\n #ACCORDION_FILTER_ID = \"advanced-filter\";\n #ACCORDION_MODEL: AccordionModel = [];\n\n @Element() el: HTMLGxIdeWwFilesElement;\n\n #chGridEl!: HTMLChTabularGridElement;\n #filterAfterTypeEl!: HTMLChComboBoxRenderElement;\n #filterAllDescendantsEl!: HTMLChCheckboxElement;\n #filterCategoryEl!: HTMLChComboBoxRenderElement;\n #filterModifiedDateEl!: HTMLChEditElement;\n #filterModuleEl!: HTMLGxIdeEntitySelectorElement;\n #filterModifiedEl!: HTMLChCheckboxElement;\n #filterNameEl!: HTMLChEditElement;\n #filterSearchContentsEl!: HTMLChEditElement;\n #filterUserEl!: HTMLChEditElement;\n\n // representations of GxOption[] as ComboBoxModel\n @State() categoriesComboBoxModel: ComboBoxModel = [];\n\n /**\n * The current value of the \"After\" combo box options.\n */\n @State() afterCurrentValue: string = FILTER_AFTER_DATE_TIME;\n\n /**\n * The options for the \"After\" combo-box\n */\n @State() filterAfterOptions: ComboBoxModel;\n\n /**\n * When true, modified controls will be enabled, otherwise disabled.\n */\n @State() enabledModifiedControls: boolean = false;\n\n /**\n * For show or hide the filters relative to modifiers\n */\n @State() filterModified = false;\n\n /**\n * For show or hide advanced filters\n */\n @State() filterMore = false;\n\n /**\n * The files rendered in the table\n */\n @State() objects: ObjectData[] = [];\n\n /**\n * Files filter input value\n */\n @State() filterFilesInputValue = \"\";\n\n /**\n * Files rendered in the table after filtering\n */\n @State() filteredFiles: ObjectData[] = [];\n\n /**\n * The selected files in the table of files\n */\n @State() selectedObjectsIds: string[] = [];\n\n /**\n * Controls the expanded state of the advanced filter accordion\n */\n @State() advancedFilterAccordionExpanded: boolean = false;\n\n /**\n * The categories render in the filter category selector\n */\n @Prop() readonly categories!: GxOption[];\n @Watch(\"categories\")\n categoriesChanged(newCategories: GxOption[]) {\n this.categoriesComboBoxModel = mapOptionsToComboBoxItemModel(newCategories);\n }\n\n /**\n * The default 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 modules/folders render in the module/folder selector\n */\n @Prop() readonly filterModules!: GxOption[];\n\n /**\n * The types render in the filter type selector\n */\n @Prop() readonly types!: GxOption[];\n\n /**\n * This is a function provided by the developer for show the context menu of the selected files.\n */\n @Prop() readonly contextMenuCallback!: ContextMenuCallback;\n\n /**\n * This is a function provided by the developer for delete the selected files.\n */\n @Prop() readonly deleteSelectionCallback!: DeleteSelectionCallback;\n\n /**\n * This is a function provided by the developer that return a list of files to populate the table of files.\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n *\n */\n @Prop() readonly newFileCallback!: NewFileCallback;\n\n /**\n * This is a function provided by the developer to expand the data of files that is double-clicked or entered.\n */\n @Prop() readonly openSelectionCallback!: OpenSelectionCallback;\n\n /**\n * Callback invoked when the action is executed on the Module/Folder filter (button '...'). 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 * This is a function provided by the developer for expanded the data of files that is double-clicked or entered.\n */\n @Prop() readonly selectionChangeCallback!: SelectionChangeCallback;\n\n /**\n * This event is emitted once just after the component is fully loaded and the first render() occurs.\n */\n @Event() componentDidLoadEvent: EventEmitter<boolean>;\n\n /**\n * Controls whether to show the Search contents field in the advanced filter section\n */\n @Prop() showSearchContents = false;\n\n /**\n * Controls whether to show the description column in the grid\n */\n @Prop() showDescription = false;\n\n /**\n * Controls whether to show the modified date column in the grid\n */\n @Prop() showModifiedDate = false;\n\n /**\n * Controls whether to show the last user column in the grid\n */\n @Prop() showLastUser = false;\n\n /**\n * Controls whether to show the import date column in the grid\n */\n @Prop() showImportDate = false;\n\n /**\n * Controls whether to show the type column in the grid\n */\n @Prop() showType = false;\n\n /**\n * Controls whether to show the last build date column in the grid\n */\n @Prop() showLastBuildDate = false;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n // initialize combo-box models\n this.categoriesChanged(this.categories);\n\n // initialize \"After\" combo-box options\n this.filterAfterOptions = [\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_LAST_BUILD],\n value: FILTER_AFTER_LAST_BUILD\n },\n {\n caption: this.#componentLocale.filter[FILTER_AFTER_IMPORT],\n value: FILTER_AFTER_IMPORT\n }\n ];\n this.afterCurrentValue = FILTER_AFTER_DATE_TIME;\n\n // initialize accordion model with proper configuration\n this.#ACCORDION_MODEL = [\n {\n id: this.#ACCORDION_FILTER_ID,\n caption: this.#componentLocale.filter.accordionCaption,\n expanded: this.advancedFilterAccordionExpanded\n }\n ];\n\n // initialize filtered files\n this.filteredFiles = this.objects;\n\n this.componentDidLoadEvent.emit(true);\n }\n\n componentDidLoad() {\n this.#listenChanges();\n this.#getObjects();\n }\n\n @Listen(\"keydown\", { passive: true })\n keyDownHandler(eventInfo: KeyboardEvent) {\n if (document.activeElement === this.el) {\n switch (eventInfo.key) {\n case \"Enter\":\n eventInfo.preventDefault();\n this.#openSelectionCallbackHandle();\n break;\n case \"Delete\":\n eventInfo.preventDefault();\n this.#deleteSelectionCallbackHandle();\n break;\n case \"Escape\":\n eventInfo.preventDefault();\n this.#deselectAll();\n break;\n }\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 /**\n * This method reload the view, refreshing the filters and the table of files.\n */\n @Method()\n async reload(): Promise<void> {\n this.filterFilesInputValue = \"\";\n this.#filterUserEl.value = null;\n this.#filterAfterTypeEl.value = null;\n this.afterCurrentValue = null;\n this.#filterModifiedEl.value = undefined;\n this.#filterAllDescendantsEl.value = undefined;\n this.#filterModuleEl.value = this.defaultModule;\n this.#filterCategoryEl.value = null;\n this.#filterSearchContentsEl.value = null;\n this.#filterNameEl.value = null;\n this.filterMore = false;\n this.#getObjects();\n }\n\n #renderHeader = (): Element[] => {\n return [\n <div class=\"field field-block name\">\n <label class=\"label\" htmlFor=\"filter-files\">\n {this.#componentLocale.filter.name}\n </label>\n <ch-edit\n id=\"filter-files\"\n class=\"input\"\n ref={(el: HTMLChEditElement) => (this.#filterNameEl = el)}\n value={this.filterFilesInputValue}\n onInput={this.#handleFilterInput}\n part=\"filter-files\"\n ></ch-edit>\n </div>,\n\n <div class=\"field field-block module-folder\">\n <label class=\"label\" htmlFor=\"module-folder\">\n {this.#componentLocale.filter.moduleFolder}\n </label>\n\n <gx-ide-entity-selector\n part=\"filter-module-folder\"\n id=\"module/folder\"\n labelPosition=\"none\"\n value={this.defaultModule}\n defaultValue={this.defaultModule}\n selectEntityCallback={this.selectModuleCallback}\n ref={(el: HTMLGxIdeEntitySelectorElement) =>\n (this.#filterModuleEl = el as HTMLGxIdeEntitySelectorElement)\n }\n ></gx-ide-entity-selector>\n </div>,\n\n <ch-accordion-render\n class=\"accordion-outlined advanced-filter-accordion\"\n model={this.#ACCORDION_MODEL}\n onExpandedChange={this.#expandedHandler}\n >\n <div slot={this.#ACCORDION_FILTER_ID} class=\"spacing-body\">\n <div class=\"main__filter\">\n {/* Primera fila - Search Content */}\n {this.showSearchContents && (\n <div class=\"search-content\">\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"filter-content\">\n {this.#componentLocale.filter.content}\n </label>\n <ch-edit\n id=\"filter-content\"\n class=\"input\"\n ref={(el: HTMLChEditElement) =>\n (this.#filterSearchContentsEl = el as HTMLChEditElement)\n }\n onInput={this.#handleSearchContentsInput}\n part=\"filter-content\"\n ></ch-edit>\n </div>\n </div>\n )}\n\n {/* Segunda fila - Category y Checkboxes */}\n <div class=\"filter-row\">\n <div class=\"category-column\">\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"filter-category\">\n {this.#componentLocale.filter.category}\n </label>\n <ch-combo-box-render\n id=\"filter-category\"\n class=\"combo-box\"\n value={this.defaultCategory}\n disabled={!this.categories}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#filterCategoryEl =\n el as HTMLChComboBoxRenderElement)\n }\n model={this.categoriesComboBoxModel}\n part=\"filter-category\"\n onInput={this.#getObjects}\n ></ch-combo-box-render>\n </div>\n </div>\n\n <div class=\"checkboxes-column\">\n <ch-checkbox\n class=\"checkbox\"\n caption={this.#componentLocale.filter.allDescendants}\n checkedValue=\"filterAllDescendants\"\n ref={(el: HTMLChCheckboxElement) =>\n (this.#filterAllDescendantsEl = el as HTMLChCheckboxElement)\n }\n onInput={this.#getObjects}\n part=\"filter-all-descendants\"\n ></ch-checkbox>\n\n <ch-checkbox\n class=\"checkbox align-center\"\n caption={this.#componentLocale.filter.modified}\n checkedValue=\"filterModified\"\n ref={(el: HTMLChCheckboxElement) =>\n (this.#filterModifiedEl = el as HTMLChCheckboxElement)\n }\n onInput={this.#filterModifiedCallbackHandle}\n part=\"filter-modified\"\n ></ch-checkbox>\n </div>\n\n <div class=\"empty-column\"></div>\n </div>\n\n {/* Tercera fila - Modified inputs */}\n <div\n class={{ \"modified-inputs\": true, \"hide\": !this.filterModified }}\n >\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"filter-after-type\">\n {this.#componentLocale.filter.after}\n </label>\n <ch-combo-box-render\n id=\"filter-after-type\"\n class=\"combo-box\"\n value={this.afterCurrentValue}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#filterAfterTypeEl =\n el as HTMLChComboBoxRenderElement)\n }\n model={this.filterAfterOptions}\n onInput={this.#filterAfterTypeCallbackHandle}\n part=\"filter-after-type\"\n ></ch-combo-box-render>\n </div>\n\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"filter-user\">\n {this.#componentLocale.filter.user}\n </label>\n <ch-edit\n id=\"filter-user\"\n class=\"input\"\n ref={(el: HTMLChEditElement) =>\n (this.#filterUserEl = el as HTMLChEditElement)\n }\n onInput={this.#getObjects}\n part=\"filter-user\"\n ></ch-edit>\n </div>\n\n <div\n class={{\n \"field field-block\": true,\n \"hide\": this.afterCurrentValue !== FILTER_AFTER_DATE_TIME\n }}\n >\n <label class=\"label\" htmlFor=\"filter-modified-date\">\n {this.#componentLocale.filter.dateTime}\n </label>\n <ch-edit\n id=\"filter-modified-date\"\n type=\"date\"\n class=\"input\"\n ref={(el: HTMLChEditElement) =>\n (this.#filterModifiedDateEl = el as HTMLChEditElement)\n }\n onInput={this.#getObjects}\n part=\"filter-modified-date\"\n ></ch-edit>\n </div>\n </div>\n </div>\n </div>\n </ch-accordion-render>\n ];\n };\n\n #renderObjects = (): Element => {\n return (\n <div class=\"field-group main__grid\">\n <ch-tabular-grid\n ref={(el: HTMLChTabularGridElement) => (this.#chGridEl = el)}\n class=\"tabular-grid tabular-grid-ww-files\"\n rowSelectionMode=\"multiple\"\n part=\"ch-grid-files\"\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n columnName=\"\"\n columnNameHidden={false}\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.name}\n columnNameHidden={false}\n settingable={false}\n size={config.tabularGrid.colSize.common}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n\n {this.showType && (\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.type}\n columnNameHidden={false}\n settingable={false}\n size={config.tabularGrid.colSize.common}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n )}\n\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.module}\n columnNameHidden={false}\n settingable={false}\n size={config.tabularGrid.colSize.common}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n\n {this.showDescription && (\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.description}\n columnNameHidden={false}\n settingable={false}\n size={config.tabularGrid.colSize.commonDouble}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n )}\n\n {this.showModifiedDate && (\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.modifiedDate}\n columnNameHidden={false}\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n )}\n\n {this.showLastUser && (\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.lastUser}\n columnNameHidden={false}\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n )}\n\n {this.showImportDate && (\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.importDate}\n columnNameHidden={false}\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n )}\n\n {this.showLastBuildDate && (\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.lastBuildDate}\n columnNameHidden={false}\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n )}\n </ch-tabular-grid-columnset>\n\n {this.filteredFiles.length ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.filteredFiles.map((obj: ObjectData) => (\n <ch-tabular-grid-row rowid={obj.id} class=\"tabular-grid-row\">\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n <ch-image src={obj.icon}></ch-image>\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.#hiChar(\n obj.name.toLowerCase(),\n this.filterFilesInputValue\n )}\n </ch-tabular-grid-cell>\n {this.showType && (\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.#hiChar(\n obj.type.toLowerCase(),\n this.filterFilesInputValue\n )}\n </ch-tabular-grid-cell>\n )}\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.#hiChar(\n obj.module.toLowerCase(),\n this.filterFilesInputValue\n )}\n </ch-tabular-grid-cell>\n {this.showDescription && (\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.#hiChar(\n obj.description.toLowerCase(),\n this.filterFilesInputValue\n )}\n </ch-tabular-grid-cell>\n )}\n {this.showModifiedDate && (\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.#hiChar(\n obj.modifiedDate\n ? this.#formatDate(obj.modifiedDate)\n : \"\",\n this.filterFilesInputValue\n )}\n </ch-tabular-grid-cell>\n )}\n {this.showLastUser && (\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.#hiChar(\n obj.lastUser?.toLowerCase() || \"\",\n this.filterFilesInputValue\n )}\n </ch-tabular-grid-cell>\n )}\n {this.showImportDate && (\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.#hiChar(\n obj.importDate ? this.#formatDate(obj.importDate) : \"\",\n this.filterFilesInputValue\n )}\n </ch-tabular-grid-cell>\n )}\n {this.showLastBuildDate && (\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.#hiChar(\n obj.lastBuildDate\n ? this.#formatDate(obj.lastBuildDate)\n : \"\",\n this.filterFilesInputValue\n )}\n </ch-tabular-grid-cell>\n )}\n </ch-tabular-grid-row>\n ))}\n </ch-tabular-grid-rowset>\n ) : null}\n </ch-tabular-grid>\n </div>\n );\n };\n\n #hiChar = (text: string, search: string): Element[] | string => {\n if (!search) return text;\n const parts = text.split(new RegExp(`(${search})`, \"gi\"));\n return parts.map((part, i) =>\n part.toLowerCase() === search.toLowerCase() ? (\n <span key={i} class=\"highlight\">\n {part}\n </span>\n ) : (\n part\n )\n );\n };\n\n #formatDate = (date: Date): string => {\n return date.toISOString().slice(0, 10);\n };\n\n #getObjects = () => {\n const filters: ObjectFiltersData = {\n name: this.#filterNameEl.value,\n searchContents: this.showSearchContents\n ? this.#filterSearchContentsEl?.value\n : null,\n category: this.#filterCategoryEl.value,\n parent: this.#filterModuleEl.value ? this.#filterModuleEl.value.id : null,\n allDescendants: !!this.#filterAllDescendantsEl.value,\n modifiedAfter: this.filterModified ? this.afterCurrentValue : null,\n modifiedBy: this.filterModified ? this.#filterUserEl.value : null,\n modifiedDate:\n this.filterModified && this.afterCurrentValue === FILTER_AFTER_DATE_TIME\n ? new Date(this.#filterModifiedDateEl.value)\n : null\n };\n\n this.loadCallback(filters).then((items: ObjectData[]) => {\n this.objects = items;\n this.#filterFiles();\n this.selectedObjectsIds = [];\n this.#deselectAll();\n });\n };\n\n #filterFiles = () => {\n const filterValue = this.filterFilesInputValue.toLowerCase();\n const searchContents = this.showSearchContents\n ? this.#filterSearchContentsEl?.value?.toLowerCase() || \"\"\n : \"\";\n\n this.filteredFiles = this.objects.filter(file => {\n const nameMatch = file.name.toLowerCase().includes(filterValue);\n const typeMatch = file.type.toLowerCase().includes(filterValue);\n const moduleMatch = file.module.toLowerCase().includes(filterValue);\n const descriptionMatch = file.description\n ?.toLowerCase()\n .includes(filterValue);\n const modifiedDateMatch = file.modifiedDate\n ?.toString()\n .includes(filterValue);\n const lastUserMatch = file.lastUser?.toLowerCase().includes(filterValue);\n const importDateMatch = file.importDate?.toString().includes(filterValue);\n const contentsMatch = searchContents\n ? file.description?.toLowerCase().includes(searchContents)\n : true;\n\n return (\n (nameMatch ||\n typeMatch ||\n moduleMatch ||\n descriptionMatch ||\n modifiedDateMatch ||\n lastUserMatch ||\n importDateMatch) &&\n contentsMatch\n );\n });\n };\n\n #handleFilterInput = (event: CustomEvent<any> | InputEvent) => {\n this.filterFilesInputValue = event.detail.toLowerCase();\n this.#filterFiles();\n };\n\n #handleSearchContentsInput = () => {\n this.#filterFiles();\n };\n\n #deleteSelectionCallbackHandle = (): void => {\n this.deleteSelectionCallback(this.selectedObjectsIds);\n };\n #deselectAll = (): void => {\n (this.#chGridEl as any).selectAllRows(false);\n };\n\n #expandedHandler = (e: CustomEvent<{ id: string; expanded: boolean }>) => {\n if (e.detail.id === this.#ACCORDION_FILTER_ID) {\n this.advancedFilterAccordionExpanded = e.detail.expanded;\n this.filterMore = e.detail.expanded;\n }\n };\n #filterModifiedCallbackHandle = () => {\n this.filterModified = !!this.#filterModifiedEl.value;\n this.enabledModifiedControls = this.filterModified;\n if (!this.filterModified) {\n // Reset related fields when unchecking Modified\n this.#filterUserEl.value = null;\n this.#filterAfterTypeEl.value = null;\n this.afterCurrentValue = null;\n this.#filterModifiedDateEl.value = null;\n } else {\n // Restore default values when checking Modified\n this.afterCurrentValue = FILTER_AFTER_DATE_TIME;\n this.#filterAfterTypeEl.value = FILTER_AFTER_DATE_TIME;\n }\n this.#getObjects();\n };\n\n #filterAfterTypeCallbackHandle = () => {\n const newValue = this.#filterAfterTypeEl.value;\n // Validar que el valor sea uno de los permitidos\n if (\n [\n FILTER_AFTER_DATE_TIME,\n FILTER_AFTER_LAST_BUILD,\n FILTER_AFTER_IMPORT\n ].includes(newValue)\n ) {\n this.afterCurrentValue = newValue;\n } else {\n // Si no es un valor válido, establecer el valor por defecto\n this.afterCurrentValue = FILTER_AFTER_DATE_TIME;\n this.#filterAfterTypeEl.value = FILTER_AFTER_DATE_TIME;\n }\n this.#getObjects();\n };\n\n #listenChanges = (): void => {\n /* module/folder */\n this.#filterModuleEl.addEventListener(\"valueChanged\", () => {\n this.#getObjects();\n });\n\n // for grid selection\n this.#chGridEl.addEventListener(\"selectionChanged\", (ev: any): void => {\n this.selectedObjectsIds = ev.detail.rowsId;\n this.selectionChangeCallback(this.selectedObjectsIds);\n });\n\n this.#chGridEl.addEventListener(\"rowDoubleClicked\", (): void => {\n this.#openSelectionCallbackHandle();\n });\n\n this.#chGridEl.addEventListener(\n \"rowContextMenu\",\n (ev: CustomEvent<ChGridRowContextMenuEvent>): void => {\n ev.preventDefault();\n ev.stopPropagation();\n this.contextMenuCallback({\n selection: ev.detail.selectedRowsId,\n clientX: ev.detail.clientX,\n clientY: ev.detail.clientY\n });\n }\n );\n };\n\n #newFileCallbackHandle = (): void => {\n this.newFileCallback();\n };\n\n #openSelectionCallbackHandle = (): void => {\n this.openSelectionCallback(this.selectedObjectsIds);\n };\n\n #selectAll = (): void => {\n (this.#chGridEl as any).selectAllRows();\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <section class=\"section\">\n <header class=\"header control-header-with-border spacing-body-inline spacing-body-block-start field-group\">\n {this.#renderHeader()}\n </header>\n\n <div class=\"main\">{this.#renderObjects()}</div>\n\n <footer class=\"control-footer-with-border control-footer-space-between spacing-body\">\n <p\n // matching objects\n class=\"text-body\"\n part=\"objects-matching\"\n >\n {`${this.filteredFiles.length} ${\n this.#componentLocale.objCount.matching\n }`}\n </p>\n\n <div class=\"buttons-spacer\">\n <button\n // select all button\n id=\"button-select-all\"\n class=\"button-secondary\"\n onClick={this.#selectAll}\n part=\"button button--select-all\"\n >\n {this.#componentLocale.footer.btnSelectAll}\n </button>\n\n <button\n // new file button\n id=\"button-new-file\"\n class=\"button-primary button-icon-and-text\"\n onClick={this.#newFileCallbackHandle}\n part=\"button button--new-file\"\n >\n {this.#componentLocale.footer.btnNew}\n </button>\n </div>\n </footer>\n </section>\n </Host>\n );\n }\n}\n\nexport type SelectionChangeCallback = (ids: string[]) => Promise<void>;\nexport type OpenSelectionCallback = (ids: string[]) => Promise<void>;\nexport type DeleteSelectionCallback = (ids: string[]) => Promise<void>;\nexport type SelectModuleCallback = () => Promise<EntityData | undefined>;\n// export type ContextMenuCallback = (ids: string[]) => Promise<void>;\nexport type ContextMenuCallback = (\n contextMenuInfo: ContextMenuInfo\n) => Promise<void>;\nexport type NewFileCallback = () => Promise<void>;\nexport type LoadCallback = (\n filters: ObjectFiltersData\n) => Promise<ObjectData[]>;\n\nexport interface ObjectFiltersData {\n name?: string;\n searchContents?: string;\n category?: string;\n parent?: string;\n allDescendants?: boolean;\n modifiedAfter?: string;\n modifiedBy?: string;\n modifiedDate?: Date;\n}\nexport interface ObjectData {\n id: string;\n icon: string;\n name: string;\n type: string;\n description: string;\n parent: string;\n module: string;\n modifiedDate?: Date;\n lastUser?: string;\n importDate?: Date;\n lastBuildDate: Date;\n}\n"],"mappings":"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"}