@genexus/genexus-ide-ui 1.1.39 → 1.1.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-server-selector.cjs.entry.js +12 -28
  3. package/dist/cjs/gx-ide-server-selector.cjs.entry.js.map +1 -1
  4. package/dist/cjs/{gx-ide-status-message.cjs.entry.js → gx-ide-sign-in-result.cjs.entry.js} +10 -9
  5. package/dist/cjs/gx-ide-sign-in-result.cjs.entry.js.map +1 -0
  6. package/dist/cjs/gx-ide-team-dev-bring-changes.cjs.entry.js +20 -4
  7. package/dist/cjs/gx-ide-team-dev-bring-changes.cjs.entry.js.map +1 -1
  8. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +99 -238
  9. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js.map +1 -1
  10. package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js +9 -7
  11. package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js.map +1 -1
  12. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +60 -10
  13. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js.map +1 -1
  14. package/dist/cjs/loader.cjs.js +1 -1
  15. package/dist/cjs/tabular-grid-column-sort-5ca06dc1.js +43 -0
  16. package/dist/cjs/tabular-grid-column-sort-5ca06dc1.js.map +1 -0
  17. package/dist/cjs/tabular-grid-render-4350dbaf.js +223 -0
  18. package/dist/cjs/tabular-grid-render-4350dbaf.js.map +1 -0
  19. package/dist/cjs/uncheck-ignored-77ca69fe.js +43 -0
  20. package/dist/cjs/uncheck-ignored-77ca69fe.js.map +1 -0
  21. package/dist/collection/collection-manifest.json +1 -1
  22. package/dist/collection/common/chameleon/tabular-grid-column-sort.js +39 -0
  23. package/dist/collection/common/chameleon/tabular-grid-column-sort.js.map +1 -0
  24. package/dist/collection/components/{status-message/status-message.css → sign-in-result/sign-in-result.css} +2 -0
  25. package/dist/collection/components/{status-message/status-message.js → sign-in-result/sign-in-result.js} +10 -9
  26. package/dist/collection/components/sign-in-result/sign-in-result.js.map +1 -0
  27. package/dist/collection/components/team-dev/bring-changes/bring-changes.js +18 -4
  28. package/dist/collection/components/team-dev/bring-changes/bring-changes.js.map +1 -1
  29. package/dist/collection/components/team-dev/history/history.js +10 -8
  30. package/dist/collection/components/team-dev/history/history.js.map +1 -1
  31. package/dist/collection/components/team-dev/server-selector/server-selector.css +18 -14
  32. package/dist/collection/components/team-dev/server-selector/server-selector.js +11 -27
  33. package/dist/collection/components/team-dev/server-selector/server-selector.js.map +1 -1
  34. package/dist/collection/components/team-dev/update/update.css +1 -0
  35. package/dist/collection/components/team-dev/update/update.js +62 -9
  36. package/dist/collection/components/team-dev/update/update.js.map +1 -1
  37. package/dist/collection/components/team-dev/version-control/commit/commit.css +1 -0
  38. package/dist/collection/components/team-dev/version-control/commit/commit.js +79 -20
  39. package/dist/collection/components/team-dev/version-control/commit/commit.js.map +1 -1
  40. package/dist/collection/components/team-dev/version-control/common/are-sets-equal.js +21 -0
  41. package/dist/collection/components/team-dev/version-control/common/are-sets-equal.js.map +1 -0
  42. package/dist/collection/components/team-dev/version-control/common/tabular-grid-render.js +13 -3
  43. package/dist/collection/components/team-dev/version-control/common/tabular-grid-render.js.map +1 -1
  44. package/dist/collection/components/team-dev/version-control/common/uncheck-ignored.js +18 -0
  45. package/dist/collection/components/team-dev/version-control/common/uncheck-ignored.js.map +1 -0
  46. package/dist/collection/testing/locale.e2e.js +1 -1
  47. package/dist/collection/testing/locale.e2e.js.map +1 -1
  48. package/dist/components/gx-ide-server-selector.js +12 -28
  49. package/dist/components/gx-ide-server-selector.js.map +1 -1
  50. package/dist/components/{gx-ide-status-message.d.ts → gx-ide-sign-in-result.d.ts} +4 -4
  51. package/dist/components/{gx-ide-status-message.js → gx-ide-sign-in-result.js} +15 -14
  52. package/dist/components/gx-ide-sign-in-result.js.map +1 -0
  53. package/dist/components/gx-ide-team-dev-bring-changes.js +18 -4
  54. package/dist/components/gx-ide-team-dev-bring-changes.js.map +1 -1
  55. package/dist/components/gx-ide-team-dev-commit.js +78 -221
  56. package/dist/components/gx-ide-team-dev-commit.js.map +1 -1
  57. package/dist/components/gx-ide-team-dev-history.js +9 -7
  58. package/dist/components/gx-ide-team-dev-history.js.map +1 -1
  59. package/dist/components/gx-ide-team-dev-update.js +61 -10
  60. package/dist/components/gx-ide-team-dev-update.js.map +1 -1
  61. package/dist/components/tabular-grid-column-sort.js +41 -0
  62. package/dist/components/tabular-grid-column-sort.js.map +1 -0
  63. package/dist/components/tabular-grid-render.js +216 -0
  64. package/dist/components/tabular-grid-render.js.map +1 -0
  65. package/dist/components/uncheck-ignored.js +40 -0
  66. package/dist/components/uncheck-ignored.js.map +1 -0
  67. package/dist/esm/genexus-ide-ui.js +1 -1
  68. package/dist/esm/gx-ide-server-selector.entry.js +12 -28
  69. package/dist/esm/gx-ide-server-selector.entry.js.map +1 -1
  70. package/dist/esm/{gx-ide-status-message.entry.js → gx-ide-sign-in-result.entry.js} +10 -9
  71. package/dist/esm/gx-ide-sign-in-result.entry.js.map +1 -0
  72. package/dist/esm/gx-ide-team-dev-bring-changes.entry.js +20 -4
  73. package/dist/esm/gx-ide-team-dev-bring-changes.entry.js.map +1 -1
  74. package/dist/esm/gx-ide-team-dev-commit.entry.js +81 -220
  75. package/dist/esm/gx-ide-team-dev-commit.entry.js.map +1 -1
  76. package/dist/esm/gx-ide-team-dev-history.entry.js +9 -7
  77. package/dist/esm/gx-ide-team-dev-history.entry.js.map +1 -1
  78. package/dist/esm/gx-ide-team-dev-update.entry.js +60 -10
  79. package/dist/esm/gx-ide-team-dev-update.entry.js.map +1 -1
  80. package/dist/esm/loader.js +1 -1
  81. package/dist/esm/tabular-grid-column-sort-1d503b27.js +41 -0
  82. package/dist/esm/tabular-grid-column-sort-1d503b27.js.map +1 -0
  83. package/dist/esm/tabular-grid-render-f7eb612b.js +216 -0
  84. package/dist/esm/tabular-grid-render-f7eb612b.js.map +1 -0
  85. package/dist/esm/uncheck-ignored-4ba48c9e.js +40 -0
  86. package/dist/esm/uncheck-ignored-4ba48c9e.js.map +1 -0
  87. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  88. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  89. package/dist/genexus-ide-ui/p-02fb496a.js +36 -0
  90. package/dist/genexus-ide-ui/p-02fb496a.js.map +1 -0
  91. package/dist/genexus-ide-ui/p-06e8d9d6.entry.js +63 -0
  92. package/dist/genexus-ide-ui/p-06e8d9d6.entry.js.map +1 -0
  93. package/dist/genexus-ide-ui/{p-585fac4a.entry.js → p-2b38e18e.entry.js} +15 -13
  94. package/dist/genexus-ide-ui/p-2b38e18e.entry.js.map +1 -0
  95. package/dist/genexus-ide-ui/{p-970e89ac.entry.js → p-4b06b578.entry.js} +100 -115
  96. package/dist/genexus-ide-ui/p-4b06b578.entry.js.map +1 -0
  97. package/dist/genexus-ide-ui/{p-34447b77.entry.js → p-4e3ad78d.entry.js} +261 -234
  98. package/dist/genexus-ide-ui/p-4e3ad78d.entry.js.map +1 -0
  99. package/dist/genexus-ide-ui/p-77c2e69d.js +314 -0
  100. package/dist/genexus-ide-ui/p-77c2e69d.js.map +1 -0
  101. package/dist/genexus-ide-ui/p-a7883e6b.entry.js +691 -0
  102. package/dist/genexus-ide-ui/p-a7883e6b.entry.js.map +1 -0
  103. package/dist/genexus-ide-ui/p-c9b9e260.js +36 -0
  104. package/dist/genexus-ide-ui/p-c9b9e260.js.map +1 -0
  105. package/dist/genexus-ide-ui/{p-42f37527.entry.js → p-e1a2550e.entry.js} +351 -289
  106. package/dist/genexus-ide-ui/p-e1a2550e.entry.js.map +1 -0
  107. package/dist/types/common/chameleon/tabular-grid-column-sort.d.ts +4 -0
  108. package/dist/types/components/{status-message/status-message.d.ts → sign-in-result/sign-in-result.d.ts} +2 -2
  109. package/dist/types/components/team-dev/history/history.d.ts +2 -2
  110. package/dist/types/components/team-dev/update/update.d.ts +6 -0
  111. package/dist/types/components/team-dev/version-control/commit/commit.d.ts +15 -13
  112. package/dist/types/components/team-dev/version-control/common/are-sets-equal.d.ts +12 -0
  113. package/dist/types/components/team-dev/version-control/common/tabular-grid-render.d.ts +13 -1
  114. package/dist/types/components/team-dev/version-control/common/uncheck-ignored.d.ts +13 -0
  115. package/dist/types/components.d.ts +13 -13
  116. package/package.json +1 -1
  117. package/dist/cjs/gx-ide-status-message.cjs.entry.js.map +0 -1
  118. package/dist/collection/components/status-message/status-message.js.map +0 -1
  119. package/dist/components/gx-ide-status-message.js.map +0 -1
  120. package/dist/esm/gx-ide-status-message.entry.js.map +0 -1
  121. package/dist/genexus-ide-ui/p-34447b77.entry.js.map +0 -1
  122. package/dist/genexus-ide-ui/p-42f37527.entry.js.map +0 -1
  123. package/dist/genexus-ide-ui/p-50253b96.entry.js +0 -61
  124. package/dist/genexus-ide-ui/p-50253b96.entry.js.map +0 -1
  125. package/dist/genexus-ide-ui/p-585fac4a.entry.js.map +0 -1
  126. package/dist/genexus-ide-ui/p-723d25ae.entry.js +0 -912
  127. package/dist/genexus-ide-ui/p-723d25ae.entry.js.map +0 -1
  128. package/dist/genexus-ide-ui/p-970e89ac.entry.js.map +0 -1
  129. /package/dist/collection/components/{status-message/gx-ide-assets/status-message → sign-in-result/gx-ide-assets/sign-in-result}/images/genexus-next-logo.svg +0 -0
  130. /package/dist/collection/components/{status-message/gx-ide-assets/status-message → sign-in-result/gx-ide-assets/sign-in-result}/images/left-side-illustration.svg +0 -0
  131. /package/dist/collection/components/{status-message/gx-ide-assets/status-message → sign-in-result/gx-ide-assets/sign-in-result}/images/right-side-illustration.svg +0 -0
  132. /package/dist/collection/components/{status-message/gx-ide-assets/status-message/langs/status-message.lang.en.json → sign-in-result/gx-ide-assets/sign-in-result/langs/sign-in-result.lang.en.json} +0 -0
  133. /package/dist/collection/components/{status-message/gx-ide-assets/status-message/langs/status-message.lang.ja.json → sign-in-result/gx-ide-assets/sign-in-result/langs/sign-in-result.lang.ja.json} +0 -0
  134. /package/dist/collection/components/{status-message/gx-ide-assets/status-message/langs/status-message.lang.zh.json → sign-in-result/gx-ide-assets/sign-in-result/langs/sign-in-result.lang.zh.json} +0 -0
  135. /package/dist/genexus-ide-ui/gx-ide-assets/{status-message → sign-in-result}/images/genexus-next-logo.svg +0 -0
  136. /package/dist/genexus-ide-ui/gx-ide-assets/{status-message → sign-in-result}/images/left-side-illustration.svg +0 -0
  137. /package/dist/genexus-ide-ui/gx-ide-assets/{status-message → sign-in-result}/images/right-side-illustration.svg +0 -0
  138. /package/dist/genexus-ide-ui/gx-ide-assets/{status-message/langs/status-message.lang.en.json → sign-in-result/langs/sign-in-result.lang.en.json} +0 -0
  139. /package/dist/genexus-ide-ui/gx-ide-assets/{status-message/langs/status-message.lang.ja.json → sign-in-result/langs/sign-in-result.lang.ja.json} +0 -0
  140. /package/dist/genexus-ide-ui/gx-ide-assets/{status-message/langs/status-message.lang.zh.json → sign-in-result/langs/sign-in-result.lang.zh.json} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"names":["clearGridSelection","gridSource","selectedRowsIds","pendingIdsSet","ignoredIdsSet","gridReference","filteredSelectedRowsIds","length","forEach","async","selectedRowId","has","selectRow","push","headerDetail","type","caption","description","callback","cssClass","h","class","onClick","headerTitle","changesetToComboBoxModel","changesetModel","map","changeset","value","id","name","label","foldersToComboBoxModel","foldersModel","folder","typesToComboBoxItemModel","objectTypeModel","objectType","startImgSrc","icon","ALL_VALUE","CSS_SELECTORS","HEADER","HEADER_DETAILS","FILTER","MAIN","GRID_CELL_DESCRIPTION","ICONS","add","getIconPath","category","colorType","edit","error","filter","filterWithConditions","info","refresh","search","success","substract","warning","BUTTON_ACTION_SELECTOR","renderStateCellContent","action","componentLocale","iconColor","states","deleted","inserted","modified","conflicted","src","style","backgroundColor","renderObjectStatus","objectId","objectsStatusMap","updatePillAsButton","commitSingleObject","status","get","commit","classes","pill","renderTabularGridRows","pendingObjectsAfterFilter","ignoredObjectsAfterFilter","alreadyUpdatedObjectsIdsSet","markedObjectsSet","objectsMessagesDataMap","searchValue","objects","toLowerCase","filteredRows","object","alreadyUpdated","hideCheckbox","marked","messages","key","rowid","ref","el","setAttribute","size","hiChar","renderObjectTypeWithIcon","CLASSES","formatDate","modifiedOn","module","state","lastSynchronized","message","MESSAGE_ICON","text","renderTabularGridColumns","ignoredGridColumns","gridIsEmpty","colSize","config","tabularGrid","auto","maxContent","includes","columnId","columnName","columnType","richRowSelector","richRowSelectorMode","settingable","localState","commitCss","FILTER_SECONDARY_CONTAINER_ID","FILTER_SECONDARY_BUTTON_ID","CSS_BUNDLES","GxIdeTeamDevCommit","_GxIdeTeamDevCommit_componentLocale","set","this","_GxIdeTeamDevCommit_localStatesComboBoxModel","_GxIdeTeamDevCommit_rowCheckedChangedByTheUser","_GxIdeTeamDevCommit_chGridPendingForUpdateEl","_GxIdeTeamDevCommit_commitCheckedClickedHandler","__classPrivateFieldGet","_GxIdeTeamDevCommit_commitObjectsHandler","call","_GxIdeTeamDevCommit_commitSingleObject","newobjectsStatusMap","Map","selection","commentsValue","commentInputHasError","commiting","itemToUpdate","commitResult","commitCallback","objectResult","delete","result","alreadyCommitedObjectsIdsSet","markRow","_GxIdeTeamDevCommit_rowMarkingChangedHandler","event","markedRowsIds","detail","rowsId","Set","markedObjectId","_GxIdeTeamDevCommit_updatePendingCheckedItems","_GxIdeTeamDevCommit_rowSelectionChangedHandler","firstSelectedRowId","selectCallback","_GxIdeTeamDevCommit_commentsInputHandler","_GxIdeTeamDevCommit_applyClientFilter","_GxIdeTeamDevCommit_filteredObjects","pendingAndIgnored","pendingForCommit","ignoredObjects","filtered","nameFiltered","descriptionFiltered","selectedState","_GxIdeTeamDevCommit_evaluateSecondaryFilterHasConditions","selectedFolder","filterSecondaryHasConditions","_GxIdeTeamDevCommit_toggleFiltersHandler","filterSecondaryIsHidden","_GxIdeTeamDevCommit_searchInputHandler","trim","_GxIdeTeamDevCommit_typeChangedHandler","selectedType","_GxIdeTeamDevCommit_loadData","_GxIdeTeamDevCommit_stateChangedHandler","_GxIdeTeamDevCommit_folderChanged","_GxIdeTeamDevCommit_onRowContextMenuHandler","ev","preventDefault","stopPropagation","getSelectedRows","objectsContextMenuCallback","clientX","clientY","__classPrivateFieldSet","addedRowsIds","addedRowsId","removedRowsId","pendingItemCheckedResult","pendingItemsCheckedCallback","itemsChecked","itemsUnchecked","undefined","_GxIdeTeamDevCommit_revertPendingCommitsCheckboxes","_GxIdeTeamDevCommit_togglePendingCommitsCheckboxes","_GxIdeTeamDevCommit_setInitialObjectsStatus","objectsRenderedAlready","pendingObject","ignoredObject","loading","loadCallback","selectedChangeset","selectedCategory","_GxIdeTeamDevCommit_markPendingObjects","pendingId","rowId","itemsToToggle","itemsToCheck","itemsToUncheck","markedObjectsSetChanged","newMarkedObjectsSet","atLeastOneObjectIsChecked","objectsStatusMapChanged","newObjectsStatusMap","someObjectIsUpdating","entries","find","pendingAndIgnoredChanged","clear","_a","pending","_b","ignored","typesChanged","newTypes","typesComboBoxModel","changesetChanged","newChangesetOptions","changesetsComboBoxModel","folderChanged","newFolderOptions","foldersComboBoxModel","componentWillLoad","Locale","getComponentStrings","all","types","folders","componentDidLoad","reload","render","disableControls","filterIcon","commitButtonEnabled","Host","model","commitDetail","title","genexusServer","serverDetails","serverUrl","openServerCallback","knowledgeBase","kbName","version","versionName","disabled","accessibleName","searchAccessibleName","placeholder","searchPlaceholder","onInput","typeAccesibleName","typePlaceholder","localStateAccesibleName","localStatePlaceholder","secondaryFilterAriaLabel","inert","hidden","folderAccesibleName","folderPlaceholder","multiline","autoGrow","commitCommentPlaceholder","keyboardNavigationMode","rowSelectionMode","onSelectionChanged","onRowMarkingChanged","onRowContextMenu","pendingCommits","isAnimated","stateIconSrc","stateTitle","cancelLabel","loader","loaderTitle","show"],"sources":["src/components/team-dev/version-control/common/clear-grid-selection.ts","src/components/team-dev/version-control/common/header-renders.tsx","src/components/team-dev/version-control/commit/utilities/changeset-to-combo-box.ts","src/components/team-dev/version-control/commit/utilities/folders-to-combo-box.ts","src/components/team-dev/version-control/commit/utilities/types-to-combo-box.ts","src/components/team-dev/version-control/common/constants.ts","src/components/team-dev/version-control/common/tabular-grid-render.tsx","src/components/team-dev/version-control/commit/commit.scss?tag=gx-ide-team-dev-commit&encapsulation=shadow","src/components/team-dev/version-control/commit/commit.tsx"],"sourcesContent":["import { SourceType } from \"./types\";\n\n/**\n * Filters a grid selection to only include rows from the given source (\"pending\" or \"ignored\").\n * Rows from the other category are unselected.\n *\n * @param {SourceType} gridSource - The source category of the selection.\n * @param {string[]} selectedRowsIds - The currently selected row IDs.\n * @returns {string[]} Filtered row IDs belonging to the specified source.\n */\nconst clearGridSelection = (\n gridSource: SourceType,\n selectedRowsIds: string[],\n pendingIdsSet: Set<string>,\n ignoredIdsSet: Set<string>,\n gridReference: HTMLChTabularGridElement\n): string[] => {\n let filteredSelectedRowsIds: string[] = [];\n if (selectedRowsIds.length > 1 && gridSource === \"pending\") {\n selectedRowsIds.forEach(async selectedRowId => {\n if (ignoredIdsSet.has(selectedRowId)) {\n await gridReference.selectRow(selectedRowId, false);\n } else {\n filteredSelectedRowsIds.push(selectedRowId);\n }\n });\n } else if (selectedRowsIds.length > 1 && gridSource === \"ignored\") {\n selectedRowsIds.forEach(async selectedRowId => {\n if (pendingIdsSet.has(selectedRowId)) {\n await gridReference.selectRow(selectedRowId, false);\n } else {\n filteredSelectedRowsIds.push(selectedRowId);\n }\n });\n } else {\n filteredSelectedRowsIds = selectedRowsIds;\n }\n return filteredSelectedRowsIds;\n};\n\nexport default clearGridSelection;\n","import { h, JSX } from \"@stencil/core\";\n\nconst headerDetail = (\n type: \"text\" | \"link\" = \"text\",\n caption: string,\n description: string,\n callback?: () => void,\n cssClass?: string\n): JSX.Element => {\n return (\n <div class={{ [cssClass]: true, \"field field-block\": true }}>\n <span class=\"detail__label body-semi-bold-s\">{caption}</span>\n {type === \"text\" ? (\n <p class=\"body-regular-s\">{description}</p>\n ) : (\n <button class=\"detail__link body-regular-s\" onClick={callback}>\n {description}\n </button>\n )}\n </div>\n );\n};\nexport default headerDetail;\n\nexport const headerTitle = (caption: string, cssClass?: string) => {\n return (\n <h2\n class={{ [cssClass]: true, \"header__title subtitle-semi-bold-s\": true }}\n >\n {caption}\n </h2>\n );\n};\n\nexport const headerSubtitle = (caption: string, cssClass?: string) => {\n return (\n <p\n class={{ [cssClass]: true, \"detail__title subtitle-semi-bold-xs\": true }}\n >\n {caption}\n </p>\n );\n};\n","import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { GxOption } from \"../../../../../components\";\n\nexport const changesetToComboBoxModel = (\n changesetModel: GxOption[]\n): ComboBoxModel => {\n if (!changesetModel) return [];\n\n return changesetModel.map(changeset => ({\n value: changeset.id,\n caption:\n changeset.name === \"All\"\n ? \"All Changesets\"\n : changeset.label || changeset.name || \"\"\n }));\n};\n","import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { GxOption } from \"../../../../../components\";\n\nexport const foldersToComboBoxModel = (\n foldersModel: GxOption[]\n): ComboBoxModel =>\n foldersModel.map(folder => ({\n value: folder.name,\n caption:\n folder.name === \"All\" ? \"All Modules\" : folder.label || folder.name || \"\"\n }));\n","import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { ObjectType } from \"../../../../../components\";\n\nexport const typesToComboBoxItemModel = (\n objectTypeModel: ObjectType[]\n): ComboBoxModel =>\n objectTypeModel.map(objectType => ({\n value: objectType.id,\n caption: objectType.name === \"All\" ? \"All Types\" : objectType.name || \"\",\n startImgSrc: objectType.icon\n }));\n","import { getIconPath } from \"@genexus/mercury\";\n\nexport const ALL_VALUE = \"All\";\nexport const ALL_MODULES = \"All Modules\";\nexport const ALL_TYPES = \"All Types\";\n\nexport const CSS_SELECTORS = {\n HEADER: \"header spacing-body-inline spacing-body-block-start field-group\",\n HEADER_DETAILS: \"header__details\",\n FILTER: \"filter\",\n MAIN: \"main spacing-body\",\n GRID_CELL_DESCRIPTION: \"tabular-grid-cell-description-custom-selector\"\n};\n\nconst ICONS = {\n add: getIconPath({\n category: \"system\",\n name: \"add\",\n colorType: \"on-elevation\"\n }),\n edit: getIconPath({\n category: \"system\",\n name: \"edit\",\n colorType: \"on-elevation\"\n }),\n error: getIconPath({\n category: \"system\",\n name: \"error\",\n colorType: \"error\"\n }),\n filter: getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"neutral\"\n }),\n filterWithConditions: getIconPath({\n category: \"window-tools\",\n name: \"filter-conditions\",\n colorType: \"neutral\"\n }),\n info: getIconPath({\n category: \"system\",\n name: \"information\",\n colorType: \"on-elevation\"\n }),\n refresh: getIconPath({\n category: \"gemini-tools\",\n name: \"reset\",\n colorType: \"neutral\"\n }),\n search: getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-elevation\"\n }),\n success: getIconPath({\n category: \"system\",\n name: \"check\",\n colorType: \"success\"\n }),\n substract: getIconPath({\n category: \"system\",\n name: \"substract\",\n colorType: \"on-elevation\"\n }),\n warning: getIconPath({\n category: \"system\",\n name: \"warning\",\n colorType: \"warning\"\n })\n};\nexport default ICONS;\n","// stencil\nimport { h, JSX } from \"@stencil/core\";\n\n// external libraries\nimport HTMLChTabularGridRowElement from \"@genexus/chameleon-controls-library/dist/types/components/tabular-grid/row/tabular-grid-row\";\n\n// local\nimport {\n MessageData,\n ModifiedObjectData,\n SourceType,\n StatusInternal\n} from \"./types\";\nimport { ObjectState } from \"../common/types\";\nimport ICONS from \"./constants\";\nimport { renderObjectTypeWithIcon } from \"../../common/utilities\";\nimport { formatDate } from \"../../../../common/helpers\";\nimport { CSS_SELECTORS as CLASSES } from \"./constants\";\nimport { hiChar } from \"../../../ww-files/helpers\";\nimport { config } from \"../../../../common/config\";\n\nconst BUTTON_ACTION_SELECTOR = \"button-action-custom-selector\";\n\nconst renderStateCellContent = (\n action: ObjectState,\n componentLocale: any\n): JSX.Element[] | null | string => {\n let icon: string;\n let caption: string;\n let iconColor: string;\n\n if (action === \"deleted\") {\n icon = ICONS.substract;\n caption = componentLocale.states.deleted;\n iconColor = \"--mer-icon__error\";\n } else if (action === \"inserted\") {\n icon = ICONS.add;\n caption = componentLocale.states.inserted;\n iconColor = \"--mer-icon__success\";\n } else if (action === \"modified\") {\n icon = ICONS.edit;\n caption = componentLocale.states.modified;\n iconColor = \"--mer-icon__warning\";\n } else if (action === \"conflicted\") {\n icon = ICONS.warning;\n caption = componentLocale.states.conflicted;\n iconColor = \"--mer-icon__warning\";\n } else if (!action) {\n // proably is \"ignored\"\n return null;\n }\n\n return (\n <span class=\"custom-icon-text-wrapper\">\n <ch-image\n type=\"mask\"\n class=\"icon-md\"\n src={icon}\n style={{ backgroundColor: `var(${iconColor})` }}\n ></ch-image>\n {`${caption}`}\n </span>\n );\n};\n\nconst renderObjectStatus = (\n objectId: string,\n objectsStatusMap: Map<string, StatusInternal>,\n updatePillAsButton: boolean,\n commitSingleObject: (objectId: string) => () => void,\n componentLocale: any\n): JSX.Element[] => {\n const status = objectsStatusMap.get(objectId);\n const caption =\n status === \"pending\" && updatePillAsButton\n ? componentLocale.status.commit\n : componentLocale.status[status];\n\n if (status === \"commiting\") {\n return <span class=\"spinner-caption\">{caption}</span>;\n }\n\n const classes = `pill pill--${status}`;\n if (updatePillAsButton && status === \"pending\") {\n return (\n <button\n class={{\n \"button-secondary\": true,\n \"button-icon-and-text\": true,\n \"pill\": true,\n \"pill--update\": true,\n [BUTTON_ACTION_SELECTOR]: true\n }}\n onClick={commitSingleObject(objectId)}\n >\n {caption}\n </button>\n );\n } else {\n return <span class={classes}>{caption}</span>;\n }\n};\n\nconst renderTabularGridRows = (\n type: SourceType,\n pendingObjectsAfterFilter: ModifiedObjectData[],\n ignoredObjectsAfterFilter: ModifiedObjectData[],\n alreadyUpdatedObjectsIdsSet: Set<string>,\n markedObjectsSet: Set<string>,\n objectsMessagesDataMap: Map<string, MessageData[]>,\n updatePillAsButton: boolean,\n commitSingleObject: (objectId: string) => () => void,\n objectsStatusMap: Map<string, StatusInternal>,\n searchValue: string,\n componentLocale: any\n): HTMLChTabularGridRowElement[] => {\n let objects: ModifiedObjectData[];\n if (type === \"pending\") {\n objects = pendingObjectsAfterFilter;\n } else if (type === \"ignored\") {\n objects = ignoredObjectsAfterFilter;\n }\n\n searchValue = searchValue.toLowerCase();\n\n const filteredRows = objects.map(object => {\n const alreadyUpdated = alreadyUpdatedObjectsIdsSet.has(object.id);\n const hideCheckbox = alreadyUpdated || type === \"ignored\";\n const marked = markedObjectsSet.has(object.id);\n const messages = objectsMessagesDataMap.get(object.id);\n\n return (\n <ch-tabular-grid-row\n class=\"tabular-grid-row\"\n key={object.id}\n rowid={object.id}\n ref={(el: HTMLElement) => marked && el?.setAttribute(\"marked\", \"true\")}\n >\n <ch-tabular-grid-cell\n cell-type=\"rich\"\n row-selector=\"true\"\n class={{\n \"tabular-grid-cell\": true,\n \"no-checkbox-custom-selector\": hideCheckbox\n }}\n size=\"max-content\"\n >\n <div\n // This div is a WA to prevent the cell display:flex to\n // apply columns when hiChar is applied. hiChar creates\n // a span for every match.\n >\n {hiChar(object.name, searchValue)}\n </div>\n {/* {object.name} */}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {renderObjectTypeWithIcon(object.type)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell\n class={{\n \"tabular-grid-cell\": true,\n [CLASSES.GRID_CELL_DESCRIPTION]: true\n }}\n >\n <div\n // This div is a WA to prevent the cell display:flex to\n // apply columns when hiChar is applied. hiChar creates\n // a span for every match.\n >\n {hiChar(object.description, searchValue)}\n </div>\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {formatDate(object.modifiedOn)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {object.module}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {renderStateCellContent(object.state, componentLocale)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {formatDate(object.lastSynchronized)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell tabular-grid-cell--for-pill\">\n {renderObjectStatus(\n object.id,\n objectsStatusMap,\n updatePillAsButton,\n commitSingleObject,\n componentLocale\n )}\n </ch-tabular-grid-cell>\n\n {messages?.length && (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty\n class={{\n \"tabular-grid-rowset-empty\": true\n }}\n >\n <ul class=\"messages-list\">\n {messages.map(message => {\n let MESSAGE_ICON;\n if (message.type === \"error\") {\n MESSAGE_ICON = ICONS.error;\n } else if (message.type === \"warning\") {\n MESSAGE_ICON = ICONS.warning;\n } else if (message.type === \"success\") {\n MESSAGE_ICON = ICONS.success;\n } else {\n // info\n MESSAGE_ICON = ICONS.info;\n }\n\n return (\n <li class=\"message-description\">\n <ch-image\n class=\"icon-md message-icon\"\n src={MESSAGE_ICON}\n ></ch-image>\n {message.text}\n </li>\n );\n })}\n </ul>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid-row>\n );\n });\n\n // this.objectsRenderedAlready = true;\n\n return filteredRows;\n};\n\nexport default renderTabularGridRows;\n\nexport type GridColumnType =\n | \"action\"\n | \"description\"\n | \"lastSynchronized\"\n | \"localState\"\n | \"modifiedOn\"\n | \"module\"\n | \"name\"\n | \"status\"\n | \"type\";\n\nexport type GridColumnSet = Partial<Record<GridColumnType, true>>;\n\nexport const renderTabularGridColumns = (\n ignoredGridColumns: GridColumnType[],\n gridIsEmpty: boolean = false,\n componentLocale: any\n): JSX.Element => {\n const colSize = gridIsEmpty\n ? config.tabularGrid.colSize.auto\n : config.tabularGrid.colSize.maxContent;\n\n return (\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n {!ignoredGridColumns.includes(\"name\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"name\"\n columnName={componentLocale.objects.name}\n columnType=\"rich\"\n richRowSelector={true}\n richRowSelectorMode=\"mark\"\n settingable={false}\n size={colSize}\n />\n )}\n\n {!ignoredGridColumns.includes(\"type\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"type\"\n columnName={componentLocale.objects.type}\n settingable={false}\n size={colSize}\n />\n )}\n\n {!ignoredGridColumns.includes(\"description\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"description\"\n columnName={componentLocale.objects.description}\n settingable={false}\n size={config.tabularGrid.colSize.description}\n />\n )}\n\n {!ignoredGridColumns.includes(\"modifiedOn\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"modifiedOn\"\n columnName={componentLocale.objects.modifiedOn}\n settingable={false}\n size={colSize}\n />\n )}\n\n {!ignoredGridColumns.includes(\"module\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"module\"\n columnName={componentLocale.objects.module}\n settingable={false}\n size={colSize}\n />\n )}\n\n {!ignoredGridColumns.includes(\"localState\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"localState\"\n columnName={componentLocale.objects.localState}\n settingable={false}\n size={colSize}\n />\n )}\n\n {!ignoredGridColumns.includes(\"lastSynchronized\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"lastSynchronized\"\n columnName={componentLocale.objects.lastSynchronized}\n settingable={false}\n size={colSize}\n />\n )}\n\n {!ignoredGridColumns.includes(\"action\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"action\"\n columnName={componentLocale.objects.action}\n settingable={false}\n size={colSize}\n />\n )}\n\n {!ignoredGridColumns.includes(\"status\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"status\"\n columnName={componentLocale.objects.status}\n settingable={false}\n size={gridIsEmpty ? \"auto\" : \"100px\"}\n />\n )}\n </ch-tabular-grid-columnset>\n );\n};\n","@use \"../common/common.scss\" as *;\n@import \"../../common/styles.scss\";\n@import \"../../../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\";\n@import \"../../../../global/gx-ide-mixins.scss\";\n\n// header detail\n.header__details {\n grid-template-areas:\n \"detail-heading-gx . . .\"\n \"detail-genexus-server detail-knowledge-base detail-version detail-last-full-update\";\n}\n\n.detail__heading-genexus-server {\n grid-area: detail-heading-gx;\n}\n.detail__genexus-server {\n grid-area: detail-genexus-server;\n @extend %header-detail-start;\n}\n.detail__knowledge-base {\n grid-area: detail-knowledge-base;\n @extend %header-detail-common;\n}\n.detail__version {\n grid-area: detail-version;\n @extend %header-detail-end;\n}\n\n// filter\n.filter-container {\n container-type: inline-size;\n box-sizing: border-box;\n display: grid;\n column-gap: 12px;\n grid-template-areas:\n \"filter-primary filter-toggle-button filter-action-buttons\"\n \"filter-secondary . .\"\n \"comments comments comments\";\n grid-template-columns: minmax(0, max-content) max-content 1fr;\n}\n.filter {\n @extend %filter;\n}\n.filter-primary {\n grid-area: filter-primary;\n grid-template-columns: $filterControlInlineSize $filterControlInlineSize $filterControlInlineSize;\n}\n.filter-container > :nth-child(2) {\n grid-area: filter-toggle-button;\n}\n.filter-container > :nth-child(3) {\n grid-area: filter-action-buttons;\n justify-content: end;\n}\n.filter__toggle-secondary-filter-btn {\n grid-area: filter-toggle-button;\n}\n\n.filter__buttons {\n grid-area: filter-buttons;\n margin-inline-start: auto;\n}\n\n// secondary filter (hidden by default)\n.filter-secondary {\n display: grid;\n grid-template-rows: 0fr;\n grid-area: filter-secondary;\n transition: grid-template-rows var(--mer-timing--fast);\n}\n.filter-secondary--visible {\n grid-template-rows: 1fr;\n}\n.filter-secondary > div {\n @extend %filter;\n display: grid;\n overflow: hidden;\n font-size: 0; // WA Remove unwanted additional space\n grid-template-columns: repeat(3, $filterControlInlineSize);\n}\n\n.filter-secondary > div > .combo-box,\n.comments {\n margin-block-start: $filterRowGap;\n}\n.comments {\n grid-area: comments;\n}\n\n// - - - - - - - - - - - - - -\n// WA (WORK AROUNDS)\n// - - - - - - - - - - - - - -\n\n.input-comments-container {\n position: relative;\n}\n// ch-edit for comments WA's\n// Figma design for this component displays the textarea witout border, and with a little more line-height.\n// The following styles are a temporary WA that should be brouhgt to Mercury DS.\n.input-comments {\n --control__border-color: transparent;\n padding-block: 0 !important;\n padding-inline: 0 !important;\n --line-height-tight: 1.4;\n block-size: 100%;\n background-color: var(--mer-surface);\n transition:\n var(--mer-timing--super-fast) block-size,\n var(--mer-timing--super-fast) background-color,\n var(--mer-timing--super-fast) padding-block,\n var(--mer-timing--super-fast) padding-inline;\n}\n.input-comments:focus {\n position: absolute;\n block-size: $filterControlInlineSize;\n inline-size: 100%;\n z-index: 99;\n background-color: var(--mer-surface__elevation--01);\n padding-block: var(--control__padding-block) !important;\n padding-inline: var(--control__padding-inline) !important;\n}\n","// stencil\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method,\n Watch\n} from \"@stencil/core\";\n\n// external libraries\nimport { MercuryBundles } from \"@genexus/mercury\";\nimport {\n ChEditCustomEvent,\n ComboBoxModel,\n TabularGridMarkingChangedEvent,\n TabularGridRowContextMenuEvent,\n TabularGridSelectionChangedEvent\n} from \"@genexus/chameleon-controls-library\";\n\n// local\nimport { Locale } from \"../../../../common/locale\";\nimport {\n GxOption,\n ItemsCheckedResult,\n ObjectType\n} from \"../../../../common/types\";\nimport clearGridSelection from \"../common/clear-grid-selection\";\n\nimport type {\n StateForFilter,\n StatusInternal,\n MessageData,\n ModifiedObjectData,\n CommitData,\n CommitCallback,\n ContextMenuCallback,\n LoadCallback,\n PendingItemsCheckedCallback,\n SelectCallback,\n ServerDetails,\n SourceType\n} from \"../common/types\";\n\nimport headerDetail, { headerTitle } from \"../common/header-renders\";\nimport { changesetToComboBoxModel } from \"./utilities/changeset-to-combo-box\";\nimport { foldersToComboBoxModel } from \"./utilities/folders-to-combo-box\";\nimport { typesToComboBoxItemModel } from \"./utilities/types-to-combo-box\";\nimport renderTabularGridRows, {\n renderTabularGridColumns\n} from \"../common/tabular-grid-render\";\n\nimport { CSS_SELECTORS as CLASSES, ALL_VALUE } from \"../common/constants\";\nimport ICONS from \"../common/constants\";\n\nconst FILTER_SECONDARY_CONTAINER_ID = \"filters-secondary-container\";\nconst FILTER_SECONDARY_BUTTON_ID = \"filter-toggle-button\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/tabular-grid\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\n@Component({\n tag: \"gx-ide-team-dev-commit\",\n styleUrl: \"commit.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/team-dev-commit\"]\n})\nexport class GxIdeTeamDevCommit {\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 /**\n * The ComboBoxModel for \"Local State\" filter.\n */\n #localStatesComboBoxModel: { caption: string; value: StateForFilter }[];\n\n /**\n * Used to determine if pendingItemsCheckedCallback callback has to be\n * called or not. It should be ignored if the grid checkboxes state is\n * changed programmatically, by setting markRow to false once the object\n * has been successfully updated, for example.\n */\n #rowCheckedChangedByTheUser: boolean = true;\n\n @Element() el: HTMLGxIdeTeamDevCommitElement;\n\n /**\n * A reference to the tablar grid. Used to call methods.\n */\n #chGridPendingForUpdateEl!: HTMLChTabularGridElement;\n\n // sets\n\n /**\n * A set that holds the id's of the objects that have been updated already.\n */\n @State() alreadyCommitedObjectsIdsSet: Set<string> = new Set<string>([]);\n\n /**\n * A set that holds the ids of all the ignored objects. Used to quickly\n * determine if the selected rows belong to \"ignored\" or not. This\n * information is required for the ContextMenuCallback callback. This set\n * has to be updated on every loadCallback.\n */\n @State() ignoredIdsSet: Set<string> = new Set<string>([]);\n\n /**\n * A set that holds the id's of all the pending objects. Used to quickly\n * determine if the selected rows belong to \"pending\" or \"igonred\". This\n * information is required for the ContextMenuCallback callback. This set\n * has to be updated after every loadCallback.\n */\n @State() pendingIdsSet: Set<string> = new Set<string>([]);\n\n /**\n * A set that stores the marked state of each object cell. This is\n * necessary because filtering the grid causes marked cells to lose\n * their state.\n */\n @State() markedObjectsSet: Set<string> = new Set<string>([]);\n @Watch(\"markedObjectsSet\")\n markedObjectsSetChanged(newMarkedObjectsSet: Set<string>) {\n this.atLeastOneObjectIsChecked = newMarkedObjectsSet.size > 0;\n }\n\n // maps\n\n /**\n * A map that holds the current update objects states (\"inserted\" |\n * \"modified\" | \"modified-with-conflicts\" | \"deleted\" | \"updating\" |\n * \"update\")\n */\n @State() objectsStatusMap: Map<string, StatusInternal> = new Map();\n @Watch(\"objectsStatusMap\")\n objectsStatusMapChanged(newObjectsStatusMap: Map<string, StatusInternal>) {\n const someObjectIsUpdating = [...newObjectsStatusMap.entries()].find(\n ([, state]) => state === \"commiting\"\n );\n\n if (!someObjectIsUpdating) {\n this.commiting = false;\n }\n }\n\n /**\n * A map that holds object messages, after trying to commit ('info' |\n * 'success' | 'warning' | 'error')\n */\n @State() objectsMessagesDataMap: Map<string, MessageData[]> = new Map();\n\n // boolean\n\n /**\n * It holds a boolean indicating if at least one object from the\n * tabular-grid is checked, for merging.\n */\n @State() atLeastOneObjectIsChecked: boolean = false;\n\n /**\n * A boolean to indicate if the comments input has error or not.\n */\n @State() commentInputHasError: boolean = false;\n\n /**\n * Set to true when objects are being commited. This helps disabling\n * controls until all objects are done.\n */\n @State() commiting: boolean = false;\n\n /**\n * Hides or shows the filter secondary controls\n */\n @State() filterSecondaryIsHidden = true;\n\n /**\n * Indicates if any of the filter secondary controls have a condition\n * (have a value other than default \"All\"). This changes the filter\n * toggle button icon, from \"filter\" to \"filterWithConditions\".\n */\n @State() filterSecondaryHasConditions = false;\n\n /**\n * Used to display a loader. Set to true when loadCallback is called.\n */\n @State() loading: boolean = true;\n\n /**\n * Used to mark all the grid checkboxes, only on the first render.\n */\n @State() objectsRenderedAlready: boolean = false;\n\n // models\n\n /**\n * changeset options as ComboBoxModel\n */\n @State() changesetsComboBoxModel: ComboBoxModel;\n\n /**\n * categories options as ComboBoxModel\n */\n // @State() categoriesComboBoxModel: ComboBoxModel;\n\n /**\n * Pending objects after \"action\" filter\n */\n @State() pendingObjectsAfterFilter: ModifiedObjectData[] = [];\n\n /**\n * Ignored objects after \"action\" filter\n */\n @State() ignoredObjectsAfterFilter: ModifiedObjectData[] = [];\n\n /**\n * The ComboBoxModel for \"Types\" filter.\n */\n @State() typesComboBoxModel: ComboBoxModel = [];\n\n /**\n * All objects (\"pending for update\" and \"ignored objects\") before\n * \"state\" filter\n */\n @State() pendingAndIgnored: CommitData = {\n pendingForCommit: [],\n ignoredObjects: []\n };\n @Watch(\"pendingAndIgnored\")\n pendingAndIgnoredChanged() {\n this.#applyClientFilter();\n this.pendingIdsSet.clear();\n this.pendingAndIgnored.pendingForCommit?.forEach(pending => {\n this.pendingIdsSet.add(pending.id);\n });\n this.ignoredIdsSet.clear();\n this.pendingAndIgnored.ignoredObjects?.forEach(ignored => {\n this.ignoredIdsSet.add(ignored.id);\n });\n }\n\n // current values\n\n /**\n * Holds the current value for the commit \"comments\"\n */\n @State() commentsValue: string = \"\";\n\n /**\n * The current search filter value.\n */\n @State() searchValue: string = \"\";\n\n /**\n * Holds the current value for the \"type\" filter\n */\n @State() selectedType: string;\n\n /**\n * Holds the current value for the \"local state\" filter\n */\n @State() selectedState: StateForFilter = ALL_VALUE;\n\n /**\n * Holds the current value for the \"changeset\" filter\n */\n @State() selectedChangeset: string;\n\n /**\n * Holds the current value for the \"folder\" filter\n */\n @State() selectedFolder: string;\n\n /**\n * Holds the current value for the \"category\" filter\n */\n @State() selectedCategory: string;\n\n /**\n * folder options as ComboBoxModel\n */\n @State() foldersComboBoxModel: ComboBoxModel;\n\n // callbacks\n\n /**\n * Invoked when user starts the commit process\n */\n @Prop() readonly commitCallback: CommitCallback;\n\n /**\n * Invoked when user activates the context menu on any of the grids.\n */\n @Prop() readonly objectsContextMenuCallback!: ContextMenuCallback;\n\n /**\n * Invoked to return the list of data types loaded from file\n * or url.\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n * Invoked when user clicks in server url of Update From group.\n */\n @Prop() readonly openServerCallback!: () => Promise<void>;\n\n /**\n * Invoked to return information of a Font type of data.\n */\n @Prop() readonly pendingItemsCheckedCallback!: PendingItemsCheckedCallback;\n\n /**\n * Invoked when the user selects rows from the grid\n */\n @Prop() readonly selectCallback: SelectCallback;\n\n // models\n\n /**\n * \"types\" options for the filter.\n */\n @Prop() readonly types: ObjectType[];\n @Watch(\"types\")\n typesChanged(newTypes: ObjectType[]) {\n this.typesComboBoxModel = typesToComboBoxItemModel(newTypes);\n }\n\n /**\n * \"changeset\" options for the filter.\n */\n @Prop() readonly changeset: GxOption[];\n @Watch(\"changeset\")\n changesetChanged(newChangesetOptions: GxOption[]) {\n this.changesetsComboBoxModel =\n changesetToComboBoxModel(newChangesetOptions);\n }\n\n /**\n * \"folder\" options for the filter.\n */\n @Prop() readonly folders: GxOption[];\n @Watch(\"folders\")\n folderChanged(newFolderOptions: GxOption[]) {\n this.foldersComboBoxModel = foldersToComboBoxModel(newFolderOptions);\n }\n\n /**\n * \"category\" options for the filter.\n */\n // @Prop() readonly categories: GxOption[];\n // @Watch(\"categories\")\n // categoryChanged(newCategoryOptions: GxOption[]) {\n // this.categoriesComboBoxModel =\n // categoriesToComboBoxModel(newCategoryOptions);\n // }\n\n // boolean\n\n /**\n * If true, the \"Action\" column will display a button instead of a pill,\n * only when the action is\n */\n @Prop() readonly updatePillAsButton: boolean = false;\n\n /**\n * Information to show in Update From group.\n */\n @Prop() readonly serverDetails: ServerDetails;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n // Initiate \"actions\" combo box filter\n this.#localStatesComboBoxModel = [\n {\n caption: this.#componentLocale.states.all,\n value: ALL_VALUE\n },\n {\n caption: this.#componentLocale.states.inserted,\n value: \"inserted\"\n },\n {\n caption: this.#componentLocale.states.modified,\n value: \"modified\"\n },\n {\n caption: this.#componentLocale.states.conflicted,\n value: \"conflicted\"\n },\n {\n caption: this.#componentLocale.states.deleted,\n value: \"deleted\"\n }\n ];\n\n // intialize combo-box models\n\n this.typesComboBoxModel = typesToComboBoxItemModel(this.types);\n this.selectedType = this.typesComboBoxModel[0].value;\n\n this.selectedState = this.#localStatesComboBoxModel[0].value;\n\n this.changesetChanged(this.changeset);\n this.selectedChangeset =\n this.changesetsComboBoxModel.length > 0\n ? this.changesetsComboBoxModel[0].value\n : ALL_VALUE;\n\n this.folderChanged(this.folders);\n this.selectedFolder =\n this.foldersComboBoxModel && this.foldersComboBoxModel.length > 0\n ? this.foldersComboBoxModel[0].value\n : ALL_VALUE;\n\n // this.categoryChanged(this.categories);\n // this.selectedCategory =\n // this.categoriesComboBoxModel.length > 0\n // ? this.categoriesComboBoxModel[0].value\n // : ALL_VALUE;\n\n this.#evaluateSecondaryFilterHasConditions();\n }\n\n async componentDidLoad() {\n await this.#loadData();\n }\n\n /**\n * Used by the host to instruct the component to force a data reload in the grids.\n */\n @Method()\n async reload() {\n this.#loadData();\n }\n\n // commit related\n\n #commitCheckedClickedHandler = () => {\n this.#commitObjectsHandler([...this.markedObjectsSet]);\n };\n\n #commitSingleObject: (objectId: string) => () => void =\n objectId => async () => {\n const newobjectsStatusMap = new Map(this.objectsStatusMap);\n newobjectsStatusMap.set(objectId, \"commiting\");\n this.objectsStatusMap = newobjectsStatusMap;\n this.#commitObjectsHandler([objectId]);\n };\n\n #commitObjectsHandler = async (selection: string[]) => {\n if (this.commentsValue.length === 0) {\n // A comment is required to commit.\n this.commentInputHasError = true;\n return;\n }\n this.commentInputHasError = false;\n this.commiting = true;\n\n selection.forEach(itemToUpdate => {\n this.objectsStatusMap.set(itemToUpdate, \"commiting\");\n });\n\n const commitResult = await this.commitCallback(\n selection,\n this.commentsValue\n );\n\n commitResult.forEach(async objectResult => {\n const messages = objectResult.messages;\n if (messages.length) {\n this.objectsMessagesDataMap.set(objectResult.id, objectResult.messages);\n } else {\n // clear messages\n this.objectsMessagesDataMap.delete(objectResult.id);\n }\n if (objectResult.result === \"commited\") {\n this.alreadyCommitedObjectsIdsSet.add(objectResult.id);\n this.objectsStatusMap.set(objectResult.id, \"commited\");\n await this.#chGridPendingForUpdateEl.markRow(objectResult.id, false);\n } else {\n this.objectsStatusMap.set(objectResult.id, \"pending\");\n }\n });\n\n this.commiting = false;\n };\n\n // handlers\n\n #rowMarkingChangedHandler = async (\n event: CustomEvent<TabularGridMarkingChangedEvent>\n ) => {\n const markedRowsIds = event.detail.rowsId;\n this.markedObjectsSet = new Set(\n markedRowsIds.filter(\n markedObjectId => !this.alreadyCommitedObjectsIdsSet.has(markedObjectId)\n )\n );\n\n if (this.#rowCheckedChangedByTheUser) {\n this.#updatePendingCheckedItems(event);\n }\n };\n\n #rowSelectionChangedHandler = async (\n event: CustomEvent<TabularGridSelectionChangedEvent>\n ) => {\n const selectedRowsIds = event.detail.rowsId;\n const firstSelectedRowId = selectedRowsIds[0];\n const gridSource: SourceType = this.pendingIdsSet.has(firstSelectedRowId)\n ? \"pending\"\n : \"ignored\";\n\n const filteredSelectedRowsIds = clearGridSelection(\n gridSource,\n selectedRowsIds,\n this.pendingIdsSet,\n this.ignoredIdsSet,\n this.#chGridPendingForUpdateEl\n );\n\n await this.selectCallback(gridSource, filteredSelectedRowsIds);\n };\n\n #commentsInputHandler = (event: ChEditCustomEvent<string> | InputEvent) => {\n this.commentsValue = event.detail as string;\n if (this.commentsValue.length && this.commentInputHasError) {\n // remove error style and tooltip\n this.commentInputHasError = false;\n }\n };\n\n // filter related\n\n #applyClientFilter = () => {\n this.pendingObjectsAfterFilter = this.#filteredObjects(\n this.pendingAndIgnored.pendingForCommit\n );\n this.ignoredObjectsAfterFilter = this.#filteredObjects(\n this.pendingAndIgnored.ignoredObjects\n );\n };\n\n #filteredObjects = (objects: ModifiedObjectData[]): ModifiedObjectData[] => {\n let filtered = objects;\n\n // name or description\n if (this.searchValue.length) {\n filtered = filtered.filter(object => {\n const nameFiltered = object.name\n .toLowerCase()\n .includes(this.searchValue.toLowerCase());\n\n const descriptionFiltered = object.description\n .toLowerCase()\n .includes(this.searchValue.toLowerCase());\n\n return nameFiltered || descriptionFiltered;\n });\n }\n\n // status\n if (this.selectedState && this.selectedState !== ALL_VALUE) {\n filtered = filtered.filter(object => object.state === this.selectedState);\n }\n\n return filtered;\n };\n\n #evaluateSecondaryFilterHasConditions = () => {\n if (\n // this.selectedChangeset !== ALL_VALUE ||\n this.selectedFolder !== ALL_VALUE\n // this.selectedCategory !== ALL_VALUE\n ) {\n this.filterSecondaryHasConditions = true;\n } else {\n this.filterSecondaryHasConditions = false;\n }\n };\n\n #toggleFiltersHandler = () => {\n this.filterSecondaryIsHidden = !this.filterSecondaryIsHidden;\n };\n\n #searchInputHandler = (event: ChEditCustomEvent<string> | InputEvent) => {\n this.searchValue = (event.detail as string).trim();\n this.#applyClientFilter();\n };\n\n #typeChangedHandler = (event: CustomEvent<string> | InputEvent) => {\n this.selectedType = event.detail as string;\n this.#loadData();\n };\n\n #stateChangedHandler = (event: CustomEvent<string> | InputEvent) => {\n this.selectedState = event.detail as StateForFilter;\n this.#applyClientFilter();\n };\n\n // changeset is a WIP.\n // #changesetChangedHandler = (event: CustomEvent<string> | InputEvent) => {\n // this.selectedChangeset = event.detail as string;\n // this.#loadData();\n // this.#evaluateSecondaryFilterHasConditions();\n // };\n\n #folderChanged = (event: CustomEvent<string> | InputEvent) => {\n this.selectedFolder = event.detail as string;\n this.#loadData();\n this.#evaluateSecondaryFilterHasConditions();\n };\n\n // #categoryChangedHandler = (event: CustomEvent<string> | InputEvent) => {\n // this.selectedCategory = event.detail as string;\n // this.#loadData();\n // this.#evaluateSecondaryFilterHasConditions();\n // };\n\n #onRowContextMenuHandler =\n () => async (ev: CustomEvent<TabularGridRowContextMenuEvent>) => {\n ev.preventDefault();\n ev.stopPropagation();\n\n const selectedRowsIds =\n await this.#chGridPendingForUpdateEl.getSelectedRows();\n\n const firstSelectedRowId = selectedRowsIds[0];\n const gridSource = this.pendingIdsSet.has(firstSelectedRowId)\n ? \"pending\"\n : \"ignored\";\n\n await this.objectsContextMenuCallback(gridSource, {\n selection: selectedRowsIds,\n clientX: ev.detail.clientX,\n clientY: ev.detail.clientY\n });\n };\n\n // other methods\n\n #updatePendingCheckedItems = async (\n event: CustomEvent<TabularGridMarkingChangedEvent>\n ) => {\n this.#rowCheckedChangedByTheUser = false;\n const addedRowsIds = event.detail.addedRowsId;\n const removedRowsId = event.detail.removedRowsId;\n\n const pendingItemCheckedResult = await this.pendingItemsCheckedCallback({\n itemsChecked: addedRowsIds,\n itemsUnchecked: removedRowsId\n });\n\n if (pendingItemCheckedResult === undefined) {\n // undo check/uncheck\n await this.#revertPendingCommitsCheckboxes(addedRowsIds, removedRowsId);\n } else {\n await this.#togglePendingCommitsCheckboxes(pendingItemCheckedResult);\n }\n this.#rowCheckedChangedByTheUser = true;\n };\n\n #setInitialObjectsStatus = (): void => {\n if (this.objectsRenderedAlready) {\n return;\n }\n this.pendingAndIgnored.pendingForCommit.forEach(pendingObject => {\n const status: StatusInternal = \"pending\";\n this.objectsStatusMap.set(pendingObject.id, status);\n });\n this.pendingAndIgnored.ignoredObjects.forEach(ignoredObject => {\n const status: StatusInternal = \"ignored\";\n this.objectsStatusMap.set(ignoredObject.id, status);\n });\n };\n\n #loadData = async (): Promise<void> => {\n this.loading = true;\n this.pendingAndIgnored = await this.loadCallback({\n search: this.searchValue,\n type: this.selectedType,\n changeset: this.selectedChangeset,\n folder: this.selectedFolder,\n category: this.selectedCategory\n });\n\n this.#setInitialObjectsStatus();\n this.loading = false;\n // Is is required to mark/check all objects after loadCallback.\n this.#markPendingObjects();\n };\n\n /**\n * Marks all pending objects that have not been committed yet.\n *\n * Iterates through all pending object IDs and adds them to the marked objects set\n * if they are not already in the committed objects set. This effectively identifies\n * and marks all the pending objects that still need to be processed.\n **/\n #markPendingObjects = () => {\n for (const pendingId of this.pendingIdsSet) {\n if (!this.alreadyCommitedObjectsIdsSet.has(pendingId)) {\n this.markedObjectsSet = new Set([...this.markedObjectsSet, pendingId]);\n }\n }\n };\n\n // render methods\n\n #revertPendingCommitsCheckboxes = async (\n addedRowsIds: string[],\n removedRowsId: string[]\n ) => {\n if (this.#chGridPendingForUpdateEl) {\n for (const rowId of addedRowsIds) {\n await this.#chGridPendingForUpdateEl.markRow(rowId, false);\n }\n for (const rowId of removedRowsId) {\n await this.#chGridPendingForUpdateEl.markRow(rowId, true);\n }\n }\n };\n\n #togglePendingCommitsCheckboxes = async (\n itemsToToggle: ItemsCheckedResult\n ) => {\n if (this.#chGridPendingForUpdateEl) {\n const itemsToCheck: string[] = itemsToToggle.itemsToCheck;\n const itemsToUncheck: string[] = itemsToToggle.itemsToUncheck;\n // check\n for (const rowId of itemsToCheck) {\n await this.#chGridPendingForUpdateEl.markRow(rowId, true);\n }\n // uncheck\n for (const rowId of itemsToUncheck) {\n await this.#chGridPendingForUpdateEl.markRow(rowId, false);\n }\n }\n };\n\n render() {\n const disableControls = this.commiting || this.loading;\n const gridIsEmpty =\n this.pendingObjectsAfterFilter.length === 0 &&\n this.ignoredObjectsAfterFilter.length === 0;\n\n const filterIcon = this.filterSecondaryHasConditions\n ? ICONS.filterWithConditions\n : ICONS.filter;\n\n const commitButtonEnabled =\n this.atLeastOneObjectIsChecked && this.commentsValue.length > 0;\n\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n <header class={{ [CLASSES.HEADER]: true }}>\n <div\n // header details\n class={{ [CLASSES.HEADER_DETAILS]: true }}\n >\n {headerTitle(this.#componentLocale.commitDetail.title)}\n\n {\n // genexus server\n headerDetail(\n \"link\",\n this.#componentLocale.commitDetail.genexusServer,\n this.serverDetails ? this.serverDetails.serverUrl : \"\",\n this.openServerCallback,\n \"detail__genexus-server\"\n )\n }\n\n {\n // knowledge base\n headerDetail(\n \"text\",\n this.#componentLocale.commitDetail.knowledgeBase,\n this.serverDetails ? this.serverDetails.kbName : \"\",\n undefined,\n \"detail__knowledge-base\"\n )\n }\n\n {\n // version\n headerDetail(\n \"text\",\n this.#componentLocale.commitDetail.version,\n this.serverDetails ? this.serverDetails.versionName : \"\",\n undefined,\n \"detail__version\"\n )\n }\n </div>\n </header>\n\n <div class=\"filter-container spacing-body-inline\">\n <div class={{ [CLASSES.FILTER]: true, \"filter-primary\": true }}>\n <ch-edit\n // searchch-edit\n class=\"input filter__combo\"\n disabled={disableControls}\n startImgSrc={ICONS.search}\n accessibleName={\n this.#componentLocale.filter.searchAccessibleName\n }\n placeholder={this.#componentLocale.filter.searchPlaceholder}\n type=\"search\"\n onInput={this.#searchInputHandler}\n ></ch-edit>\n\n <ch-combo-box-render\n // types\n class=\"combo-box filter__combo\"\n disabled={disableControls}\n model={this.typesComboBoxModel}\n value={this.selectedType}\n accessibleName={this.#componentLocale.filter.typeAccesibleName}\n placeholder={this.#componentLocale.filter.typePlaceholder}\n onInput={this.#typeChangedHandler}\n ></ch-combo-box-render>\n\n <ch-combo-box-render\n // local states\n class=\"combo-box filter__combo\"\n disabled={disableControls}\n model={this.#localStatesComboBoxModel}\n value={this.selectedState}\n onInput={this.#stateChangedHandler}\n accessibleName={\n this.#componentLocale.filter.localStateAccesibleName\n }\n placeholder={this.#componentLocale.filter.localStatePlaceholder}\n ></ch-combo-box-render>\n </div>\n\n <button\n // toggle secondary filter button\n id={FILTER_SECONDARY_BUTTON_ID}\n class=\"button-secondary button-icon-only\"\n disabled={disableControls}\n aria-label={this.#componentLocale.filter.secondaryFilterAriaLabel}\n aria-expanded={this.filterSecondaryIsHidden ? \"false\" : \"true\"}\n aria-controls={FILTER_SECONDARY_CONTAINER_ID}\n onClick={this.#toggleFiltersHandler}\n title={this.#componentLocale.filter.secondaryFilterAriaLabel}\n >\n <ch-image class=\"icon-md\" src={filterIcon}></ch-image>\n </button>\n\n <div class=\"buttons-spacer\">\n <button\n // reload button\n class=\"button-secondary button-icon-and-text\"\n disabled={disableControls}\n onClick={this.#loadData}\n >\n <ch-image class=\"icon-md\" src={ICONS.refresh}></ch-image>\n {this.#componentLocale.filter.reload}\n </button>\n\n <button\n // commit button\n class=\"button-primary\"\n disabled={!commitButtonEnabled || disableControls}\n onClick={this.#commitCheckedClickedHandler}\n >\n {this.#componentLocale.filter.commit}\n </button>\n </div>\n\n <div\n // secondary filter\n id={FILTER_SECONDARY_CONTAINER_ID}\n aria-labelledby={FILTER_SECONDARY_BUTTON_ID}\n class={{\n [CLASSES.FILTER]: true,\n \"filter-secondary\": true,\n \"filter-secondary--visible\": !this.filterSecondaryIsHidden\n }}\n inert={this.filterSecondaryIsHidden}\n hidden={this.filterSecondaryIsHidden}\n >\n <div>\n {/* \n // changeset is a WIP.\n <ch-combo-box-render\n // changeset\n class=\"combo-box\"\n disabled={disableControls}\n model={this.changesetsComboBoxModel}\n value={this.selectedChangeset}\n onInput={this.#changesetChangedHandler}\n accessibleName={\n this.#componentLocale.filter.changesetAccesibleName\n }\n placeholder={\n this.#componentLocale.filter.changesetPlaceholder\n }\n ></ch-combo-box-render> */}\n\n <ch-combo-box-render\n // folder\n class=\"combo-box\"\n disabled={disableControls}\n model={this.foldersComboBoxModel}\n value={this.selectedFolder}\n onInput={this.#folderChanged}\n accessibleName={\n this.#componentLocale.filter.folderAccesibleName\n }\n placeholder={this.#componentLocale.filter.folderPlaceholder}\n ></ch-combo-box-render>\n\n {/* <ch-combo-box-render\n // category\n class=\"combo-box\"\n disabled={disableControls}\n model={this.categoriesComboBoxModel}\n value={this.selectedCategory}\n onInput={this.#categoryChangedHandler}\n accessibleName={\n this.#componentLocale.filter.categoryPlaceholder\n }\n placeholder={this.#componentLocale.filter.categoryPlaceholder}\n ></ch-combo-box-render> */}\n </div>\n </div>\n\n <ch-edit\n // commit comments\n class=\"input comments\"\n multiline={true}\n autoGrow={true}\n placeholder={this.#componentLocale.commitCommentPlaceholder}\n onInput={this.#commentsInputHandler}\n ></ch-edit>\n </div>\n\n <div class={CLASSES.MAIN}>\n {!this.loading ? (\n <ch-tabular-grid\n class={{\n \"tabular-grid\": true,\n \"objects-tabular-grid\": true,\n \"disabled-custom-selector\": this.commiting,\n \"empty-result\": gridIsEmpty\n }}\n keyboardNavigationMode=\"focus\"\n rowSelectionMode=\"multiple\"\n onSelectionChanged={this.#rowSelectionChangedHandler}\n onRowMarkingChanged={this.#rowMarkingChangedHandler}\n onRowContextMenu={this.#onRowContextMenuHandler()}\n ref={(el: HTMLChTabularGridElement) =>\n (this.#chGridPendingForUpdateEl = el)\n }\n >\n {renderTabularGridColumns(\n [\"action\"],\n gridIsEmpty,\n this.#componentLocale\n )}\n\n {!gridIsEmpty\n ? [\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-legend class=\"tabular-grid-rowset-legend\">\n {this.#componentLocale.objects.pendingCommits}\n </ch-tabular-grid-rowset-legend>\n {renderTabularGridRows(\n \"pending\",\n this.pendingObjectsAfterFilter,\n this.ignoredObjectsAfterFilter,\n this.alreadyCommitedObjectsIdsSet,\n this.markedObjectsSet,\n this.objectsMessagesDataMap,\n this.updatePillAsButton,\n this.#commitSingleObject,\n this.objectsStatusMap,\n this.searchValue,\n this.#componentLocale\n )}\n </ch-tabular-grid-rowset>,\n\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-legend class=\"tabular-grid-rowset-legend\">\n {this.#componentLocale.objects.ignoredObjects}\n </ch-tabular-grid-rowset-legend>\n {renderTabularGridRows(\n \"ignored\",\n this.pendingObjectsAfterFilter,\n this.ignoredObjectsAfterFilter,\n this.alreadyCommitedObjectsIdsSet,\n this.markedObjectsSet,\n this.objectsMessagesDataMap,\n this.updatePillAsButton,\n this.#commitSingleObject,\n this.objectsStatusMap,\n this.searchValue,\n this.#componentLocale\n )}\n </ch-tabular-grid-rowset>\n ]\n : null}\n\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {gridIsEmpty && (\n <ch-tabular-grid-rowset-empty>\n <gx-ide-empty-state\n class=\"empty-state\"\n isAnimated\n stateIconSrc={ICONS.filter}\n stateTitle=\"No object matched your filter\"\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n )}\n </ch-tabular-grid-rowset>\n </ch-tabular-grid>\n ) : (\n <gx-ide-loader\n cancelLabel={this.#componentLocale.loader.cancelLabel}\n loaderTitle={this.#componentLocale.loader.title}\n description={this.#componentLocale.loader.description}\n show\n class=\"loader\"\n ></gx-ide-loader>\n )}\n </div>\n </section>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["serverSelectorCss","CSS_BUNDLES","INFO_ICON","getIconPath","category","name","colorType","LOCK_ICON","LANGUAGE_ICON","GxIdeServerSelector","_GxIdeServerSelector_chSearchIcon","set","this","_GxIdeServerSelector_versionsSelect","value","caption","_GxIdeServerSelector__componentLocale","_GxIdeServerSelector_chGridRecentlyUsedServersEl","_GxIdeServerSelector_chGridConnectedServersEl","_GxIdeServerSelector_previousSelectedRowId","_GxIdeServerSelector_selectedRowId","_GxIdeServerSelector_serverUrlEL","_GxIdeServerSelector_cancelHandler","cancelCallback","_GxIdeServerSelector_confirmHandler","async","selectedConnectionType","selectServerCallback","uri","selectedServerUri","selectedServerName","isValidUrl","__classPrivateFieldGet","_GxIdeServerSelector_validateUrl","call","serverUrlInputValue","serverNameInputValue","_GxIdeServerSelector_filterValueChangedHandler","event","filterValue","detail","toLowerCase","filteredConnectedServersData","connectedServersData","filter","item","serverName","includes","_GxIdeServerSelector_inputHandler","field","enableConfirmButton","_GxIdeServerSelector_enableConfirmButton","url","serverUrl","URL","protocolValid","protocol","startsWith","ex","length","_GxIdeServerSelector_onConnectedServersRowDoubleClickHandler","_GxIdeServerSelector_selectConnectedServersHandler","_GxIdeServerSelector_onRecentlyUsedRowDoubleClickHandler","_GxIdeServerSelector_selectRecentlyUsedServersHandler","_GxIdeServerSelector_handleServerSelection","recentlyUsedServersData","serversData","otherGridEl","isFirstSelection","__classPrivateFieldSet","rowId","undefined","selectedServer","find","server","id","userName","gxServerUsername","selectRow","_GxIdeServerSelector_connectionTypeChangedHandler","_GxIdeServerSelector_renderTabularGridColumnSet","hideColumnName","h","class","columnId","columnName","settingable","columnNameHidden","size","config","tabularGrid","colSize","maxContent","resizable","sortable","onColumnSortChanged","_GxIdeServerSelector_handleColumnSortChanged","auto","_GxIdeServerSelector_renderTooltip","text","actionElement","blockAlign","inlineAlign","tooltipSettings","delay","_GxIdeServerSelector_renderTabularGridCommonCells","_GxIdeServerSelector_renderIcon","accessLevel","isConnected","_GxIdeServerSelector_renderRecentlyUsedServersGrid","rowSelectionMode","ref","el","allowColumnReorder","onRowClicked","onRowDoubleClicked","map","rowid","stateIconSrc","stateTitle","emptyConnectedServers","isAnimated","_GxIdeServerSelector_renderConnectedServersGrid","e","sortDirection","aux","sort","a","b","icon","src","_GxIdeServerSelector_renderFooter","isSelectionMode","onClick","footer","cancel","disabled","confirm","Map","componentWillLoad","Locale","getComponentStrings","_a","_b","render","connectionTypeClass","recentlyUsedEmptyClass","Host","model","header","title","onChange","startImgSrc","onInput","placeholder","placeholders","searchServers","accessibleName","type","htmlFor","recentlyUsed","allServers","labels","input","maxLength","errors","serverUrlInvalid"],"sources":["src/components/team-dev/server-selector/server-selector.scss?tag=gx-ide-server-selector&encapsulation=shadow","src/components/team-dev/server-selector/server-selector.tsx"],"sourcesContent":["@import \"../../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\";\n\n:host {\n display: grid;\n block-size: 100%;\n grid-template-rows: max-content max-content 1fr max-content;\n row-gap: var(--mer-spacing--md);\n overflow: auto;\n}\n\n:host(.new-connection) {\n grid-template-rows: max-content 1fr;\n}\n\n:host(.recently-used-empty) {\n grid-template-rows: max-content 1fr;\n}\n\n.section {\n display: contents;\n}\n\n// General\n\n.tabular-grid {\n border-radius: var(--mer-border__radius--sm);\n overflow: hidden;\n border-inline: 1px solid var(--grid-cell__border-color);\n --grid-cell__box-shadow-inline-block:\n inset 0 0px var(--grid-cell__border-color),\n inset 0 -1px var(--grid-cell__border-color);\n overflow: auto;\n}\n\n.tabular-grid-rowset-empty {\n border-block-end: 1px solid var(--grid-cell__border-color);\n overflow: hidden;\n}\n\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".tabular-grid\",\n $tabular-grid-cell-apply-ellipsis: true,\n $tabular-grid-affected-columns-nth-list: (\n 2,\n 3,\n 4\n )\n);\n\n.text-neutral-gray-400,\n.tabular-grid-cell.text-neutral-gray-400 {\n // WA: colors for text should be defined in Mercury\n color: var(--mer-color__neutral-gray--400);\n}\n// Header\n\n.search-server {\n inline-size: 50%;\n}\n\n// Recently Used\n\n.tabular-grid-recently-used .tabular-grid-column::part(bar) {\n --grid-cell__padding-block: 0;\n --grid-cell__padding-inline: 0;\n}\n\n.tabular-grid.tabular-grid-recently-used {\n border-block-end: 1px solid var(--grid-cell__border-color);\n max-block-size: 100px;\n}\n\n// All Servers\n\n.tabular-grid-all-servers {\n overflow: auto;\n}\n\n.field-block-all-servers {\n overflow: auto;\n}\n\n.tabular-grid-all-servers {\n border-block: 1px solid var(--grid-cell__border-color);\n\n .tabular-grid-column:first-child::part(bar-name-icon) {\n background-image: var(\n --icon__system_order-alphabetically_on-elevation--enabled\n );\n block-size: var(--mer-icon__box--md);\n inline-size: var(--mer-icon__box--md);\n background-size: var(--mer-icon__size--md);\n }\n .tabular-grid-rowset-empty {\n border-block-end: none;\n overflow: hidden;\n }\n}\n\n.tabular-grid-all-servers .tabular-grid-column:first-child::part(bar) {\n --grid-common__gap: 0;\n}\n","// Stencil\nimport { Component, Element, h, Host, Prop, State } from \"@stencil/core\";\n\n// Other Libraries\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\n// Custom Imports\nimport {\n ChEditCustomEvent,\n TabularGridRowClickedEvent\n} from \"@genexus/chameleon-controls-library\";\nimport { RadioGroupItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/radio-group/types\";\nimport { JSX } from \"@stencil/core/internal\";\nimport { config } from \"../../../common/config\";\nimport {\n ControlValidation\n // validateControls\n} from \"../../../common/form-validation\";\nimport { Locale } from \"../../../common/locale\";\nimport { FormSubmitResult } from \"../../../common/types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"components/tooltip\",\n \"chameleon/scrollbar\",\n \"components/tabular-grid\"\n];\n\nconst INFO_ICON = getIconPath({\n category: \"system\",\n name: \"information\",\n colorType: \"on-surface\"\n});\n\nconst LOCK_ICON = getIconPath({\n category: \"system\",\n name: \"lock\",\n colorType: \"on-surface\"\n});\n\nconst LANGUAGE_ICON = getIconPath({\n category: \"system\",\n name: \"language\",\n colorType: \"on-surface\"\n});\n\n@Component({\n tag: \"gx-ide-server-selector\",\n styleUrl: \"server-selector.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/server-selector\"]\n})\nexport class GxIdeServerSelector {\n #chSearchIcon = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-surface\"\n });\n\n #versionsSelect: RadioGroupItemModel[] = [\n { value: \"select\", caption: \"Select a server from the list below\" },\n { value: \"new\", caption: \"Enter a server URL manually\" }\n ];\n\n [key: string]: any;\n\n #_componentLocale: any;\n\n #chGridRecentlyUsedServersEl: HTMLChTabularGridElement;\n #chGridConnectedServersEl: HTMLChTabularGridElement;\n #previousSelectedRowId: string | undefined;\n #selectedRowId: string | undefined;\n #serverUrlEL: HTMLChEditElement;\n\n @Element() el: HTMLGxIdeServerSelectorElement;\n\n /**\n * State to enable/disable confirm button.\n */\n @State() enableConfirmButton: boolean = false;\n\n /**\n * State to track if this is the first selection made by the user.\n */\n @State() isFirstSelection: boolean = true;\n\n /**\n * State to track if the server URL is valid.\n */\n @State() isValidUrl: boolean = true;\n\n /**\n * The current server URL input value.\n */\n @State() serverUrlInputValue: string = \"\";\n\n /**\n * The current server URL input value.\n */\n @State() serverNameInputValue: string = \"\";\n\n /**\n * The selected server URI.\n */\n @State() selectedServerUri: string | undefined;\n\n /**\n * The selected server name.\n */\n @State() selectedServerName: string | undefined = \"None\";\n\n /**\n * The user name of the selected server.\n */\n @State() userName: string;\n\n /**\n * State to store the filter input value to filter the list-box\n */\n @State() filterValue: string = \"\";\n\n /**\n * Servers filtered\n */\n @State() filteredConnectedServersData: ConnectedGXServerData[] = [];\n\n @State() validatableControls = new Map<string, ControlValidation>();\n\n /**\n * The selected connection type\n */\n @State() selectedConnectionType: ConnectionOption = \"select\";\n\n /**\n * The list of connected GX servers.\n */\n @Prop({ mutable: true }) connectedServersData: ConnectedGXServerData[] = [];\n\n /**\n * The list of recently used servers.\n */\n @Prop() readonly recentlyUsedServersData: ConnectedGXServerData[] = [];\n\n /**\n * Callback that is invoked when the dialog is closed\n */\n @Prop() readonly cancelCallback!: () => Promise<void>;\n\n /**\n * Callback that must be invoked when the 'Confirm' button is pressed and the Select Server option is checked.\n */\n @Prop() readonly selectServerCallback!: (\n authenticationSessionOrigin: AuthenticationSessionOrigin\n ) => Promise<void>;\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n this.selectedServerUri = this.connectedServersData[0]?.serverUrl;\n this.userName = this.connectedServersData[0]?.gxServerUsername;\n\n this.filteredConnectedServersData = this.connectedServersData;\n }\n\n #cancelHandler = (): void => {\n this.cancelCallback();\n };\n\n #confirmHandler = async (): Promise<void | ServerType> => {\n if (this.selectedConnectionType === \"select\") {\n await this.selectServerCallback({\n uri: this.selectedServerUri,\n name: this.selectedServerName\n });\n } else if (this.selectedConnectionType === \"new\") {\n this.isValidUrl = this.#validateUrl(this.serverUrlInputValue);\n if (this.isValidUrl) {\n await this.selectServerCallback({\n uri: this.serverUrlInputValue,\n name: this.serverNameInputValue\n });\n }\n }\n };\n\n #filterValueChangedHandler = (\n event: ChEditCustomEvent<string> | InputEvent\n ) => {\n this.filterValue = (event.detail as string).toLowerCase();\n this.filteredConnectedServersData = this.connectedServersData.filter(item =>\n item.serverName.toLowerCase().includes(this.filterValue)\n );\n };\n\n #inputHandler = (\n event: ChEditCustomEvent<string> | InputEvent,\n field: \"serverUrlInputValue\" | \"serverNameInputValue\"\n ) => {\n this.enableConfirmButton = false;\n this[field] = event.detail as string;\n this.#enableConfirmButton();\n };\n\n #validateUrl = (url: string): boolean => {\n try {\n const serverUrl = new URL(url);\n const protocolValid =\n (serverUrl.protocol === \"http:\" || serverUrl.protocol === \"https:\") &&\n url.startsWith(`${serverUrl.protocol}//`);\n return protocolValid;\n } catch (ex) {\n return false;\n }\n };\n\n #enableConfirmButton = () => {\n if (\n this.serverUrlInputValue &&\n this.serverUrlInputValue.length > 0 &&\n this.serverNameInputValue &&\n this.serverNameInputValue.length > 0\n ) {\n this.enableConfirmButton = true;\n } else {\n this.enableConfirmButton = false;\n }\n };\n\n #onConnectedServersRowDoubleClickHandler = (\n event: CustomEvent<TabularGridRowClickedEvent>\n ) => {\n this.#selectConnectedServersHandler(event);\n this.#confirmHandler();\n };\n\n #onRecentlyUsedRowDoubleClickHandler = (\n event: CustomEvent<TabularGridRowClickedEvent>\n ) => {\n this.#selectRecentlyUsedServersHandler(event);\n this.#confirmHandler();\n };\n\n #selectConnectedServersHandler = (\n event: CustomEvent<TabularGridRowClickedEvent>\n ) =>\n this.#handleServerSelection(\n event,\n this.connectedServersData,\n this.#chGridRecentlyUsedServersEl\n );\n\n #selectRecentlyUsedServersHandler = (\n event: CustomEvent<TabularGridRowClickedEvent>\n ) =>\n this.#handleServerSelection(\n event,\n this.recentlyUsedServersData,\n this.#chGridConnectedServersEl\n );\n\n #handleServerSelection = async (\n event: CustomEvent<TabularGridRowClickedEvent>,\n serversData: ConnectedGXServerData[],\n otherGridEl: HTMLChTabularGridElement\n ): Promise<void> => {\n if (!this.isFirstSelection) {\n this.#previousSelectedRowId = this.#selectedRowId;\n }\n this.#selectedRowId = event.detail.rowId;\n if (this.#selectedRowId === undefined) {\n this.enableConfirmButton = false;\n this.selectedServerUri = undefined;\n this.selectedServerName = undefined;\n return;\n } else {\n const selectedServer = serversData.find(\n server => server.id === this.#selectedRowId\n );\n this.enableConfirmButton = true;\n this.selectedServerName = selectedServer?.serverName;\n this.selectedServerUri = selectedServer?.serverUrl;\n this.userName = selectedServer?.gxServerUsername || \"\";\n this.isFirstSelection = false;\n await otherGridEl?.selectRow(this.#previousSelectedRowId, false);\n }\n };\n\n #connectionTypeChangedHandler = (event: CustomEvent<string>) => {\n this.selectedConnectionType = event.detail as ConnectionOption;\n if (this.selectedConnectionType === \"new\") {\n this.enableConfirmButton = false;\n this.serverUrlInputValue = \"\";\n }\n this.selectedServerName = \"None\";\n };\n\n #renderTabularGridColumnSet = (\n hideColumnName: boolean = false\n ): HTMLChTabularGridColumnsetElement => {\n return (\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n columnId=\"icon\"\n class=\"tabular-grid-column\"\n columnName=\"Icon\"\n settingable={false}\n columnNameHidden={true}\n size={config.tabularGrid.colSize.maxContent}\n resizable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"serverName\"\n class=\"tabular-grid-column\"\n sortable\n columnName=\"Server Name\"\n settingable={false}\n columnNameHidden={hideColumnName}\n onColumnSortChanged={this.#handleColumnSortChanged}\n size={config.tabularGrid.colSize.serverName}\n resizable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"serverUrl\"\n class=\"tabular-grid-column\"\n sortable\n columnName=\"Server Url\"\n settingable={false}\n columnNameHidden={hideColumnName}\n onColumnSortChanged={this.#handleColumnSortChanged}\n size={config.tabularGrid.colSize.auto}\n resizable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"userName\"\n class=\"tabular-grid-column\"\n sortable\n columnName=\"Username\"\n settingable={false}\n columnNameHidden={hideColumnName}\n onColumnSortChanged={this.#handleColumnSortChanged}\n size={config.tabularGrid.colSize.userName}\n resizable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"status\"\n class=\"tabular-grid-column\"\n sortable\n columnName=\"Status\"\n settingable={false}\n columnNameHidden={hideColumnName}\n onColumnSortChanged={this.#handleColumnSortChanged}\n size={config.tabularGrid.colSize.maxContent}\n resizable={false}\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n );\n };\n\n #renderTooltip = (text: string): JSX.Element | null => {\n return text !== \"\" ? (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={null}\n blockAlign=\"outside-end\"\n inlineAlign={config.tooltipSettings.inlineAlign}\n delay={config.tooltipSettings.delay}\n >\n {text}\n </ch-tooltip>\n ) : null;\n };\n\n #renderTabularGridCommonCells = (server: ConnectedGXServerData) => {\n return [\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.#renderIcon(server.accessLevel)}\n </ch-tabular-grid-cell>,\n <ch-tabular-grid-cell class=\"tabular-grid-cell tabular-grid-cell-server-name\">\n {server.serverName}\n </ch-tabular-grid-cell>,\n <ch-tabular-grid-cell class=\"tabular-grid-cell tabular-grid-cell-server-url\">\n {server.serverUrl}\n {this.#renderTooltip(server.serverUrl)}\n </ch-tabular-grid-cell>,\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {server.gxServerUsername}\n </ch-tabular-grid-cell>,\n <ch-tabular-grid-cell class=\"tabular-grid-cell text-neutral-gray-400 body-italic-s\">\n {server.isConnected && \"Connected\"}\n </ch-tabular-grid-cell>\n ];\n };\n\n #renderRecentlyUsedServersGrid = (hideColumnName: boolean): Element => {\n return (\n <ch-tabular-grid\n class={\"tabular-grid-recently-used tabular-grid\"}\n rowSelectionMode=\"single\"\n ref={(el: HTMLChTabularGridElement) =>\n (this.#chGridRecentlyUsedServersEl = el)\n }\n allowColumnReorder={false}\n onRowClicked={this.#selectRecentlyUsedServersHandler}\n onRowDoubleClicked={this.#onRecentlyUsedRowDoubleClickHandler}\n id=\"recently-used-servers\"\n >\n {this.#renderTabularGridColumnSet(hideColumnName)}\n {this.recentlyUsedServersData.length > 0 ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.recentlyUsedServersData.map(\n (server: ConnectedGXServerData) => (\n <ch-tabular-grid-row rowid={server.id} class=\"tabular-grid-row\">\n {this.#renderTabularGridCommonCells(server)}\n </ch-tabular-grid-row>\n )\n )}\n </ch-tabular-grid-rowset>\n ) : (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty>\n <gx-ide-empty-state\n stateIconSrc={INFO_ICON}\n stateTitle={this.#_componentLocale.emptyConnectedServers}\n isAnimated={true}\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid>\n );\n };\n\n #renderConnectedServersGrid = (): Element => {\n return (\n <ch-tabular-grid\n class={\"tabular-grid tabular-grid-all-servers\"}\n rowSelectionMode=\"single\"\n ref={(el: HTMLChTabularGridElement) =>\n (this.#chGridConnectedServersEl = el)\n }\n allowColumnReorder={false}\n onRowClicked={this.#selectConnectedServersHandler}\n onRowDoubleClicked={this.#onConnectedServersRowDoubleClickHandler}\n id=\"all-servers\"\n >\n {this.#renderTabularGridColumnSet()}\n {this.filteredConnectedServersData.length > 0 ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.filteredConnectedServersData.map(\n (server: ConnectedGXServerData) => (\n <ch-tabular-grid-row rowid={server.id} class=\"tabular-grid-row\">\n {this.#renderTabularGridCommonCells(server)}\n </ch-tabular-grid-row>\n )\n )}\n </ch-tabular-grid-rowset>\n ) : (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty class=\"tabular-grid-rowset-empty\">\n <gx-ide-empty-state\n stateIconSrc={INFO_ICON}\n stateTitle={this.#_componentLocale.emptyConnectedServers}\n isAnimated={true}\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid>\n );\n };\n\n #handleColumnSortChanged = (e: CustomEvent) => {\n const { columnId, sortDirection } = e.detail;\n\n const aux = this.connectedServersData;\n aux.sort((a: any, b: any) => {\n if (a[columnId] < b[columnId]) {\n return sortDirection === \"asc\" ? -1 : 1;\n }\n if (a[columnId] > b[columnId]) {\n return sortDirection === \"asc\" ? 1 : -1;\n }\n return 0;\n });\n\n this.connectedServersData = [...aux];\n };\n\n #renderIcon = (accessLevel: string): JSX.Element => {\n const icon = accessLevel === \"private\" ? LOCK_ICON : LANGUAGE_ICON;\n return <ch-image class=\"icon-md\" src={icon}></ch-image>;\n };\n\n #renderFooter = () => {\n const isSelectionMode = this.selectedConnectionType === \"select\";\n return (\n <footer\n class={{\n \"control-footer-with-border\": true,\n \"control-footer-space-between\":\n this.selectedConnectionType === \"select\",\n \"space-between\": isSelectionMode,\n \"spacing-body-inline\": true,\n \"spacing-body-block\": true\n }}\n >\n {isSelectionMode && (\n <p class=\"body-italic-m\">Selected: {this.selectedServerName}</p>\n )}\n <div class=\"buttons-spacer\">\n <button\n // cancel button\n class=\"button-secondary\"\n onClick={this.#cancelHandler}\n >\n {this.#_componentLocale.footer.cancel}\n </button>\n\n <button\n // confirm button\n class=\"button-primary\"\n onClick={this.enableConfirmButton && this.#confirmHandler}\n disabled={!this.enableConfirmButton}\n >\n {this.#_componentLocale.footer.confirm}\n </button>\n </div>\n </footer>\n );\n };\n\n render(): void {\n const connectionTypeClass =\n this.selectedConnectionType === \"new\" && \"new-connection\";\n const recentlyUsedEmptyClass =\n this.recentlyUsedServersData.length === 0 && \"recently-used-empty\";\n return (\n <Host\n class={`widget elevation-1 ${connectionTypeClass} ${recentlyUsedEmptyClass}`}\n >\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <main class=\"section\">\n <header class=\"header spacing-body-block-start spacing-body-inline\">\n <div class=\"field-group\">\n <label class=\"body-regular-m text-neutral-gray-400\">\n {this.#_componentLocale.header.title}\n </label>\n <ch-radio-group-render\n class=\"radio-group\"\n model={this.#versionsSelect}\n onChange={this.#connectionTypeChangedHandler}\n value={this.#versionsSelect[0].value}\n ></ch-radio-group-render>\n\n {this.selectedConnectionType === \"select\" && (\n <ch-edit\n class=\"input search-server\"\n id=\"server-name-search\"\n startImgSrc={this.#chSearchIcon}\n onInput={this.#filterValueChangedHandler}\n placeholder={\n this.#_componentLocale.placeholders.searchServers\n }\n accessibleName=\"search server\"\n type=\"search\"\n ></ch-edit>\n )}\n </div>\n </header>\n {this.selectedConnectionType === \"select\" && [\n this.recentlyUsedServersData.length > 0 && (\n <div class=\"field field-block spacing-body-inline\">\n <label class=\"label\" htmlFor=\"recently-used-servers\">\n {this.#_componentLocale.recentlyUsed.title}\n </label>\n {this.#renderRecentlyUsedServersGrid(true)}\n </div>\n ),\n <div class=\"field field-block field-block-all-servers spacing-body-inline\">\n <label class=\"label\" htmlFor=\"all-servers\">\n {this.#_componentLocale.allServers.title}\n </label>\n {this.#renderConnectedServersGrid()}\n </div>\n ]}\n\n {this.selectedConnectionType === \"new\" && (\n <section class=\"spacing-body-inline\">\n <div class=\"layout layout--cols-2\">\n <div class=\"field field-block layout__panel\">\n <label class=\"label\" htmlFor=\"server-url\">\n {this.#_componentLocale.labels.serverUrl}\n </label>\n <ch-edit\n // server url\n class={{ \"input\": true, \"input-error\": !this.isValidUrl }}\n id=\"server-url\"\n value={this.serverUrlInputValue}\n onInput={event =>\n this.#inputHandler(event, \"serverUrlInputValue\")\n }\n placeholder={this.#_componentLocale.placeholders.serverUrl}\n ref={el => (this.#serverUrlEL = el as HTMLChEditElement)}\n ></ch-edit>\n </div>\n <div class=\"field field-block layout__panel\">\n <label class=\"label\" htmlFor=\"server-name\">\n {this.#_componentLocale.labels.serverName}\n </label>\n <ch-edit\n // server friendly name\n class=\"input\"\n id=\"server-name\"\n value={this.serverNameInputValue}\n onInput={event =>\n this.#inputHandler(event, \"serverNameInputValue\")\n }\n placeholder={this.#_componentLocale.placeholders.serverName}\n maxLength={18}\n ></ch-edit>\n </div>\n {!this.isValidUrl && (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={\n this.#serverUrlEL as unknown as HTMLButtonElement\n }\n blockAlign=\"outside-end\"\n inlineAlign={config.tooltipSettings.inlineAlign}\n delay={config.tooltipSettings.delay}\n >\n {this.#_componentLocale.errors.serverUrlInvalid}\n </ch-tooltip>\n )}\n </div>\n </section>\n )}\n\n {this.#renderFooter()}\n </main>\n </Host>\n );\n }\n}\n\nexport type ConnectionResultData = {\n formResult: FormSubmitResult;\n};\n\nexport type ConnectionOption = \"select\" | \"new\";\n\nexport type ServerType = \"legacy\" | \"next\";\n\nexport type ServerAccessLevel = \"public\" | \"private\";\n\nexport type AuthenticationSessionOrigin = {\n uri: string;\n name: string;\n};\n\nexport type ConnectedGXServerData = {\n id: string;\n serverUrl: string;\n accessLevel: ServerAccessLevel;\n masterSessionUsername: string;\n serverName?: string;\n gxServerUsername: string;\n isConnected: boolean;\n};\n\nexport type NewServerConnectionData = {\n serverUrl: string;\n serverName: string;\n};\n"],"mappings":"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"}