@genexus/genexus-ide-ui 1.1.62 → 1.1.64

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.
@@ -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_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","leaf","localChangesTreeViewModel","_GxIdeTeamDevPreview_updateTabModel","remoteChangesTreeViewModel","_GxIdeTeamDevPreview_checkedItemsChangeHandler","event","checkedNodesIds","Array","from","detail","values","filter","node","checked","localChangesCheckedNodesIds","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","tabId","tabModel","tab","_GxIdeTeamDevPreview_getEmptyStateTitle","getEmptyStateType","_GxIdeTeamDevPreview_getEmptyStateDescription","_GxIdeTeamDevPreview_getEmptyStateButtonText","_GxIdeTeamDevPreview_getEmptyStateButtonHandler","_GxIdeTeamDevPreview_renderEmptyStateButton","_GxIdeTeamDevPreview_renderReloadChangesButton","isLoading","isConfirmationInProcess","reloadCaption","reloadingCaption","reloadLocal","reloadingLocal","reloadRemote","reloadingRemote","h","class","onClick","disabled","src","_GxIdeTeamDevPreview_renderEmptyState","show","message","noLocalChanges","noRemoteChanges","_GxIdeTeamDevPreview_renderTreeChanges","model","Fragment","checkbox","toggleCheckboxes","onCheckedItemsChange","expandableButton","expandOnClick","_GxIdeTeamDevPreview_renderConfirmButton","committing","updating","commit","update","_GxIdeTeamDevPreview_renderLocalChanges","accessibleName","accessibleNames","placeholder","placeholders","onInput","multiline","_GxIdeTeamDevPreview_renderRemoteChanges","onTeamDevPreviewDataChanged","versionName","versionChanged","reloadChanges","componentWillLoad","Locale","getComponentStrings","el","componentDidLoad","isActiveTab","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\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","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\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 * 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 #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: item.name,\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 } else {\n this.remoteChangesCheckedNodesIds = checkedNodesIds;\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 await this.#loadChanges(\"local\");\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 await this.#loadChanges(\"remote\");\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 );\n } else {\n return (\n this.loadingRemoteChanges ||\n this.remoteChangesCheckedNodesIds.length === 0 ||\n this.updatingChanges\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={isLoading || isConfirmationInProcess}\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 let isLoading = false;\n let isConfirmationInProcess = false;\n let model: TreeViewModel;\n\n if (isLocal) {\n isLoading = this.loadingLocalChanges;\n isConfirmationInProcess = this.committingChanges;\n model = this.localChangesTreeViewModel;\n } else {\n isLoading = this.loadingRemoteChanges;\n isConfirmationInProcess = this.updatingChanges;\n model = this.remoteChangesTreeViewModel;\n }\n return (\n <Fragment>\n {this.#renderReloadChangesButton(type)}\n {!isLoading && !isConfirmationInProcess && (\n <ch-tree-view-render\n checkbox\n checked\n class=\"tree-view\"\n model={model}\n toggleCheckboxes\n onCheckedItemsChange={event =>\n this.#checkedItemsChangeHandler(event, type)\n }\n expandableButton=\"no\"\n expandOnClick={false}\n />\n )}\n </Fragment>\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\">\n <div>\n <p class=\"giu-static-pill-icon-and-text 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 {this.teamDevPreviewData.versionName}\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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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@genexus/genexus-ide-ui",
3
3
  "license": "Apache-2.0",
4
- "version": "1.1.62",
4
+ "version": "1.1.64",
5
5
  "description": "GeneXus IDE UI components",
6
6
  "main": "dist/index.cjs.js",
7
7
  "module": "dist/index.js",
@@ -1 +0,0 @@
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_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","leaf","localChangesTreeViewModel","_GxIdeTeamDevPreview_updateTabModel","remoteChangesTreeViewModel","_GxIdeTeamDevPreview_checkedItemsChangeHandler","event","checkedNodesIds","Array","from","detail","values","filter","node","checked","localChangesCheckedNodesIds","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","tabId","tabModel","tab","_GxIdeTeamDevPreview_getEmptyStateTitle","getEmptyStateType","_GxIdeTeamDevPreview_getEmptyStateDescription","_GxIdeTeamDevPreview_getEmptyStateButtonText","_GxIdeTeamDevPreview_getEmptyStateButtonHandler","_GxIdeTeamDevPreview_renderEmptyStateButton","_GxIdeTeamDevPreview_renderReloadChangesButton","isLoading","isConfirmationInProcess","reloadCaption","reloadingCaption","reloadLocal","reloadingLocal","reloadRemote","reloadingRemote","h","class","onClick","disabled","src","_GxIdeTeamDevPreview_renderEmptyState","show","message","noLocalChanges","noRemoteChanges","_GxIdeTeamDevPreview_renderTreeChanges","model","Fragment","checkbox","toggleCheckboxes","onCheckedItemsChange","_GxIdeTeamDevPreview_renderConfirmButton","committing","updating","commit","update","_GxIdeTeamDevPreview_renderLocalChanges","accessibleName","accessibleNames","placeholder","placeholders","onInput","multiline","_GxIdeTeamDevPreview_renderRemoteChanges","onTeamDevPreviewDataChanged","versionName","versionChanged","reloadChanges","componentWillLoad","Locale","getComponentStrings","el","componentDidLoad","isActiveTab","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\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: calc(var(--ch-tree-view-item-gap) + 16px);\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","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\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 * 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 #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: item.name,\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 } else {\n this.remoteChangesCheckedNodesIds = checkedNodesIds;\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 await this.#loadChanges(\"local\");\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 await this.#loadChanges(\"remote\");\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 );\n } else {\n return (\n this.loadingRemoteChanges ||\n this.remoteChangesCheckedNodesIds.length === 0 ||\n this.updatingChanges\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={isLoading || isConfirmationInProcess}\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 let isLoading = false;\n let isConfirmationInProcess = false;\n let model: TreeViewModel;\n\n if (isLocal) {\n isLoading = this.loadingLocalChanges;\n isConfirmationInProcess = this.committingChanges;\n model = this.localChangesTreeViewModel;\n } else {\n isLoading = this.loadingRemoteChanges;\n isConfirmationInProcess = this.updatingChanges;\n model = this.remoteChangesTreeViewModel;\n }\n return (\n <Fragment>\n {this.#renderReloadChangesButton(type)}\n {!isLoading && !isConfirmationInProcess && (\n <ch-tree-view-render\n checkbox\n checked\n class=\"tree-view\"\n model={model}\n toggleCheckboxes\n onCheckedItemsChange={event =>\n this.#checkedItemsChangeHandler(event, type)\n }\n />\n )}\n </Fragment>\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\">\n <div>\n <p class=\"giu-static-pill-icon-and-text 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 {this.teamDevPreviewData.versionName}\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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"}