@genexus/genexus-ide-ui 3.2.13 → 3.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
- package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js +24 -34
- package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js +12 -12
- package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-new-environment.cjs.entry.js +26 -3
- package/dist/cjs/gx-ide-new-environment.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-new-kb.cjs.entry.js +77 -44
- package/dist/cjs/gx-ide-new-kb.cjs.entry.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/components/kb-manager-import/helpers.js +2 -9
- package/dist/collection/components/kb-manager-import/helpers.js.map +1 -1
- package/dist/collection/components/kb-manager-import/kb-manager-import.js +10 -3
- package/dist/collection/components/kb-manager-import/kb-manager-import.js.map +1 -1
- package/dist/collection/components/new-environment/gx-ide-assets/new-environment/langs/new-environment.lang.en.json +3 -1
- package/dist/collection/components/new-environment/gx-ide-assets/new-environment/langs/new-environment.lang.ja.json +3 -1
- package/dist/collection/components/new-environment/gx-ide-assets/new-environment/langs/new-environment.lang.zh.json +3 -1
- package/dist/collection/components/new-environment/new-environment.css +29 -0
- package/dist/collection/components/new-environment/new-environment.js +54 -17
- package/dist/collection/components/new-environment/new-environment.js.map +1 -1
- package/dist/collection/components/new-kb/gx-ide-assets/new-kb/langs/new-kb.lang.en.json +9 -5
- package/dist/collection/components/new-kb/gx-ide-assets/new-kb/langs/new-kb.lang.ja.json +7 -3
- package/dist/collection/components/new-kb/gx-ide-assets/new-kb/langs/new-kb.lang.zh.json +9 -5
- package/dist/collection/components/new-kb/new-kb.css +42 -1
- package/dist/collection/components/new-kb/new-kb.js +77 -47
- package/dist/collection/components/new-kb/new-kb.js.map +1 -1
- package/dist/collection/components/team-dev/create-kb-from-server/create-kb-from-server.js +25 -36
- package/dist/collection/components/team-dev/create-kb-from-server/create-kb-from-server.js.map +1 -1
- package/dist/collection/components/team-dev/create-kb-from-server/gx-ide-assets/create-kb-from-server/langs/create-kb-from-server.lang.en.json +0 -2
- package/dist/collection/components/team-dev/create-kb-from-server/gx-ide-assets/create-kb-from-server/langs/create-kb-from-server.lang.ja.json +0 -2
- package/dist/collection/components/team-dev/create-kb-from-server/gx-ide-assets/create-kb-from-server/langs/create-kb-from-server.lang.zh.json +0 -2
- package/dist/components/gx-ide-create-kb-from-server.js +24 -35
- package/dist/components/gx-ide-create-kb-from-server.js.map +1 -1
- package/dist/components/gx-ide-kb-manager-import.js +12 -12
- package/dist/components/gx-ide-kb-manager-import.js.map +1 -1
- package/dist/components/gx-ide-new-environment.js +27 -4
- package/dist/components/gx-ide-new-environment.js.map +1 -1
- package/dist/components/gx-ide-new-kb.js +85 -46
- package/dist/components/gx-ide-new-kb.js.map +1 -1
- package/dist/esm/genexus-ide-ui.js +1 -1
- package/dist/esm/gx-ide-create-kb-from-server.entry.js +24 -34
- package/dist/esm/gx-ide-create-kb-from-server.entry.js.map +1 -1
- package/dist/esm/gx-ide-kb-manager-import.entry.js +12 -12
- package/dist/esm/gx-ide-kb-manager-import.entry.js.map +1 -1
- package/dist/esm/gx-ide-new-environment.entry.js +26 -3
- package/dist/esm/gx-ide-new-environment.entry.js.map +1 -1
- package/dist/esm/gx-ide-new-kb.entry.js +77 -44
- package/dist/esm/gx-ide-new-kb.entry.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
- package/dist/genexus-ide-ui/gx-ide-assets/create-kb-from-server/langs/create-kb-from-server.lang.en.json +0 -2
- package/dist/genexus-ide-ui/gx-ide-assets/create-kb-from-server/langs/create-kb-from-server.lang.ja.json +0 -2
- package/dist/genexus-ide-ui/gx-ide-assets/create-kb-from-server/langs/create-kb-from-server.lang.zh.json +0 -2
- package/dist/genexus-ide-ui/gx-ide-assets/new-environment/langs/new-environment.lang.en.json +3 -1
- package/dist/genexus-ide-ui/gx-ide-assets/new-environment/langs/new-environment.lang.ja.json +3 -1
- package/dist/genexus-ide-ui/gx-ide-assets/new-environment/langs/new-environment.lang.zh.json +3 -1
- package/dist/genexus-ide-ui/gx-ide-assets/new-kb/langs/new-kb.lang.en.json +9 -5
- package/dist/genexus-ide-ui/gx-ide-assets/new-kb/langs/new-kb.lang.ja.json +7 -3
- package/dist/genexus-ide-ui/gx-ide-assets/new-kb/langs/new-kb.lang.zh.json +9 -5
- package/dist/genexus-ide-ui/{p-cf61384e.entry.js → p-2164c3a8.entry.js} +154 -167
- package/dist/genexus-ide-ui/p-2164c3a8.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-7cd24b82.entry.js → p-806c5dcb.entry.js} +58 -47
- package/dist/genexus-ide-ui/p-806c5dcb.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-5727fce7.entry.js → p-8f4af976.entry.js} +222 -184
- package/dist/genexus-ide-ui/p-8f4af976.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-eeae9dd5.entry.js → p-95cf766b.entry.js} +401 -345
- package/dist/genexus-ide-ui/p-95cf766b.entry.js.map +1 -0
- package/dist/types/components/kb-manager-import/helpers.d.ts +1 -1
- package/dist/types/components/new-environment/new-environment.d.ts +8 -3
- package/dist/types/components/new-kb/new-kb.d.ts +5 -1
- package/dist/types/components/team-dev/create-kb-from-server/create-kb-from-server.d.ts +0 -1
- package/dist/types/components.d.ts +8 -0
- package/package.json +1 -1
- package/dist/genexus-ide-ui/p-5727fce7.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-7cd24b82.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-cf61384e.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-eeae9dd5.entry.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["newKbCss","CSS_BUNDLES","WINDOWS_AUTHENTICATION_VALUE","LOCALDB_INSTANCE","MAIN_SECTION_CLASSES","BASIC_SECTION_PARENT_CLASSES","SYSTEM_ICON","getIconPath","category","name","colorType","WARNING_ICON","DATABASE_ICON","SUCCESS_ICON","ERROR_ICON","DATABASE_NAME_PREFIX","BASIC_TAB_SELECTOR","ADVANCED_TAB_SELECTOR","GxIdeNewKb","_GxIdeNewKb_advancedTabHasBeenRendered","set","this","_GxIdeNewKb_componentLocale","_GxIdeNewKb_frontEndsCheckedMap","Map","_GxIdeNewKb_selectedPrototypingEnvironmentId","_GxIdeNewKb_selectedDataSourceId","_GxIdeNewKb_shortcutsSrc","getAssetPath","_GxIdeNewKb_kbSectionsModel","_GxIdeNewKb_authenticationTypeEl","_GxIdeNewKb_collationEl","_GxIdeNewKb_createDataFilesInKBFolderEl","_GxIdeNewKb_databaseNameEl","_GxIdeNewKb_dataSourceEl","_GxIdeNewKb_kbNameEl","_GxIdeNewKb_locationEl","_GxIdeNewKb_locationElRegistered","_GxIdeNewKb_credentialControlsRegistered","_GxIdeNewKb_passwordEl","_GxIdeNewKb_prototypingEnvironmentEl","_GxIdeNewKb_prototypingTargetEl","_GxIdeNewKb_savePasswordEl","_GxIdeNewKb_serverNameEl","_GxIdeNewKb_userInterfaceLanguageEl","_GxIdeNewKb_userNameEl","_GxIdeNewKb_collationsRequestId","_GxIdeNewKb_chShortcutsEl","_GxIdeNewKb_computeDefaultDatabaseName","kbName","_GxIdeNewKb_kbNameInputHandler","e","kbNameValue","_a","detail","_b","__classPrivateFieldGet","value","databaseNameValue","call","_GxIdeNewKb_databaseNameInputHandler","_GxIdeNewKb_handlerAuthenticationTypeInput","async","authenticationTypeValue","collations","defaultCollation","undefined","connectionStatus","_GxIdeNewKb_loadCollationsForCurrentConnection","_GxIdeNewKb_handlerCredentialsChanged","userNameValue","passwordValue","_d","_c","_GxIdeNewKb_browseForMoreHandler","browseForMoreCallback","browseForMoreDialogOpen","selectedInstance","serverNameValue","_GxIdeNewKb_serverNameChangedHandler","CustomEvent","error","target","_GxIdeNewKb_applyCreateDataFilesInKBFolderForServer","_GxIdeNewKb_classifyServer","serverName","toLowerCase","isLocal","serverInstances","some","s","label","_GxIdeNewKb_createDataFilesInKBFolderDisabled","kind","_GxIdeNewKb_sqlAuthMissingCredentials","authType","createDataFilesInKBFolder","getCollationsForInstanceCallback","isWindowsAuth","userName","password","requestId","__classPrivateFieldSet","_e","result","_f","_GxIdeNewKb_prototypingEnvironmentValueChangedHandler","event","_GxIdeNewKb_getDataSources","_GxIdeNewKb_updateFrontEnds","_GxIdeNewKb_prototypingTargetValueChangedHandler","_GxIdeNewKb_getPrototypingEnvironments","_GxIdeNewKb_dataSourceValueChangedHandler","_GxIdeNewKb_renderAdvanced","showCredentials","h","class","part","tabAdvanced","tabTitle","connectionGroup","htmlFor","ref","el","id","model","serverInstancesComboBoxModel","suggest","suggestDebounce","config","inputDebounce","onInput","onChange","browseForMore","onClick","src","actionElement","blockAlign","inlineAlign","delay","tooltipSettings","_GxIdeNewKb_evaluateTooltipRender","databaseName","collation","disabled","length","placeholder","disabledPlaceholder","collationsComboBoxModel","checkedValue","caption","createDataFilesInKbFolder","authenticationGroup","authenticationType","authenticationTypes","authenticationTypesComboBoxModel","debounce","type","showPasswordButton","savePassword","windowsAuthCalloutTitle","windowsAuthCalloutDescription","_GxIdeNewKb_renderBasic","tabBasic","prototypingTarget","prototypingTargets","prototypingTargetsInitialValue","prototypingTargetsComboBoxModel","userInterfaceLanguage","userInterfaceLanguages","userInterfaceLanguagesInitialValue","userInterfaceLanguagesComboBoxModel","backEnd","backEndLabel","prototypingEnvironment","defaultPrototypingEnvironments","prototypingEnvironmentsComboBoxModel","dataSource","defaultDataSources","defaultDataSourcesComboBoxModel","frontEnd","frontEndLabel","renderChCheckboxItems","frontEnds","_GxIdeNewKb_frontEndCheckboxInputHandler","get","noFrontEndSelected","backendOnlyCalloutTitle","backendOnlyCalloutDescription","_GxIdeNewKb_cancelKbHandler","cancelCallback","_GxIdeNewKb_createKbHandler","selectedFrontEndIds","createCallback","kbLocation","_g","_h","_j","_k","_l","_m","_o","_p","_q","creationMode","selectedTab","then","formSubmitResult","validatableControls","validateControls","controlReference","hasError","message","checked","_GxIdeNewKb_updateFrontEndsCheckedMap","_GxIdeNewKb_recomputeBackendOnly","checkedIds","checkboxId","currentState","push","checkboxIndex","findIndex","removeIndex","getPrototypingEnvironmentsCallback","selectedPrototypingTargetId","envs","getDataSourcesCallback","selectedPrototypingEnvironmentId","updatedDefaultDataSourcesPromise","setSelectedItem","getSelectedItem","catch","_GxIdeNewKb_initialSetupAdvancedTab","hasWindowsAuth","opt","_GxIdeNewKb_initializeValidatableControlsBasicTab","forEach","validatableControl","reference","_GxIdeNewKb_initializeValidatableControlsAdvancedTab","_GxIdeNewKb_selectLocationHandler","button","currentTarget","selectLocationCallback","focus","blur","_GxIdeNewKb_tabSelectionChangedHandler","newSelectedId","advancedTabIsVisible","_GxIdeNewKb_loadAdvancedTabData","getAdvancedTabDataCallback","loadingAdvancedTab","data","updatedFrontEnds","getFrontEndsCallback","has","filter","fe","map","watchAuthenticationTypes","newValue","mapOptionsToComboBoxItemModel","watchCollations","watchServerInstances","watchDefaultDataSources","watchDefaultPrototypingEnvironments","watchPrototypingTargets","watchUserInterfaceLanguages","componentWillLoad","Locale","getComponentStrings","tabLabel","connectedCallback","componentDidLoad","componentDidRender","suspendShortcuts","suspend","render","Host","isAdvanced","header","autoFocus","canSetLocation","selectLocationButton","title","scrollable","tab","tabListPosition","selectedId","overflow","contain","onSelectedItemChange","slot","show","loaderTitle","loader","description","footer","btnCancel","btnCreate"],"sources":["src/components/new-kb/new-kb.scss?tag=gx-ide-new-kb&encapsulation=shadow","src/components/new-kb/new-kb.tsx"],"sourcesContent":["@import \"../../global/gx-ide-mixins.scss\";\n\n:host {\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n\n.header {\n &-one-col {\n grid-template-columns: 1fr;\n }\n\n // KB Name and Location are independent inline-field grids, so each label\n // column defaults to `max-content` and sizes to its own caption. Since\n // \"Location\" is shorter than \"KB Name\", their inputs would start at\n // different positions. Pin a shared, fixed-width label column on both so\n // the inputs line up vertically while keeping the same label-to-input gap.\n .field-inline {\n grid-template-columns: 4.5rem 1fr;\n }\n}\n.location-wrapper {\n display: flex;\n align-items: center;\n gap: var(--spacing-gap-xs);\n min-block-size: var(--control-block-size);\n}\n.location-custom-wrapper {\n display: flex;\n align-items: center;\n gap: var(--spacing-gap-xs);\n flex-grow: 1;\n min-inline-size: 0;\n}\n.location-field {\n flex-grow: 1;\n min-inline-size: 0;\n\n > .input {\n inline-size: 100%;\n }\n}\n\n.basic {\n display: grid;\n grid-template:\n \"basic-top basic-top\" max-content\n \"back-end front-end\" 1fr;\n grid-template-columns: 1fr 1fr;\n}\n.basic__header {\n grid-area: basic-top;\n grid-template-columns: 1fr 1fr;\n}\n.dialog-header__back-end,\n.dialog-header__front-end {\n padding-block-start: 16px;\n}\n.main__back-end {\n border-inline-end: var(--section-common-border);\n}\n.main__back-end,\n.main__front-end {\n grid-auto-rows: max-content;\n padding-block: 12px;\n overflow: auto;\n}\n// Backend-only callout shown immediately below the front end checkboxes.\n// The grid has no row gap, so add a top margin for breathing room.\n.main__front-end > .kb-storage-callout {\n margin-block-start: var(--spacing-gap-m);\n}\n// back end\n.section__back-end {\n grid-area: back-end;\n grid-auto-rows: max-content;\n}\n// front end\n.section__front-end {\n grid-area: front-end;\n}\n.section__back-end,\n.section__front-end {\n display: grid;\n grid-template-rows: max-content 1fr;\n overflow: auto;\n}\n\n.basic,\n.advanced {\n padding-block-start: 12px;\n overflow: auto;\n block-size: 100%;\n}\n\n.advanced-loader {\n position: relative;\n display: block;\n inline-size: 100%;\n block-size: 100%;\n}\n\n// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n// Knowledge Base Storage card (advanced tab)\n// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n.kb-storage-card {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-gap-l);\n padding-inline: var(--spacing-padding-xl);\n}\n\n.kb-storage-card__header {\n display: flex;\n align-items: center;\n gap: var(--spacing-gap-s);\n padding-block-end: var(--spacing-padding-m);\n border-bottom: 1px solid var(--color-border-surface-on-elevation-1);\n}\n\n.kb-storage-card__heading {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-gap-xs);\n min-inline-size: 0;\n}\n\n.kb-storage-card__title {\n margin: 0;\n color: var(--color-text-neutral-default);\n}\n\n.kb-storage-card__grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n column-gap: var(--spacing-gap-xl);\n row-gap: var(--spacing-gap-l);\n}\n\n.kb-storage-column {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-gap-m);\n min-inline-size: 0;\n}\n\n.kb-storage-column__title {\n display: flex;\n align-items: center;\n gap: var(--spacing-gap-s);\n color: var(--color-text-neutral-disabled);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.kb-storage-column__title-text {\n white-space: nowrap;\n}\n\n.kb-storage-column__title-rule {\n flex: 1;\n block-size: 1px;\n background-color: var(--color-border-surface-on-elevation-1);\n}\n\n.field-group--stacked {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-gap-m);\n}\n\n.server-name-wrapper {\n display: grid;\n grid-template-columns: 1fr max-content;\n gap: var(--spacing-gap-xs);\n min-inline-size: 0;\n}\n\n.kb-storage-credentials {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-gap-m);\n}\n\n.kb-storage-callout {\n @include callout;\n}\n\n.kb-storage-callout-inner {\n display: flex;\n flex-direction: column;\n}\n\n.kb-storage-callout__title {\n display: flex;\n gap: var(--spacing-gap-xs);\n}\n\n.kb-storage-callout__description {\n color: var(--color-text-neutral-disabled);\n}\n\n// WA / TODO: Add a helper class in Mercury to justify text.\n.text-align-center {\n text-align: center; // should be resolved on mercury\n}\n\n.tab::part(page) {\n // WA / TODO: Remove this line when the ch-tab renders supports scrollbar\n // custom styling\n scrollbar-width: thin;\n}\n\n// Align the tab list with the header / footer horizontal padding\n// (matches `spacing-body-inline` -> --spacing-padding-xl).\n.tab::part(tab-list block-start) {\n padding-inline: var(--spacing-padding-xl);\n}\n\n// WA: Staring on Mercury V1.0.0. the checkbox displays an outline all around.\n// This requires the checkbox inline-size to be set to max-content.\n// TODO: Remove this once the checkbox displays correctly on a later version of Mercury.\n.checkbox {\n inline-size: max-content;\n}\n\n.footer.dialog-footer-with-border {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--spacing-gap-m);\n\n > .buttons-spacer {\n margin-inline-start: auto;\n }\n}\n\n.connection-status {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-gap-xs);\n\n &__spinner {\n display: inline-block;\n flex-shrink: 0;\n\n @include spinner(\n var(--icon-s),\n var(--color-accent-primary-default),\n var(--color-accent-primary-pressed)\n );\n }\n\n &--connecting {\n color: var(--color-accent-primary-on-default);\n }\n\n &--success {\n color: var(--color-text-success-default);\n }\n\n &--failed {\n color: var(--color-text-error-default);\n }\n}\n","import {\n Component,\n Host,\n Prop,\n Element,\n State,\n getAssetPath,\n Method,\n h,\n Watch\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n\nimport { config } from \"../../common/config\";\nimport { Locale } from \"../../common/locale\";\nimport { getSelectedItem, setSelectedItem } from \"../../common/common\";\nimport {\n mapOptionsToComboBoxItemModel,\n renderChCheckboxItems\n} from \"../../common/helpers\";\nimport { FormSubmitResult, GxOption } from \"../../common/types\";\nimport {\n ControlValidation,\n validateControls\n} from \"../../common/form-validation\";\nimport {\n TabModel,\n ComboBoxModel,\n ChCheckboxCustomEvent\n} from \"@genexus/chameleon-controls-library\";\nimport { removeIndex } from \"../../common/array\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/tab\",\n \"components/tooltip\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst WINDOWS_AUTHENTICATION_VALUE: string = \"WINDOWS_AUTHENTICATION\";\nconst LOCALDB_INSTANCE: string = \"(LocalDB)\\\\MSSQLLocalDB\";\nconst MAIN_SECTION_CLASSES: string = \"main\";\nconst BASIC_SECTION_PARENT_CLASSES: string = \"basic\";\n\nconst SYSTEM_ICON = getIconPath({\n category: \"system\",\n name: \"folder\",\n colorType: \"primary\"\n});\n\nconst WARNING_ICON = getIconPath({\n category: \"system\",\n name: \"warning\",\n colorType: \"on-interactive\"\n});\n\nconst DATABASE_ICON = getIconPath({\n category: \"system\",\n name: \"database\",\n colorType: \"primary\"\n});\n\nconst SUCCESS_ICON = getIconPath({\n category: \"system\",\n name: \"check-circle\",\n colorType: \"success\"\n});\n\nconst ERROR_ICON = getIconPath({\n category: \"system\",\n name: \"warning\",\n colorType: \"error\"\n});\n\nconst DATABASE_NAME_PREFIX: string = \"GX_KB_\";\n\nconst BASIC_TAB_SELECTOR: string = \"basic\";\nconst ADVANCED_TAB_SELECTOR: string = \"advanced\";\n\n@Component({\n tag: \"gx-ide-new-kb\",\n styleUrl: \"new-kb.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/new-kb\"]\n})\nexport class GxIdeNewKb {\n #advancedTabHasBeenRendered: boolean = false;\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n /**\n * frontEndsState saves the id's of the front ends checkboxes that are checked\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #frontEndsCheckedMap = new Map<string, string[]>();\n #selectedPrototypingEnvironmentId: string;\n #selectedDataSourceId: string;\n #shortcutsSrc = getAssetPath(`./gx-ide-assets/new-kb/shortcuts.json`);\n #kbSectionsModel: TabModel = [];\n\n @Element() el: HTMLGxIdeNewKbElement;\n\n /* References needed to collect data con \"Create\" button submit*/\n #authenticationTypeEl!: HTMLChComboBoxRenderElement;\n #collationEl!: HTMLChComboBoxRenderElement;\n #createDataFilesInKBFolderEl!: HTMLChCheckboxElement;\n #databaseNameEl!: HTMLChEditElement;\n #dataSourceEl!: HTMLChComboBoxRenderElement;\n #kbNameEl!: HTMLChEditElement;\n #locationEl!: HTMLChEditElement;\n #locationElRegistered = false;\n #credentialControlsRegistered = false;\n #passwordEl!: HTMLChEditElement;\n #prototypingEnvironmentEl!: HTMLChComboBoxRenderElement;\n #prototypingTargetEl!: HTMLChComboBoxRenderElement;\n #savePasswordEl!: HTMLChCheckboxElement;\n #serverNameEl!: HTMLChComboBoxRenderElement;\n #userInterfaceLanguageEl!: HTMLChComboBoxRenderElement;\n #userNameEl!: HTMLChEditElement;\n\n /**\n * Monotonic id of the latest collations request. Used to discard stale\n * responses: a slow request for an invalid instance can resolve after a\n * newer request for a valid instance, and without this guard it would\n * overwrite the UI with the wrong (failed) result.\n */\n #collationsRequestId = 0;\n\n #chShortcutsEl: HTMLChShortcutsElement;\n\n @State() advancedTabIsVisible: boolean = false;\n @State() loadingAdvancedTab: boolean = false;\n @State() browseForMoreDialogOpen: boolean = false;\n @State() databaseNameValue: string = \"\";\n /**\n * Allows selecting multiple generators for the front end\n * TODO: Check if this property can be deleted, since we can call getFrontEndsCallback.\n */\n @State() frontEnds: GxOption[];\n /**\n * True when front ends are available but none is selected, meaning the KB\n * will be generated as backend only. Drives the backend-only callout.\n */\n @State() noFrontEndSelected: boolean = false;\n @State() validatableControls = new Map<string, ControlValidation>();\n @State() connectionStatus: \"connecting\" | \"success\" | \"failed\" | undefined;\n @State() userNameValue: string = \"\";\n @State() passwordValue: string = \"\";\n\n // representations of GxOption[] as ComboBoxModel, and initialValue for each one.\n @State() authenticationTypes: GxOption[] = [];\n @Watch(\"authenticationTypes\")\n watchAuthenticationTypes(newValue: GxOption[]) {\n if (newValue?.length) {\n this.authenticationTypesComboBoxModel =\n mapOptionsToComboBoxItemModel(newValue);\n this.authenticationTypeValue = getSelectedItem(newValue);\n }\n }\n @State() authenticationTypesComboBoxModel: ComboBoxModel = [];\n @State() authenticationTypeValue: string;\n @State() collations: GxOption[] = [];\n @Watch(\"collations\")\n watchCollations(newValue: GxOption[]) {\n if (!newValue?.length) {\n this.collationsComboBoxModel = [];\n return;\n }\n this.collationsComboBoxModel = mapOptionsToComboBoxItemModel(newValue);\n }\n @State() collationsComboBoxModel: ComboBoxModel = [];\n @State() defaultCollation: string;\n @State() defaultDataSourcesComboBoxModel: ComboBoxModel = [];\n @State() prototypingTargetsComboBoxModel: ComboBoxModel = [];\n @State() prototypingTargetsInitialValue: string;\n @State() prototypingEnvironmentsComboBoxModel: ComboBoxModel = [];\n @State() prototypingEnvironmentsInitialValue: string;\n @State() serverInstances: GxOption[] = [];\n @Watch(\"serverInstances\")\n watchServerInstances(newValue: GxOption[]) {\n if (!newValue?.length) {\n this.serverInstancesComboBoxModel = [];\n return;\n }\n this.serverInstancesComboBoxModel = mapOptionsToComboBoxItemModel(newValue);\n }\n @State() serverInstancesComboBoxModel: ComboBoxModel = [];\n @State() serverNameValue: string = \"\";\n @State() userInterfaceLanguagesComboBoxModel: ComboBoxModel = [];\n @State() userInterfaceLanguagesInitialValue: string;\n @State() selectedTab: string = BASIC_TAB_SELECTOR;\n\n /**\n * Callback invoked when the user wants to cancel KB creation (‘Cancel’ button)\n */\n @Prop() readonly cancelCallback: CancelCallback;\n\n /**\n * Specifies whether the location field (and its folder-picker button) is\n * shown in the header, allowing the user to override the default `kbLocation`\n * path. Independent from `isAdvanced`.\n */\n @Prop() readonly canSetLocation: boolean = false;\n\n /**\n * Callback invoked when the advanced tab is selected for the first time.\n * Returns the data needed to populate the advanced tab fields lazily,\n * avoiding unnecessary loading at component initialization.\n */\n @Prop() readonly getAdvancedTabDataCallback: GetAdvancedTabDataCallback;\n\n /**\n * Callback that will be invoked when the user confirms KB creation (‘Create’ button)\n */\n @Prop() readonly createCallback!: CreateCallback;\n\n /**\n * It allows defining whether the option to create the data files in the KB folder will be shown in the advanced tab\n */\n @Prop({ mutable: true }) createDataFilesInKBFolder: boolean = true;\n\n /**\n * Name of the database where we are going to persist the information of our KB\n */\n @Prop() readonly databaseName: string;\n\n /**\n * It allows defining the DBMS that will be used in the solution\n */\n @Prop({ mutable: true }) defaultDataSources: GxOption[] = [];\n @Watch(\"defaultDataSources\")\n watchDefaultDataSources(newValue: GxOption[]) {\n if (newValue?.length) {\n this.defaultDataSourcesComboBoxModel =\n mapOptionsToComboBoxItemModel(newValue);\n const result = setSelectedItem(newValue, this.#selectedDataSourceId);\n this.#selectedDataSourceId = getSelectedItem(result);\n }\n }\n\n /**\n * Callback invoked when the user wants to cancel KB creation (‘Cancel’ button)\n */\n @Prop() readonly getDataSourcesCallback: GetDataSourcesCallback;\n\n /**\n * Callback invoked when the user changes the prototyping environment, allowing for the modification of the list of front ends\n */\n @Prop() readonly getFrontEndsCallback!: GetFrontEndsCallback;\n\n /**\n * Callback invoked when the user changes the prototyping target id, allowing for the modification of the list of prototyping environments\n */\n @Prop()\n readonly getPrototypingEnvironmentsCallback!: GetPrototypingEnvironmentsCallback;\n\n /**\n * Specify whether it is feasible to display information related to local configuration parameters\n */\n @Prop() readonly isAdvanced = false;\n\n /**\n * Default suggested path to a directory where the information related to the KB will be stored/generated\n */\n @Prop({ mutable: true }) kbLocation: string;\n\n /**\n * The knowledge base default suggested name\n */\n @Prop() readonly kbName: string;\n\n /**\n * Password for the database connection. Visible if the Authentication Type is different from Windows Authentication (first item of the combo)\n */\n @Prop() readonly password: string;\n\n /**\n * It allows selecting the default environment that the KB will have (additional environments can be created later)\n */\n @Prop({ mutable: true }) defaultPrototypingEnvironments: GxOption[] = [];\n @Watch(\"defaultPrototypingEnvironments\")\n watchDefaultPrototypingEnvironments(newValue: GxOption[]) {\n if (newValue?.length) {\n this.prototypingEnvironmentsComboBoxModel =\n mapOptionsToComboBoxItemModel(newValue);\n this.#selectedPrototypingEnvironmentId = getSelectedItem(newValue);\n this.#updateFrontEnds();\n }\n }\n\n /**\n * Path to a directory where the information related to the KB will be stored/generated\n */\n @Prop() readonly prototypingTargets: GxOption[] = [];\n @Watch(\"prototypingTargets\")\n watchPrototypingTargets(newValue: GxOption[]) {\n if (newValue?.length) {\n this.prototypingTargetsComboBoxModel =\n mapOptionsToComboBoxItemModel(newValue);\n this.prototypingTargetsInitialValue = getSelectedItem(newValue);\n this.#getPrototypingEnvironments();\n }\n }\n\n /**\n * Visible if something other than Windows Authentication is selected\n */\n @Prop() readonly savePassword: boolean = false;\n\n /**\n * This is a function provided by the developer that returns a string, with the location path\n */\n @Prop() readonly selectLocationCallback!: SelectLocationCallback;\n\n /**\n * Callback invoked when the user clicks the \"Browse for more...\" button next\n * to the Server Name combo. The host is expected to display its own server\n * picker UI and resolve with the name of the selected server instance, which\n * will be set as the value of the Server Name combo.\n */\n @Prop() readonly browseForMoreCallback: BrowseForMoreCallback;\n\n /**\n * Callback invoked when the user selects a different server instance,\n * allowing the host to fetch the collations available on that instance.\n */\n @Prop()\n readonly getCollationsForInstanceCallback: GetCollationsForInstanceCallback;\n\n /**\n * Specify the language in which the application screens will be developed (default language)\n */\n @Prop() readonly userInterfaceLanguages: GxOption[] = [];\n @Watch(\"userInterfaceLanguages\")\n watchUserInterfaceLanguages(newValue: GxOption[]) {\n if (newValue?.length) {\n this.userInterfaceLanguagesComboBoxModel =\n mapOptionsToComboBoxItemModel(newValue);\n this.userInterfaceLanguagesInitialValue = getSelectedItem(newValue);\n }\n }\n\n /**\n * Username for the database connection. Visible if the Authentication Type is different from Windows Authentication\n */\n @Prop({ mutable: true }) userName: string;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.databaseNameValue = this.#computeDefaultDatabaseName(this.kbName);\n if (this.databaseName) {\n this.databaseNameValue = this.databaseName;\n }\n this.userNameValue = this.userName ?? \"\";\n this.passwordValue = this.password ?? \"\";\n this.#kbSectionsModel = [\n {\n id: BASIC_TAB_SELECTOR,\n name: this.#componentLocale.tabBasic.tabLabel\n },\n {\n id: ADVANCED_TAB_SELECTOR,\n name: this.#componentLocale.tabAdvanced.tabLabel\n }\n ];\n }\n\n connectedCallback() {\n this.watchDefaultDataSources(this.defaultDataSources);\n this.watchDefaultPrototypingEnvironments(\n this.defaultPrototypingEnvironments\n );\n this.watchPrototypingTargets(this.prototypingTargets);\n this.watchUserInterfaceLanguages(this.userInterfaceLanguages);\n }\n\n componentDidLoad() {\n this.#initializeValidatableControlsBasicTab();\n }\n\n componentDidRender() {\n // Defer the one-time setup until the real advanced content is rendered\n // (not the loader); otherwise the control refs it reads are still undefined.\n if (\n this.advancedTabIsVisible &&\n !this.loadingAdvancedTab &&\n !this.#advancedTabHasBeenRendered\n ) {\n // just call this once.\n this.#initialSetupAdvancedTab();\n this.#initializeValidatableControlsAdvancedTab();\n this.#advancedTabHasBeenRendered = true;\n }\n\n // Register the location input for validation once it's rendered\n if (!this.#locationElRegistered && this.#locationEl) {\n this.validatableControls.set(this.#locationEl.id, {\n reference: this.#locationEl,\n hasError: false,\n message: undefined\n });\n this.#locationElRegistered = true;\n }\n\n // Register credential controls when they become visible (SQL Auth selected)\n if (\n this.authenticationTypeValue !== WINDOWS_AUTHENTICATION_VALUE &&\n !this.#credentialControlsRegistered &&\n this.#userNameEl &&\n this.#passwordEl\n ) {\n this.validatableControls.set(this.#userNameEl.id, {\n reference: this.#userNameEl,\n hasError: false,\n message: undefined\n });\n this.validatableControls.set(this.#passwordEl.id, {\n reference: this.#passwordEl,\n hasError: false,\n message: undefined\n });\n this.#credentialControlsRegistered = true;\n }\n\n // Reset flag when switching back to Windows Auth so they re-register next time\n if (\n this.authenticationTypeValue === WINDOWS_AUTHENTICATION_VALUE &&\n this.#credentialControlsRegistered\n ) {\n this.#credentialControlsRegistered = false;\n }\n }\n\n /**\n * Suspends or reactivates the shortcuts\n */\n @Method()\n async suspendShortcuts(suspendShortcuts: boolean) {\n if (suspendShortcuts) {\n this.#chShortcutsEl.suspend = true;\n } else {\n this.#chShortcutsEl.suspend = false;\n }\n }\n\n #computeDefaultDatabaseName = (kbName: string): string =>\n `${DATABASE_NAME_PREFIX}${kbName ?? \"\"}`;\n\n #kbNameInputHandler = (e: CustomEvent<string> | InputEvent) => {\n const kbNameValue = (e.detail ?? this.#kbNameEl?.value) as string;\n this.databaseNameValue = this.#computeDefaultDatabaseName(kbNameValue);\n };\n\n #databaseNameInputHandler = (e: CustomEvent<string> | InputEvent) => {\n this.databaseNameValue = (e.detail ??\n this.#databaseNameEl?.value) as string;\n };\n\n #handlerAuthenticationTypeInput = async (\n e: CustomEvent<string> | InputEvent\n ) => {\n this.authenticationTypeValue = (e as CustomEvent<string>)?.detail as string;\n this.collations = [];\n this.defaultCollation = undefined;\n this.connectionStatus = undefined;\n await this.#loadCollationsForCurrentConnection();\n };\n\n #handlerCredentialsChanged = async (): Promise<void> => {\n this.userNameValue = this.#userNameEl?.value ?? \"\";\n this.passwordValue = this.#passwordEl?.value ?? \"\";\n await this.#loadCollationsForCurrentConnection();\n };\n\n #browseForMoreHandler = async (): Promise<void> => {\n if (!this.browseForMoreCallback) {\n return;\n }\n this.browseForMoreDialogOpen = true;\n try {\n const selectedInstance = await this.browseForMoreCallback();\n if (selectedInstance) {\n this.serverNameValue = selectedInstance;\n if (this.#serverNameEl) {\n this.#serverNameEl.value = selectedInstance;\n }\n await this.#serverNameChangedHandler(\n new CustomEvent<string>(\"change\", { detail: selectedInstance })\n );\n }\n } catch (error) {\n } finally {\n this.browseForMoreDialogOpen = false;\n }\n };\n\n #serverNameChangedHandler = async (\n e: CustomEvent<string> | InputEvent\n ): Promise<void> => {\n const selectedInstance =\n (e as CustomEvent<string>)?.detail ??\n (e.target as HTMLInputElement)?.value;\n this.serverNameValue = selectedInstance ?? \"\";\n this.#applyCreateDataFilesInKBFolderForServer();\n await this.#loadCollationsForCurrentConnection();\n };\n\n #classifyServer = (\n serverName: string\n ): \"localdb\" | \"local\" | \"remote\" | \"empty\" => {\n if (!serverName) {\n return \"empty\";\n }\n if (serverName.toLowerCase() === LOCALDB_INSTANCE.toLowerCase()) {\n return \"localdb\";\n }\n const isLocal = (this.serverInstances ?? []).some(\n s => s.label?.toLowerCase() === serverName.toLowerCase()\n );\n return isLocal ? \"local\" : \"remote\";\n };\n\n #createDataFilesInKBFolderDisabled = (): boolean => {\n const kind = this.#classifyServer(this.serverNameValue);\n return kind === \"localdb\" || kind === \"remote\" || kind === \"empty\";\n };\n\n #sqlAuthMissingCredentials = (): boolean => {\n const authType = this.authenticationTypeValue;\n if (!authType || authType === WINDOWS_AUTHENTICATION_VALUE) {\n return false;\n }\n return !this.userNameValue || !this.passwordValue;\n };\n\n #applyCreateDataFilesInKBFolderForServer = (): void => {\n const kind = this.#classifyServer(this.serverNameValue);\n if (kind === \"local\" || kind === \"localdb\") {\n this.createDataFilesInKBFolder = true;\n } else if (kind === \"remote\") {\n this.createDataFilesInKBFolder = false;\n }\n };\n\n #loadCollationsForCurrentConnection = async (): Promise<void> => {\n const selectedInstance = this.serverNameValue;\n if (!selectedInstance || !this.getCollationsForInstanceCallback) {\n return;\n }\n const authType = this.authenticationTypeValue;\n const isWindowsAuth = authType === WINDOWS_AUTHENTICATION_VALUE;\n const userName = isWindowsAuth ? undefined : this.#userNameEl?.value;\n const password = isWindowsAuth ? undefined : this.#passwordEl?.value;\n\n if (!isWindowsAuth && authType && (!userName || !password)) {\n return;\n }\n\n // Tag this request so we can ignore its response if a newer request is\n // fired before it resolves (e.g. the user fixes an invalid server name\n // while the slow request for the invalid one is still pending).\n const requestId = ++this.#collationsRequestId;\n this.connectionStatus = \"connecting\";\n try {\n const result = await this.getCollationsForInstanceCallback(\n selectedInstance,\n authType,\n userName,\n password\n );\n if (requestId !== this.#collationsRequestId) {\n // A newer request superseded this one; discard the stale response.\n return;\n }\n if (result) {\n this.collations = result.collations ?? [];\n this.defaultCollation = result.defaultCollation ?? undefined;\n this.connectionStatus = \"success\";\n } else {\n this.collations = [];\n this.defaultCollation = undefined;\n this.connectionStatus = \"failed\";\n }\n } catch {\n if (requestId !== this.#collationsRequestId) {\n return;\n }\n this.collations = [];\n this.defaultCollation = undefined;\n this.connectionStatus = \"failed\";\n }\n };\n\n #prototypingEnvironmentValueChangedHandler = (\n event: CustomEvent<string> | InputEvent\n ): void => {\n this.#selectedPrototypingEnvironmentId = event.detail as string;\n this.#getDataSources();\n this.#updateFrontEnds();\n };\n\n #prototypingTargetValueChangedHandler = async (): Promise<void> => {\n await this.#getPrototypingEnvironments();\n this.#getDataSources();\n };\n\n #dataSourceValueChangedHandler = () => {\n this.#selectedDataSourceId = this.#dataSourceEl.value;\n };\n\n #renderAdvanced = (): Element[] => {\n const showCredentials =\n this.authenticationTypeValue !== WINDOWS_AUTHENTICATION_VALUE;\n\n return [\n <section class=\"kb-storage-card\" part=\"kb-storage-card\">\n <header class=\"kb-storage-card__header\">\n <div class=\"kb-storage-card__heading\">\n <h2 class=\"kb-storage-card__title body-semi-bold-m\">\n {this.#componentLocale.tabAdvanced.tabTitle}\n </h2>\n </div>\n </header>\n\n <div class=\"kb-storage-card__grid\">\n <div class=\"kb-storage-column\">\n <div class=\"kb-storage-column__title body-regular-xs\">\n <span class=\"kb-storage-column__title-text\">\n {this.#componentLocale.tabAdvanced.connectionGroup}\n </span>\n <span class=\"kb-storage-column__title-rule\" aria-hidden=\"true\" />\n </div>\n\n <div class=\"field-group field-group--stacked\">\n <div class=\"field field-block server-name-field\">\n <label class=\"label\" htmlFor=\"serverName\">\n {this.#componentLocale.tabAdvanced.serverName.label}\n </label>\n <div class=\"server-name-wrapper\">\n <ch-combo-box-render\n class=\"combo-box\"\n value={this.serverNameValue}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#serverNameEl = el as HTMLChComboBoxRenderElement)\n }\n id=\"serverName\"\n part=\"server-name\"\n model={this.serverInstancesComboBoxModel}\n suggest\n suggestDebounce={config.inputDebounce}\n onInput={this.#serverNameChangedHandler}\n onChange={this.#serverNameChangedHandler}\n ></ch-combo-box-render>\n <button\n class=\"button-tertiary button-icon-only\"\n aria-label={\n this.#componentLocale.tabAdvanced.serverName.browseForMore\n }\n part=\"button-browse-for-more\"\n onClick={this.#browseForMoreHandler}\n >\n <ch-image class=\"icon-m\" src={DATABASE_ICON}></ch-image>\n {!this.browseForMoreDialogOpen && (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={null}\n blockAlign=\"outside-start\"\n inlineAlign=\"center\"\n delay={config.tooltipSettings.delay}\n >\n {\n this.#componentLocale.tabAdvanced.serverName\n .browseForMore\n }\n </ch-tooltip>\n )}\n </button>\n </div>\n {this.#evaluateTooltipRender(this.#serverNameEl)}\n </div>\n\n <div class=\"field field-block database-field\">\n <label class=\"label\" htmlFor=\"databaseName\">\n {this.#componentLocale.tabAdvanced.databaseName.label}\n </label>\n <ch-edit\n class=\"input\"\n value={this.databaseNameValue}\n id=\"databaseName\"\n part=\"database-name\"\n onInput={this.#databaseNameInputHandler}\n ref={(el: HTMLChEditElement) =>\n (this.#databaseNameEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n\n {this.#evaluateTooltipRender(this.#databaseNameEl)}\n </div>\n\n <div class=\"field field-block collation-field\">\n <label class=\"label\" htmlFor=\"collation\">\n {this.#componentLocale.tabAdvanced.collation.label}\n </label>\n <ch-combo-box-render\n class=\"combo-box\"\n disabled={\n !this.serverNameValue || this.collations.length === 0\n }\n placeholder={\n this.collations.length === 0\n ? this.#componentLocale.tabAdvanced.collation\n .disabledPlaceholder\n : \"\"\n }\n value={this.defaultCollation}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#collationEl = el as HTMLChComboBoxRenderElement)\n }\n model={this.collationsComboBoxModel}\n id=\"collation\"\n part=\"collation\"\n ></ch-combo-box-render>\n {this.#evaluateTooltipRender(this.#collationEl)}\n </div>\n\n <ch-checkbox\n class=\"checkbox\"\n checkedValue=\"true\"\n value={this.createDataFilesInKBFolder ? \"true\" : undefined}\n disabled={this.#createDataFilesInKBFolderDisabled()}\n caption={\n this.#componentLocale.tabAdvanced.createDataFilesInKbFolder\n }\n part=\"create-data-in-kb\"\n id=\"createDataFilesInKBFolder\"\n ref={(el: HTMLChCheckboxElement) =>\n (this.#createDataFilesInKBFolderEl =\n el as HTMLChCheckboxElement)\n }\n ></ch-checkbox>\n </div>\n </div>\n\n <div class=\"kb-storage-column\">\n <div class=\"kb-storage-column__title body-regular-xs\">\n <span class=\"kb-storage-column__title-text\">\n {this.#componentLocale.tabAdvanced.authenticationGroup}\n </span>\n <span class=\"kb-storage-column__title-rule\" aria-hidden=\"true\" />\n </div>\n\n <div class=\"field-group field-group--stacked\">\n <div class=\"field field-block authentication-type-field\">\n <label class=\"label\" htmlFor=\"authenticationType\">\n {this.#componentLocale.tabAdvanced.authenticationType.label}\n </label>\n <ch-combo-box-render\n class=\"combo-box\"\n disabled={this.authenticationTypes.length === 0}\n placeholder={\n this.authenticationTypes.length === 0\n ? this.#componentLocale.tabAdvanced.authenticationType\n .disabledPlaceholder\n : \"\"\n }\n value={this.authenticationTypeValue}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#authenticationTypeEl =\n el as HTMLChComboBoxRenderElement)\n }\n model={this.authenticationTypesComboBoxModel}\n id=\"authenticationType\"\n part=\"authentication-type\"\n onInput={\n this.authenticationTypes.length > 0\n ? this.#handlerAuthenticationTypeInput\n : undefined\n }\n ></ch-combo-box-render>\n {this.#evaluateTooltipRender(this.#authenticationTypeEl)}\n </div>\n\n {showCredentials ? (\n <div class=\"kb-storage-credentials\">\n <div class=\"field field-block username-field\">\n <label class=\"label\" htmlFor=\"userName\">\n {this.#componentLocale.tabAdvanced.userName.label}\n </label>\n <ch-edit\n class=\"input\"\n value={this.userName}\n id=\"userName\"\n part=\"user-name\"\n ref={(el: HTMLChEditElement) =>\n (this.#userNameEl = el as HTMLChEditElement)\n }\n onInput={this.#handlerCredentialsChanged}\n debounce={config.inputDebounce}\n ></ch-edit>\n {this.#evaluateTooltipRender(this.#userNameEl)}\n </div>\n\n <div class=\"field field-block password-field\">\n <label class=\"label\" htmlFor=\"password\">\n {this.#componentLocale.tabAdvanced.password.label}\n </label>\n <ch-edit\n class=\"input\"\n type=\"password\"\n showPasswordButton\n value={this.password}\n id=\"password\"\n part=\"password\"\n ref={(el: HTMLChEditElement) =>\n (this.#passwordEl = el as HTMLChEditElement)\n }\n onInput={this.#handlerCredentialsChanged}\n debounce={config.inputDebounce}\n ></ch-edit>\n {this.#evaluateTooltipRender(this.#passwordEl)}\n </div>\n\n <ch-checkbox\n class=\"checkbox\"\n checkedValue=\"password\"\n value=\"password\"\n caption={this.#componentLocale.tabAdvanced.savePassword}\n part=\"save-password\"\n id=\"savePassword\"\n ref={(el: HTMLChCheckboxElement) =>\n (this.#savePasswordEl = el as HTMLChCheckboxElement)\n }\n disabled\n ></ch-checkbox>\n </div>\n ) : (\n <div class=\"kb-storage-callout\" part=\"windows-auth-callout\">\n <ch-image\n class=\"icon-l\"\n src={WARNING_ICON}\n type=\"mask\"\n ></ch-image>\n\n <div class=\"kb-storage-callout-inner\">\n <span class=\"kb-storage-callout__title body-semi-bold-s\">\n {\n this.#componentLocale.tabAdvanced\n .windowsAuthCalloutTitle\n }\n </span>\n <span class=\"kb-storage-callout__description body-regular-xs\">\n {\n this.#componentLocale.tabAdvanced\n .windowsAuthCalloutDescription\n }\n </span>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </section>\n ];\n };\n\n #renderBasic = (): HTMLElement[] => {\n return [\n <section class=\"basic__header field-group dialog-header-with-border spacing-body-inline\">\n <div\n // #prototyping target\n class=\"field field-block prototyping-target\"\n >\n <label class=\"label\" htmlFor=\"prototypingTarget\">\n {this.#componentLocale.tabBasic.prototypingTarget.label}\n </label>\n\n <ch-combo-box-render\n id=\"prototypingTarget\"\n class=\"combo-box\"\n part=\"prototyping-target\"\n disabled={this.prototypingTargets.length === 0}\n placeholder={\n this.prototypingTargets.length === 0\n ? this.#componentLocale.tabBasic.prototypingTarget\n .disabledPlaceholder\n : \"\"\n }\n value={this.prototypingTargetsInitialValue}\n model={this.prototypingTargetsComboBoxModel}\n onInput={\n this.prototypingTargets.length > 0\n ? this.#prototypingTargetValueChangedHandler\n : undefined\n }\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#prototypingTargetEl = el as HTMLChComboBoxRenderElement)\n }\n ></ch-combo-box-render>\n {this.#evaluateTooltipRender(this.#prototypingTargetEl)}\n </div>\n\n <div\n // #user interface\n class=\"field field-block user-interface-language\"\n >\n <label class=\"label\" htmlFor=\"userInterfaceLanguage\">\n {this.#componentLocale.tabBasic.userInterfaceLanguage.label}\n </label>\n <ch-combo-box-render\n class=\"combo-box\"\n disabled={this.userInterfaceLanguages.length === 0}\n placeholder={\n this.userInterfaceLanguages.length === 0\n ? this.#componentLocale.tabBasic.userInterfaceLanguage\n .disabledPlaceholder\n : \"\"\n }\n value={this.userInterfaceLanguagesInitialValue}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#userInterfaceLanguageEl =\n el as HTMLChComboBoxRenderElement)\n }\n model={this.userInterfaceLanguagesComboBoxModel}\n id=\"userInterfaceLanguage\"\n part=\"user-interface-language\"\n ></ch-combo-box-render>\n {this.#evaluateTooltipRender(this.#userInterfaceLanguageEl)}\n </div>\n </section>,\n\n <section\n class=\"section__back-end\"\n // backend\n >\n <h2\n // back end\n class=\"dialog-header dialog-header-with-border dialog-header__back-end subtitle-regular-xs\t text-align-center spacing-body-inline\"\n >\n {this.#componentLocale.tabBasic.backEnd.backEndLabel}\n </h2>\n <div class=\"field-group main__back-end spacing-body-inline scrollable\">\n <div\n // #prototyping environment\n class=\"field field-block\"\n >\n <label class=\"label\" htmlFor=\"prototypingEnvironment\">\n {\n this.#componentLocale.tabBasic.backEnd.prototypingEnvironment\n .label\n }\n </label>\n <ch-combo-box-render\n class=\"combo-box\"\n disabled={this.defaultPrototypingEnvironments.length === 0}\n placeholder={\n this.defaultPrototypingEnvironments.length === 0\n ? this.#componentLocale.tabBasic.backEnd\n .prototypingEnvironment.disabledPlaceholder\n : \"\"\n }\n value={this.#selectedPrototypingEnvironmentId}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#prototypingEnvironmentEl =\n el as HTMLChComboBoxRenderElement)\n }\n model={this.prototypingEnvironmentsComboBoxModel}\n onInput={this.#prototypingEnvironmentValueChangedHandler}\n part=\"prototyping-environment\"\n id=\"prototypingEnvironment\"\n ></ch-combo-box-render>\n {this.#evaluateTooltipRender(this.#prototypingEnvironmentEl)}\n </div>\n\n <div\n // #data source\n class=\"field field-block\"\n >\n <label class=\"label\" htmlFor=\"dataSource\">\n {this.#componentLocale.tabBasic.backEnd.dataSource.label}\n </label>\n <ch-combo-box-render\n class=\"combo-box\"\n disabled={this.defaultDataSources.length === 0}\n placeholder={\n this.defaultDataSources.length === 0\n ? this.#componentLocale.tabBasic.backEnd.dataSource\n .disabledPlaceholder\n : \"\"\n }\n value={this.#selectedDataSourceId}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#dataSourceEl = el as HTMLChComboBoxRenderElement)\n }\n onInput={this.#dataSourceValueChangedHandler}\n model={this.defaultDataSourcesComboBoxModel}\n part=\"data-source\"\n id=\"dataSource\"\n ></ch-combo-box-render>\n {this.#evaluateTooltipRender(this.#dataSourceEl)}\n </div>\n </div>\n </section>,\n\n <section\n class=\"section__front-end\"\n // front end\n >\n <h2 class=\"dialog-header dialog-header-with-border dialog-header__front-end subtitle-regular-xs\t text-align-center spacing-body-inline\">\n {this.#componentLocale.tabBasic.frontEnd.frontEndLabel}\n </h2>\n <div class=\"field-group main__front-end spacing-body-inline scrollable\">\n {renderChCheckboxItems(\n this.frontEnds,\n this.#frontEndCheckboxInputHandler,\n this.#frontEndsCheckedMap.get(\n this.#selectedPrototypingEnvironmentId\n )\n )}\n\n {this.noFrontEndSelected && (\n <div class=\"kb-storage-callout\" part=\"backend-only-callout\">\n <ch-image\n class=\"icon-l\"\n src={WARNING_ICON}\n type=\"mask\"\n ></ch-image>\n\n <div class=\"kb-storage-callout-inner\">\n <span class=\"kb-storage-callout__title body-semi-bold-s\">\n {\n this.#componentLocale.tabBasic.frontEnd\n .backendOnlyCalloutTitle\n }\n </span>\n <span class=\"kb-storage-callout__description body-regular-xs\">\n {\n this.#componentLocale.tabBasic.frontEnd\n .backendOnlyCalloutDescription\n }\n </span>\n </div>\n </div>\n )}\n </div>\n </section>\n ];\n };\n\n // - - - - - - - - - -\n\n #cancelKbHandler = (): void => {\n if (this.cancelCallback) {\n this.cancelCallback();\n }\n };\n\n #createKbHandler = (): void => {\n const selectedFrontEndIds =\n this.#frontEndsCheckedMap.get(this.#selectedPrototypingEnvironmentId) ??\n [];\n\n this.createCallback({\n authenticationType: this.#authenticationTypeEl?.value,\n collation: this.#collationEl?.value,\n createDataFilesInKBFolder: !!this.#createDataFilesInKBFolderEl?.value,\n dataSource: this.#dataSourceEl?.value,\n databaseName: this.#databaseNameEl?.value,\n frontEnds: selectedFrontEndIds,\n kbLocation: this.#locationEl?.value,\n kbName: this.#kbNameEl?.value,\n password: this.#passwordEl?.value,\n prototypingEnvironment: this.#prototypingEnvironmentEl?.value,\n prototypingTarget: this.#prototypingTargetEl?.value,\n savePassword: !!this.#savePasswordEl?.value,\n serverName: this.#serverNameEl?.value,\n userInterfaceLanguage: this.#userInterfaceLanguageEl?.value,\n userName: this.#userNameEl?.value,\n creationMode: this.selectedTab as CreationMode\n }).then((formSubmitResult: FormSubmitResult) => {\n this.validatableControls = validateControls(\n formSubmitResult,\n this.validatableControls\n );\n });\n };\n\n // TODO: evaluate if this should be a global helper function.\n // It is used on new-kb as well.\n #evaluateTooltipRender = (\n controlReference: HTMLElement\n ): HTMLChTooltipElement =>\n this.validatableControls?.get(controlReference?.id)?.hasError &&\n this.validatableControls.get(controlReference.id)?.message && (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={controlReference as unknown as HTMLButtonElement}\n blockAlign={config.tooltipSettings.blockAlign}\n inlineAlign={config.tooltipSettings.inlineAlign}\n delay={config.tooltipSettings.delay}\n >\n {this.validatableControls.get(controlReference.id).message}\n </ch-tooltip>\n );\n\n #frontEndCheckboxInputHandler = (\n event: ChCheckboxCustomEvent<string> | InputEvent\n ) => {\n const checkedValue = (event.target as HTMLChCheckboxElement).checkedValue;\n const checked = event.detail === checkedValue;\n this.#updateFrontEndsCheckedMap(checkedValue, checked);\n this.#recomputeBackendOnly();\n };\n\n /**\n * Recomputes whether the KB will be generated as backend only, i.e. there\n * are front ends to choose from but none is currently selected.\n */\n #recomputeBackendOnly = () => {\n const checkedIds = this.#frontEndsCheckedMap.get(\n this.#selectedPrototypingEnvironmentId\n );\n this.noFrontEndSelected =\n (this.frontEnds?.length ?? 0) > 0 && (checkedIds?.length ?? 0) === 0;\n };\n\n /**\n * This function updates frontEndsCheckedMap, that contains the checked\n * checkboxes for each language front ends.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #updateFrontEndsCheckedMap = (checkboxId: string, checked: boolean) => {\n let currentState = this.#frontEndsCheckedMap.get(\n this.#selectedPrototypingEnvironmentId\n );\n if (!currentState) {\n // first time\n currentState = [];\n this.#frontEndsCheckedMap.set(\n this.#selectedPrototypingEnvironmentId,\n currentState\n );\n }\n if (checked) {\n // update by adding\n currentState.push(checkboxId);\n } else {\n // update by removing\n const checkboxIndex = currentState.findIndex(id => id === checkboxId);\n removeIndex(currentState, checkboxIndex);\n }\n };\n\n #getPrototypingEnvironments = async (): Promise<void> => {\n if (this.getPrototypingEnvironmentsCallback) {\n const selectedPrototypingTargetId = this.#prototypingTargetEl\n ? this.#prototypingTargetEl.value\n : this.prototypingTargetsInitialValue;\n const envs = await this.getPrototypingEnvironmentsCallback(\n selectedPrototypingTargetId\n );\n if (envs) {\n this.defaultPrototypingEnvironments = envs;\n }\n }\n };\n\n #getDataSources = (): void => {\n if (this.getDataSourcesCallback) {\n const selectedPrototypingEnvironmentId =\n this.#prototypingEnvironmentEl.value;\n const selectedPrototypingTargetId = this.#prototypingTargetEl.value;\n const updatedDefaultDataSourcesPromise: Promise<GxOption[]> =\n this.getDataSourcesCallback(\n selectedPrototypingEnvironmentId,\n selectedPrototypingTargetId\n );\n updatedDefaultDataSourcesPromise\n .then(result => {\n if (result.length > 0) {\n result = setSelectedItem(result, this.#selectedDataSourceId);\n this.#selectedDataSourceId = getSelectedItem(result);\n this.defaultDataSources = result;\n // set first option as selected\n this.#dataSourceEl.value =\n this.#selectedDataSourceId !== undefined\n ? this.#selectedDataSourceId\n : this.defaultDataSources[0].id;\n }\n })\n .catch(() => {\n // to do\n });\n }\n };\n\n #initialSetupAdvancedTab = () => {\n const hasWindowsAuth = this.authenticationTypes.some(\n opt => opt.id === WINDOWS_AUTHENTICATION_VALUE\n );\n if (hasWindowsAuth) {\n this.authenticationTypeValue = WINDOWS_AUTHENTICATION_VALUE;\n }\n };\n\n #initializeValidatableControlsBasicTab = () => {\n // populate #controlsValidation with the controls that could have errors.\n const validatableControls: HTMLElement[] = [\n this.#dataSourceEl,\n this.#kbNameEl,\n this.#prototypingEnvironmentEl,\n this.#prototypingTargetEl,\n this.#userInterfaceLanguageEl\n ];\n validatableControls.forEach(validatableControl => {\n if (validatableControl.id) {\n this.validatableControls.set(validatableControl.id, {\n reference: validatableControl,\n hasError: false,\n message: undefined\n });\n }\n });\n };\n\n #initializeValidatableControlsAdvancedTab = () => {\n // populate #controlsValidation with the controls that could have errors.\n const validatableControls: HTMLElement[] = [\n this.#authenticationTypeEl,\n this.#createDataFilesInKBFolderEl,\n this.#serverNameEl,\n this.#authenticationTypeEl,\n this.#databaseNameEl,\n this.#userNameEl,\n this.#collationEl,\n this.#passwordEl,\n this.#savePasswordEl\n ];\n validatableControls.forEach(validatableControl => {\n if (validatableControl.id) {\n this.validatableControls.set(validatableControl.id, {\n reference: validatableControl,\n hasError: false,\n message: undefined\n });\n }\n });\n };\n\n #selectLocationHandler = async (event: MouseEvent): Promise<void> => {\n // Capture the button before awaiting. Opening/closing the location picker\n // restores focus to it programmatically, leaving the :focus-visible outline\n // lingering as if it were still active. On a successful selection move focus\n // to the location input (natural next step, keyboard-friendly); otherwise\n // just blur the button so the outline doesn't stay pinned.\n const button = event.currentTarget as HTMLButtonElement;\n const kbLocation = await this.selectLocationCallback();\n if (kbLocation) {\n this.kbLocation = kbLocation;\n this.#locationEl?.focus();\n } else {\n button?.blur();\n }\n };\n\n #tabSelectionChangedHandler = (\n event: CustomEvent<{\n lastSelectedIndex: number;\n newSelectedId: string;\n newSelectedIndex: number;\n }>\n ): void => {\n this.selectedTab = event.detail.newSelectedId;\n if (event.detail.newSelectedId === ADVANCED_TAB_SELECTOR) {\n if (!this.advancedTabIsVisible) {\n this.advancedTabIsVisible = true;\n this.#loadAdvancedTabData();\n }\n } else {\n this.connectionStatus = undefined;\n }\n };\n\n #loadAdvancedTabData = async (): Promise<void> => {\n if (!this.getAdvancedTabDataCallback || this.loadingAdvancedTab) {\n return;\n }\n this.loadingAdvancedTab = true;\n this.connectionStatus = \"connecting\";\n try {\n const data = await this.getAdvancedTabDataCallback();\n if (data) {\n if (data.serverName != null) {\n this.serverNameValue = data.serverName;\n this.#applyCreateDataFilesInKBFolderForServer();\n }\n this.serverInstances = data.serverInstances ?? this.serverInstances;\n this.collations = data.collations ?? this.collations;\n this.authenticationTypes =\n data.authenticationTypes ?? this.authenticationTypes;\n this.defaultCollation = data.defaultCollation ?? this.defaultCollation;\n this.authenticationTypeValue =\n data.authenticationTypes?.[0]?.id ?? this.authenticationTypeValue;\n this.connectionStatus = \"success\";\n } else {\n this.connectionStatus = \"failed\";\n }\n } catch {\n this.connectionStatus = \"failed\";\n } finally {\n this.loadingAdvancedTab = false;\n }\n };\n\n /**\n * Evaluates which front-end options need updates on 'getFrontEndsCallback'\n * by comparing the new state (getFrontEndsCallback result) and previous state.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #updateFrontEnds = async () => {\n const updatedFrontEnds = await this.getFrontEndsCallback(\n this.#selectedPrototypingEnvironmentId\n );\n if (updatedFrontEnds?.length > 0) {\n this.frontEnds = updatedFrontEnds;\n\n // Seed the checked map from the data's checked property so that\n // initially checked items render as checked on first load.\n if (\n !this.#frontEndsCheckedMap.has(this.#selectedPrototypingEnvironmentId)\n ) {\n const checkedIds = updatedFrontEnds\n .filter(fe => fe.checked)\n .map(fe => fe.value || fe.id);\n\n if (checkedIds.length > 0) {\n this.#frontEndsCheckedMap.set(\n this.#selectedPrototypingEnvironmentId,\n checkedIds\n );\n }\n }\n\n this.#recomputeBackendOnly();\n }\n };\n\n render() {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-shortcuts\n src={this.#shortcutsSrc}\n ref={(el: HTMLChShortcutsElement) =>\n (this.#chShortcutsEl = el as HTMLChShortcutsElement)\n }\n ></ch-shortcuts>\n <section class=\"section\">\n <header\n class={{\n \"field-group\": true,\n \"dialog-header-with-border\": !this.isAdvanced,\n \"dialog-header\": this.isAdvanced,\n \"header\": true,\n \"header-one-col\": true,\n \"spacing-body-block-start\": true,\n \"spacing-body-inline\": true\n }}\n >\n <div\n // #kb name\n class=\"field field-inline kb-name\"\n >\n <label class=\"label kb-label\" htmlFor=\"kbName\">\n {this.#componentLocale.header.kbName}\n </label>\n <ch-edit\n // TODO add placeholder\n autoFocus\n class=\"input kb-input\"\n placeholder=\"SalesInventory\"\n value={this.kbName}\n onInput={this.#kbNameInputHandler}\n ref={(el: HTMLChEditElement) =>\n (this.#kbNameEl = el as HTMLChEditElement)\n }\n id=\"kbName\"\n part=\"kb-name\"\n ></ch-edit>\n {this.#evaluateTooltipRender(this.#kbNameEl)}\n </div>\n\n {this.canSetLocation && (\n <div class=\"field field-inline\">\n <label class=\"label\" htmlFor=\"kbLocation\">\n {this.#componentLocale.header.kbLocation}\n </label>\n <div class=\"location-custom-wrapper\">\n <div class=\"location-field\">\n <ch-edit\n class=\"input\"\n value={this.kbLocation}\n ref={(el: HTMLChEditElement) =>\n (this.#locationEl = el as HTMLChEditElement)\n }\n id=\"kbLocation\"\n part=\"kb-location\"\n ></ch-edit>\n {this.#evaluateTooltipRender(this.#locationEl)}\n </div>\n <button\n class=\"button-tertiary button-icon-only \"\n aria-label={\n this.#componentLocale.header.selectLocationButton\n }\n title={this.#componentLocale.header.selectLocationButton}\n part=\"button-select-location\"\n onClick={this.#selectLocationHandler}\n type=\"button\"\n >\n <ch-image class=\"icon-m\" src={SYSTEM_ICON}></ch-image>\n </button>\n </div>\n </div>\n )}\n </header>\n\n {this.isAdvanced ? (\n <ch-tab-render\n // #tab\n class={{\n scrollable: true,\n tab: true,\n [MAIN_SECTION_CLASSES]: true\n }}\n tabListPosition=\"block-start\"\n model={this.#kbSectionsModel}\n selectedId={BASIC_TAB_SELECTOR}\n overflow=\"auto\"\n contain=\"size\"\n onSelectedItemChange={this.#tabSelectionChangedHandler}\n >\n <div\n slot={BASIC_TAB_SELECTOR}\n class={BASIC_SECTION_PARENT_CLASSES}\n part=\"tab-button-basic\"\n >\n {this.#renderBasic()}\n </div>\n\n {this.advancedTabIsVisible && (\n <div\n slot={ADVANCED_TAB_SELECTOR}\n class=\"advanced\"\n part=\"tab-button-advanced\"\n >\n {this.loadingAdvancedTab ? (\n <gx-ide-loader\n show\n class=\"advanced-loader\"\n loaderTitle={this.#componentLocale.loader.title}\n description={this.#componentLocale.loader.description}\n ></gx-ide-loader>\n ) : (\n this.#renderAdvanced()\n )}\n </div>\n )}\n </ch-tab-render>\n ) : (\n <div class={MAIN_SECTION_CLASSES}>\n <div class={BASIC_SECTION_PARENT_CLASSES}>\n {this.#renderBasic()}\n </div>\n </div>\n )}\n\n <footer\n class={{\n \"footer\": true,\n \"dialog-footer-with-border\": true,\n \"spacing-body-block-end\": true,\n \"spacing-body-inline\": true\n }}\n >\n {this.connectionStatus && (\n <span\n class={{\n \"body-semi-bold-s\": true,\n \"connection-status\": true,\n [`connection-status--${this.connectionStatus}`]: true\n }}\n part={`connection-status connection-status-${this.connectionStatus}`}\n >\n {this.connectionStatus === \"connecting\" && (\n <span class=\"connection-status__spinner\"></span>\n )}\n {this.connectionStatus === \"success\" && (\n <ch-image\n class=\"icon-m\"\n src={SUCCESS_ICON}\n type=\"mask\"\n ></ch-image>\n )}\n {this.connectionStatus === \"failed\" && (\n <ch-image\n class=\"icon-m\"\n src={ERROR_ICON}\n type=\"mask\"\n ></ch-image>\n )}\n {\n this.#componentLocale.footer.connectionStatus[\n this.connectionStatus\n ]\n }\n </span>\n )}\n <div class=\"buttons-spacer\">\n <button\n // #cancel\n class=\"button-secondary\"\n id=\"button-cancel\"\n onClick={this.#cancelKbHandler}\n part=\"button-cancel\"\n >\n {this.#componentLocale.footer.btnCancel}\n </button>\n <button\n // #create\n class=\"button-primary\"\n id=\"button-create\"\n disabled={\n this.connectionStatus === \"failed\" ||\n this.connectionStatus === \"connecting\" ||\n this.#sqlAuthMissingCredentials()\n }\n onClick={this.#createKbHandler}\n part=\"button-create\"\n >\n {this.#componentLocale.footer.btnCreate}\n </button>\n </div>\n </footer>\n </section>\n </Host>\n );\n }\n}\nexport interface NewKBData {\n authenticationType: string;\n collation: string;\n createDataFilesInKBFolder: boolean;\n databaseName: string;\n dataSource: string;\n frontEnds: string[];\n kbLocation: string;\n kbName: string;\n password: string;\n prototypingEnvironment: string;\n prototypingTarget: string;\n savePassword: boolean;\n serverName: string;\n userInterfaceLanguage: string;\n userName: string;\n creationMode: CreationMode;\n}\n\nexport type CreationMode = \"basic\" | \"advanced\";\nexport type CreateCallback = (data: NewKBData) => Promise<FormSubmitResult>;\n\nexport type CancelCallback = () => Promise<void>;\n\nexport type GetDataSourcesCallback = (\n selectedPrototypingEnvironmentId: string,\n selectedPrototypingTargetId: string\n) => Promise<GxOption[]>;\n\nexport type GetFrontEndsCallback = (\n selectedPrototypingEnvironmentId: string\n) => Promise<GxOption[]>;\n\nexport type GetPrototypingEnvironmentsCallback = (\n selectedPrototypingTargetId: string\n) => Promise<GxOption[]>;\n\nexport type SelectLocationCallback = () => Promise<string>;\n\nexport type BrowseForMoreCallback = () => Promise<string>;\n\nexport type CollationsForInstanceResult = {\n collations: GxOption[];\n defaultCollation: string;\n};\n\nexport type GetCollationsForInstanceCallback = (\n serverInstance: string,\n authType?: string,\n userName?: string,\n password?: string\n) => Promise<CollationsForInstanceResult | undefined>;\n\nexport interface AdvancedTabData {\n serverName?: string;\n serverInstances?: GxOption[];\n collations?: GxOption[];\n authenticationTypes?: GxOption[];\n defaultCollation?: string;\n}\n\nexport type GetAdvancedTabDataCallback = () => Promise<\n AdvancedTabData | undefined\n>;\n"],"mappings":"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"}
|
|
@@ -4,6 +4,6 @@ import { ImportCategoryData, ImportItemResultData, ImportItemData } from "../../
|
|
|
4
4
|
export declare const KB_OBJECT = "object";
|
|
5
5
|
export declare const KB_CATEGORY = "category";
|
|
6
6
|
export declare const STATUS_REGEXP_KEY = "status";
|
|
7
|
-
export declare const convertImportCategoryItemToTreeItem: (importCatIcon: string, importItems: ImportItemData[]) => TreeViewItemModel[];
|
|
7
|
+
export declare const convertImportCategoryItemToTreeItem: (importCatIcon: string, importItems: ImportItemData[], checked?: boolean) => TreeViewItemModel[];
|
|
8
8
|
export declare const convertImportCategoryDataToTreeView: (importCategoryData: ImportCategoryData[]) => TreeViewModel;
|
|
9
9
|
export declare const addImportItemResultDataItem: (importItemResultData: ImportItemResultData, categoryItemMap: CategoryItemMap, objectCategoryItemMap: ObjectCategoryItemMap, importTreeActualState: TreeViewItemModel[]) => TreeViewModel;
|
|
@@ -43,15 +43,20 @@ export declare class GxIdeNewEnvironment {
|
|
|
43
43
|
* Callback invoked when user changes the language
|
|
44
44
|
*/
|
|
45
45
|
readonly getFrontEndsCallback: GetFrontEndsCallback;
|
|
46
|
+
/**
|
|
47
|
+
* Possible values for 'Language' combo
|
|
48
|
+
*/
|
|
49
|
+
languages: GxOption[];
|
|
50
|
+
languagesChanged(newValue: GxOption[]): void;
|
|
46
51
|
/**
|
|
47
52
|
* Define if the Advanced tab should be displayed
|
|
48
53
|
*/
|
|
49
54
|
readonly isAdvanced: boolean;
|
|
50
55
|
/**
|
|
51
|
-
*
|
|
56
|
+
* When true, the KB is backend only, so no front ends can be selected. A
|
|
57
|
+
* callout is shown below the front end checkboxes explaining this.
|
|
52
58
|
*/
|
|
53
|
-
|
|
54
|
-
languagesChanged(newValue: GxOption[]): void;
|
|
59
|
+
readonly isBackendOnly: boolean;
|
|
55
60
|
/**
|
|
56
61
|
* Callback invoked when selected runtime is changed
|
|
57
62
|
*/
|
|
@@ -8,12 +8,16 @@ export declare class GxIdeNewKb {
|
|
|
8
8
|
loadingAdvancedTab: boolean;
|
|
9
9
|
browseForMoreDialogOpen: boolean;
|
|
10
10
|
databaseNameValue: string;
|
|
11
|
-
locationMode: string;
|
|
12
11
|
/**
|
|
13
12
|
* Allows selecting multiple generators for the front end
|
|
14
13
|
* TODO: Check if this property can be deleted, since we can call getFrontEndsCallback.
|
|
15
14
|
*/
|
|
16
15
|
frontEnds: GxOption[];
|
|
16
|
+
/**
|
|
17
|
+
* True when front ends are available but none is selected, meaning the KB
|
|
18
|
+
* will be generated as backend only. Drives the backend-only callout.
|
|
19
|
+
*/
|
|
20
|
+
noFrontEndSelected: boolean;
|
|
17
21
|
validatableControls: Map<string, ControlValidation>;
|
|
18
22
|
connectionStatus: "connecting" | "success" | "failed" | undefined;
|
|
19
23
|
userNameValue: string;
|
|
@@ -36,7 +36,6 @@ export declare class GxIdeCreateKbFromServer {
|
|
|
36
36
|
* String value to show the number of versions selected ("N versions selected")
|
|
37
37
|
*/
|
|
38
38
|
versionsValueInput: string;
|
|
39
|
-
locationMode: string;
|
|
40
39
|
/**
|
|
41
40
|
* Default suggested path to a directory where the KB will be stored/generated.
|
|
42
41
|
*/
|
|
@@ -1684,6 +1684,10 @@ export namespace Components {
|
|
|
1684
1684
|
* Define if the Advanced tab should be displayed
|
|
1685
1685
|
*/
|
|
1686
1686
|
"isAdvanced": boolean;
|
|
1687
|
+
/**
|
|
1688
|
+
* When true, the KB is backend only, so no front ends can be selected. A callout is shown below the front end checkboxes explaining this.
|
|
1689
|
+
*/
|
|
1690
|
+
"isBackendOnly": boolean;
|
|
1687
1691
|
/**
|
|
1688
1692
|
* Possible values for 'Language' combo
|
|
1689
1693
|
*/
|
|
@@ -5696,6 +5700,10 @@ declare namespace LocalJSX {
|
|
|
5696
5700
|
* Define if the Advanced tab should be displayed
|
|
5697
5701
|
*/
|
|
5698
5702
|
"isAdvanced"?: boolean;
|
|
5703
|
+
/**
|
|
5704
|
+
* When true, the KB is backend only, so no front ends can be selected. A callout is shown below the front end checkboxes explaining this.
|
|
5705
|
+
*/
|
|
5706
|
+
"isBackendOnly"?: boolean;
|
|
5699
5707
|
/**
|
|
5700
5708
|
* Possible values for 'Language' combo
|
|
5701
5709
|
*/
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["newEnvironmentCss","CSS_BUNDLES","MAIN_SECTION_CLASSES","BASIC_SECTION_PARENT_CLASSES","BASIC_TAB_SELECTOR","ADVANCED_TAB_SELECTOR","GxIdeNewEnvironment","_GxIdeNewEnvironment_advancedTabHasBeenRendered","set","this","_GxIdeNewEnvironment_chShortcutsEl","_GxIdeNewEnvironment_envNameModifiedByUser","_GxIdeNewEnvironment_frontEndsCheckedMap","Map","_GxIdeNewEnvironment_selectedDataStoreId","_GxIdeNewEnvironment_selectedLanguageId","_GxIdeNewEnvironment_selectedRuntimeEnvironmentId","_GxIdeNewEnvironment_shortcutsSrc","getAssetPath","_GxIdeNewEnvironment_newEnvironmentSectionsModel","_GxIdeNewEnvironment_componentLocale","_GxIdeNewEnvironment_dataStoreEl","_GxIdeNewEnvironment_environmentNameEl","_GxIdeNewEnvironment_languageEl","_GxIdeNewEnvironment_setAsCurrentEnvironmentEl","_GxIdeNewEnvironment_dataStoreValueChangedHandler","__classPrivateFieldSet","__classPrivateFieldGet","value","_GxIdeNewEnvironment_updateEnvironmentName","call","_GxIdeNewEnvironment_envNameInputHandler","e","newEnvName","detail","trim","environmentName","_GxIdeNewEnvironment_evaluateSelectedRuntimeEnvironmentId","_a","runtimes","_GxIdeNewEnvironment_evaluateTooltipRender","controlReference","_b","validatableControls","get","id","hasError","_c","message","h","class","actionElement","blockAlign","config","tooltipSettings","inlineAlign","delay","_GxIdeNewEnvironment_initializeValidatableControlsBasicTab","forEach","validatableControl","reference","undefined","_GxIdeNewEnvironment_languageValueChangedHandler","async","event","_GxIdeNewEnvironment_updateDataSources","_GxIdeNewEnvironment_updateFrontEnds","_GxIdeNewEnvironment_renderAdvanced","name","_GxIdeNewEnvironment_renderBasic","length","runtime","onChange","_GxIdeNewEnvironment_runtimeEnvironmentChangedHandler","model","runtimesRadioGroupModel","caption","tabBasic","backEnd","backEndLabel","htmlFor","language","part","disabled","languages","languageComboBoxModel","onInput","ref","el","dataStores","dataStoresComboBoxModel","frontEnd","frontEndLabel","role","generators","renderChCheckboxItems","frontEnds","_GxIdeNewEnvironment_frontEndCheckboxInputHandler","_GxIdeNewEnvironment_updateLanguages","_GxIdeNewEnvironment_createCallbackHandler","selectedFrontEndIds","createCallback","setAsCurrent","then","formSubmitResult","validateControls","_GxIdeNewEnvironment_tabSelectionChangedHandler","newSelectedId","advancedTabIsVisible","updatedDataSources","getDataSourcesCallback","getEnvironmentNameCallback","updatedFrontEnds","getFrontEndsCallback","updatedLanguages","getLanguagesCallback","checkedValue","target","checked","_GxIdeNewEnvironment_updateFrontEndsCheckedMap","checkboxId","currentState","push","checkboxIndex","findIndex","removeIndex","dataStoresChanged","newValue","mapOptionsToComboBoxItemModel","result","setSelectedItem","getSelectedItem","languagesChanged","runtimesChanged","connectedCallback","componentDidLoad","componentDidRender","componentWillLoad","Locale","getComponentStrings","tabLabel","tabAdvanced","suspendShortcuts","suspend","render","Host","src","header","isAdvanced","autoFocus","placeholder","environmentNamePlaceholder","tab","tabListPosition","selectedId","overflow","contain","onSelectedItemChange","slot","footer","setAsCurrentEnvironment","setAsTarget","onClick","cancelCallback","btnCancel","btnCreate"],"sources":["src/components/new-environment/new-environment.scss?tag=gx-ide-new-environment&encapsulation=shadow","src/components/new-environment/new-environment.tsx"],"sourcesContent":["@import \"../../global/temporary-mercury-overrides/_button.scss\";\n\n:host {\n display: grid;\n block-size: 100%;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n\n.basic,\n.advanced {\n padding-block-start: 16px;\n block-size: 100%;\n overflow: auto;\n}\n.advanced {\n padding-block-end: 12px;\n}\n\n// basic\n.basic {\n display: grid;\n grid-template:\n \"runtime-environment runtime-environment\" max-content\n \"back-end front-end\" 1fr;\n grid-template-columns: 1fr 1fr;\n}\n.basic__runtime-environment {\n grid-area: runtime-environment;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--spacing-gap-m);\n}\n.basic__runtime-environment.one-runtime-only {\n align-items: center;\n flex-direction: row;\n justify-content: center;\n}\n.dialog-header__back-end,\n.dialog-header__front-end {\n padding-block-start: 16px;\n}\n.basic__back-end {\n grid-area: back-end;\n}\n.basic__front-end {\n grid-area: front-end;\n}\n.basic__back-end,\n.basic__front-end {\n display: grid;\n grid-template-rows: max-content 1fr;\n grid-auto-rows: max-content;\n overflow: auto;\n}\n.main__back-end {\n border-inline-end: var(--section-common-border);\n}\n.main__back-end,\n.main__front-end {\n grid-auto-rows: max-content;\n padding-block: 12px;\n overflow: auto;\n}\n\n// WA / TODO: Add a helper class in Mercury to justify text.\n.text-align-center {\n text-align: center; // should be resolved on mercury\n}\n\n.tab::part(page) {\n // WA / TODO: Remove this line when the ch-tab renders supports scrollbar\n // custom styling\n scrollbar-width: thin;\n}\n\n// WA: Staring on Mercury V1.0.0. the checkbox displays an outline all around.\n// This requires the checkbox inline-size to be set to max-content.\n// TODO: Remove this once the checkbox displays correctly on a later version of Mercury.\n.checkbox {\n inline-size: max-content;\n}\n","/* STENCIL IMPORTS */\nimport {\n Component,\n Element,\n getAssetPath,\n Host,\n Method,\n Prop,\n State,\n h,\n Watch\n} from \"@stencil/core\";\n\nimport { MercuryBundles } from \"@genexus/mercury\";\n\nimport { config } from \"../../common/config\";\nimport { Locale } from \"../../common/locale\";\nimport {\n mapOptionsToComboBoxItemModel,\n renderChCheckboxItems\n} from \"../../common/helpers\";\nimport { getSelectedItem, setSelectedItem } from \"../../common/common\";\nimport { FormSubmitResult, GxOption } from \"../../common/types\";\nimport {\n ControlValidation,\n validateControls\n} from \"../../common/form-validation\";\nimport {\n ChRadioGroupRenderCustomEvent,\n TabModel,\n ComboBoxModel,\n ChEditCustomEvent,\n RadioGroupModel,\n ChCheckboxCustomEvent\n} from \"@genexus/chameleon-controls-library\";\nimport { removeIndex } from \"../../common/array\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n // TODO: review if \"utils/form--full\" is required.\n \"resets/box-sizing\",\n \"components/tab\",\n \"components/tooltip\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst MAIN_SECTION_CLASSES: string = \"main\";\nconst BASIC_SECTION_PARENT_CLASSES: string = \"basic\";\nconst BASIC_TAB_SELECTOR: string = \"basic\";\nconst ADVANCED_TAB_SELECTOR: string = \"advanced\";\n\n@Component({\n tag: \"gx-ide-new-environment\",\n styleUrl: \"new-environment.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/new-environment\"]\n})\nexport class GxIdeNewEnvironment {\n #advancedTabHasBeenRendered: boolean = false;\n #chShortcutsEl!: HTMLChShortcutsElement;\n #envNameModifiedByUser = false;\n /**\n * frontEndsState saves the id's of the front ends checkboxes that are checked\n */\n // TODO (Use a set instead of an array to improve performance)\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #frontEndsCheckedMap = new Map<string, string[]>();\n #selectedDataStoreId: string;\n #selectedLanguageId: string;\n #selectedRuntimeEnvironmentId: string;\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/new-environment/shortcuts.json`\n );\n #newEnvironmentSectionsModel: TabModel = [];\n\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n\n @Element() el: HTMLGxIdeNewEnvironmentElement;\n\n // References needed to collect data con \"createCallback\" button submit*/\n #dataStoreEl!: HTMLChComboBoxRenderElement;\n #environmentNameEl!: HTMLChEditElement;\n #languageEl!: HTMLChComboBoxRenderElement;\n #setAsCurrentEnvironmentEl!: HTMLChCheckboxElement;\n\n @State() advancedTabIsVisible: boolean = false;\n\n /**\n * Allows selecting multiple generators for the front end\n * TODO: Check if this property can be deleted, since we can call getFrontEndsCallback.\n */\n @State() frontEnds: GxOption[];\n\n @State() validatableControls = new Map<string, ControlValidation>();\n\n // representations of GxOption[] as ComboBoxModel or RadioGroupModel.\n @State() dataStoresComboBoxModel: ComboBoxModel = [];\n @State() languageComboBoxModel: ComboBoxModel = [];\n @State() runtimesRadioGroupModel: RadioGroupModel = [];\n\n /**\n * Callback invoked when user wants to cancel\n */\n @Prop() readonly cancelCallback: CancelCallback;\n\n /**\n * Callback invoked when user confirms the KB creation\n */\n @Prop() readonly createCallback!: CreateCallback;\n\n /**\n * Allows defining the DBMS to be used in the solution\n */\n @Prop({ mutable: true }) dataStores!: GxOption[];\n @Watch(\"dataStores\")\n dataStoresChanged(newValue: GxOption[]) {\n if (newValue?.length) {\n this.dataStoresComboBoxModel = mapOptionsToComboBoxItemModel(newValue);\n const result = setSelectedItem(newValue, this.#selectedDataStoreId);\n this.#selectedDataStoreId = getSelectedItem(result);\n }\n }\n\n /**\n * Name of the new environment\n */\n @Prop({ mutable: true }) environmentName: string;\n\n /**\n * Callback invoked when user changes the language or the runtime\n */\n @Prop() readonly getDataSourcesCallback!: GetDataSourcesCallback;\n\n /**\n * Callback invoked when user changes the language or data source\n */\n @Prop() readonly getEnvironmentNameCallback!: GetEnvironmentNameCallback;\n\n /**\n * Callback invoked when user changes the language\n */\n @Prop() readonly getFrontEndsCallback!: GetFrontEndsCallback;\n\n /**\n * Define if the Advanced tab should be displayed\n */\n @Prop() readonly isAdvanced: boolean = false;\n\n /**\n * Possible values for 'Language' combo\n */\n @Prop({ mutable: true }) languages!: GxOption[];\n @Watch(\"languages\")\n languagesChanged(newValue: GxOption[]) {\n if (newValue?.length) {\n this.languageComboBoxModel = mapOptionsToComboBoxItemModel(newValue);\n this.#selectedLanguageId = getSelectedItem(newValue);\n this.#updateFrontEnds();\n }\n }\n\n /**\n * Callback invoked when selected runtime is changed\n */\n @Prop() readonly getLanguagesCallback!: GetLanguagesCallback;\n\n /**\n * Possible values for 'Runtime Environment' radio button\n */\n @Prop() readonly runtimes!: GxOption[];\n @Watch(\"runtimes\")\n runtimesChanged(newValue: GxOption[]) {\n if (newValue?.length) {\n this.runtimesRadioGroupModel = mapOptionsToComboBoxItemModel(\n this.runtimes\n );\n\n this.#updateLanguages();\n }\n }\n\n /**\n * Belongs to checkbox 'Set as current environment' @default true\n *\n */\n @Prop() readonly setAsTarget?: boolean = true;\n\n connectedCallback() {\n this.dataStoresChanged(this.dataStores);\n this.languagesChanged(this.languages);\n this.runtimesChanged(this.runtimes);\n }\n\n componentDidLoad() {\n this.#initializeValidatableControlsBasicTab();\n }\n\n componentDidRender() {\n if (this.advancedTabIsVisible && !this.#advancedTabHasBeenRendered) {\n // just call this once.\n this.#advancedTabHasBeenRendered = true;\n }\n }\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.#newEnvironmentSectionsModel = [\n {\n id: BASIC_TAB_SELECTOR,\n name: this.#componentLocale.tabBasic.tabLabel\n },\n {\n id: ADVANCED_TAB_SELECTOR,\n name: this.#componentLocale.tabAdvanced.tabLabel\n }\n ];\n this.#evaluateSelectedRuntimeEnvironmentId();\n }\n\n /**\n * Suspends or reactivates the shortcuts\n */\n @Method()\n async suspendShortcuts(suspendShortcuts: boolean) {\n if (suspendShortcuts) {\n this.#chShortcutsEl.suspend = true;\n } else {\n this.#chShortcutsEl.suspend = false;\n }\n }\n\n #dataStoreValueChangedHandler = () => {\n /* the data store item id is used for the value (they are equal)*/\n this.#selectedDataStoreId = this.#dataStoreEl.value;\n this.#updateEnvironmentName();\n };\n\n #envNameInputHandler = (e: ChEditCustomEvent<string> | InputEvent) => {\n const newEnvName = (e as ChEditCustomEvent<string>).detail.trim();\n this.#envNameModifiedByUser = newEnvName !== this.environmentName;\n };\n\n #evaluateSelectedRuntimeEnvironmentId = () => {\n this.#selectedRuntimeEnvironmentId = this.runtimes[0]?.value;\n };\n\n // TODO: We must avoid performing the get 3 times.\n // It is used on new-environment as well.\n #evaluateTooltipRender = (\n controlReference: HTMLElement\n ): HTMLChTooltipElement =>\n this.validatableControls?.get(controlReference?.id)?.hasError &&\n this.validatableControls.get(controlReference.id)?.message && (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={controlReference as unknown as HTMLButtonElement}\n blockAlign={config.tooltipSettings.blockAlign}\n inlineAlign={config.tooltipSettings.inlineAlign}\n delay={config.tooltipSettings.delay}\n >\n {this.validatableControls.get(controlReference.id).message}\n </ch-tooltip>\n );\n\n #initializeValidatableControlsBasicTab = () => {\n // populate #controlsValidation with the controls that could have errors.\n const validatableControls: HTMLElement[] = [\n this.#dataStoreEl,\n this.#languageEl\n ];\n validatableControls.forEach(validatableControl => {\n if (validatableControl.id) {\n this.validatableControls.set(validatableControl.id, {\n reference: validatableControl,\n hasError: false,\n message: undefined\n });\n }\n });\n };\n\n #languageValueChangedHandler = async (\n event: CustomEvent<string> | InputEvent\n ) => {\n this.#selectedLanguageId = event.detail as string;\n await this.#updateDataSources();\n this.#updateFrontEnds();\n this.#updateEnvironmentName();\n };\n\n #renderAdvanced = (): Element => {\n return <slot name=\"property-grid\"></slot>;\n };\n\n #renderBasic = (): HTMLElement[] => {\n return [\n <div\n class={{\n \"basic__runtime-environment\": true,\n \"dialog-header-with-border\": true,\n \"one-runtime-only\": this.runtimes.length === 1\n }}\n >\n {this.runtimes.length > 1\n ? [\n <h2\n // Runtime Environment\n class=\"subtitle-regular-xs\t text-align-center\"\n >\n {this.#componentLocale.runtime}\n </h2>,\n <ch-radio-group-render\n class=\"radio-group\"\n onChange={this.#runtimeEnvironmentChangedHandler}\n model={this.runtimesRadioGroupModel}\n value={this.#selectedRuntimeEnvironmentId}\n ></ch-radio-group-render>\n ]\n : [\n <h2 class=\"subtitle-regular-xs\t text-align-center\">\n {this.#componentLocale.runtime}:\n </h2>,\n <p>{this.runtimesRadioGroupModel[0].caption}</p>\n ]}\n </div>,\n <section class=\"basic__back-end scrollable\">\n <h2\n // back end\n class=\"dialog-header dialog-header-with-border dialog-header__back-end subtitle-regular-xs\t text-align-center spacing-body-inline\"\n >\n {this.#componentLocale.tabBasic.backEnd.backEndLabel}\n </h2>\n\n <div class=\"field-group main__back-end spacing-body-inline scrollable\">\n <div\n // #language\n class=\"field field-block\"\n >\n <label class=\"label\" htmlFor=\"language\">\n {this.#componentLocale.tabBasic.backEnd.language}\n </label>\n <ch-combo-box-render\n id=\"language\"\n class=\"combo-box\"\n part=\"language\"\n value={this.#selectedLanguageId}\n disabled={this.languages.length === 0}\n model={this.languageComboBoxModel}\n onInput={this.#languageValueChangedHandler}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#languageEl = el as HTMLChComboBoxRenderElement)\n }\n // TODO: toolTip={config.tooltip}\n ></ch-combo-box-render>\n {this.#evaluateTooltipRender(this.#languageEl)}\n </div>\n\n <div\n // #data stores\n class=\"field field-block\"\n >\n <label class=\"label\" htmlFor=\"data-store\">\n {this.#componentLocale.tabBasic.backEnd.dataStores}\n </label>\n <ch-combo-box-render\n id=\"data-store\"\n class=\"combo-box\"\n part=\"data-store\"\n value={this.#selectedDataStoreId}\n model={this.dataStoresComboBoxModel}\n onInput={this.#dataStoreValueChangedHandler}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#dataStoreEl = el as HTMLChComboBoxRenderElement)\n }\n // TODO: toolTip={config.tooltip}\n ></ch-combo-box-render>\n {this.#evaluateTooltipRender(this.#dataStoreEl)}\n </div>\n </div>\n </section>,\n\n <section class=\"basic__front-end scrollable\">\n <h2\n // front end\n class=\"dialog-header dialog-header-with-border dialog-header__front-end subtitle-regular-xs\t text-align-center spacing-body-inline\"\n >\n {this.#componentLocale.tabBasic.frontEnd.frontEndLabel}\n </h2>\n <div\n class=\"field-group front-end__checkboxes spacing-body-inline main__front-end scrollable\"\n role=\"group\"\n aria-labelledby={this.#componentLocale.tabBasic.frontEnd.generators}\n >\n {renderChCheckboxItems(\n this.frontEnds,\n this.#frontEndCheckboxInputHandler,\n this.#frontEndsCheckedMap.get(this.#selectedLanguageId)\n )}\n </div>\n </section>\n ];\n };\n\n #runtimeEnvironmentChangedHandler = async (\n event: ChRadioGroupRenderCustomEvent<string>\n ): Promise<void> => {\n this.#selectedRuntimeEnvironmentId = event.detail;\n await this.#updateLanguages();\n await this.#updateDataSources();\n this.#updateEnvironmentName();\n };\n\n #createCallbackHandler = async () => {\n const selectedFrontEndIds =\n this.#frontEndsCheckedMap.get(this.#selectedLanguageId) ?? [];\n\n this.createCallback({\n setAsCurrent: !!this.#setAsCurrentEnvironmentEl?.value,\n name: this.#environmentNameEl.value,\n runtime: this.#selectedRuntimeEnvironmentId,\n language: this.#languageEl.value,\n dataStores: this.#dataStoreEl.value,\n frontEnds: selectedFrontEndIds\n }).then((formSubmitResult: FormSubmitResult) => {\n this.validatableControls = validateControls(\n formSubmitResult,\n this.validatableControls\n );\n });\n };\n\n #tabSelectionChangedHandler = (\n event: CustomEvent<{\n lastSelectedIndex: number;\n newSelectedId: string;\n newSelectedIndex: number;\n }>\n ): void => {\n if (event.detail.newSelectedId === ADVANCED_TAB_SELECTOR) {\n this.advancedTabIsVisible = true;\n // Some logic for advanced tab is done on componentDidRender lifecycle,\n // since the reference to the elements is needed.\n }\n };\n\n #updateDataSources = async () => {\n const updatedDataSources = await this.getDataSourcesCallback(\n this.#selectedLanguageId,\n this.#selectedRuntimeEnvironmentId\n );\n if (updatedDataSources?.length > 0) {\n this.dataStores = updatedDataSources;\n }\n };\n\n #updateEnvironmentName = async () => {\n if (!this.#envNameModifiedByUser) {\n this.environmentName = await this.getEnvironmentNameCallback(\n this.#selectedLanguageId,\n this.#selectedDataStoreId,\n this.#selectedRuntimeEnvironmentId\n );\n }\n };\n\n #updateFrontEnds = async () => {\n const updatedFrontEnds = await this.getFrontEndsCallback(\n this.#selectedLanguageId\n );\n if (updatedFrontEnds?.length > 0) {\n this.frontEnds = updatedFrontEnds;\n }\n };\n\n #updateLanguages = async () => {\n const updatedLanguages = await this.getLanguagesCallback(\n this.#selectedRuntimeEnvironmentId\n );\n if (updatedLanguages?.length > 0) {\n this.languages = updatedLanguages;\n }\n };\n\n #frontEndCheckboxInputHandler = (\n event: ChCheckboxCustomEvent<string> | InputEvent\n ) => {\n const checkedValue = (event.target as HTMLChCheckboxElement).checkedValue;\n const checked = event.detail === checkedValue;\n this.#updateFrontEndsCheckedMap(checkedValue, checked);\n };\n\n /**\n * This function updates frontEndsCheckedMap, that contains the checked\n * checkboxes for each language front ends.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #updateFrontEndsCheckedMap = (checkboxId: string, checked: boolean) => {\n let currentState = this.#frontEndsCheckedMap.get(this.#selectedLanguageId);\n if (!currentState) {\n // first time\n currentState = [];\n this.#frontEndsCheckedMap.set(this.#selectedLanguageId, currentState);\n }\n if (checked) {\n // update by adding\n currentState.push(checkboxId);\n } else {\n // update by removing\n const checkboxIndex = currentState.findIndex(id => id === checkboxId);\n removeIndex(currentState, checkboxIndex);\n }\n };\n\n render() {\n return (\n <Host class=\"widget scrollable\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-shortcuts\n src={this.#shortcutsSrc}\n ref={(el: HTMLChShortcutsElement) =>\n (this.#chShortcutsEl = el as HTMLChShortcutsElement)\n }\n ></ch-shortcuts>\n\n <section class=\"section\">\n <header\n class={{\n \"header\": true,\n \"spacing-body-inline\": true,\n \"spacing-body-block-start\": true,\n \"dialog-header\": this.isAdvanced,\n \"dialog-header-with-border\": !this.isAdvanced\n }}\n >\n <div\n // #environment name\n class=\"field field-inline\"\n >\n <label class=\"label\" htmlFor=\"environment-name\">\n {this.#componentLocale.name}\n </label>\n <ch-edit\n // environment name\n autoFocus\n id=\"environment-name\"\n class=\"input\"\n part=\"environment-name\"\n value={this.environmentName}\n placeholder={this.#componentLocale.environmentNamePlaceholder}\n // TODO: toolTip={config.tooltip}\n ref={(el: HTMLChEditElement) =>\n (this.#environmentNameEl = el as HTMLChEditElement)\n }\n onInput={this.#envNameInputHandler}\n ></ch-edit>\n </div>\n </header>\n\n {this.isAdvanced ? (\n <ch-tab-render\n // main section\n class={{\n tab: true,\n [MAIN_SECTION_CLASSES]: true\n }}\n tabListPosition=\"block-start\"\n model={this.#newEnvironmentSectionsModel}\n selectedId={BASIC_TAB_SELECTOR}\n overflow=\"auto\"\n contain=\"size\"\n onSelectedItemChange={\n !this.advancedTabIsVisible && this.#tabSelectionChangedHandler\n }\n >\n <div\n slot={BASIC_TAB_SELECTOR}\n class={BASIC_SECTION_PARENT_CLASSES}\n part=\"tab-button-basic\"\n >\n {this.#renderBasic()}\n </div>\n {this.advancedTabIsVisible && (\n <div\n slot={ADVANCED_TAB_SELECTOR}\n class=\"advanced spacing-body-inline\"\n part=\"tab-button-advanced\"\n >\n {this.#renderAdvanced()}\n </div>\n )}\n </ch-tab-render>\n ) : (\n <div\n // main section\n class={MAIN_SECTION_CLASSES}\n >\n <div class={BASIC_SECTION_PARENT_CLASSES}>\n {this.#renderBasic()}\n </div>\n </div>\n )}\n\n <footer\n class={{\n \"dialog-footer\": this.isAdvanced,\n \"dialog-footer-with-border\": !this.isAdvanced,\n \"dialog-footer-space-between\": true,\n \"spacing-body-block-end\": true,\n \"spacing-body-inline\": true\n }}\n >\n <ch-checkbox\n // #set as current environment\n class=\"checkbox\"\n caption={this.#componentLocale.footer.setAsCurrentEnvironment}\n ref={(el: HTMLChCheckboxElement) =>\n (this.#setAsCurrentEnvironmentEl = el as HTMLChCheckboxElement)\n }\n checkedValue=\"current-environment\"\n value={this.setAsTarget ? \"current-environment\" : \"\"}\n part=\"set-as-current-environment\"\n ></ch-checkbox>\n\n <div class=\"buttons-spacer\">\n <button\n // #cancel\n class=\"button-secondary\"\n onClick={this.cancelCallback}\n part=\"button button-cancel\"\n >\n {this.#componentLocale.footer.btnCancel}\n </button>\n\n <button\n // #create\n class=\"button-primary\"\n onClick={this.#createCallbackHandler}\n part=\"button button-create\"\n >\n {this.#componentLocale.footer.btnCreate}\n </button>\n </div>\n </footer>\n </section>\n </Host>\n );\n }\n}\n\nexport type CancelCallback = () => Promise<void>;\n\nexport type CreateCallback = (\n data: NewEnvironmentData\n) => Promise<FormSubmitResult>;\n\nexport type GetDataSourcesCallback = (\n selectedLanguageId: string,\n selectedRuntimeId: string\n) => Promise<GxOption[]>;\n\nexport type GetEnvironmentNameCallback = (\n selectedLanguageId: string,\n selectedDataSourceId: string,\n selectedRuntimeId: string\n) => Promise<string | undefined>;\n\nexport type GetFrontEndsCallback = (\n selectedLanguageId: string\n) => Promise<GxOption[]>;\n\nexport type GetLanguagesCallback = (\n selectedRuntimeId: string\n) => Promise<GxOption[]>;\n\nexport interface NewEnvironmentData {\n setAsCurrent: boolean;\n name: string;\n runtime: string;\n language: string;\n dataStores: string;\n frontEnds: string[];\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["MAX_CATEGORY_ITEMS_FIRST_RENDER","KB_OBJECT","KB_CATEGORY","STATUS_REGEXP_KEY","convertImportCategoryItemToTreeItem","importCatIcon","importItems","importTreeItems","forEach","importItem","push","id","caption","name","expanded","leaf","startImgSrc","_a","icon","metadata","convertImportCategoryDataToTreeView","importCategoryData","treeData","importCategory","importCategoryTreeItem","items","length","lazy","createImportResultDataMessages","importItemId","messagesArray","status","messages","message","i","JSON","stringify","createImportResultItem","categoryData","importItemResultData","resultItemId","importResultItem","parts","addImportItemResultDataItem","categoryItemMap","objectCategoryItemMap","importTreeActualState","updatedImportTreeModel","objectCategoryId","get","categoryIndex","findIndex","treeItem","category","resultItem","newItemsLength","kbManagerImportCss","CSS_BUNDLES","NOTICE_ICON","getIconPath","colorType","FILE_ICON","GEMINI_TOOLS_SETTINGS","MENU_DELETE","CHECKBOX_ALL_CHECKED_VALUE","CHECKBOX_ALL_UNCHECKED_VALUE","GxIdeKbManagerImport","_GxIdeKbManagerImport_componentLocale","set","this","_GxIdeKbManagerImport_selectedObjectsInFileIds","_GxIdeKbManagerImport_fileInputEl","_GxIdeKbManagerImport_fileInputHiddenEl","_GxIdeKbManagerImport_objectsTreeEl","_GxIdeKbManagerImport_successItemsIds","Set","_GxIdeKbManagerImport_warningItemsIds","_GxIdeKbManagerImport_errorItemsIds","_GxIdeKbManagerImport_categoryItemMap","Map","_GxIdeKbManagerImport_objectCategoryItemMap","_GxIdeKbManagerImport_importedCategoryData","_GxIdeKbManagerImport_cancelImportHandler","cancelCallback","_GxIdeKbManagerImport_clearStatusHandler","importTreeState","statusInfo","error","number","warning","success","_GxIdeKbManagerImport_evaluateImport","noImport","_GxIdeKbManagerImport_evaluateImportStatusMessage","someStatusVisible","display","_GxIdeKbManagerImport_importObjectsHandler","async","__classPrivateFieldGet","call","importingIsInProcess","selection","_GxIdeKbManagerImport_buildImportSelection","importCallback","groups","everyGroupFullySelected","model","find","cat","totalItems","childrenLoaded","checked","groupId","mode","checkedIds","uncheckedIds","child","_b","ids","_GxIdeKbManagerImport_loadFileHandler","file","__classPrivateFieldSet","loadCallback","clear","object","importCategoryTreeData","objectsTreeModel","hasSelection","_GxIdeKbManagerImport_lazyLoadTreeItems","treeItemId","_GxIdeKbManagerImport_objectsTreeCheckedItemsChangedHandler","event","allItems","detail","checkedItemIds","pendingCheckedItemIds","item","pendingCheckedItemId","size","selectAllCheckboxValue","selectAllCheckboxIndeterminate","_GxIdeKbManagerImport_objectsTreeContextMenuHandler","objectContextMenuCallback","clientX","contextmenuEvent","screenX","clientY","screenY","_GxIdeKbManagerImport_objectsTreeSelectedItemsChangedHandler","map","_GxIdeKbManagerImport_optionsHandler","optionsCallback","_GxIdeKbManagerImport_removeFileSelection","selectedFile","value","_GxIdeKbManagerImport_selectFileInputHandler","click","_GxIdeKbManagerImport_selectFileInputChangedHandler","target","files","_GxIdeKbManagerImport_statusButtonsSelectionChangedHandler","activeStates","statuses","errorIndex","state","itemId","warningIndex","successIndex","pattern","statusOptions","join","importedTreeFilterRegExp","RegExp","_GxIdeKbManagerImport_toggleSelectionClickHandler","updateAllItemsProperties","_GxIdeKbManagerImport_updateStatusItemsState","add","importTreeStateChanged","watchImportTreeStateHandler","importStatusMessage","main","importStatus","noImportedFiles","importedButHidden","watchObjectsTreeModelHandler","newState","noObjects","selectedFileChanged","newFile","componentDidLoad","focus","componentDidRender","componentWillLoad","Locale","getComponentStrings","el","componentDidLoadEvent","emit","addResultItem","render","h","Host","class","slot","htmlFor","header","fileNameLabel","autoFocus","part","type","readonly","placeholder","fileNamePlaceholder","ref","hidden","accept","onChange","removeFileSelection","title","onClick","src","disabled","selectFileButton","objectsInFile","showLines","dragDisabled","dropDisabled","toggleCheckboxes","checkbox","lazyLoadTreeItemsCallback","onCheckedItemsChange","onSelectedItemsChange","onItemContextmenu","isAnimated","stateTitle","key","selectFile","checkedValue","unCheckedValue","selectUnselect","onInput","importButton","cancelButton","filter","filterType","filterOptions","autoExpand","hideMatchesAndShowNonMatches","stateIconSrc","clearButton","errors","warnings","successes","hideMessage","compact","minimal","statusMinimal","onSelectionChanged"],"sources":["src/components/kb-manager-import/helpers.ts","src/components/kb-manager-import/kb-manager-import.scss?tag=gx-ide-kb-manager-import&encapsulation=shadow","src/components/kb-manager-import/kb-manager-import.tsx"],"sourcesContent":["/* Tree View */\nimport {\n TreeViewItemModel,\n TreeViewModel\n} from \"@genexus/chameleon-controls-library\";\n\n/* Kb Manager Import Types*/\nimport {\n CategoryItemMap,\n CategoryItemMapValue,\n ObjectCategoryItemMap,\n Status\n} from \"./kb-manager-import\";\nimport {\n ImportCategoryData,\n ImportItemResultData,\n ImportItemData\n} from \"../../common/types\";\n\nconst MAX_CATEGORY_ITEMS_FIRST_RENDER = 30;\n\n/* objects in file metadata*/\nexport const KB_OBJECT = \"object\";\nexport const KB_CATEGORY = \"category\";\n\nexport const STATUS_REGEXP_KEY = \"status\";\n\n// - - - - - - - - - - - - - - - - -\n// Objects In File Tree Model\n// - - - - - - - - - - - - - - - - -\n\nexport const convertImportCategoryItemToTreeItem = (\n importCatIcon: string,\n importItems: ImportItemData[]\n) => {\n const importTreeItems: TreeViewItemModel[] = [];\n importItems.forEach(importItem => {\n importTreeItems.push({\n id: importItem.id,\n caption: importItem.name,\n expanded: true,\n leaf: true,\n startImgSrc: importItem.icon ?? importCatIcon,\n metadata: KB_OBJECT\n });\n });\n return importTreeItems;\n};\n\nexport const convertImportCategoryDataToTreeView = (\n importCategoryData: ImportCategoryData[]\n): TreeViewModel => {\n const treeData: TreeViewModel = [];\n if (!importCategoryData) {\n return treeData;\n }\n importCategoryData.forEach(importCategory => {\n const importCategoryTreeItem: TreeViewItemModel = {\n id: importCategory.id,\n caption: `${importCategory.name} (${importCategory.items.length})`,\n expanded: importCategory.items.length <= MAX_CATEGORY_ITEMS_FIRST_RENDER,\n lazy: importCategory.items.length > MAX_CATEGORY_ITEMS_FIRST_RENDER,\n leaf: false,\n startImgSrc: importCategory.icon,\n metadata: KB_CATEGORY,\n items:\n importCategory.items.length <= MAX_CATEGORY_ITEMS_FIRST_RENDER\n ? convertImportCategoryItemToTreeItem(\n importCategory.icon,\n importCategory.items\n )\n : []\n };\n treeData.push(importCategoryTreeItem);\n });\n return treeData;\n};\n\n// - - - - - - - - - - - - - - - - -\n// Import Status Tree Model\n// - - - - - - - - - - - - - - - - -\n\nconst createImportResultDataMessages = (\n importItemId: string,\n messagesArray: string[],\n status: Status\n): TreeViewItemModel[] => {\n const messages: TreeViewItemModel[] = [];\n messagesArray.forEach((message, i) => {\n messages.push({\n id: `${importItemId}-message-${i}`,\n caption: message,\n startImgSrc: \"gemini-tools/list-view/on-surface\",\n leaf: true,\n metadata: JSON.stringify({\n [STATUS_REGEXP_KEY]: status\n })\n });\n });\n return messages;\n};\n\nconst createImportResultItem = (\n categoryData: CategoryItemMapValue,\n importItemResultData: ImportItemResultData\n): TreeViewItemModel => {\n const resultItemId = `${importItemResultData.id}-${importItemResultData.name}`;\n const importResultItem: TreeViewItemModel = {\n id: resultItemId,\n startImgSrc: categoryData.icon,\n caption: importItemResultData.name,\n parts: `tree-view-item tree-view-item--status tree-view-item--${importItemResultData.status}`,\n expanded: true,\n leaf: importItemResultData.messages.length === 0,\n metadata: JSON.stringify({\n [STATUS_REGEXP_KEY]: importItemResultData.status\n }),\n items: createImportResultDataMessages(\n resultItemId,\n importItemResultData.messages,\n importItemResultData.status\n )\n };\n return importResultItem;\n};\n\n// This functions updates the \"Import Status\" model, by adding a new result item.\nexport const addImportItemResultDataItem = (\n importItemResultData: ImportItemResultData,\n categoryItemMap: CategoryItemMap,\n objectCategoryItemMap: ObjectCategoryItemMap,\n importTreeActualState: TreeViewItemModel[]\n) => {\n const updatedImportTreeModel: TreeViewModel = [...importTreeActualState];\n\n // Use the resultItem.id to find the corresponding category in the categoryMap\n const objectCategoryId = objectCategoryItemMap.get(importItemResultData.id);\n const categoryData = categoryItemMap.get(objectCategoryId);\n\n const categoryIndex: number = updatedImportTreeModel.findIndex(\n treeItem => treeItem.id === objectCategoryId\n );\n\n if (categoryIndex === -1) {\n // category does not exists yet.\n const category: TreeViewItemModel = {\n id: objectCategoryId,\n caption: `${categoryData.name} (1)`,\n startImgSrc: `${categoryData.icon}`,\n expanded: true,\n items: [createImportResultItem(categoryData, importItemResultData)]\n };\n\n updatedImportTreeModel.push(category);\n return updatedImportTreeModel;\n }\n\n // else category already exists. Just insert the result item in the category.\n const resultItem: TreeViewItemModel = createImportResultItem(\n categoryData,\n importItemResultData\n );\n updatedImportTreeModel[categoryIndex].items = [\n ...updatedImportTreeModel[categoryIndex].items,\n resultItem\n ];\n\n // update category caption length\n const newItemsLength = updatedImportTreeModel[categoryIndex].items.length;\n updatedImportTreeModel[categoryIndex].caption =\n `${categoryData.name} (${newItemsLength})`;\n\n return updatedImportTreeModel;\n};\n","@import \"../../global/gx-ide-mixins.scss\";\n@import \"../../global/temporary-mercury-overrides/_button.scss\";\n\n:host {\n display: grid;\n block-size: 100%;\n grid-template:\n \"header header\" max-content\n \"objects-in-file import-status\" 1fr\n \"footer footer\" max-content;\n grid-template-columns: 1fr 1fr;\n}\n\n.section {\n display: contents;\n}\n\n// header\n.header {\n grid-template-columns: 1fr max-content;\n grid-area: header;\n}\n\n// objects in file\n.objects-in-file__section {\n grid-area: objects-in-file;\n}\n.objects-in-file__main {\n border-inline-end: var(--section-common-border);\n grid-template-rows: 1fr max-content;\n}\n.objects-in-file__footer {\n display: grid;\n}\n\n// import status\n.import-status__section {\n grid-area: import-status;\n}\n.import-status__main {\n grid-template-rows: 1fr max-content;\n}\n.import-status__footer {\n display: flex;\n}\n.import-clear-status-btn {\n margin-inline-start: auto;\n}\n\n// objects in file & import status\n.objects-in-file__section,\n.import-status__section {\n display: grid;\n grid-template-rows: max-content 1fr;\n}\n.dialog-header__objects-in-file,\n.dialog-header__import-status {\n padding-block-start: 16px;\n}\n.objects-in-file__main,\n.import-status__main {\n grid-auto-rows: max-content;\n padding-block: 12px;\n overflow: auto;\n}\n\n// footer\n.footer {\n display: flex;\n grid-area: footer;\n border-block-start: var(--section-common-border);\n}\n\n// WA / TODO: Add a helper class in Mercury to justify text.\n.text-align-center {\n text-align: center; // should be resolved on mercury\n}\n\n.tree-view::part(item__action tree-view-item--status) {\n grid-template: \"first-img left-img text right-img\" / max-content max-content 1fr max-content;\n &::before {\n grid-area: first-img;\n content: \"\";\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: var(--gray-03);\n margin-inline-end: 2px;\n }\n}\n\n.tree-view::part(item__action tree-view-item--success) {\n @include tree-item-status(\"success\");\n}\n.tree-view::part(item__action tree-view-item--warning) {\n @include tree-item-status(\"warning\");\n}\n.tree-view::part(item__action tree-view-item--error) {\n @include tree-item-status(\"error\");\n}\n\n// WA: prevent crashes when the items collection contains too many elements\n.tree-view-import::part(item) {\n content-visibility: auto;\n contain-intrinsic-size: auto 22px;\n // TODO: Check if 22px can be calculated. Not \"secure\" since font-size\n // (body-regular-s) defines the total height. If the typographic style\n // changes, this calculation will break. Ideally, tree item font-size\n // should use a variable like \"--tree-item-font-size\".\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n h,\n Method,\n Prop,\n State,\n Watch\n} from \"@stencil/core\";\n\nimport {\n ChCheckboxCustomEvent,\n // ChEditCustomEvent,\n TreeViewItemContextMenu\n} from \"@genexus/chameleon-controls-library\";\nimport { TreeViewItemModel } from \"@genexus/chameleon-controls-library\";\nimport { TreeViewItemModelExtended } from \"@genexus/chameleon-controls-library\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\n\nimport {\n ImportCategoryData,\n ImportItemResultData,\n ContextMenuInfo\n} from \"../../common/types\";\nimport {\n convertImportCategoryDataToTreeView,\n addImportItemResultDataItem,\n convertImportCategoryItemToTreeItem\n} from \"./helpers\";\nimport { CheckedItemsInfo } from \"../_helpers/list-selector/list-selector\";\n\nimport { KB_OBJECT, STATUS_REGEXP_KEY } from \"./helpers\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/checkbox\",\n \"components/edit\",\n \"components/icon\",\n \"components/tree-view\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\"\n];\n\nconst NOTICE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"notice\",\n colorType: \"on-surface\"\n});\n\nconst FILE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"file\",\n colorType: \"primary\"\n});\n\nconst GEMINI_TOOLS_SETTINGS = getIconPath({\n category: \"gemini-tools\",\n name: \"settings\",\n colorType: \"primary\"\n});\n\nconst MENU_DELETE = getIconPath({\n category: \"menus\",\n name: \"delete\",\n colorType: \"primary\"\n});\n\nconst CHECKBOX_ALL_CHECKED_VALUE = \"allChecked\";\nconst CHECKBOX_ALL_UNCHECKED_VALUE = \"allUnchecked\";\n\n@Component({\n tag: \"gx-ide-kb-manager-import\",\n styleUrl: \"kb-manager-import.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/kb-manager-import\"]\n})\nexport class GxIdeKbManagerImport {\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n\n #selectedObjectsInFileIds: string[] = [];\n\n @Element() el: HTMLGxIdeKbManagerImportElement;\n\n #fileInputEl!: HTMLChEditElement;\n #fileInputHiddenEl!: HTMLInputElement;\n #objectsTreeEl!: HTMLChTreeViewRenderElement;\n #successItemsIds: Set<string> = new Set();\n #warningItemsIds: Set<string> = new Set();\n #errorItemsIds: Set<string> = new Set();\n // #categoryItemMap maps a category id, with the name and icon.\n // required for the \"import status\" tree.\n #categoryItemMap: CategoryItemMap = new Map();\n #objectCategoryItemMap: ObjectCategoryItemMap = new Map();\n #importedCategoryData: ImportCategoryData[];\n\n @State() selectAllCheckboxValue: string;\n @State() selectAllCheckboxIndeterminate: boolean = false;\n @State() hasSelection: boolean = false;\n @State() importStatusMessage: string;\n @State() importTreeState: TreeViewItemModel[] = [];\n @State() importedTreeFilterRegExp: RegExp;\n @Watch(\"importTreeState\")\n importTreeStateChanged() {\n // this.#filterImportedHandler();\n }\n @State() importingIsInProcess = false;\n @State() importTreeFilterList: string[] = [];\n @State() noImport: boolean;\n @State() noObjects: boolean = true;\n @State() objectsTreeModel: TreeViewItemModel[] = [];\n @State() showHiddenImportsMessage = false;\n @State() someStatusVisible: boolean;\n @State() statusInfo: StatusInfo = {\n error: {\n display: true,\n number: 0\n },\n warning: {\n display: true,\n number: 0\n },\n success: {\n display: true,\n number: 0\n }\n };\n\n @Watch(\"importTreeState\")\n watchImportTreeStateHandler() {\n this.#evaluateImport();\n if (this.noImport) {\n this.importStatusMessage =\n this.#componentLocale.main.importStatus.noImportedFiles;\n } else {\n this.importStatusMessage =\n this.#componentLocale.main.importStatus.importedButHidden;\n }\n }\n @Watch(\"objectsTreeModel\")\n watchObjectsTreeModelHandler(newState: TreeViewItemModel[]) {\n this.noObjects = !newState || newState.length === 0;\n }\n\n /**\n * Callback invoked when user wants to cancel the export process.\n */\n @Prop() readonly cancelCallback!: CancelCallback;\n\n /**\n * Callback invoked when user wants to initiate the import process.\n */\n @Prop() readonly importCallback!: ImportCallback;\n\n /**\n * Callback invoked when user wants to load the xpz information\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n * Displays status buttons (errors, warning, succeeded) with minimal UI (no captions)\n */\n @Prop() readonly objectContextMenuCallback!: ObjectContextMenuCallback;\n\n /**\n * Callback invoked when user wants to access the export options.\n */\n @Prop() readonly optionsCallback!: OptionsCallback;\n\n /**\n * Imported xml or xps file name\n */\n @Prop({ mutable: true }) selectedFile: File;\n @Watch(\"selectedFile\")\n selectedFileChanged(newFile: File) {\n if (newFile) {\n this.#loadFileHandler(newFile);\n }\n }\n\n /**\n * Displays status buttons (error, warning, success) with minimal UI (no captions).\n */\n @Prop() readonly statusMinimal = false;\n\n /**\n * Emitted once just after the component is fully loaded.\n */\n @Event() componentDidLoadEvent: EventEmitter<boolean>;\n\n /**\n * Emitted once just after the component is fully loaded and the first render() occurs\n */\n @Event() componentDidRenderFirstTime: EventEmitter<boolean>;\n\n componentDidLoad() {\n this.#fileInputEl.focus();\n }\n\n componentDidRender() {}\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.componentDidLoadEvent.emit(true);\n // this.#evaluateObjects();\n this.#evaluateImport();\n this.importStatusMessage =\n this.#componentLocale.main.importStatus.noImportedFiles;\n this.#evaluateImportStatusMessage();\n }\n\n /**\n * Add the result of importing an item\n */\n @Method()\n async addResultItem(item: ImportItemResultData) {\n this.importTreeState = addImportItemResultDataItem(\n item,\n this.#categoryItemMap,\n this.#objectCategoryItemMap,\n this.importTreeState\n );\n this.statusInfo[item.status].number++;\n this.#updateStatusItemsState();\n }\n\n #cancelImportHandler = () => {\n this.cancelCallback();\n };\n\n #clearStatusHandler = () => {\n this.importTreeState = [];\n this.statusInfo.error.number = 0;\n this.statusInfo.warning.number = 0;\n this.statusInfo.success.number = 0;\n };\n\n #evaluateImport = () => {\n this.noImport = !!(\n this.importTreeState?.length === 0 || !this.importTreeState\n );\n };\n\n #evaluateImportStatusMessage = () => {\n this.someStatusVisible =\n this.statusInfo.error.display ||\n this.statusInfo.warning.display ||\n this.statusInfo.success.display;\n };\n\n #importObjectsHandler = async () => {\n /* first clear imported objects (this clears errors/warnings/success counts as well)*/\n this.#clearStatusHandler();\n /* then do the import*/\n this.importingIsInProcess = true;\n\n const selection = this.#buildImportSelection();\n\n await this.importCallback(selection);\n this.importingIsInProcess = false;\n };\n\n /*\n Build the structured ImportSelection from the current tree state.\n\n Lazy categories may not have their items loaded yet; in that case the\n category's own `checked` flag represents the user's intent for the whole\n group. Large categories are not expanded by default to keep imports of\n 1000+ objects responsive.\n\n For each category, the most compact group representation is picked:\n - every item checked → mode: \"all\"\n - no item checked → group omitted from the partial selection\n - mixed → \"include\" or \"exclude\", whichever has fewer ids\n */\n #buildImportSelection = (): ImportSelection => {\n const groups: GroupSelection[] = [];\n let everyGroupFullySelected = true;\n\n for (const category of this.#objectsTreeEl.model) {\n const categoryData = this.#importedCategoryData.find(\n cat => cat.id === category.id\n );\n const totalItems = categoryData?.items.length ?? 0;\n const childrenLoaded = !!(category.items && category.items.length > 0);\n\n if (!childrenLoaded && category.lazy) {\n if (category.checked) {\n groups.push({ groupId: category.id, mode: \"all\" });\n } else {\n everyGroupFullySelected = false;\n }\n continue;\n }\n\n const checkedIds: string[] = [];\n const uncheckedIds: string[] = [];\n for (const child of category.items ?? []) {\n if (child.checked) {\n checkedIds.push(child.id);\n } else {\n uncheckedIds.push(child.id);\n }\n }\n\n if (uncheckedIds.length === 0 && checkedIds.length === totalItems) {\n groups.push({ groupId: category.id, mode: \"all\" });\n } else if (checkedIds.length === 0) {\n everyGroupFullySelected = false;\n } else {\n everyGroupFullySelected = false;\n if (checkedIds.length <= uncheckedIds.length) {\n groups.push({\n groupId: category.id,\n mode: \"include\",\n ids: checkedIds\n });\n } else {\n groups.push({\n groupId: category.id,\n mode: \"exclude\",\n ids: uncheckedIds\n });\n }\n }\n }\n\n if (\n everyGroupFullySelected &&\n groups.length === this.#importedCategoryData.length\n ) {\n return { mode: \"all\" };\n }\n\n return { mode: \"partial\", groups };\n };\n\n #loadFileHandler = async (file: File) => {\n this.#importedCategoryData = await this.loadCallback(file);\n this.#categoryItemMap.clear();\n this.#objectCategoryItemMap.clear();\n\n this.#importedCategoryData.forEach(category => {\n this.#categoryItemMap.set(category.id, {\n name: category.name,\n icon: category.icon\n });\n category.items.forEach(object => {\n this.#objectCategoryItemMap.set(object.id, category.id);\n });\n });\n\n const importCategoryTreeData = convertImportCategoryDataToTreeView(\n this.#importedCategoryData\n );\n this.objectsTreeModel = importCategoryTreeData;\n // Tree-view renders with `checked={true}` by default, so a freshly\n // loaded file starts with everything selected.\n this.hasSelection = importCategoryTreeData.length > 0;\n };\n\n #lazyLoadTreeItems = async (treeItemId: string) => {\n const category = this.#importedCategoryData.find(\n cat => cat.id === treeItemId\n );\n return category && category.items.length > 0\n ? convertImportCategoryItemToTreeItem(category.icon, category.items)\n : [];\n };\n\n #objectsTreeCheckedItemsChangedHandler = (\n event: CustomEvent<Map<string, TreeViewItemModelExtended>>\n ) => {\n const allItems = event.detail;\n const checkedItemIds: string[] = [];\n const pendingCheckedItemIds: string[] = [];\n const checkedObjectsIds: string[] = [];\n allItems.forEach(item => {\n if (item.item.checked) {\n checkedItemIds.push(item.item.id);\n if (item.item.lazy && !item.item.items)\n pendingCheckedItemIds.push(item.item.id);\n }\n if (item.item.checked && item.item.metadata === KB_OBJECT) {\n checkedObjectsIds.push(item.item.id);\n }\n });\n\n for (let pendingCheckedItemId of pendingCheckedItemIds) {\n const category = this.#importedCategoryData.find(\n cat => cat.id === pendingCheckedItemId\n );\n if (category) {\n for (let item of category.items) {\n if (checkedObjectsIds.indexOf(item.id) < 0)\n checkedObjectsIds.push(item.id);\n }\n }\n }\n\n // Evaluate \"Select All / Unselect All\" checkbox state\n if (allItems.size === checkedItemIds.length) {\n this.selectAllCheckboxValue = CHECKBOX_ALL_CHECKED_VALUE;\n this.selectAllCheckboxIndeterminate = false;\n } else if (checkedItemIds.length === 0) {\n this.selectAllCheckboxValue = CHECKBOX_ALL_UNCHECKED_VALUE;\n this.selectAllCheckboxIndeterminate = false;\n } else {\n this.selectAllCheckboxIndeterminate = true;\n }\n\n this.hasSelection = checkedItemIds.length > 0;\n };\n\n #objectsTreeContextMenuHandler = (\n event: CustomEvent<TreeViewItemContextMenu>\n ) => {\n if (event.detail.metadata === KB_OBJECT) {\n this.objectContextMenuCallback(\"imported\", {\n selection: this.#selectedObjectsInFileIds,\n clientX: event.detail.contextmenuEvent.screenX,\n clientY: event.detail.contextmenuEvent.screenY\n });\n }\n };\n\n #objectsTreeSelectedItemsChangedHandler = (\n event: CustomEvent<TreeViewItemModelExtended[]>\n ) => {\n this.#selectedObjectsInFileIds = event.detail.map(item => item.item.id);\n };\n\n #optionsHandler = () => {\n if (this.optionsCallback) {\n this.optionsCallback();\n // returns boolean\n }\n };\n\n #removeFileSelection = () => {\n this.selectedFile = null;\n this.#fileInputHiddenEl.value = null;\n };\n\n #selectFileInputHandler = () => {\n this.#fileInputHiddenEl.click();\n };\n\n #selectFileInputChangedHandler = (event: InputEvent) => {\n const target = event.target as HTMLInputElement;\n if (target.files?.length > 0) {\n this.selectedFile = target.files[0];\n }\n };\n\n #statusButtonsSelectionChangedHandler = (\n event: CustomEvent<CheckedItemsInfo>\n ) => {\n const activeStates = event.detail;\n const statuses: Status[] = [];\n\n const errorIndex = activeStates.findIndex(\n state => state.itemId === \"errors\"\n );\n const warningIndex = activeStates.findIndex(\n state => state.itemId === \"warnings\"\n );\n const successIndex = activeStates.findIndex(\n state => state.itemId === \"successes\"\n );\n\n if (errorIndex !== -1) {\n statuses.push(\"error\");\n }\n if (warningIndex !== -1) {\n statuses.push(\"warning\");\n }\n if (successIndex !== -1) {\n statuses.push(\"success\");\n }\n\n let pattern = `\"${STATUS_REGEXP_KEY}\":\"\"`;\n if (statuses.length) {\n const statusOptions = statuses.join(\"|\");\n pattern = `\"${STATUS_REGEXP_KEY}\":\"(${statusOptions})\"`;\n }\n this.importedTreeFilterRegExp = new RegExp(pattern, \"i\");\n\n // Update statusInfo for the status-buttons\n this.statusInfo = {\n error: {\n display: errorIndex !== -1,\n number: this.statusInfo.error.number\n },\n warning: {\n display: warningIndex !== -1,\n number: this.statusInfo.warning.number\n },\n success: {\n display: successIndex !== -1,\n number: this.statusInfo.success.number\n }\n };\n\n this.#evaluateImportStatusMessage();\n };\n\n #toggleSelectionClickHandler = (\n event: ChCheckboxCustomEvent<any> | InputEvent\n ) => {\n if (this.#objectsTreeEl) {\n const checked = event.detail === CHECKBOX_ALL_CHECKED_VALUE;\n this.#objectsTreeEl.updateAllItemsProperties({ checked: checked });\n // updateAllItemsProperties does not fire onCheckedItemsChange, so we\n // mirror the new selection state explicitly to keep the Import button\n // disabled when the user unchecks everything via this toggle.\n this.hasSelection = checked && this.objectsTreeModel.length > 0;\n }\n };\n\n #updateStatusItemsState = () => {\n this.#errorItemsIds.clear();\n this.#warningItemsIds.clear();\n this.#successItemsIds.clear();\n this.importTreeState.forEach(item => {\n const items = item.items;\n items.forEach(child => {\n if (child.metadata === \"error\") {\n this.#errorItemsIds.add(child.id);\n }\n if (child.metadata === \"warning\") {\n this.#warningItemsIds.add(child.id);\n }\n if (child.metadata === \"success\") {\n this.#successItemsIds.add(child.id);\n }\n });\n });\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <section class=\"section\">\n <header\n // header\n class=\"field-group dialog-header-with-border header header-two-cols spacing-body-block-start spacing-body-inline\"\n slot=\"header\"\n >\n <div\n // select a file\n class=\"field field-inline\"\n >\n <label class=\"label\" htmlFor=\"file-name\">\n {this.#componentLocale.header.fileNameLabel}\n </label>\n <ch-edit\n autoFocus\n id=\"file-name\"\n class=\"input\"\n part=\"file-name\"\n type=\"text\"\n readonly\n value={this.selectedFile?.name}\n placeholder={this.#componentLocale.header.fileNamePlaceholder}\n startImgSrc={FILE_ICON}\n ref={(el: HTMLChEditElement) =>\n (this.#fileInputEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n <input\n hidden\n type=\"file\"\n accept=\".xpz, .xml\"\n onChange={this.#selectFileInputChangedHandler}\n ref={(el: HTMLInputElement) =>\n (this.#fileInputHiddenEl = el as HTMLInputElement)\n }\n />\n </div>\n\n <div class=\"buttons-spacer\">\n <button\n // remove file selection\n aria-label={this.#componentLocale.header.removeFileSelection}\n title={this.#componentLocale.header.removeFileSelection}\n id=\"reset-all-button\"\n class=\"button-tertiary button-icon-only\"\n part=\"reset-all-button\"\n onClick={this.#removeFileSelection}\n >\n <ch-image class=\"icon-m\" src={MENU_DELETE}></ch-image>\n </button>\n\n <button\n // select file\n id=\"select-file-load-button\"\n class=\"button-primary\"\n part=\"select-file-load-button\"\n onClick={this.#selectFileInputHandler}\n disabled={this.importingIsInProcess}\n >\n {this.#componentLocale.header.selectFileButton}\n </button>\n </div>\n </header>\n\n <section\n // objects in file\n class=\"objects-in-file__section\"\n >\n <h2 class=\"dialog-header dialog-header-with-border dialog-header__objects-in-file subtitle-regular-xs\t text-align-center spacing-body-inline\">\n {this.#componentLocale.main.objectsInFile.title}\n </h2>\n\n <div class=\"field-group objects-in-file__main\">\n {!this.noObjects ? (\n <ch-tree-view-render\n // objects in file tree\n showLines=\"last\"\n class=\"tree-view tree-view-import\"\n model={this.objectsTreeModel}\n dragDisabled={true}\n dropDisabled={true}\n toggleCheckboxes={true}\n checkbox={true}\n checked={true}\n lazyLoadTreeItemsCallback={this.#lazyLoadTreeItems}\n onCheckedItemsChange={\n this.#objectsTreeCheckedItemsChangedHandler\n }\n onSelectedItemsChange={\n this.#objectsTreeSelectedItemsChangedHandler\n }\n onItemContextmenu={this.#objectsTreeContextMenuHandler}\n ref={(el: HTMLChTreeViewRenderElement) =>\n (this.#objectsTreeEl = el as HTMLChTreeViewRenderElement)\n }\n ></ch-tree-view-render>\n ) : (\n <gx-ide-empty-state\n isAnimated={false}\n stateTitle={\n this.#componentLocale.main.objectsInFile.noObjects\n }\n key=\"no-objects-empty-state\"\n >\n <button\n // begin by selecting a file\n class=\"button-secondary\"\n onClick={this.#selectFileInputHandler}\n >\n {this.#componentLocale.main.objectsInFile.selectFile}\n </button>\n </gx-ide-empty-state>\n )}\n\n <footer class=\"field-group objects-in-file__footer spacing-body-inline\">\n <ch-checkbox\n // select all / unselect all checkbox\n id=\"select-all-checkbox\"\n class=\"checkbox create-data-in-kb\"\n checkedValue={CHECKBOX_ALL_CHECKED_VALUE}\n unCheckedValue={CHECKBOX_ALL_UNCHECKED_VALUE}\n caption={\n this.#componentLocale.main.objectsInFile.selectUnselect\n }\n value={this.selectAllCheckboxValue}\n onInput={this.#toggleSelectionClickHandler}\n disabled={\n this.importingIsInProcess ||\n this.objectsTreeModel.length === 0\n }\n part=\"select-all-checkbox\"\n ></ch-checkbox>\n\n <div class=\"buttons-spacer\">\n <button\n // import objects button\n id=\"import-btn\"\n class=\"button-primary \"\n onClick={this.#importObjectsHandler}\n disabled={\n this.objectsTreeModel?.length === 0 ||\n this.importingIsInProcess ||\n !this.hasSelection\n }\n >\n {this.#componentLocale.main.objectsInFile.importButton}\n </button>\n\n <button\n // cancel-import button\n id=\"cancel-import-btn\"\n class=\"button-secondary \"\n onClick={this.#cancelImportHandler}\n disabled={!this.importingIsInProcess}\n part=\"cancel-import-button\"\n >\n {this.#componentLocale.main.objectsInFile.cancelButton}\n </button>\n\n <button\n // settings/options button\n id=\"select-kb-btn\"\n class=\"button-tertiary button-icon-only\"\n part=\"select-kb-btn\"\n onClick={this.#optionsHandler}\n >\n <ch-image\n class=\"icon-m\"\n src={GEMINI_TOOLS_SETTINGS}\n ></ch-image>\n </button>\n </div>\n </footer>\n </div>\n </section>\n\n <section\n // import status\n class=\"import-status__section\"\n >\n <h2 class=\"dialog-header dialog-header-with-border dialog-header__import-status subtitle-regular-xs\t text-align-center spacing-body-inline\">\n {this.#componentLocale.main.importStatus.title}\n </h2>\n\n <div class=\"field-group import-status__main\">\n {!this.noImport && this.someStatusVisible ? (\n <ch-tree-view-render\n // import status tree\n model={this.importTreeState}\n toggleCheckboxes={true}\n showLines=\"last\"\n class=\"tree-view tree-view-import\"\n filter={this.importedTreeFilterRegExp}\n filterType=\"metadata\"\n filterOptions={{\n autoExpand: true,\n hideMatchesAndShowNonMatches: false\n }}\n ></ch-tree-view-render>\n ) : (\n <gx-ide-empty-state\n isAnimated={false}\n stateIconSrc={NOTICE_ICON}\n stateTitle={this.importStatusMessage}\n key=\"no-objects-empty-state\"\n ></gx-ide-empty-state>\n )}\n\n <footer class=\"import-status__footer spacing-body-inline\">\n <button\n // clear status button\n class=\"button-secondary import-clear-status-btn\"\n onClick={this.#clearStatusHandler}\n disabled={this.noImport || this.importingIsInProcess}\n part=\"clear-status-btn\"\n >\n {this.#componentLocale.main.importStatus.clearButton}\n </button>\n </footer>\n </div>\n </section>\n\n <footer\n // footer\n class=\"footer\"\n >\n <gx-ide-status-buttons\n errors={this.statusInfo.error.number}\n warnings={this.statusInfo.warning.number}\n successes={this.statusInfo.success.number}\n hideMessage\n compact\n minimal={this.statusMinimal}\n onSelectionChanged={this.#statusButtonsSelectionChangedHandler}\n ></gx-ide-status-buttons>\n </footer>\n </section>\n </Host>\n );\n }\n}\nexport type CancelCallback = () => Promise<boolean>;\n\n/**\n * Payload passed to `importCallback` describing the user's selection.\n *\n * - `mode: \"all\"` imports every available item across every group.\n * - `mode: \"partial\"` imports only what is declared in `groups`. Groups not\n * present in the list are excluded from the import.\n *\n * Per group the most compact representation is used: `\"all\"` for an entire\n * group, `\"include\"` / `\"exclude\"` for explicit lists (whichever side has\n * fewer ids).\n */\nexport type ImportSelection = {\n mode: \"all\" | \"partial\";\n groups?: GroupSelection[];\n};\n\nexport type GroupSelection = {\n groupId: string;\n mode: \"all\" | \"include\" | \"exclude\";\n ids?: string[];\n};\n\nexport type ImportCallback = (selection: ImportSelection) => Promise<boolean>;\n\nexport type LoadCallback = (file: File) => Promise<ImportCategoryData[]>;\n\nexport type ObjectContextMenuCallback = (\n tree: ObjectsSourceType,\n contextMenuInfo: ContextMenuInfo\n) => Promise<void>;\n\nexport type ObjectsSourceType = \"in-file\" | \"imported\";\n\nexport type OptionsCallback = () => Promise<void>;\n\nexport interface SelectedObject {\n itemId: string;\n subItemsIds: string[];\n}\n\nexport type StatusItemsState = {\n error: string[];\n warning: string[];\n success: string[];\n};\n\ntype StatusInfo = {\n error: {\n display: boolean;\n number: number;\n };\n warning: {\n display: boolean;\n number: number;\n };\n success: {\n display: boolean;\n number: number;\n };\n};\n\nexport type CategoryItemMap = Map<string, CategoryItemMapValue>;\nexport type CategoryItemMapValue = { name: string; icon: string };\nexport type ObjectCategoryItemMap = Map<string, string>;\nexport type Status = \"success\" | \"error\" | \"warning\";\n"],"mappings":"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"}
|