@genexus/genexus-ide-ui 1.1.66 → 1.1.68
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-team-dev-commit.cjs.entry.js +27 -12
- package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-team-dev-preview.cjs.entry.js +34 -20
- package/dist/cjs/gx-ide-team-dev-preview.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +27 -12
- package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/components/team-dev/preview/team-dev-preview.css +15 -0
- package/dist/collection/components/team-dev/preview/team-dev-preview.js +56 -20
- package/dist/collection/components/team-dev/preview/team-dev-preview.js.map +1 -1
- package/dist/collection/components/team-dev/update/update.js +49 -12
- package/dist/collection/components/team-dev/update/update.js.map +1 -1
- package/dist/collection/components/team-dev/version-control/commit/commit.js +50 -13
- package/dist/collection/components/team-dev/version-control/commit/commit.js.map +1 -1
- package/dist/collection/components/team-dev/version-control/common/types.js.map +1 -1
- package/dist/components/gx-ide-team-dev-commit.js +30 -13
- package/dist/components/gx-ide-team-dev-commit.js.map +1 -1
- package/dist/components/gx-ide-team-dev-preview.js +37 -21
- package/dist/components/gx-ide-team-dev-preview.js.map +1 -1
- package/dist/components/gx-ide-team-dev-update.js +30 -13
- package/dist/components/gx-ide-team-dev-update.js.map +1 -1
- package/dist/esm/genexus-ide-ui.js +1 -1
- package/dist/esm/gx-ide-team-dev-commit.entry.js +27 -12
- package/dist/esm/gx-ide-team-dev-commit.entry.js.map +1 -1
- package/dist/esm/gx-ide-team-dev-preview.entry.js +34 -20
- package/dist/esm/gx-ide-team-dev-preview.entry.js.map +1 -1
- package/dist/esm/gx-ide-team-dev-update.entry.js +27 -12
- package/dist/esm/gx-ide-team-dev-update.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/{p-ab8aee7d.entry.js → p-1890d374.entry.js} +209 -181
- package/dist/genexus-ide-ui/p-1890d374.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-73c3f9ec.entry.js → p-6ee5d68e.entry.js} +30 -19
- package/dist/genexus-ide-ui/p-6ee5d68e.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-3d71b287.entry.js → p-972dc777.entry.js} +50 -38
- package/dist/genexus-ide-ui/p-972dc777.entry.js.map +1 -0
- package/dist/types/components/team-dev/preview/team-dev-preview.d.ts +8 -0
- package/dist/types/components/team-dev/update/update.d.ts +8 -0
- package/dist/types/components/team-dev/version-control/commit/commit.d.ts +8 -0
- package/dist/types/components/team-dev/version-control/common/types.d.ts +1 -0
- package/dist/types/components.d.ts +12 -0
- package/package.json +1 -1
- package/dist/genexus-ide-ui/p-3d71b287.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-73c3f9ec.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-ab8aee7d.entry.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["teamDevPreviewCss","TeamDevEmptyState","CSS_BUNDLES","VERSION_ICON","getIconPath","category","name","colorType","ADD_ICON","EDITED_ICON","SUBTRACT_ICON","REFRESH_ICON","WARNING_ICON","OPEN_WINDOW_ICON","LOADER_ICON","ERROR_ICON","REMOTE_CHANGES_TAB","LOCAL_CHANGES_TAB","GxIdeTeamDevPreview","_GxIdeTeamDevPreview_componentLocale","set","this","_GxIdeTeamDevPreview_isPendingReloadLocalChanges","_GxIdeTeamDevPreview_isPendingReloadRemoteChanges","_GxIdeTeamDevPreview_commitData","_GxIdeTeamDevPreview_updateData","_GxIdeTeamDevPreview_prevVersionName","_GxIdeTeamDevPreview_isTeamDevOptionsEnabled","_GxIdeTeamDevPreview_emptyStateConfig","_GxIdeTeamDevPreview_localChangesTreeEL","_GxIdeTeamDevPreview_remoteChangesTreeEL","_GxIdeTeamDevPreview_setEmptyStateConfig","__classPrivateFieldSet","NoKBOpen","title","__classPrivateFieldGet","emptyState","noConnectedKBTitle","description","noOpenKBDescription","buttonText","buttons","createKBFromServer","buttonHandler","_GxIdeTeamDevPreview_createKBFromServerHandler","showButton","NoConnectedKB","noConnectedKBDescription","shareKBToServer","_GxIdeTeamDevPreview_shareKBToServerHandler","NoConnectedGXServer","noConnectedGXServerTitle","noConnectedGXServerDescription","reconnect","_GxIdeTeamDevPreview_reconnectHandler","NoLinkedVersion","noLinkedVersionTitle","noLinkedVersionDescription","undefined","FrozenVersion","frozenVersionTitle","frozenVersionDescription","None","_GxIdeTeamDevPreview_setTeamDevOptionsStatus","teamDevPreviewData","isKBOpen","isLinkedKB","isLinkedVersion","isFrozenVersion","existsGXServerSession","_GxIdeTeamDevPreview_loadChanges","async","type","loadingLocalChanges","loadLocalChangesCallback","_GxIdeTeamDevPreview_convertDataToTreeView","call","loadingRemoteChanges","loadRemoteChangesCallback","rootItemName","data","isLocal","pendingCommitChangesCount","_b","_a","pendingForCommit","length","captions","localChanges","pendingRemoteChangesCount","_d","_c","pendingForUpdate","remoteChanges","treeViewModel","id","caption","expanded","parts","items","map","item","startImgSrc","icon","typeIcon","endImgSrc","_GxIdeTeamDevPreview_renderIcon","state","action","h","style","display","color","marginLeft","module","leaf","localChangesTreeViewModel","_GxIdeTeamDevPreview_updateTabModel","remoteChangesTreeViewModel","_GxIdeTeamDevPreview_checkedItemsChangeHandler","event","checkedNodesIds","Array","from","detail","values","filter","node","checked","localChangesCheckedNodesIds","updateItemsProperties","remoteChangesCheckedNodesIds","shareKBToServerCallback","createKBFromServerCallback","_GxIdeTeamDevPreview_openFullDialogHandler","openFullDialogCallback","_GxIdeTeamDevPreview_commitChangesHandler","committingChanges","commitCallback","commitMessage","_GxIdeTeamDevPreview_commitMessageInputHandler","_GxIdeTeamDevPreview_updateRemoteChangesHandler","updatingChanges","updateCallback","_GxIdeTeamDevPreview_tabSelectionChangedHandler","selectedTabId","newSelectedId","_GxIdeTeamDevPreview_openTeamDevInfoHandler","openTeamDevInfoCallback","reconnectCallback","value","iconMap","inserted","modified","deleted","conflicted","_GxIdeTeamDevPreview_disableConfirmButton","trim","serverOperationsDisabled","tabId","tabModel","tab","_GxIdeTeamDevPreview_getEmptyStateTitle","getEmptyStateType","_GxIdeTeamDevPreview_getEmptyStateDescription","_GxIdeTeamDevPreview_getEmptyStateButtonText","_GxIdeTeamDevPreview_getEmptyStateButtonHandler","_GxIdeTeamDevPreview_renderEmptyStateButton","_GxIdeTeamDevPreview_renderReloadChangesButton","isLoading","isConfirmationInProcess","reloadCaption","reloadingCaption","reloadLocal","reloadingLocal","reloadRemote","reloadingRemote","class","onClick","disabled","src","_GxIdeTeamDevPreview_renderEmptyState","show","message","noLocalChanges","noRemoteChanges","_GxIdeTeamDevPreview_renderTreeChanges","Fragment","checkbox","model","toggleCheckboxes","onCheckedItemsChange","expandableButton","expandOnClick","ref","el","_GxIdeTeamDevPreview_renderConfirmButton","committing","updating","commit","update","_GxIdeTeamDevPreview_renderLocalChanges","accessibleName","accessibleNames","placeholder","placeholders","onInput","multiline","_GxIdeTeamDevPreview_renderRemoteChanges","onTeamDevPreviewDataChanged","versionName","versionChanged","reloadChanges","componentWillLoad","Locale","getComponentStrings","componentDidLoad","isActiveTab","disableServerOperations","render","Host","widget","isAnimated","stateIconSrc","stateTitle","stateDescription","about","teamDev","selectedId","tabListPosition","onSelectedItemChange","slot","footer","openFullDialog"],"sources":["src/components/team-dev/preview/team-dev-preview.scss?tag=gx-ide-team-dev-preview&encapsulation=shadow","src/components/team-dev/preview/team-dev-preview.tsx"],"sourcesContent":["@import \"../../../global/gx-ide-common.scss\";\n@import \"../../../global/gx-ide-mixins.scss\";\n\n// Variables para gaps y tamaños\n$gap-main: 14px;\n$gap-secondary: 8px;\n$max-button-width: 300px;\n$commit-message-height: 65px;\n\n// Mixin para grid con gap\n@mixin grid-gap($gap) {\n display: grid;\n gap: $gap;\n}\n\n:host {\n display: grid;\n block-size: 100%;\n}\n\n.main-container {\n @include grid-gap($gap-main);\n grid-template-rows: max-content 1fr max-content;\n overflow: auto;\n\n .local-changes-container {\n @include grid-gap($gap-secondary);\n grid-template-rows: max-content max-content max-content 1fr;\n padding-inline: 0;\n }\n .remote-changes-container {\n @include grid-gap($gap-secondary);\n grid-template-rows: max-content max-content 1fr;\n padding-inline: 0;\n }\n}\n\n.control-footer-with-border.open-window-container {\n --control-footer-justify-content: flex-start;\n}\n\n// WA: Loader animation workaround, ideally move to mercury\n.loader-icon {\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n 100% {\n transform: rotate(360deg);\n }\n}\n\n// WA: Avoid scrollbar flickering for empty state\n.empty-state {\n overflow: hidden;\n}\n\n.giu-static-pill-icon-and-text {\n background-color: var(--mer-surface__elevation--02);\n}\n\n.tab {\n overflow: auto;\n row-gap: $gap-secondary;\n\n &.border-style-none {\n border-style: none;\n }\n}\n\n.empty-state-button {\n inline-size: 100%;\n max-inline-size: $max-button-width;\n}\n\n.button-tertiary {\n &.team-dev-button {\n text-decoration: underline;\n color: var(--mer-text__neutral);\n }\n\n &.refresh-button,\n &.open-full-dialog-button {\n padding-block: 0;\n justify-self: start;\n }\n}\n\n.commit-message-textarea {\n block-size: $commit-message-height;\n}\n\n.empty-state-container {\n @include grid-gap($gap-secondary);\n grid-template-rows: max-content max-content;\n}\n\n// WA: These styles display the tree as a flat list while preserving tree functionality.\n\n// Style for change-item header\nch-tree-view-render::part(change-item item__header) {\n padding-inline-start: 0;\n}\n\n// Style for root-item header\nch-tree-view-render::part(root-item item__header) {\n padding-inline-start: 0;\n font-weight: var(--font-weight-semi-bold);\n font-size: var(--font-size-body-s);\n line-height: var(--line-height-tight);\n}\n\n.version-pill {\n @include ellipsis;\n}\n\n.giu-static-pill-icon-and-text.version {\n grid-auto-columns: unset;\n}\n","import {\n ChEditCustomEvent,\n TabModel,\n TabSelectedItemInfo,\n TreeViewItemModelExtended,\n TreeViewModel\n} from \"@genexus/chameleon-controls-library\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport {\n Component,\n Element,\n Fragment,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch\n} from \"@stencil/core\";\nimport { Locale } from \"../../../common/locale\";\nimport {\n Action,\n CommitCallback,\n CommitData,\n LoadLocalChangesCallback,\n LoadRemoteChangesCallback,\n ModifiedObject,\n ModifiedObjectData,\n ObjectState,\n UpdateCallback,\n UpdateData\n} from \"../version-control/common/types\";\n\nenum TeamDevEmptyState {\n NoKBOpen,\n NoConnectedKB,\n NoConnectedGXServer,\n NoLinkedVersion,\n FrozenVersion,\n None\n}\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\",\n \"components/tree-view\",\n \"components/tab\"\n];\n\nconst VERSION_ICON = getIconPath({\n category: \"system\",\n name: \"version\",\n colorType: \"on-surface\"\n});\n\nconst ADD_ICON = getIconPath({\n category: \"system\",\n name: \"add\",\n colorType: \"success\"\n});\n\nconst EDITED_ICON = getIconPath({\n category: \"system\",\n name: \"edit\",\n colorType: \"warning\"\n});\n\nconst SUBTRACT_ICON = getIconPath({\n category: \"system\",\n name: \"substract\",\n colorType: \"error\"\n});\n\nconst REFRESH_ICON = getIconPath({\n category: \"system\",\n name: \"refresh\",\n colorType: \"primary\"\n});\n\nconst WARNING_ICON = getIconPath({\n category: \"system\",\n name: \"warning\",\n colorType: \"warning\"\n});\n\nconst OPEN_WINDOW_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"open-window\",\n colorType: \"on-surface\"\n});\n\nconst LOADER_ICON = getIconPath({\n category: \"system\",\n name: \"loading\",\n colorType: \"primary\"\n});\n\nconst ERROR_ICON = getIconPath({\n category: \"system\",\n name: \"error\",\n colorType: \"on-surface\"\n});\n\nconst REMOTE_CHANGES_TAB = \"remote-changes-tab\";\nconst LOCAL_CHANGES_TAB = \"local-changes-tab\";\n\n@Component({\n tag: \"gx-ide-team-dev-preview\",\n styleUrl: \"team-dev-preview.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/team-dev-preview\"]\n})\nexport class GxIdeTeamDevPreview {\n #componentLocale: any;\n #isPendingReloadLocalChanges: boolean = false;\n #isPendingReloadRemoteChanges: boolean = false;\n #commitData: CommitData;\n #updateData: UpdateData;\n #prevVersionName: string;\n #isTeamDevOptionsEnabled: boolean = false;\n #emptyStateConfig: { [key: string]: any } = {};\n #localChangesTreeEL: HTMLChTreeViewRenderElement;\n #remoteChangesTreeEL: HTMLChTreeViewRenderElement;\n\n @Element() el: HTMLGxIdeTeamDevPreviewElement;\n\n @State() loadingRemoteChanges: boolean = false;\n @State() loadingLocalChanges: boolean = true;\n @State() tabModel: TabModel = [];\n\n /**\n * Currently selected tab ID\n */\n @State() selectedTabId: string = LOCAL_CHANGES_TAB;\n\n /**\n * Number of pending commit changes\n */\n @State() pendingCommitChangesCount: number = 0;\n /**\n * Number of pending remote changes\n */\n @State() pendingRemoteChangesCount: number = 0;\n\n /**\n * Represents the tree view model for remote changes\n */\n @State() remoteChangesTreeViewModel: TreeViewModel = [];\n\n /**\n * Represents the tree view model for local changes\n */\n @State() localChangesTreeViewModel: TreeViewModel = [];\n\n /**\n * Represents the selected nodes ids from remote changes tree\n */\n @State() remoteChangesCheckedNodesIds: string[] = [];\n\n /**\n * Represents the selected nodes ids from local changes tree\n */\n @State() localChangesCheckedNodesIds: string[] = [];\n\n /**\n * Commit message entered by the user\n */\n @State() commitMessage: string = \"\";\n\n /**\n * Indicates if the commit process is ongoing\n */\n @State() committingChanges: boolean = false;\n\n /**\n * Indicates if the update process is ongoing\n */\n @State() updatingChanges: boolean = false;\n\n /**\n * Indicates if the server operations (commit/update) should be disabled\n */\n @State() serverOperationsDisabled: boolean = false;\n\n /**\n * Data required to render the Team Dev Preview\n */\n @Prop() readonly teamDevPreviewData: TeamDevPreviewData;\n @Watch(\"teamDevPreviewData\")\n async onTeamDevPreviewDataChanged() {\n const { versionName } = this.teamDevPreviewData;\n let versionChanged = false;\n\n this.#setTeamDevOptionsStatus();\n if (this.#prevVersionName !== versionName) {\n this.#prevVersionName = versionName;\n versionChanged = true;\n }\n\n if (this.#isTeamDevOptionsEnabled && versionChanged) {\n await this.reloadChanges(\"local\");\n await this.reloadChanges(\"remote\");\n }\n }\n\n /**\n * Invoked to return the list of remote changes\n */\n @Prop() readonly loadRemoteChangesCallback!: LoadRemoteChangesCallback;\n\n /**\n * Invoked to return the list of local changes\n */\n @Prop() readonly loadLocalChangesCallback!: LoadLocalChangesCallback;\n\n /**\n * Invoked when user starts the commit process\n */\n @Prop() readonly commitCallback!: CommitCallback;\n\n /**\n * Invoked when user starts the update process\n */\n @Prop() readonly updateCallback!: UpdateCallback;\n\n /**\n * Invoked to open the full Team Dev dialog\n */\n @Prop() readonly openFullDialogCallback!: () => Promise<void>;\n\n /**\n * Invoked to share the knowledge base to the server\n */\n @Prop() readonly shareKBToServerCallback!: () => Promise<void>;\n\n /**\n * Invoked to create a knowledge base from the server\n */\n @Prop() readonly createKBFromServerCallback!: () => Promise<void>;\n\n /**\n * Invoked to open the Team Development information\n */\n @Prop() readonly openTeamDevInfoCallback!: () => Promise<void>;\n\n /**\n * Invoked to reconnect to GeneXus Server\n */\n @Prop() readonly reconnectCallback!: () => Promise<void>;\n\n async componentWillLoad() {\n this.#setTeamDevOptionsStatus();\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.tabModel = [\n {\n id: LOCAL_CHANGES_TAB,\n name: `${this.#componentLocale.captions.localChanges}`\n },\n {\n id: REMOTE_CHANGES_TAB,\n name: `${this.#componentLocale.captions.remoteChanges}`\n }\n ];\n this.#setEmptyStateConfig();\n }\n\n async componentDidLoad() {\n if (this.#isTeamDevOptionsEnabled) {\n await this.#loadChanges(\"local\");\n this.#isPendingReloadRemoteChanges = true;\n }\n this.loadingLocalChanges = false;\n }\n\n /**\n * Used by the host to reload remote or local changes\n */\n @Method()\n async reloadChanges(type: TeamDevPreviewMode) {\n const isLocal = type === \"local\";\n const isActiveTab = isLocal\n ? this.selectedTabId === LOCAL_CHANGES_TAB\n : this.selectedTabId === REMOTE_CHANGES_TAB;\n\n if (!isActiveTab) {\n if (isLocal) {\n this.#isPendingReloadLocalChanges = true;\n } else {\n this.#isPendingReloadRemoteChanges = true;\n }\n return;\n }\n\n isLocal\n ? await this.#loadChanges(\"local\")\n : await this.#loadChanges(\"remote\");\n }\n\n /**\n * Used by the host to instruct the component to disable the commit/update button.\n */\n @Method()\n async disableServerOperations(value: boolean) {\n this.serverOperationsDisabled = value;\n }\n\n #setEmptyStateConfig = () => {\n this.#emptyStateConfig = {\n [TeamDevEmptyState.NoKBOpen]: {\n title: this.#componentLocale.emptyState.noConnectedKBTitle,\n description: this.#componentLocale.emptyState.noOpenKBDescription,\n buttonText: this.#componentLocale.buttons.createKBFromServer,\n buttonHandler: this.#createKBFromServerHandler,\n showButton: true\n },\n [TeamDevEmptyState.NoConnectedKB]: {\n title: this.#componentLocale.emptyState.noConnectedKBTitle,\n description: this.#componentLocale.emptyState.noConnectedKBDescription,\n buttonText: this.#componentLocale.buttons.shareKBToServer,\n buttonHandler: this.#shareKBToServerHandler,\n showButton: true\n },\n [TeamDevEmptyState.NoConnectedGXServer]: {\n title: this.#componentLocale.emptyState.noConnectedGXServerTitle,\n description:\n this.#componentLocale.emptyState.noConnectedGXServerDescription,\n buttonText: this.#componentLocale.buttons.reconnect,\n buttonHandler: this.#reconnectHandler,\n showButton: true\n },\n [TeamDevEmptyState.NoLinkedVersion]: {\n title: this.#componentLocale.emptyState.noLinkedVersionTitle,\n description:\n this.#componentLocale.emptyState.noLinkedVersionDescription,\n buttonText: \"\",\n buttonHandler: undefined,\n showButton: false\n },\n [TeamDevEmptyState.FrozenVersion]: {\n title: this.#componentLocale.emptyState.frozenVersionTitle,\n description: this.#componentLocale.emptyState.frozenVersionDescription,\n buttonText: \"\",\n buttonHandler: undefined,\n showButton: false\n },\n [TeamDevEmptyState.None]: {\n title: \"\",\n description: \"\",\n buttonText: \"\",\n buttonHandler: undefined,\n showButton: false\n }\n };\n };\n\n #setTeamDevOptionsStatus = () => {\n if (\n this.teamDevPreviewData.isKBOpen &&\n this.teamDevPreviewData.isLinkedKB &&\n this.teamDevPreviewData.isLinkedVersion &&\n !this.teamDevPreviewData.isFrozenVersion &&\n this.teamDevPreviewData.existsGXServerSession\n ) {\n this.#isTeamDevOptionsEnabled = true;\n return;\n }\n this.#isTeamDevOptionsEnabled = false;\n };\n\n #loadChanges = async (type: TeamDevPreviewMode) => {\n if (type === \"local\") {\n this.loadingLocalChanges = true;\n this.#commitData = await this.loadLocalChangesCallback();\n this.#convertDataToTreeView(\"local\");\n this.loadingLocalChanges = false;\n this.#isPendingReloadLocalChanges = false;\n } else {\n this.loadingRemoteChanges = true;\n this.#updateData = await this.loadRemoteChangesCallback();\n this.#convertDataToTreeView(\"remote\");\n this.loadingRemoteChanges = false;\n this.#isPendingReloadRemoteChanges = false;\n }\n };\n\n #convertDataToTreeView = (type: TeamDevPreviewMode) => {\n let rootItemName = \"\";\n let data: ModifiedObjectData[] | ModifiedObject[];\n const isLocal = type === \"local\";\n if (isLocal) {\n this.pendingCommitChangesCount =\n this.#commitData?.pendingForCommit?.length || 0;\n rootItemName = `${this.#componentLocale.captions.localChanges} (${this.pendingCommitChangesCount})`;\n data = this.#commitData.pendingForCommit;\n } else {\n this.pendingRemoteChangesCount =\n this.#updateData?.pendingForUpdate?.length || 0;\n rootItemName = `${this.#componentLocale.captions.remoteChanges} (${this.pendingRemoteChangesCount})`;\n data = this.#updateData.pendingForUpdate;\n }\n\n const treeViewModel: TreeViewModel = [\n {\n id: \"root\",\n caption: rootItemName,\n expanded: true,\n parts: \"root-item\",\n items: data?.map(item => ({\n id: item.id,\n startImgSrc: isLocal\n ? (item as ModifiedObjectData).type.icon\n : (item as ModifiedObject).typeIcon,\n endImgSrc: isLocal\n ? this.#renderIcon((item as ModifiedObjectData).state)\n : this.#renderIcon((item as ModifiedObject).action),\n caption: (\n //WA: Used to apply different styles to the item caption and path\n <div\n style={{\n display: \"flex\"\n }}\n >\n <span>{item.name}</span>\n <span\n style={{\n color: \"var(--mer-color__neutral-gray--450)\",\n marginLeft: \"4px\"\n }}\n >\n {item.module}\n </span>\n </div>\n ),\n leaf: true,\n parts: \"change-item\"\n }))\n }\n ];\n\n if (isLocal) {\n this.localChangesTreeViewModel = treeViewModel;\n this.#updateTabModel(LOCAL_CHANGES_TAB);\n } else {\n this.remoteChangesTreeViewModel = treeViewModel;\n this.#updateTabModel(REMOTE_CHANGES_TAB);\n }\n };\n\n #checkedItemsChangeHandler = async (\n event: CustomEvent<Map<string, TreeViewItemModelExtended>>,\n type: TeamDevPreviewMode\n ) => {\n const checkedNodesIds = Array.from(event.detail.values())\n .filter(node => node.item.checked && node.item.id !== \"root\")\n .map(node => node.item.id);\n\n if (type === \"local\") {\n this.localChangesCheckedNodesIds = checkedNodesIds;\n this.#localChangesTreeEL.updateItemsProperties([\"root\"], {\n caption: `${this.#componentLocale.captions.localChanges} (${this.localChangesCheckedNodesIds.length}/${this.pendingCommitChangesCount})`\n });\n } else {\n this.remoteChangesCheckedNodesIds = checkedNodesIds;\n this.#remoteChangesTreeEL.updateItemsProperties([\"root\"], {\n caption: `${this.#componentLocale.captions.remoteChanges} (${this.remoteChangesCheckedNodesIds.length}/${this.pendingRemoteChangesCount})`\n });\n }\n };\n\n #shareKBToServerHandler = async () => {\n await this.shareKBToServerCallback();\n };\n\n #createKBFromServerHandler = async () => {\n await this.createKBFromServerCallback();\n };\n\n #openFullDialogHandler = async () => {\n await this.openFullDialogCallback();\n };\n\n #commitChangesHandler = async () => {\n this.committingChanges = true;\n await this.commitCallback(\n this.localChangesCheckedNodesIds,\n this.commitMessage\n );\n this.commitMessage = \"\";\n this.committingChanges = false;\n };\n\n #commitMessageInputHandler = (\n event: ChEditCustomEvent<string> | InputEvent\n ) => {\n this.commitMessage = (event.detail as string) || \"\";\n };\n\n #updateRemoteChangesHandler = async () => {\n this.updatingChanges = true;\n await this.updateCallback(this.remoteChangesCheckedNodesIds);\n this.updatingChanges = false;\n this.remoteChangesCheckedNodesIds = [];\n };\n\n #tabSelectionChangedHandler = async (\n event: CustomEvent<TabSelectedItemInfo>\n ): Promise<void> => {\n this.selectedTabId = event.detail.newSelectedId;\n if (\n this.selectedTabId === LOCAL_CHANGES_TAB &&\n this.#isPendingReloadLocalChanges\n ) {\n await this.#loadChanges(\"local\");\n }\n if (\n this.selectedTabId === REMOTE_CHANGES_TAB &&\n this.#isPendingReloadRemoteChanges\n ) {\n await this.#loadChanges(\"remote\");\n }\n };\n\n #openTeamDevInfoHandler = async () => {\n await this.openTeamDevInfoCallback();\n };\n\n #reconnectHandler = async () => {\n await this.reconnectCallback();\n };\n\n #renderIcon = (value: ObjectState | Action) => {\n const iconMap = {\n \"inserted\": ADD_ICON,\n \"modified\": EDITED_ICON,\n \"deleted\": SUBTRACT_ICON,\n \"conflicted\": WARNING_ICON,\n \"modified-with-conflicts\": WARNING_ICON\n };\n return iconMap[value] || null;\n };\n\n #disableConfirmButton = (type: TeamDevPreviewMode): boolean => {\n const isLocal = type === \"local\";\n if (isLocal) {\n return (\n this.loadingLocalChanges ||\n !this.commitMessage.trim().length ||\n this.localChangesCheckedNodesIds.length === 0 ||\n this.committingChanges ||\n this.serverOperationsDisabled\n );\n } else {\n return (\n this.loadingRemoteChanges ||\n this.remoteChangesCheckedNodesIds.length === 0 ||\n this.updatingChanges ||\n this.serverOperationsDisabled\n );\n }\n };\n\n #updateTabModel = (tabId: string) => {\n this.tabModel = this.tabModel.map(tab =>\n tab.id === tabId\n ? {\n ...tab,\n name:\n tabId === LOCAL_CHANGES_TAB\n ? `${this.#componentLocale.captions.localChanges} (${this.pendingCommitChangesCount})`\n : `${this.#componentLocale.captions.remoteChanges} (${this.pendingRemoteChangesCount})`\n }\n : tab\n );\n };\n\n private getEmptyStateType(): TeamDevEmptyState {\n const {\n isFrozenVersion,\n existsGXServerSession,\n isKBOpen,\n isLinkedVersion,\n isLinkedKB\n } = this.teamDevPreviewData;\n if (!isKBOpen) {\n return TeamDevEmptyState.NoKBOpen;\n }\n if (isKBOpen && !isLinkedKB) {\n return TeamDevEmptyState.NoConnectedKB;\n }\n if (isKBOpen && isLinkedKB && !isLinkedVersion && !existsGXServerSession) {\n return TeamDevEmptyState.NoConnectedGXServer;\n }\n if (isKBOpen && isLinkedKB && !isLinkedVersion) {\n return TeamDevEmptyState.NoLinkedVersion;\n }\n if (isKBOpen && isLinkedKB && existsGXServerSession && isFrozenVersion) {\n return TeamDevEmptyState.FrozenVersion;\n }\n if (isKBOpen && isLinkedKB && !existsGXServerSession) {\n return TeamDevEmptyState.NoConnectedGXServer;\n }\n return TeamDevEmptyState.None;\n }\n\n #getEmptyStateTitle = () =>\n this.#emptyStateConfig[this.getEmptyStateType()].title;\n\n #getEmptyStateDescription = () =>\n this.#emptyStateConfig[this.getEmptyStateType()].description;\n\n #getEmptyStateButtonText = () =>\n this.#emptyStateConfig[this.getEmptyStateType()].buttonText;\n\n #getEmptyStateButtonHandler = () =>\n this.#emptyStateConfig[this.getEmptyStateType()].buttonHandler;\n\n #renderEmptyStateButton = () =>\n this.#emptyStateConfig[this.getEmptyStateType()].showButton;\n\n #renderReloadChangesButton = (type: TeamDevPreviewMode) => {\n let isLoading = false;\n let isConfirmationInProcess = false;\n let reloadCaption;\n let reloadingCaption;\n const isLocal = type === \"local\";\n\n if (isLocal) {\n isLoading = this.loadingLocalChanges;\n isConfirmationInProcess = this.committingChanges;\n reloadCaption = this.#componentLocale.buttons.reloadLocal;\n reloadingCaption = this.#componentLocale.buttons.reloadingLocal;\n } else {\n isLoading = this.loadingRemoteChanges;\n isConfirmationInProcess = this.updatingChanges;\n reloadCaption = this.#componentLocale.buttons.reloadRemote;\n reloadingCaption = this.#componentLocale.buttons.reloadingRemote;\n }\n return (\n <button\n class=\"button-tertiary button-icon-and-text body-regular-s refresh-button\"\n type=\"button\"\n onClick={\n isLocal\n ? () => this.#loadChanges(\"local\")\n : () => this.#loadChanges(\"remote\")\n }\n disabled={\n isLoading || isConfirmationInProcess || this.serverOperationsDisabled\n }\n >\n <ch-image\n class={{\n \"icon-md\": true,\n \"loader-icon\": isLoading\n }}\n src={isLoading ? LOADER_ICON : REFRESH_ICON}\n type=\"mask\"\n />\n\n {isLoading ? reloadingCaption : reloadCaption}\n </button>\n );\n };\n\n #renderEmptyState = (type: TeamDevPreviewMode) => {\n let show = false;\n let message = \"\";\n\n if (type === \"local\" && this.pendingCommitChangesCount === 0) {\n show = true;\n message = this.#componentLocale.emptyState.noLocalChanges;\n } else if (type === \"remote\" && this.pendingRemoteChangesCount === 0) {\n show = true;\n message = this.#componentLocale.emptyState.noRemoteChanges;\n }\n\n return show ? (\n <div class=\"empty-state-container\">\n <p class=\"body-regular-s\">{message}</p>\n {this.#renderReloadChangesButton(type)}\n </div>\n ) : null;\n };\n\n #renderTreeChanges = (type: TeamDevPreviewMode) => {\n const isLocal = type === \"local\";\n\n if (isLocal) {\n return (\n <Fragment>\n {this.#renderReloadChangesButton(type)}\n {!this.loadingLocalChanges && !this.committingChanges && (\n <ch-tree-view-render\n checkbox\n checked\n class=\"tree-view\"\n model={this.localChangesTreeViewModel}\n toggleCheckboxes\n onCheckedItemsChange={event =>\n this.#checkedItemsChangeHandler(event, type)\n }\n expandableButton=\"no\"\n expandOnClick={false}\n ref={el =>\n (this.#localChangesTreeEL = el as HTMLChTreeViewRenderElement)\n }\n />\n )}\n </Fragment>\n );\n } else {\n return (\n <Fragment>\n {this.#renderReloadChangesButton(type)}\n {!this.loadingRemoteChanges && !this.updatingChanges && (\n <ch-tree-view-render\n checkbox\n checked\n class=\"tree-view\"\n model={this.remoteChangesTreeViewModel}\n toggleCheckboxes\n onCheckedItemsChange={event =>\n this.#checkedItemsChangeHandler(event, type)\n }\n expandableButton=\"no\"\n expandOnClick={false}\n ref={el =>\n (this.#remoteChangesTreeEL = el as HTMLChTreeViewRenderElement)\n }\n />\n )}\n </Fragment>\n );\n }\n };\n\n #renderConfirmButton = (type: TeamDevPreviewMode) => {\n const isLocal = type === \"local\";\n let isConfirmationInProcess = false;\n let id = \"\";\n if (isLocal) {\n isConfirmationInProcess = this.committingChanges;\n id = \"commit-changes-button\";\n } else {\n isConfirmationInProcess = this.updatingChanges;\n id = \"update-remote-changes-button\";\n }\n return (\n <button\n id={id}\n class={{\n \"button-primary\": true,\n \"button-icon-and-text\": isConfirmationInProcess\n }}\n type=\"button\"\n disabled={this.#disableConfirmButton(type)}\n onClick={\n isLocal\n ? this.#commitChangesHandler\n : this.#updateRemoteChangesHandler\n }\n >\n {isConfirmationInProcess && (\n <ch-image class=\"icon-md loader-icon\" src={LOADER_ICON} type=\"mask\" />\n )}\n {isConfirmationInProcess\n ? isLocal\n ? this.#componentLocale.buttons.committing\n : this.#componentLocale.buttons.updating\n : isLocal\n ? this.#componentLocale.buttons.commit\n : this.#componentLocale.buttons.update}\n </button>\n );\n };\n\n #renderLocalChanges = () => {\n if (this.pendingCommitChangesCount > 0) {\n return (\n <Fragment>\n <ch-edit\n id=\"commit-message-input\"\n class=\"input commit-message-textarea\"\n value={this.commitMessage}\n accessibleName={this.#componentLocale.accessibleNames.commitMessage}\n placeholder={this.#componentLocale.placeholders.commitMessage}\n disabled={this.loadingLocalChanges}\n onInput={this.#commitMessageInputHandler}\n multiline\n />\n {this.#renderConfirmButton(\"local\")}\n {this.#renderTreeChanges(\"local\")}\n </Fragment>\n );\n }\n };\n\n #renderRemoteChanges = () => {\n if (this.pendingRemoteChangesCount > 0) {\n return (\n <Fragment>\n {this.#renderConfirmButton(\"remote\")}\n {this.#renderTreeChanges(\"remote\")}\n </Fragment>\n );\n }\n };\n\n render() {\n const { existsGXServerSession } = this.teamDevPreviewData;\n return (\n <Host\n class={{\n \"widget\": true,\n \"empty-state\": !this.#isTeamDevOptionsEnabled\n }}\n >\n <ch-theme model={CSS_BUNDLES} />\n {!this.#isTeamDevOptionsEnabled || !existsGXServerSession ? (\n <gx-ide-empty-state\n isAnimated={true}\n stateIconSrc={ERROR_ICON}\n stateTitle={this.#getEmptyStateTitle()}\n stateDescription={this.#getEmptyStateDescription()}\n >\n {this.#renderEmptyStateButton() && (\n <button\n class=\"button-primary empty-state-button\"\n onClick={this.#getEmptyStateButtonHandler()}\n >\n {this.#getEmptyStateButtonText()}\n </button>\n )}\n <div>\n <p class=\"body-regular-s\">\n {this.#componentLocale.emptyState.about}\n </p>\n <button\n class=\"button-tertiary button-icon-and-text team-dev-button body-semi-bold-s\"\n type=\"button\"\n onClick={this.#openTeamDevInfoHandler}\n >\n {this.#componentLocale.buttons.teamDev}\n <ch-image class=\"icon-md\" src={OPEN_WINDOW_ICON} type=\"mask\" />\n </button>\n </div>\n </gx-ide-empty-state>\n ) : (\n <div class=\"main-container spacing-body scrollable\">\n <div>\n <p class=\"giu-static-pill-icon-and-text version giu-static-pill-icon-and-text--version elevation-02\">\n <ch-image\n class=\"icon-md\"\n type=\"mask\"\n src={VERSION_ICON}\n ></ch-image>\n <span class=\"version-pill\">\n {this.teamDevPreviewData.versionName}\n </span>\n </p>\n </div>\n <ch-tab-render\n class=\"tab tab-full-width-buttons scrollable border-style-none\"\n model={this.tabModel}\n selectedId={this.selectedTabId}\n tabListPosition=\"block-start\"\n onSelectedItemChange={this.#tabSelectionChangedHandler}\n >\n <div class=\"local-changes-container\" slot={LOCAL_CHANGES_TAB}>\n {this.#renderEmptyState(\"local\")}\n {this.#renderLocalChanges()}\n </div>\n\n <div class=\"remote-changes-container\" slot={REMOTE_CHANGES_TAB}>\n {this.#renderEmptyState(\"remote\")}\n {this.#renderRemoteChanges()}\n </div>\n </ch-tab-render>\n\n <footer class=\"control-footer-with-border open-window-container\">\n <div class=\"buttons-spacer\">\n <button\n class=\"button-tertiary button-icon-and-text open-full-dialog-button\"\n onClick={this.#openFullDialogHandler}\n >\n <ch-image\n class=\"icon-md\"\n src={OPEN_WINDOW_ICON}\n type=\"mask\"\n />\n {this.#componentLocale.footer.openFullDialog}\n </button>\n </div>\n </footer>\n </div>\n )}\n </Host>\n );\n }\n}\n\nexport type TeamDevPreviewData = {\n versionName: string;\n isFrozenVersion: boolean;\n existsGXServerSession: boolean;\n isKBOpen: boolean;\n isLinkedVersion: boolean;\n isLinkedKB: boolean;\n};\n\nexport type TeamDevPreviewMode = \"local\" | \"remote\";\n"],"mappings":"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"}
|
|
@@ -112,7 +112,7 @@ var u = undefined && undefined.__classPrivateFieldSet || function(t, i, e, s, r)
|
|
|
112
112
|
return s === "a" ? r.call(t, e) : r ? r.value = e : i.set(t, e), e;
|
|
113
113
|
};
|
|
114
114
|
|
|
115
|
-
var b, v, _, w, y, x, k, M,
|
|
115
|
+
var b, v, _, w, y, x, k, M, C, j, W, S, z, I, A, T, O, N, E, L, P, D, R, F, G, H, U;
|
|
116
116
|
|
|
117
117
|
const X = "filters-secondary-container";
|
|
118
118
|
|
|
@@ -190,14 +190,14 @@ const q = class {
|
|
|
190
190
|
g(this, L, "f").call(this, t);
|
|
191
191
|
}
|
|
192
192
|
}));
|
|
193
|
-
|
|
193
|
+
C.set(this, (async t => {
|
|
194
194
|
const i = t.detail.rowsId;
|
|
195
195
|
const e = i[0];
|
|
196
196
|
const s = this.pendingIdsSet.has(e) ? "pending" : "ignored";
|
|
197
197
|
const r = clearGridSelection(s, i, this.pendingIdsSet, this.ignoredIdsSet, g(this, w, "f"));
|
|
198
198
|
await this.selectCallback(s, r);
|
|
199
199
|
}));
|
|
200
|
-
|
|
200
|
+
j.set(this, (t => {
|
|
201
201
|
this.commentsValue = t.detail;
|
|
202
202
|
if (this.commentsValue.length && this.commentInputHasError) {
|
|
203
203
|
// remove error style and tooltip
|
|
@@ -282,17 +282,22 @@ const q = class {
|
|
|
282
282
|
u(this, _, false, "f");
|
|
283
283
|
const i = t.detail.addedRowsId;
|
|
284
284
|
const e = t.detail.removedRowsId;
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
285
|
+
try {
|
|
286
|
+
const t = await this.pendingItemsCheckedCallback({
|
|
287
|
+
itemsChecked: i,
|
|
288
|
+
itemsUnchecked: e
|
|
289
|
+
});
|
|
290
|
+
if (t === undefined) {
|
|
291
|
+
// undo check/uncheck
|
|
292
|
+
await g(this, F, "f").call(this, i, e);
|
|
293
|
+
} else {
|
|
294
|
+
await g(this, G, "f").call(this, t);
|
|
295
|
+
}
|
|
296
|
+
} catch (t) {
|
|
297
|
+
//catch exception if necessary
|
|
298
|
+
} finally {
|
|
299
|
+
u(this, _, true, "f");
|
|
294
300
|
}
|
|
295
|
-
u(this, _, true, "f");
|
|
296
301
|
}));
|
|
297
302
|
P.set(this, (() => {
|
|
298
303
|
this.pendingAndIgnored.pendingForCommit.forEach((t => {
|
|
@@ -413,6 +418,7 @@ const q = class {
|
|
|
413
418
|
this.selectedFolder = undefined;
|
|
414
419
|
this.selectedCategory = undefined;
|
|
415
420
|
this.foldersComboBoxModel = undefined;
|
|
421
|
+
this.isCommitDisabled = false;
|
|
416
422
|
this.commitCallback = undefined;
|
|
417
423
|
this.objectsContextMenuCallback = undefined;
|
|
418
424
|
this.loadCallback = undefined;
|
|
@@ -515,11 +521,16 @@ const q = class {
|
|
|
515
521
|
*/ async reload() {
|
|
516
522
|
await g(this, D, "f").call(this);
|
|
517
523
|
}
|
|
524
|
+
/**
|
|
525
|
+
* Used by the host to instruct the component to disable the commit button.
|
|
526
|
+
*/ async disableCommit(t) {
|
|
527
|
+
this.isCommitDisabled = t;
|
|
528
|
+
}
|
|
518
529
|
render() {
|
|
519
|
-
const i = this.committing || this.loading;
|
|
530
|
+
const i = this.committing || this.loading || this.isCommitDisabled;
|
|
520
531
|
const s = this.pendingObjectsAfterFilter.length === 0 && this.ignoredObjectsAfterFilter.length === 0;
|
|
521
532
|
const r = this.filterSecondaryHasConditions ? d.filterWithConditions : d.filter;
|
|
522
|
-
const a = this.atLeastOneObjectIsChecked && this.commentsValue.length > 0 && !this.allPendingAreCommitted;
|
|
533
|
+
const a = this.atLeastOneObjectIsChecked && this.commentsValue.length > 0 && !this.allPendingAreCommitted && !this.isCommitDisabled;
|
|
523
534
|
return t(e, {
|
|
524
535
|
class: "widget"
|
|
525
536
|
}, t("ch-theme", {
|
|
@@ -629,7 +640,7 @@ const q = class {
|
|
|
629
640
|
multiline: true,
|
|
630
641
|
autoGrow: true,
|
|
631
642
|
placeholder: g(this, b, "f").commitCommentPlaceholder,
|
|
632
|
-
onInput: g(this,
|
|
643
|
+
onInput: g(this, j, "f"),
|
|
633
644
|
value: this.commentsValue
|
|
634
645
|
})), t("div", {
|
|
635
646
|
class: l.MAIN
|
|
@@ -642,7 +653,7 @@ const q = class {
|
|
|
642
653
|
},
|
|
643
654
|
keyboardNavigationMode: "focus",
|
|
644
655
|
rowSelectionMode: "multiple",
|
|
645
|
-
onSelectionChanged: g(this,
|
|
656
|
+
onSelectionChanged: g(this, C, "f"),
|
|
646
657
|
onRowMarkingChanged: g(this, M, "f"),
|
|
647
658
|
onRowContextMenu: g(this, E, "f").call(this),
|
|
648
659
|
ref: t => u(this, w, t, "f")
|
|
@@ -689,7 +700,7 @@ const q = class {
|
|
|
689
700
|
};
|
|
690
701
|
|
|
691
702
|
b = new WeakMap, v = new WeakMap, _ = new WeakMap, w = new WeakMap, y = new WeakMap,
|
|
692
|
-
x = new WeakMap, k = new WeakMap, M = new WeakMap,
|
|
703
|
+
x = new WeakMap, k = new WeakMap, M = new WeakMap, C = new WeakMap, j = new WeakMap,
|
|
693
704
|
W = new WeakMap, S = new WeakMap, z = new WeakMap, I = new WeakMap, A = new WeakMap,
|
|
694
705
|
T = new WeakMap, O = new WeakMap, N = new WeakMap, E = new WeakMap, L = new WeakMap,
|
|
695
706
|
P = new WeakMap, D = new WeakMap, R = new WeakMap, F = new WeakMap, G = new WeakMap,
|
|
@@ -698,4 +709,4 @@ H = new WeakMap, U = new WeakMap;
|
|
|
698
709
|
q.style = m;
|
|
699
710
|
|
|
700
711
|
export { q as gx_ide_team_dev_commit };
|
|
701
|
-
//# sourceMappingURL=p-
|
|
712
|
+
//# sourceMappingURL=p-6ee5d68e.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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","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","markedObjectsSet","_GxIdeTeamDevCommit_commitSingleObject","objectId","newobjectsStatusMap","Map","objectsStatusMap","selection","commentsValue","commentInputHasError","committing","itemToUpdate","commitResult","commitCallback","objectResult","messages","objectsMessagesDataMap","delete","result","alreadyCommittedObjectsIdsSet","Set","markRow","_GxIdeTeamDevCommit_rowMarkingChangedHandler","event","markedRowsIds","detail","rowsId","filter","markedObjectId","_GxIdeTeamDevCommit_updatePendingCheckedItems","_GxIdeTeamDevCommit_rowSelectionChangedHandler","firstSelectedRowId","selectCallback","_GxIdeTeamDevCommit_commentsInputHandler","_GxIdeTeamDevCommit_applyClientFilter","pendingObjectsAfterFilter","_GxIdeTeamDevCommit_filteredObjects","pendingAndIgnored","pendingForCommit","ignoredObjectsAfterFilter","ignoredObjects","objects","filtered","searchValue","object","nameFiltered","toLowerCase","includes","descriptionFiltered","selectedState","ALL_VALUE","state","_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","_a","_GxIdeTeamDevCommit_setInitialObjectsStatus","pendingObject","status","ignoredObject","loading","loadCallback","search","selectedChangeset","category","selectedCategory","_GxIdeTeamDevCommit_markPendingObjects","pendingId","rowId","itemsToToggle","itemsToCheck","itemsToUncheck","_GxIdeTeamDevCommit_sortTabularGridColumnCallback","e","columnId","objectProperty","dateType","COLUMNS_IDS","modifiedOn","lastSynchronized","sortTabularGridColumn","_GxIdeTeamDevCommit_columnSelectorClickedCallback","allRowsChecked","getMarkedRows","ignoredMarkedRowsIds","uncheckIgnoredObjects","alreadyCommittedObjectsIdsSetChanged","newCommittedObjectsIdsSet","pendingIdsSetAndCommittedIdsSetAreEqual","areSetsEqual","allPendingAreCommitted","size","markedObjectsSetChanged","newMarkedObjectsSet","atLeastOneObjectIsChecked","objectsStatusMapChanged","newObjectsStatusMap","someObjectIsUpdating","entries","find","pendingAndIgnoredChanged","newPendingAndIgnored","clear","pending","add","_b","ignored","typesChanged","newTypes","typesComboBoxModel","changesetChanged","newChangesetOptions","changesetsComboBoxModel","folderChanged","newFolderOptions","foldersComboBoxModel","componentWillLoad","Locale","getComponentStrings","el","states","all","inserted","modified","conflicted","deleted","types","folders","componentDidLoad","reload","disableCommit","isCommitDisabled","render","disableControls","gridIsEmpty","filterIcon","ICONS","filterWithConditions","commitButtonEnabled","Host","model","CLASSES","HEADER","HEADER_DETAILS","commitDetail","title","genexusServer","serverDetails","serverUrl","openServerCallback","knowledgeBase","kbName","version","versionName","FILTER","disabled","accessibleName","searchAccessibleName","placeholder","searchPlaceholder","onInput","typeAccesibleName","typePlaceholder","localStateAccesibleName","localStatePlaceholder","secondaryFilterAriaLabel","src","refresh","commit","inert","hidden","folderAccesibleName","folderPlaceholder","multiline","autoGrow","commitCommentPlaceholder","MAIN","keyboardNavigationMode","rowSelectionMode","onSelectionChanged","onRowMarkingChanged","onRowContextMenu","ref","renderTabularGridColumns","pendingCommits","renderTabularGridRows","updatePillAsButton","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/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","@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 TabularGridColumnSelectorClickedEvent,\n TabularGridColumnSortChangedEvent,\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\";\nimport areSetsEqual from \"../common/are-sets-equal\";\nimport uncheckIgnoredObjects from \"../common/uncheck-ignored\";\n\nimport type {\n StateForFilter,\n StatusInternal,\n MessageData,\n ModifiedObjectData,\n CommitData,\n CommitCallback,\n ContextMenuCallback,\n LoadLocalChangesCallback,\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 COLUMNS_IDS\n} from \"../common/tabular-grid-render\";\nimport sortTabularGridColumn, {\n type SortTabularGridColumnDataType\n} from \"../../../../common/chameleon/tabular-grid-column-sort\";\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 boolean that indicates if all the pending objects, have been committed\n * already.\n */\n @State() allPendingAreCommitted: boolean = false;\n\n /**\n * A set that holds the id's of the objects that have been committed already.\n */\n @State() alreadyCommittedObjectsIdsSet: Set<string> = new Set<string>([]);\n @Watch(\"alreadyCommittedObjectsIdsSet\")\n alreadyCommittedObjectsIdsSetChanged(newCommittedObjectsIdsSet: Set<string>) {\n const pendingIdsSetAndCommittedIdsSetAreEqual = areSetsEqual(\n newCommittedObjectsIdsSet,\n this.pendingIdsSet\n );\n\n this.allPendingAreCommitted =\n pendingIdsSetAndCommittedIdsSetAreEqual && this.pendingIdsSet.size > 0;\n }\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. 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 \"ignored\". This\n * information is required for the ContextMenuCallback. 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 row. This is\n * required because filtering the grid causes marked cells to lose\n * their marked 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 state of every row (\"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 === \"committing\"\n );\n\n if (!someObjectIsUpdating) {\n this.committing = 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 committed. This helps disabling\n * controls until all objects are done.\n */\n @State() committing: 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 // 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(newPendingAndIgnored: CommitData) {\n // clear previous state\n this.pendingIdsSet.clear(); // before pendingIdsSet.add\n this.ignoredIdsSet.clear(); // before ignoredIdsSet.add\n this.objectsMessagesDataMap = new Map();\n this.alreadyCommittedObjectsIdsSet = new Set();\n this.commentInputHasError = false;\n this.markedObjectsSet = new Set(); // before #markPendingObjects\n\n newPendingAndIgnored.pendingForCommit?.forEach(pending => {\n this.pendingIdsSet.add(pending.id);\n });\n newPendingAndIgnored.ignoredObjects?.forEach(ignored => {\n this.ignoredIdsSet.add(ignored.id);\n });\n\n this.#markPendingObjects(); // after pendingIdsSet.add and ignoredIdsSet.add\n this.#setInitialObjectsStatus(); // after pendingIdsSet.add and ignoredIdsSet.add\n\n this.#applyClientFilter();\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 /**\n * Indicates if the commit button should be disabled\n */\n @State() isCommitDisabled: boolean = false;\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 local changes\n */\n @Prop() readonly loadCallback!: LoadLocalChangesCallback;\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 // initialize \"allPendingAreCommitted\"\n this.alreadyCommittedObjectsIdsSetChanged(\n this.alreadyCommittedObjectsIdsSet\n );\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 await this.#loadData();\n }\n\n /**\n * Used by the host to instruct the component to disable the commit button.\n */\n @Method()\n async disableCommit(value: boolean) {\n this.isCommitDisabled = value;\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, \"committing\");\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.committing = true;\n\n selection.forEach(itemToUpdate => {\n this.objectsStatusMap.set(itemToUpdate, \"committing\");\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 === \"committed\") {\n // Apply a new Set to \"alreadyCommittedObjectsIdsSet\" in order for the Watch to fire.\n this.alreadyCommittedObjectsIdsSet = new Set([\n ...this.alreadyCommittedObjectsIdsSet,\n objectResult.id\n ]);\n this.objectsStatusMap.set(objectResult.id, \"committed\");\n await this.#chGridPendingForUpdateEl.markRow(objectResult.id, false);\n } else {\n this.objectsStatusMap.set(objectResult.id, \"pending\");\n }\n });\n\n this.committing = false;\n this.commentsValue = \"\";\n };\n\n // handlers\n\n #rowMarkingChangedHandler = async (\n event: CustomEvent<TabularGridMarkingChangedEvent>\n ) => {\n const markedRowsIds = event.detail.rowsId;\n\n this.markedObjectsSet = new Set(\n markedRowsIds.filter(\n markedObjectId =>\n !this.alreadyCommittedObjectsIdsSet.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 try {\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 } catch {\n //catch exception if necessary\n } finally {\n this.#rowCheckedChangedByTheUser = true;\n }\n };\n\n #setInitialObjectsStatus = (): void => {\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\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.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.alreadyCommittedObjectsIdsSet.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 #sortTabularGridColumnCallback = (\n e: CustomEvent<TabularGridColumnSortChangedEvent>\n ) => {\n const columnId = e.detail.columnId;\n\n let objectProperty;\n let dateType: SortTabularGridColumnDataType = \"string\";\n if (columnId === COLUMNS_IDS.type) {\n objectProperty = \"name\"; // the type name\n dateType = \"object\";\n } else if (\n columnId === COLUMNS_IDS.modifiedOn ||\n columnId === COLUMNS_IDS.lastSynchronized\n ) {\n dateType = \"dateString\";\n }\n this.pendingObjectsAfterFilter = [\n ...sortTabularGridColumn(\n e,\n this.pendingObjectsAfterFilter,\n dateType,\n objectProperty\n )\n ];\n this.ignoredObjectsAfterFilter = [\n ...sortTabularGridColumn(\n e,\n this.ignoredObjectsAfterFilter,\n dateType,\n objectProperty\n )\n ];\n };\n\n /**\n * WA: Ignored objects must always remain unchecked.\n * Because `tabular-grid` selects all rows when the checkbox column is toggled,\n * we need to manually unselect the ignored IDs. // TODO: Move this function\n * to common\n */\n #columnSelectorClickedCallback = async (\n e: CustomEvent<TabularGridColumnSelectorClickedEvent>\n ) => {\n const allRowsChecked = e.detail;\n if (allRowsChecked) {\n const markedRowsIds =\n await this.#chGridPendingForUpdateEl.getMarkedRows();\n const ignoredMarkedRowsIds = markedRowsIds.filter(rowId => {\n return this.ignoredIdsSet.has(rowId);\n });\n if (ignoredMarkedRowsIds.length) {\n uncheckIgnoredObjects(\n ignoredMarkedRowsIds,\n this.#chGridPendingForUpdateEl\n );\n }\n }\n };\n\n render() {\n const disableControls =\n this.committing || this.loading || this.isCommitDisabled;\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 &&\n this.commentsValue.length > 0 &&\n !this.allPendingAreCommitted &&\n !this.isCommitDisabled;\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 value={this.commentsValue}\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.committing,\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.#sortTabularGridColumnCallback,\n this.#columnSelectorClickedCallback,\n this.#componentLocale,\n !this.allPendingAreCommitted\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.alreadyCommittedObjectsIdsSet,\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.alreadyCommittedObjectsIdsSet,\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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"}
|