@genexus/genexus-ide-ui 1.1.67 → 1.1.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js.map +1 -1
  3. package/dist/cjs/gx-ide-restore-version.cjs.entry.js +133 -0
  4. package/dist/cjs/gx-ide-restore-version.cjs.entry.js.map +1 -0
  5. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js +38 -9
  6. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js.map +1 -1
  7. package/dist/cjs/gx-ide-share-kb.cjs.entry.js.map +1 -1
  8. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +17 -10
  9. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js.map +1 -1
  10. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +18 -10
  11. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js.map +1 -1
  12. package/dist/cjs/loader.cjs.js +1 -1
  13. package/dist/collection/collection-manifest.json +1 -0
  14. package/dist/collection/components/restore-version/gx-ide-assets/restore-version/langs/restore-version.lang.en.json +19 -0
  15. package/dist/collection/components/restore-version/gx-ide-assets/restore-version/langs/restore-version.lang.ja.json +19 -0
  16. package/dist/collection/components/restore-version/gx-ide-assets/restore-version/langs/restore-version.lang.zh.json +19 -0
  17. package/dist/collection/components/restore-version/restore-version.css +651 -0
  18. package/dist/collection/components/restore-version/restore-version.js +258 -0
  19. package/dist/collection/components/restore-version/restore-version.js.map +1 -0
  20. package/dist/collection/components/select-kb-items/select-kb-items.js +56 -9
  21. package/dist/collection/components/select-kb-items/select-kb-items.js.map +1 -1
  22. package/dist/collection/components/team-dev/create-kb-from-server/create-kb-from-server.js +4 -5
  23. package/dist/collection/components/team-dev/create-kb-from-server/create-kb-from-server.js.map +1 -1
  24. package/dist/collection/components/team-dev/share-kb/share-kb.js +4 -5
  25. package/dist/collection/components/team-dev/share-kb/share-kb.js.map +1 -1
  26. package/dist/collection/components/team-dev/update/update.js +18 -10
  27. package/dist/collection/components/team-dev/update/update.js.map +1 -1
  28. package/dist/collection/components/team-dev/version-control/commit/commit.js +17 -10
  29. package/dist/collection/components/team-dev/version-control/commit/commit.js.map +1 -1
  30. package/dist/collection/components/team-dev/version-control/common/types.js.map +1 -1
  31. package/dist/collection/testing/locale.e2e.js +2 -1
  32. package/dist/collection/testing/locale.e2e.js.map +1 -1
  33. package/dist/components/gx-ide-create-kb-from-server.js.map +1 -1
  34. package/dist/components/gx-ide-restore-version.d.ts +11 -0
  35. package/dist/components/gx-ide-restore-version.js +158 -0
  36. package/dist/components/gx-ide-restore-version.js.map +1 -0
  37. package/dist/components/gx-ide-share-kb.js.map +1 -1
  38. package/dist/components/gx-ide-team-dev-commit.js +17 -10
  39. package/dist/components/gx-ide-team-dev-commit.js.map +1 -1
  40. package/dist/components/gx-ide-team-dev-update.js +18 -10
  41. package/dist/components/gx-ide-team-dev-update.js.map +1 -1
  42. package/dist/components/select-kb-items.js +39 -9
  43. package/dist/components/select-kb-items.js.map +1 -1
  44. package/dist/esm/genexus-ide-ui.js +1 -1
  45. package/dist/esm/gx-ide-create-kb-from-server.entry.js.map +1 -1
  46. package/dist/esm/gx-ide-restore-version.entry.js +129 -0
  47. package/dist/esm/gx-ide-restore-version.entry.js.map +1 -0
  48. package/dist/esm/gx-ide-select-kb-items.entry.js +38 -9
  49. package/dist/esm/gx-ide-select-kb-items.entry.js.map +1 -1
  50. package/dist/esm/gx-ide-share-kb.entry.js.map +1 -1
  51. package/dist/esm/gx-ide-team-dev-commit.entry.js +17 -10
  52. package/dist/esm/gx-ide-team-dev-commit.entry.js.map +1 -1
  53. package/dist/esm/gx-ide-team-dev-update.entry.js +18 -10
  54. package/dist/esm/gx-ide-team-dev-update.entry.js.map +1 -1
  55. package/dist/esm/loader.js +1 -1
  56. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  57. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  58. package/dist/genexus-ide-ui/gx-ide-assets/restore-version/langs/restore-version.lang.en.json +19 -0
  59. package/dist/genexus-ide-ui/gx-ide-assets/restore-version/langs/restore-version.lang.ja.json +19 -0
  60. package/dist/genexus-ide-ui/gx-ide-assets/restore-version/langs/restore-version.lang.zh.json +19 -0
  61. package/dist/genexus-ide-ui/{p-c8b0004e.entry.js → p-6ee5d68e.entry.js} +16 -11
  62. package/dist/genexus-ide-ui/{p-c8b0004e.entry.js.map → p-6ee5d68e.entry.js.map} +1 -1
  63. package/dist/genexus-ide-ui/{p-f83c415c.entry.js → p-8897c6de.entry.js} +88 -64
  64. package/dist/genexus-ide-ui/p-8897c6de.entry.js.map +1 -0
  65. package/dist/genexus-ide-ui/p-93e79d19.entry.js.map +1 -1
  66. package/dist/genexus-ide-ui/{p-9285b6db.entry.js → p-972dc777.entry.js} +17 -11
  67. package/dist/genexus-ide-ui/p-972dc777.entry.js.map +1 -0
  68. package/dist/genexus-ide-ui/p-9ffa7afd.entry.js.map +1 -1
  69. package/dist/genexus-ide-ui/p-c3cc759d.entry.js +182 -0
  70. package/dist/genexus-ide-ui/p-c3cc759d.entry.js.map +1 -0
  71. package/dist/types/components/restore-version/restore-version.d.ts +52 -0
  72. package/dist/types/components/select-kb-items/select-kb-items.d.ts +4 -0
  73. package/dist/types/components/team-dev/create-kb-from-server/create-kb-from-server.d.ts +4 -9
  74. package/dist/types/components/team-dev/share-kb/share-kb.d.ts +3 -8
  75. package/dist/types/components/team-dev/version-control/common/types.d.ts +6 -0
  76. package/dist/types/components.d.ts +75 -8
  77. package/package.json +1 -1
  78. package/dist/genexus-ide-ui/p-9285b6db.entry.js.map +0 -1
  79. package/dist/genexus-ide-ui/p-f83c415c.entry.js.map +0 -1
@@ -0,0 +1,52 @@
1
+ import { ComboBoxModel } from "@genexus/chameleon-controls-library";
2
+ import { KBVersion } from "../team-dev/version-control/common/types";
3
+ export declare class GxIdeRestoreVersion {
4
+ #private;
5
+ el: HTMLGxIdeRestoreVersionElement;
6
+ /**
7
+ * Indicates if the environments should be synchronized.
8
+ */
9
+ syncEnvironments: boolean;
10
+ /**
11
+ * Input value for the source version selector.
12
+ */
13
+ selectedSourceVersionName: string;
14
+ /**
15
+ * Selected source version from version selector.
16
+ */
17
+ selectedSourceVersion: KBVersion[];
18
+ /**
19
+ * Combo box model for the versions selector.
20
+ */
21
+ versionsComboBoxModel: ComboBoxModel;
22
+ /**
23
+ * Callback invoked by pressing the ellipsis in the version selector.
24
+ */
25
+ readonly selectSourceVersionCallback: () => Promise<KBVersion[]>;
26
+ /**
27
+ * Callback invoked by pressing the Confirm button.
28
+ */
29
+ readonly confirmCallback: (restoreVersionData: RestoreVersionData) => Promise<void>;
30
+ /**
31
+ * Callback invoked by pressing the Cancel button.
32
+ */
33
+ readonly cancelCallback: () => Promise<void>;
34
+ /**
35
+ * The target version to which the restore will be made.
36
+ */
37
+ readonly toVersionInfo: KBVersion;
38
+ /**
39
+ * List of versions to show in the versions combo box.
40
+ */
41
+ readonly versions: KBVersion[];
42
+ versionsChanged(): void;
43
+ componentWillLoad(): Promise<void>;
44
+ render(): any;
45
+ }
46
+ export type RestoreVersionData = {
47
+ fromVersionName: string;
48
+ fromVersionGuid: string;
49
+ toVersionGuid: string;
50
+ toVersionName: string;
51
+ syncEnvironments: boolean;
52
+ };
@@ -84,6 +84,10 @@ export declare class GxIdeSelectKbItems {
84
84
  * This define if the selection is unique or not
85
85
  */
86
86
  readonly multiSelection?: boolean;
87
+ /**
88
+ * This define if the checks are unique or not
89
+ */
90
+ readonly singleChecks?: boolean;
87
91
  /**
88
92
  * Used to define if the component must show the "Active item" link or not
89
93
  */
@@ -1,7 +1,8 @@
1
- import { GXServerConnectionData } from "../connect-gx-server/connect-gx-server";
2
- import { FormSubmitResult } from "../../../common/types";
3
- import { ControlValidation } from "../../../common/form-validation";
4
1
  import { ActionListItemModel } from "@genexus/chameleon-controls-library";
2
+ import { ControlValidation } from "../../../common/form-validation";
3
+ import { FormSubmitResult } from "../../../common/types";
4
+ import { GXServerConnectionData } from "../connect-gx-server/connect-gx-server";
5
+ import { KBVersion } from "../version-control/common/types";
5
6
  export declare class GxIdeCreateKbFromServer {
6
7
  #private;
7
8
  [key: string]: any;
@@ -67,11 +68,6 @@ export type KBData = {
67
68
  id: string;
68
69
  name: string;
69
70
  };
70
- export type KBVersion = {
71
- id: number;
72
- name: string;
73
- type?: VersionType;
74
- };
75
71
  export type ConnectionResultData = {
76
72
  formResult: FormSubmitResult;
77
73
  kbs: KBData[];
@@ -83,4 +79,3 @@ export type KnowledgeBaseInfo = {
83
79
  versionList: KBVersion[];
84
80
  };
85
81
  export type VersionOption = "Trunk" | "All" | "Select";
86
- export type VersionType = "Branch" | "Frozen";
@@ -1,7 +1,8 @@
1
1
  import { EventEmitter } from "../../../stencil-public-runtime";
2
- import { GXServerConnectionData } from "../connect-gx-server/connect-gx-server";
3
- import { FormSubmitResult } from "../../../common/types";
4
2
  import { ControlValidation } from "../../../common/form-validation";
3
+ import { FormSubmitResult } from "../../../common/types";
4
+ import { GXServerConnectionData } from "../connect-gx-server/connect-gx-server";
5
+ import { KBVersion } from "../version-control/common/types";
5
6
  export declare class GxIdeShareKb {
6
7
  #private;
7
8
  [key: string]: any;
@@ -56,11 +57,6 @@ export type KBData = {
56
57
  id: string;
57
58
  name: string;
58
59
  };
59
- export type KBVersion = {
60
- id: number;
61
- name: string;
62
- type?: VersionType;
63
- };
64
60
  export type ConnectionResultData = {
65
61
  formResult: FormSubmitResult;
66
62
  kbs: KBData[];
@@ -72,4 +68,3 @@ export type ShareKBData = {
72
68
  allVersions: boolean;
73
69
  };
74
70
  export type VersionOption = "Trunk" | "All" | "Select";
75
- export type VersionType = "Branch" | "Frozen";
@@ -82,3 +82,9 @@ export interface MessageData {
82
82
  type: "info" | "success" | "warning" | "error";
83
83
  text: string;
84
84
  }
85
+ export type KBVersion = {
86
+ id: number;
87
+ name: string;
88
+ isFrozen?: boolean;
89
+ guid?: string;
90
+ };
@@ -24,7 +24,8 @@ import { TitleType } from "./components/_helpers/title/title";
24
24
  import { AlignItems, FooterJustify, HeadingJustify, JustifyContent, SectionsPadding } from "./components/_helpers/container/container";
25
25
  import { TitleAlignment } from "@genexus/gemini/dist/types/common/types";
26
26
  import { GXServerConnectionData as GXServerConnectionData1 } from "./components/team-dev/connect-gx-server/connect-gx-server";
27
- import { KBData, KBVersion, KnowledgeBaseInfo } from "./components/team-dev/create-kb-from-server/create-kb-from-server";
27
+ import { KBData, KnowledgeBaseInfo } from "./components/team-dev/create-kb-from-server/create-kb-from-server";
28
+ import { CommitCallback, ContextMenuCallback as ContextMenuCallback1, KBVersion, LoadLocalChangesCallback, LoadRemoteChangesCallback, PendingItemsCheckedCallback, SelectCallback, ServerDetails, UpdateCallback } from "./components/team-dev/version-control/common/types";
28
29
  import { CurlImportData, EntityData, SelectModuleCallback } from "./components/curl-inspector/curl-inspector";
29
30
  import { MenuAlign, Mode, UserInfo } from "./components/current-user-info/current-user-info";
30
31
  import { CancelCallback as CancelCallback4, ConfirmCallback as ConfirmCallback3, EditCallback, LoadItemsCallback, NewVariableCallback, SelectObjectCallback } from "./components/data-selector/data-selector";
@@ -56,10 +57,11 @@ import { PluginDetailsData } from "./components/plugin-details/plugin-details";
56
57
  import { PluginAction, PluginData } from "./components/plugin-explorer/plugin-explorer";
57
58
  import { TopStateBarType } from "./components/_helpers/progress-bar/progress-bar";
58
59
  import { LoadReferencesCallback, ObjectData as ObjectData1, OpenObjectCallback, OpenSelectorDialogCallback, SelectorSourceCallback, SelectReferenceCallback } from "./components/references/references";
60
+ import { RestoreVersionData } from "./components/restore-version/restore-version";
59
61
  import { CheckboxType, DialogAction, ItemNode } from "./components/select-kb-items/select-kb-items";
60
62
  import { TeamData } from "./components/select-user-team/select-user-team";
61
63
  import { AuthenticationSessionOrigin, ConnectionOption, ServerData } from "./components/team-dev/server-selector/server-selector";
62
- import { KBVersion as KBVersion1, ShareKBData } from "./components/team-dev/share-kb/share-kb";
64
+ import { ShareKBData } from "./components/team-dev/share-kb/share-kb";
63
65
  import { AuthStep, TeamData as TeamData1 } from "./components/sign-in-team/sign-in-team";
64
66
  import { MessageType } from "./components/splash/splash";
65
67
  import { RecentKBData, SampleData, SecondarySection } from "./components/start-page/start-page";
@@ -67,7 +69,6 @@ import { CancelCallback as CancelCallback16, SaveCallback as SaveCallback1 } fro
67
69
  import { CheckedItemsInfo as CheckedItemsInfo1 } from "./components/_helpers/list-selector/list-selector";
68
70
  import { SelectedMergeActionData } from "./components/team-dev/bring-all-changes-selector/bring-all-changes-selector";
69
71
  import { CommitDetail, CommitInformation, CommitObject, MergeObjectsCallback, ObjectState, OperationType } from "./components/team-dev/bring-changes/bring-changes";
70
- import { CommitCallback, ContextMenuCallback as ContextMenuCallback1, LoadLocalChangesCallback, LoadRemoteChangesCallback, PendingItemsCheckedCallback, SelectCallback, ServerDetails, UpdateCallback } from "./components/team-dev/version-control/common/types";
71
72
  import { LoadCallback as LoadCallback4, LoadDetailCallback, ObjectType as ObjectType1, SelectedVersionChangeCallback } from "./components/team-dev/history/history";
72
73
  import { ItemNode as ItemNode1 } from "./components/select-kb-items/select-kb-items";
73
74
  import { TeamDevPreviewData, TeamDevPreviewMode } from "./components/team-dev/preview/team-dev-preview";
@@ -100,7 +101,8 @@ export { TitleType } from "./components/_helpers/title/title";
100
101
  export { AlignItems, FooterJustify, HeadingJustify, JustifyContent, SectionsPadding } from "./components/_helpers/container/container";
101
102
  export { TitleAlignment } from "@genexus/gemini/dist/types/common/types";
102
103
  export { GXServerConnectionData as GXServerConnectionData1 } from "./components/team-dev/connect-gx-server/connect-gx-server";
103
- export { KBData, KBVersion, KnowledgeBaseInfo } from "./components/team-dev/create-kb-from-server/create-kb-from-server";
104
+ export { KBData, KnowledgeBaseInfo } from "./components/team-dev/create-kb-from-server/create-kb-from-server";
105
+ export { CommitCallback, ContextMenuCallback as ContextMenuCallback1, KBVersion, LoadLocalChangesCallback, LoadRemoteChangesCallback, PendingItemsCheckedCallback, SelectCallback, ServerDetails, UpdateCallback } from "./components/team-dev/version-control/common/types";
104
106
  export { CurlImportData, EntityData, SelectModuleCallback } from "./components/curl-inspector/curl-inspector";
105
107
  export { MenuAlign, Mode, UserInfo } from "./components/current-user-info/current-user-info";
106
108
  export { CancelCallback as CancelCallback4, ConfirmCallback as ConfirmCallback3, EditCallback, LoadItemsCallback, NewVariableCallback, SelectObjectCallback } from "./components/data-selector/data-selector";
@@ -132,10 +134,11 @@ export { PluginDetailsData } from "./components/plugin-details/plugin-details";
132
134
  export { PluginAction, PluginData } from "./components/plugin-explorer/plugin-explorer";
133
135
  export { TopStateBarType } from "./components/_helpers/progress-bar/progress-bar";
134
136
  export { LoadReferencesCallback, ObjectData as ObjectData1, OpenObjectCallback, OpenSelectorDialogCallback, SelectorSourceCallback, SelectReferenceCallback } from "./components/references/references";
137
+ export { RestoreVersionData } from "./components/restore-version/restore-version";
135
138
  export { CheckboxType, DialogAction, ItemNode } from "./components/select-kb-items/select-kb-items";
136
139
  export { TeamData } from "./components/select-user-team/select-user-team";
137
140
  export { AuthenticationSessionOrigin, ConnectionOption, ServerData } from "./components/team-dev/server-selector/server-selector";
138
- export { KBVersion as KBVersion1, ShareKBData } from "./components/team-dev/share-kb/share-kb";
141
+ export { ShareKBData } from "./components/team-dev/share-kb/share-kb";
139
142
  export { AuthStep, TeamData as TeamData1 } from "./components/sign-in-team/sign-in-team";
140
143
  export { MessageType } from "./components/splash/splash";
141
144
  export { RecentKBData, SampleData, SecondarySection } from "./components/start-page/start-page";
@@ -143,7 +146,6 @@ export { CancelCallback as CancelCallback16, SaveCallback as SaveCallback1 } fro
143
146
  export { CheckedItemsInfo as CheckedItemsInfo1 } from "./components/_helpers/list-selector/list-selector";
144
147
  export { SelectedMergeActionData } from "./components/team-dev/bring-all-changes-selector/bring-all-changes-selector";
145
148
  export { CommitDetail, CommitInformation, CommitObject, MergeObjectsCallback, ObjectState, OperationType } from "./components/team-dev/bring-changes/bring-changes";
146
- export { CommitCallback, ContextMenuCallback as ContextMenuCallback1, LoadLocalChangesCallback, LoadRemoteChangesCallback, PendingItemsCheckedCallback, SelectCallback, ServerDetails, UpdateCallback } from "./components/team-dev/version-control/common/types";
147
149
  export { LoadCallback as LoadCallback4, LoadDetailCallback, ObjectType as ObjectType1, SelectedVersionChangeCallback } from "./components/team-dev/history/history";
148
150
  export { ItemNode as ItemNode1 } from "./components/select-kb-items/select-kb-items";
149
151
  export { TeamDevPreviewData, TeamDevPreviewMode } from "./components/team-dev/preview/team-dev-preview";
@@ -1929,6 +1931,30 @@ export namespace Components {
1929
1931
  */
1930
1932
  "selectorSourceCallback"?: SelectorSourceCallback;
1931
1933
  }
1934
+ interface GxIdeRestoreVersion {
1935
+ /**
1936
+ * Callback invoked by pressing the Cancel button.
1937
+ */
1938
+ "cancelCallback": () => Promise<void>;
1939
+ /**
1940
+ * Callback invoked by pressing the Confirm button.
1941
+ */
1942
+ "confirmCallback": (
1943
+ restoreVersionData: RestoreVersionData
1944
+ ) => Promise<void>;
1945
+ /**
1946
+ * Callback invoked by pressing the ellipsis in the version selector.
1947
+ */
1948
+ "selectSourceVersionCallback": () => Promise<KBVersion[]>;
1949
+ /**
1950
+ * The target version to which the restore will be made.
1951
+ */
1952
+ "toVersionInfo": KBVersion;
1953
+ /**
1954
+ * List of versions to show in the versions combo box.
1955
+ */
1956
+ "versions": KBVersion[];
1957
+ }
1932
1958
  interface GxIdeScChatContainer {
1933
1959
  /**
1934
1960
  * It will exit the wellcome screen and remove it from the dom.
@@ -1994,6 +2020,10 @@ export namespace Components {
1994
2020
  * Used to define if the component must show the "Toggle Checkboxes" option or not
1995
2021
  */
1996
2022
  "showToggleCheckboxes": boolean;
2023
+ /**
2024
+ * This define if the checks are unique or not
2025
+ */
2026
+ "singleChecks"?: boolean;
1997
2027
  /**
1998
2028
  * Suspends or reactivates the shortcuts
1999
2029
  */
@@ -2078,7 +2108,7 @@ export namespace Components {
2078
2108
  */
2079
2109
  "selectKBVersionsCallback": (
2080
2110
  selectedKB: string
2081
- ) => Promise<KBVersion1[]>;
2111
+ ) => Promise<KBVersion[]>;
2082
2112
  /**
2083
2113
  * Callback that must be invoked when the Share button is pressed.
2084
2114
  */
@@ -3604,6 +3634,12 @@ declare global {
3604
3634
  prototype: HTMLGxIdeReferencesElement;
3605
3635
  new (): HTMLGxIdeReferencesElement;
3606
3636
  };
3637
+ interface HTMLGxIdeRestoreVersionElement extends Components.GxIdeRestoreVersion, HTMLStencilElement {
3638
+ }
3639
+ var HTMLGxIdeRestoreVersionElement: {
3640
+ prototype: HTMLGxIdeRestoreVersionElement;
3641
+ new (): HTMLGxIdeRestoreVersionElement;
3642
+ };
3607
3643
  interface HTMLGxIdeScChatContainerElement extends Components.GxIdeScChatContainer, HTMLStencilElement {
3608
3644
  }
3609
3645
  var HTMLGxIdeScChatContainerElement: {
@@ -3927,6 +3963,7 @@ declare global {
3927
3963
  "gx-ide-plugin-explorer": HTMLGxIdePluginExplorerElement;
3928
3964
  "gx-ide-progress-bar": HTMLGxIdeProgressBarElement;
3929
3965
  "gx-ide-references": HTMLGxIdeReferencesElement;
3966
+ "gx-ide-restore-version": HTMLGxIdeRestoreVersionElement;
3930
3967
  "gx-ide-sc-chat-container": HTMLGxIdeScChatContainerElement;
3931
3968
  "gx-ide-select-kb-items": HTMLGxIdeSelectKbItemsElement;
3932
3969
  "gx-ide-select-user-team": HTMLGxIdeSelectUserTeamElement;
@@ -5798,6 +5835,30 @@ declare namespace LocalJSX {
5798
5835
  */
5799
5836
  "selectorSourceCallback"?: SelectorSourceCallback;
5800
5837
  }
5838
+ interface GxIdeRestoreVersion {
5839
+ /**
5840
+ * Callback invoked by pressing the Cancel button.
5841
+ */
5842
+ "cancelCallback": () => Promise<void>;
5843
+ /**
5844
+ * Callback invoked by pressing the Confirm button.
5845
+ */
5846
+ "confirmCallback": (
5847
+ restoreVersionData: RestoreVersionData
5848
+ ) => Promise<void>;
5849
+ /**
5850
+ * Callback invoked by pressing the ellipsis in the version selector.
5851
+ */
5852
+ "selectSourceVersionCallback": () => Promise<KBVersion[]>;
5853
+ /**
5854
+ * The target version to which the restore will be made.
5855
+ */
5856
+ "toVersionInfo": KBVersion;
5857
+ /**
5858
+ * List of versions to show in the versions combo box.
5859
+ */
5860
+ "versions": KBVersion[];
5861
+ }
5801
5862
  interface GxIdeScChatContainer {
5802
5863
  /**
5803
5864
  * If true, the chat items length will be 0, since this is a requirement for dipslaying the ch-chat "empty-chat" slot that welcome screen uses to display.
@@ -5859,6 +5920,10 @@ declare namespace LocalJSX {
5859
5920
  * Used to define if the component must show the "Toggle Checkboxes" option or not
5860
5921
  */
5861
5922
  "showToggleCheckboxes"?: boolean;
5923
+ /**
5924
+ * This define if the checks are unique or not
5925
+ */
5926
+ "singleChecks"?: boolean;
5862
5927
  }
5863
5928
  interface GxIdeSelectUserTeam {
5864
5929
  /**
@@ -5935,7 +6000,7 @@ declare namespace LocalJSX {
5935
6000
  */
5936
6001
  "selectKBVersionsCallback"?: (
5937
6002
  selectedKB: string
5938
- ) => Promise<KBVersion1[]>;
6003
+ ) => Promise<KBVersion[]>;
5939
6004
  /**
5940
6005
  * Callback that must be invoked when the Share button is pressed.
5941
6006
  */
@@ -6726,6 +6791,7 @@ declare namespace LocalJSX {
6726
6791
  "gx-ide-plugin-explorer": GxIdePluginExplorer;
6727
6792
  "gx-ide-progress-bar": GxIdeProgressBar;
6728
6793
  "gx-ide-references": GxIdeReferences;
6794
+ "gx-ide-restore-version": GxIdeRestoreVersion;
6729
6795
  "gx-ide-sc-chat-container": GxIdeScChatContainer;
6730
6796
  "gx-ide-select-kb-items": GxIdeSelectKbItems;
6731
6797
  "gx-ide-select-user-team": GxIdeSelectUserTeam;
@@ -6818,6 +6884,7 @@ declare module "@stencil/core" {
6818
6884
  "gx-ide-plugin-explorer": LocalJSX.GxIdePluginExplorer & JSXBase.HTMLAttributes<HTMLGxIdePluginExplorerElement>;
6819
6885
  "gx-ide-progress-bar": LocalJSX.GxIdeProgressBar & JSXBase.HTMLAttributes<HTMLGxIdeProgressBarElement>;
6820
6886
  "gx-ide-references": LocalJSX.GxIdeReferences & JSXBase.HTMLAttributes<HTMLGxIdeReferencesElement>;
6887
+ "gx-ide-restore-version": LocalJSX.GxIdeRestoreVersion & JSXBase.HTMLAttributes<HTMLGxIdeRestoreVersionElement>;
6821
6888
  "gx-ide-sc-chat-container": LocalJSX.GxIdeScChatContainer & JSXBase.HTMLAttributes<HTMLGxIdeScChatContainerElement>;
6822
6889
  "gx-ide-select-kb-items": LocalJSX.GxIdeSelectKbItems & JSXBase.HTMLAttributes<HTMLGxIdeSelectKbItemsElement>;
6823
6890
  "gx-ide-select-user-team": LocalJSX.GxIdeSelectUserTeam & JSXBase.HTMLAttributes<HTMLGxIdeSelectUserTeamElement>;
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.67",
4
+ "version": "1.1.69",
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":["mapObjectTypeToComboBoxItemModel","objectTypeModel","map","objectType","value","id","caption","name","startImgSrc","icon","updateCss","CSS_BUNDLES","CHECKBOX_CHECKED_VALUE","CHECKBOX_UNCHECKED_VALUE","DETAIL_LABEL_CLASSES","ADD_ICON","getIconPath","category","colorType","EDITED_ICON","FILTER_ICON","SEARCH_ICON","SUBSTRACT_ICON","WARNING_ICON","ERROR_ICON","SUCCESS_ICON","INFO_ICON","REFRESH_ICON","GxIdeTeamDevUpdate","_GxIdeTeamDevUpdate_componentLocale","set","this","_GxIdeTeamDevUpdate_actionsComboBoxModel","_GxIdeTeamDevUpdate_rowCheckedChangedByTheUser","_GxIdeTeamDevUpdate_chGridPendingForUpdateEl","_GxIdeTeamDevUpdate_updateCheckedClickedHandler","async","__classPrivateFieldGet","_GxIdeTeamDevUpdate_updateObjectsHandler","call","markedObjectsSet","_GxIdeTeamDevUpdate_reloadClickedHandler","_GxIdeTeamDevUpdate_loadData","selection","__classPrivateFieldSet","updating","forEach","itemToUpdate","objectsStatusMap","updateResult","updateCallback","objectResult","messages","length","objectsMessagesDataMap","delete","result","alreadyUpdatedObjectsIdsSet","Set","add","markRow","_GxIdeTeamDevUpdate_renderActionCellContent","action","iconColor","actions","insert","modify","modifyWithConflicts","h","class","type","src","style","backgroundColor","_GxIdeTeamDevUpdate_updateSingleObject","objectId","newobjectsStatusMap","Map","_GxIdeTeamDevUpdate_renderObjectStatus","status","get","updatePillAsButton","update","classes","onClick","_GxIdeTeamDevUpdate_renderRows","objects","pendingObjectsAfterActionFilter","ignoredObjectsAfterActionFilter","object","typeIcon","alreadyUpdated","has","hideCheckbox","marked","key","rowid","ref","el","setAttribute","size","renderObjectTypeWithIcon","description","formatDate","modifiedOn","message","MESSAGE_ICON","text","_GxIdeTeamDevUpdate_rowMarkingChangedHandler","event","markedRowsIds","detail","rowsId","filter","markedObjectId","_GxIdeTeamDevUpdate_updatePendingCheckedItems","addedRowsIds","addedRowsId","removedRowsId","pendingItemCheckedResult","pendingItemsCheckedCallback","itemsChecked","itemsUnchecked","undefined","_GxIdeTeamDevUpdate_revertPendingCommitsCheckboxes","_GxIdeTeamDevUpdate_togglePendingCommitsCheckboxes","_GxIdeTeamDevUpdate_searchInputHandler","searchValue","_GxIdeTeamDevUpdate_actionChangedHandler","selectedAction","_GxIdeTeamDevUpdate_typeChangedHandler","selectedType","_GxIdeTeamDevUpdate_setInitialObjectsStatus","pendingAndIgnored","pendingForUpdate","pendingObject","_a","ignoredObjects","ignoredObject","forceLoad","filters","search","kbProperties","kbPropertiesChecked","loading","clear","loadCallback","_GxIdeTeamDevUpdate_markPendingObjects","error","pendingId","pendingIdsSet","_GxIdeTeamDevUpdate_applyClientFilter","_GxIdeTeamDevUpdate_onRowContextMenuHandler","ev","preventDefault","stopPropagation","getSelectedRows","selectedRowId","getSelectedCell","rowId","source","filteredSelection","ignoredIdsSet","selectRow","push","contextMenuCallback","clientX","clientY","itemsToToggle","itemsToCheck","itemsToUncheck","_GxIdeTeamDevUpdate_kbPropertiesChangedHandler","_GxIdeTeamDevUpdate_sortTabularGridColumnCallback","e","columnId","objectProperty","dateType","COLUMNS_IDS","lastSynchronized","sortTabularGridColumn","_GxIdeTeamDevUpdate_columnSelectorClickedCallback","allRowsChecked","getMarkedRows","ignoredMarkedRowsIds","uncheckIgnoredObjects","markedObjectsSetChanged","newMarkedObjectsSet","atLeastOneObjectIsChecked","alreadyUpdatedObjectsIdsSetChanged","newUpdatedObjectsIdsSet","pendingIdsSetAndUpdatedIdsSetAreEqual","areSetsEqual","allPendingAreUpdated","objectsStatusMapChanged","newObjectsStatusMap","someObjectIsUpdating","entries","find","state","pendingAndIgnoredChanged","pending","ignored","componentWillLoad","Locale","getComponentStrings","allActions","types","typesComboBoxModel","componentDidLoad","reload","disableUpdate","isUpdateDisabled","render","disableControls","gridIsEmpty","Host","model","commitDetail","title","genexusServer","openServerCallback","updateFrom","serverUrl","knowledgeBase","kbName","version","versionName","lastFullUpdate","disabled","accessibleName","searchAccessibleName","placeholder","searchPlaceholder","onInput","debounce","config","inputDebounce","typeAccesibleName","typePlaceholder","actionAccesibleName","actionPlaceholder","checkedValue","keyboardNavigationMode","rowSelectionMode","onRowMarkingChanged","onRowContextMenu","columnName","columnType","richRowSelector","richRowSelectorMode","settingable","sortable","onColumnSortChanged","onColumnSelectorClicked","tabularGrid","colSize","isAnimated","stateIconSrc","stateTitle","cancelLabel","loader","loaderTitle","show"],"sources":["src/components/team-dev/version-control/common/object-type-to-combo-box.ts","src/components/team-dev/update/update.scss?tag=gx-ide-team-dev-update&encapsulation=shadow","src/components/team-dev/update/update.tsx"],"sourcesContent":["import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { ObjectType } from \"../../../../components\";\n\nexport const mapObjectTypeToComboBoxItemModel = (\n objectTypeModel: ObjectType[]\n): ComboBoxModel =>\n objectTypeModel.map(objectType => ({\n value: objectType.id,\n caption: objectType.name,\n startImgSrc: objectType.icon\n }));\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:host {\n --pill-border-radius: 12px;\n --pill-padding-inline: 8px;\n --pill-padding-block: 2px;\n --pill-font-size: var(--font-size-body-s);\n\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content max-content 1fr;\n}\n$header-item-common-inline-padding: 24px;\n$header-item-common-separator-border: 1px solid\n var(--mer-border-color__on-elevation--01);\n\n%header-item-common {\n padding-inline: $header-item-common-inline-padding;\n border-inline-end: $header-item-common-separator-border;\n}\n%header-item-common-start {\n padding-inline-end: $header-item-common-inline-padding;\n border-inline-end: $header-item-common-separator-border;\n}\n%header-item-common-end {\n padding-inline-start: $header-item-common-inline-padding;\n}\n\n.section {\n display: contents;\n}\n\n.header {\n display: grid;\n grid-template-columns: 1fr max-content;\n}\n\n// header detail\n.header__detail {\n display: grid;\n row-gap: var(--mer-spacing--md);\n grid-auto-columns: max-content;\n grid-auto-rows: max-content;\n grid-template-areas:\n \"detail-heading-gx . . .\"\n \"detail-genexus-server detail-knowledge-base detail-version detail-last-full-update\";\n}\n.detail__label {\n color: var(--mer-color__neutral-gray--400);\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-item-common-start;\n\n > a {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: inline-block;\n }\n}\n.detail__link {\n align-items: start;\n color: var(--mer-text__primary);\n text-decoration: underline;\n &:hover {\n color: var(--mer-text__primary--hover);\n }\n &:active {\n color: var(--mer-text__primary--active);\n }\n}\n.detail__knowledge-base {\n grid-area: detail-knowledge-base;\n @extend %header-item-common;\n}\n.detail__version {\n grid-area: detail-version;\n @extend %header-item-common;\n}\n.detail__last-full-update {\n grid-area: detail-last-full-update;\n @extend %header-item-common-end;\n}\n\n// filter\n.filter-container {\n container-type: inline-size;\n box-sizing: border-box;\n}\n.filter {\n display: grid;\n margin-block-start: var(--mer-spacing--lg);\n grid-template-areas: \"filter-search filter-types filter-actions filter-kb-properties filter-buttons\";\n grid-template-columns: 200px 200px 200px max-content 1fr;\n gap: 12px;\n}\n@container (max-width: 1100px) {\n .filter-container > .filter {\n grid-template-columns: 200px 200px 200px 1fr;\n grid-template-areas:\n \"filter-search filter-types filter-actions filter-buttons\"\n \"filter-kb-properties . . .\";\n grid-auto-rows: max-content;\n }\n}\n@container (max-width: 900px) {\n .filter-container > .filter {\n grid-template-columns: 1fr 1fr 1fr;\n grid-template-areas:\n \"filter-search filter-types filter-actions\"\n \"filter-kb-properties filter-buttons filter-buttons\";\n grid-auto-rows: max-content;\n }\n}\n.filter__search {\n grid-area: filter-search;\n}\n.filter__types {\n grid-area: filter-types;\n}\n.filter__actions {\n grid-area: filter-actions;\n}\n.filter__kb-properties {\n grid-area: filter-kb-properties;\n}\n.filter__buttons {\n margin-inline-start: auto;\n grid-area: filter-buttons;\n}\n\n// main\n.main {\n position: relative;\n display: grid;\n overflow: auto;\n}\n.loader {\n position: relative;\n inline-size: 100%;\n block-size: 100%;\n inset-block-start: 0;\n}\n.tabular-grid {\n border-radius: 4px;\n overflow: hidden;\n}\n\n.empty-state {\n block-size: 100%;\n}\n.loader {\n --elevation-background-color: var(--mer-surface__elevation--01);\n}\n\n.messages-list {\n margin: 0;\n padding: 0;\n list-style: none;\n max-inline-size: 800px;\n padding: 8px 0;\n list-style-type: none;\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--3xs);\n}\n.message-description {\n line-height: 1.5; // WA. Line height looks too tight.\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.message-icon {\n flex-shrink: 0;\n}\n\n.tabular-grid.empty-result::part(main) {\n // WA to avoid scrollbar flickering when displaying the empty-state message\n overflow: hidden;\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: 200px;\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\nch-tabular-grid-cell.tabular-grid-cell::part(actions-icon) {\n background-size: contain; //force icon fit container\n margin-inline-end: 0;\n --icon-path: var(--icon__gemini-tools_show-more-vertical_neutral--enabled);\n cursor: pointer;\n &:hover {\n --icon-path: var(--icon__gemini-tools_show-more-vertical_neutral--hover);\n }\n &:active {\n --icon-path: var(--icon__gemini-tools_show-more-vertical_neutral--active);\n }\n}\n\n.tabular-grid-row-actions::part(main),\n.property-grid-row-actions::part(main) {\n // gap not required since buttons are tertiary.\n // extra space perceived.\n gap: 0 !important;\n}\n\n.tabular-grid-row-actions {\n // Butons are center by default, but design dictates start alignemnt\n > button {\n justify-content: start;\n }\n}\n\n// These static type of pills do not exist on Mercury yet.\n// They should be defined on Mercury. The actual pills on Mercury\n// are combo-boxes. Not what we need for this case.\n\n.pill {\n --pill-background-color: transparent;\n --pill-color: transparent;\n --pill-border-color: transparent;\n\n background-color: var(--pill-background-color);\n color: var(--pill-color);\n border: 1px solid var(--pill-border-color);\n inline-size: 100%;\n padding: var(--pill-padding-block) var(--pill-padding-inline);\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--pill-border-radius);\n position: relative;\n font-weight: var(--font-weight-semi-bold);\n\n &--update,\n &--pending {\n --pill-background-color: var();\n --pill-color: var(--mer-color__neutral-gray--400);\n --pill-border-color: var();\n }\n &--to-merge-marked {\n --pill-background-color: var();\n --pill-color: var(--mer-border-color__primary);\n --pill-border-color: var();\n }\n &--ignored {\n --pill-background-color: var(--mer-surface__elevation--02);\n --pill-color: var(--mer-text__on-disabled);\n --pill-border-color: var(--mer-border-color__primary--disabled);\n }\n &--pending {\n --pill-background-color: var(--mer-color__tinted-primary--8);\n --pill-color: var(--mer-border-color__primary);\n --pill-border-color: var(--mer-color__tinted-primary--50);\n }\n &--warning {\n --pill-background-color: var(--mer-color__tinted-yellow--5);\n --pill-color: var(--mer-border-color__warning);\n --pill-border-color: var(--mer-color__tinted-yellow--60);\n }\n &--error {\n --pill-background-color: var(--mer-color__tinted-red--5);\n --pill-color: var(--mer-border-color__error);\n --pill-border-color: var(--mer-color__tinted-red--60);\n }\n &--updated {\n --pill-background-color: var(--mer-color__tinted-green--5);\n --pill-color: var(--mer-border-color__success);\n --pill-border-color: var(--mer-color__tinted-green--60);\n }\n &--transitioning {\n // used to hide the text, before updating the caption (smooth transtion)\n --pill-color: transparent;\n }\n}\n.updating-spinner-caption {\n display: flex;\n align-items: center;\n gap: 6px;\n $size: 14px;\n --status-circle-color: transparent;\n --status-circle-size: $size;\n --status-circle-inset-inline-start: 14px;\n --pill-color: var(--mer-border-color__primary);\n &::before {\n display: inline-block;\n content: \"\";\n\n @include spinner(\n $size,\n var(--mer-color__primary--300),\n var(--mer-color__tinted-primary--50)\n );\n }\n}\n.tabular-grid .button-secondary {\n --control__padding-block: var(--pill-padding-block);\n --control__padding-inline: var(--pill-padding-inline);\n font-size: inherit;\n font-weight: inherit;\n /* font-size: var(--pill-font-size); */\n}\n\n.tabular-grid .tabular-grid-cell--for-pill {\n --grid-cell__padding-block: 4px;\n align-items: center;\n justify-content: center;\n\n // --grid-cell__padding-inline: 0;\n}\n\n.tabular-grid.disabled-custom-selector .tabular-grid-cell::part(selector-label),\n.tabular-grid.disabled-custom-selector .tabular-grid-column::part(bar-selector),\n.tabular-grid.disabled-custom-selector .tabular-grid-cell::part(actions-icon) {\n pointer-events: none;\n opacity: 0.5;\n}\n.tabular-grid-column--settings-custom-selector,\n.tabular-grid-cell--settings-custom-selector {\n --grid-cell__padding-inline: 0;\n --grid-cell__padding-block: 0;\n}\n.tabular-grid-cell::part(actions-icon) {\n padding-block: 6px;\n}\nch-tabular-grid-cell.tabular-grid-cell::part(actions-icon) {\n block-size: 100%;\n display: block;\n background-size: 14px;\n padding-inline: 16px;\n}\n\n.tabular-grid-cell.no-checkbox-custom-selector::part(selector-label) {\n visibility: hidden;\n pointer-events: none;\n}\n\n.tabular-grid-row-actions::part(window) {\n background-color: var(--mer-surface__elevation--02) !important;\n}\n\n.tabular-grid-row .tabular-grid-cell:nth-child(3) {\n min-inline-size: 200px;\n}\n\n// - - - - - - - - - - - - - -\n// END OF WA\n// - - - - - - - - - - - - - -\n","import {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method,\n JSX,\n Watch\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { Locale } from \"../../../common/locale\";\nimport {\n ChCheckboxCustomEvent,\n ChEditCustomEvent,\n ComboBoxModel,\n TabularGridColumnSelectorClickedEvent,\n TabularGridColumnSortChangedEvent,\n TabularGridMarkingChangedEvent,\n TabularGridRowContextMenuEvent\n} from \"@genexus/chameleon-controls-library\";\n\nimport uncheckIgnoredObjects from \"../version-control/common/uncheck-ignored\";\nimport { renderObjectTypeWithIcon } from \"../common/utilities\";\nimport { formatDate } from \"../../../common/helpers\";\nimport {\n ContextMenuInfo,\n ItemsCheckedResult,\n ItemsCheckedState,\n ObjectType\n} from \"../../../common/types\";\nimport { config } from \"../../../common/config\";\nimport { mapObjectTypeToComboBoxItemModel } from \"../version-control/common/object-type-to-combo-box\";\nimport { COLUMNS_IDS } from \"../version-control/common/tabular-grid-render\";\nimport sortTabularGridColumn, {\n type SortTabularGridColumnDataType\n} from \"../../../common/chameleon/tabular-grid-column-sort\";\nimport areSetsEqual from \"../version-control/common/are-sets-equal\";\nimport {\n Action,\n ActionForFilter,\n LoadRemoteChangesCallback,\n ModifiedObject,\n UpdateCallback,\n UpdateData,\n UpdateFiltersData,\n UpdateStatus,\n UpdateStatusInternal\n} from \"../version-control/common/types\";\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\nconst CHECKBOX_CHECKED_VALUE = \"true\";\nconst CHECKBOX_UNCHECKED_VALUE = \"false\";\n\nconst DETAIL_LABEL_CLASSES = \"detail__label body-semi-bold-s\";\n\n// icons\nconst ADD_ICON = getIconPath({\n category: \"system\",\n name: \"add\",\n colorType: \"on-elevation\"\n});\nconst EDITED_ICON = getIconPath({\n category: \"system\",\n name: \"edit\",\n colorType: \"on-elevation\"\n});\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-elevation\"\n});\nconst SEARCH_ICON = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-elevation\"\n});\nconst SUBSTRACT_ICON = getIconPath({\n category: \"system\",\n name: \"substract\",\n colorType: \"on-elevation\"\n});\nconst WARNING_ICON = getIconPath({\n category: \"system\",\n name: \"warning\",\n colorType: \"warning\"\n});\nconst ERROR_ICON = getIconPath({\n category: \"system\",\n name: \"error\",\n colorType: \"error\"\n});\nconst SUCCESS_ICON = getIconPath({\n category: \"system\",\n name: \"check \",\n colorType: \"success\"\n});\nconst INFO_ICON = getIconPath({\n category: \"system\",\n name: \"information\",\n colorType: \"on-elevation\"\n});\nconst REFRESH_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"reset\",\n colorType: \"neutral\"\n});\n\n@Component({\n tag: \"gx-ide-team-dev-update\",\n styleUrl: \"update.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/team-dev-update\"]\n})\nexport class GxIdeTeamDevUpdate {\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 #actionsComboBoxModel: { caption: string; value: ActionForFilter }[];\n\n /**\n * Used to determine if pendingItemsCheckedCallback callback has to be called or not.\n * It should be ignored if the grid checkboxes state is changed programmatically, by\n * setting markRow to false once the object has been successfully updated, for example.\n */\n #rowCheckedChangedByTheUser: boolean = true;\n\n @Element() el: HTMLGxIdeTeamDevBringChangesElement;\n\n #chGridPendingForUpdateEl!: HTMLChTabularGridElement;\n\n // - - - - - - - - - - - - -\n // States Bring Changes\n // - - - - - - - - - - - - -\n\n /**\n * It hols a boolean indicating if at least one object from the tabular-grid is checked, for merging.\n */\n @State() atLeastOneObjectIsChecked: boolean = false;\n\n /**\n * True while commitObjects hasn't been loaded or is empty. Used to display a loader.\n */\n @State() loading: boolean = true;\n\n /**\n * The current search filter value\n */\n @State() menuContextAction: Action;\n\n /**\n * The current search filter value\n */\n @State() searchValue: string = \"\";\n\n /**\n * The current state filter value\n */\n @State() selectedAction: ActionForFilter = \"all-actions\";\n\n /**\n * A set that stores the marked state of each object cell. This is necessary because filtering the grid * causes marked cells to lose their state.\n */\n @State() markedObjectsSet: Set<string> = new Set<string>([]);\n @Watch(\"markedObjectsSet\")\n markedObjectsSetChanged(newMarkedObjectsSet: Set<string>) {\n this.atLeastOneObjectIsChecked = newMarkedObjectsSet.size > 0;\n }\n\n /**\n * A set that holds the id's of the objects that have been updated already.\n */\n @State() alreadyUpdatedObjectsIdsSet: Set<string> = new Set<string>([]);\n @Watch(\"alreadyUpdatedObjectsIdsSet\")\n alreadyUpdatedObjectsIdsSetChanged(newUpdatedObjectsIdsSet: Set<string>) {\n const pendingIdsSetAndUpdatedIdsSetAreEqual = areSetsEqual(\n newUpdatedObjectsIdsSet,\n this.pendingIdsSet\n );\n\n this.allPendingAreUpdated =\n pendingIdsSetAndUpdatedIdsSetAreEqual && this.pendingIdsSet.size > 0;\n }\n\n /**\n * A set that holds the id's of all the pending objects. Used to quickly determine if the selected rows belong\n * to \"pending\" or not. This information is required for the ContextMenuCallback callback. This set has to be updated\n * on every loadCallback.\n */\n @State() pendingIdsSet: Set<string> = new Set<string>([]);\n\n /**\n * A set that holds the id's of all the ignored objects. Used to quickly determine if the selected rows belong\n * to \"ignored\" or not. This information is required for the ContextMenuCallback callback. This set has to be updated\n * on every loadCallback.\n */\n @State() ignoredIdsSet: Set<string> = new Set<string>([]);\n\n /**\n * A map that holds object messages, after trying to update ('info' | ‘success’ | 'warning' | 'error')\n */\n @State() objectsMessagesDataMap: Map<string, MessageData[]> = new Map();\n\n /**\n * Set to true when objects are being mered. This helps disabling controls until all objects are done.\n */\n @State() updating: boolean = false;\n\n // - - - - - - - - - - - - -\n // State Update\n // - - - - - - - - - - - - -\n\n /**\n * A boolean that indicates if all the pending objects, have been updated\n * already.\n */\n @State() allPendingAreUpdated: boolean = false;\n\n /**\n * The \"KB Properties\" checkbox value\n */\n @State() kbPropertiesChecked: boolean = false;\n\n /**\n * The combobox model for the types filter.\n */\n @State() typesComboBoxModel: ComboBoxModel;\n\n /**\n * The selected type\n */\n @State() selectedType: string;\n\n /**\n * Indicates if the update button should be disabled\n */\n @State() isUpdateDisabled: boolean = false;\n\n /**\n * A map that holds the current update objects states (\"inserted\" | \"modified\" | \"modified-with-conflicts\" | \"deleted\" | \"updating\" | \"update\")\n */\n @State() objectsStatusMap: Map<string, UpdateStatusInternal> = new Map();\n @Watch(\"objectsStatusMap\")\n objectsStatusMapChanged(\n newObjectsStatusMap: Map<string, UpdateStatusInternal>\n ) {\n const someObjectIsUpdating = [...newObjectsStatusMap.entries()].find(\n ([, state]) => state === \"updating\"\n );\n\n if (!someObjectIsUpdating) {\n this.updating = false;\n }\n }\n\n // - - - - - - - - - - - - -\n // Properties Bring Changes\n // - - - - - - - - - - - - -\n\n /**\n * Callback invoked when user activates the context menu on any of the grids.\n */\n @Prop() readonly contextMenuCallback!: ContextMenuCallback;\n\n /**\n * All objects (\"pending for update\" and \"ignored objects\") before \"state\" filter\n */\n @State() pendingAndIgnored: UpdateData = {\n pendingForUpdate: [],\n ignoredObjects: []\n };\n @Watch(\"pendingAndIgnored\")\n pendingAndIgnoredChanged() {\n this.pendingIdsSet.clear(); // before pendingIdsSet.add\n this.ignoredIdsSet.clear(); // before pendingIdsSet.add\n this.objectsMessagesDataMap = new Map();\n this.alreadyUpdatedObjectsIdsSet = new Set();\n this.markedObjectsSet = new Set(); // before #markPendingObjects\n\n this.pendingAndIgnored.pendingForUpdate.forEach(pending => {\n this.pendingIdsSet.add(pending.id);\n });\n\n this.pendingAndIgnored.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 /**\n * Pending objects after \"action\" filter\n */\n @State() pendingObjectsAfterActionFilter: ModifiedObject[] = [];\n\n /**\n * Ignored objects after \"action\" filter\n */\n @State() ignoredObjectsAfterActionFilter: ModifiedObject[] = [];\n\n /**\n * Callback invoked to return the list of data types loaded from file or url.\n */\n @Prop() readonly loadCallback!: LoadRemoteChangesCallback;\n\n /**\n * Callback invoked to return information of a Font type of data.\n */\n @Prop() readonly pendingItemsCheckedCallback!: PendingItemsCheckedCallback;\n\n /**\n * Possible values for type filter\n */\n @Prop() readonly types: ObjectType[];\n\n /**\n * If true, the \"Action\" column will display a button instead of a pill, only when the action is\n */\n @Prop() readonly updatePillAsButton: boolean = false;\n\n // - - - - - - - - - - - - -\n // Properties Update\n // - - - - - - - - - - - - -\n\n /**\n * Callback invoked when the update process is to be started (’Update’ button).\n */\n @Prop() readonly updateCallback!: UpdateCallback;\n\n /**\n * Callback invoked when user clicks in server url of Update From group.\n */\n @Prop() readonly openServerCallback!: () => Promise<void>;\n\n /**\n * Information to show in Update From group.\n */\n @Prop() readonly updateFrom: UpdateFromData;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n // Initiate \"actions\" combo box filter\n this.#actionsComboBoxModel = [\n {\n caption: this.#componentLocale.actions.allActions,\n value: \"all-actions\"\n },\n {\n caption: this.#componentLocale.actions.insert,\n value: \"inserted\"\n },\n {\n caption: this.#componentLocale.actions.modify,\n value: \"modified\"\n },\n {\n caption: this.#componentLocale.actions.modifyWithConflicts,\n value: \"modified-with-conflicts\"\n },\n {\n caption: this.#componentLocale.actions.delete,\n value: \"deleted\"\n }\n ];\n\n // Set type initial value\n this.selectedType = this.types[0]?.id;\n\n this.typesComboBoxModel = mapObjectTypeToComboBoxItemModel(this.types);\n }\n\n async componentDidLoad() {\n await this.#loadData(true);\n\n // initialize \"allPendingAreUpdated\"\n this.alreadyUpdatedObjectsIdsSetChanged(this.alreadyUpdatedObjectsIdsSet);\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(true);\n }\n\n /**\n * Used by the host to instruct the component to disable the update button.\n */\n @Method()\n async disableUpdate(value: boolean) {\n this.isUpdateDisabled = value;\n }\n\n #updateCheckedClickedHandler = async () => {\n this.#updateObjectsHandler([...this.markedObjectsSet]);\n };\n\n #reloadClickedHandler = async () => {\n this.#loadData(true);\n };\n\n #updateObjectsHandler = async (selection: string[]) => {\n this.#rowCheckedChangedByTheUser = false;\n this.updating = true;\n\n selection.forEach(itemToUpdate => {\n this.objectsStatusMap.set(itemToUpdate, \"updating\");\n });\n\n const updateResult = await this.updateCallback(selection);\n updateResult.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 === \"updated\") {\n this.alreadyUpdatedObjectsIdsSet = new Set(\n this.alreadyUpdatedObjectsIdsSet\n ).add(objectResult.id);\n\n this.objectsStatusMap.set(objectResult.id, \"updated\");\n await this.#chGridPendingForUpdateEl.markRow(objectResult.id, false);\n } else {\n this.objectsStatusMap.set(objectResult.id, \"pending\");\n }\n });\n this.updating = false;\n };\n\n #renderActionCellContent = (\n action: Action\n ): JSX.Element[] | null | string => {\n let icon: string;\n let caption: string;\n let iconColor: string;\n\n if (action === \"deleted\") {\n icon = SUBSTRACT_ICON;\n caption = this.#componentLocale.actions.delete;\n iconColor = \"--mer-icon__error\";\n } else if (action === \"inserted\") {\n icon = ADD_ICON;\n caption = this.#componentLocale.actions.insert;\n iconColor = \"--mer-icon__success\";\n } else if (action === \"modified\") {\n icon = EDITED_ICON;\n caption = this.#componentLocale.actions.modify;\n iconColor = \"--mer-icon__warning\";\n } else if (action === \"modified-with-conflicts\") {\n icon = WARNING_ICON;\n caption = this.#componentLocale.actions.modifyWithConflicts;\n iconColor = \"--mer-icon__warning\";\n } else if (!action) {\n // proably is \"ignored\"\n return null;\n }\n\n return (\n <span class=\"custom-icon-text-wrapper\">\n <ch-image\n type=\"mask\"\n class=\"icon-md\"\n src={icon}\n style={{ backgroundColor: `var(${iconColor})` }}\n ></ch-image>\n {`${caption}`}\n </span>\n );\n };\n\n #updateSingleObject: (objectId: string) => () => void =\n objectId => async () => {\n const newobjectsStatusMap = new Map(this.objectsStatusMap);\n newobjectsStatusMap.set(objectId, \"updating\");\n this.objectsStatusMap = newobjectsStatusMap;\n this.#updateObjectsHandler([objectId]);\n };\n\n #renderObjectStatus = (objectId: string): JSX.Element[] => {\n const status = this.objectsStatusMap.get(objectId);\n\n const caption =\n status === \"pending\" && this.updatePillAsButton\n ? this.#componentLocale.status.update\n : this.#componentLocale.status[status];\n if (status === \"updating\") {\n return <span class=\"updating-spinner-caption\">{caption}</span>;\n }\n const classes = `pill pill--${status}`;\n if (this.updatePillAsButton && status === \"pending\") {\n return (\n <button\n class=\"button-secondary pill pill--update\"\n onClick={this.#updateSingleObject(objectId)}\n >\n {caption}\n </button>\n );\n } else {\n return <span class={classes}>{caption}</span>;\n }\n };\n\n #renderRows = (type: UpdateSourceType): JSX.Element[] => {\n let objects: ModifiedObject[];\n if (type === \"pending\") {\n objects = this.pendingObjectsAfterActionFilter;\n } else if (type === \"ignored\") {\n objects = this.ignoredObjectsAfterActionFilter;\n }\n\n return objects.map(object => {\n const objectType: ObjectType = {\n id: object.id,\n icon: object.typeIcon,\n name: object.type\n };\n\n const alreadyUpdated = this.alreadyUpdatedObjectsIdsSet.has(object.id);\n const hideCheckbox = alreadyUpdated || type === \"ignored\";\n\n const marked = this.markedObjectsSet.has(object.id);\n\n const messages = this.objectsMessagesDataMap.get(object.id);\n\n return (\n <ch-tabular-grid-row\n class=\"tabular-grid-row\"\n key={object.id}\n rowid={object.id}\n ref={(el: HTMLElement) =>\n marked && el?.setAttribute(\"marked\", \"true\")\n }\n >\n <ch-tabular-grid-cell\n cell-type=\"rich\"\n row-selector=\"true\"\n class={{\n \"tabular-grid-cell\": true,\n \"no-checkbox-custom-selector\": hideCheckbox\n }}\n size=\"max-content\"\n >\n {object.name}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {renderObjectTypeWithIcon(objectType)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {object.description}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {formatDate(object.modifiedOn)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.#renderActionCellContent(object.action)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell tabular-grid-cell--for-pill\">\n {this.#renderObjectStatus(object.id)}\n </ch-tabular-grid-cell>\n\n {messages?.length && (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty\n class={{\n \"tabular-grid-rowset-empty\": true\n }}\n >\n <ul class=\"messages-list\">\n {messages.map(message => {\n let MESSAGE_ICON;\n if (message.type === \"error\") {\n MESSAGE_ICON = ERROR_ICON;\n } else if (message.type === \"warning\") {\n MESSAGE_ICON = WARNING_ICON;\n } else if (message.type === \"success\") {\n MESSAGE_ICON = SUCCESS_ICON;\n } else {\n // info\n MESSAGE_ICON = INFO_ICON;\n }\n\n return (\n <li class=\"message-description\">\n <ch-image\n class=\"icon-md message-icon\"\n src={MESSAGE_ICON}\n ></ch-image>\n {message.text}\n </li>\n );\n })}\n </ul>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid-row>\n );\n });\n };\n\n #rowMarkingChangedHandler = async (\n event: CustomEvent<TabularGridMarkingChangedEvent>\n ) => {\n const markedRowsIds = event.detail.rowsId;\n this.markedObjectsSet = new Set(\n markedRowsIds.filter(\n markedObjectId => !this.alreadyUpdatedObjectsIdsSet.has(markedObjectId)\n )\n );\n\n if (this.#rowCheckedChangedByTheUser) {\n this.#updatePendingCheckedItems(event);\n }\n };\n\n #updatePendingCheckedItems = async (\n event: CustomEvent<TabularGridMarkingChangedEvent>\n ) => {\n const addedRowsIds = event.detail.addedRowsId;\n const removedRowsId = event.detail.removedRowsId;\n\n const pendingItemCheckedResult = await this.pendingItemsCheckedCallback({\n itemsChecked: addedRowsIds,\n itemsUnchecked: removedRowsId\n });\n\n if (pendingItemCheckedResult === undefined) {\n // undo check/uncheck\n await this.#revertPendingCommitsCheckboxes(addedRowsIds, removedRowsId);\n } else {\n await this.#togglePendingCommitsCheckboxes(pendingItemCheckedResult);\n }\n };\n\n #searchInputHandler = (event: ChEditCustomEvent<string> | InputEvent) => {\n this.searchValue = event.detail as string;\n this.#loadData();\n };\n\n // Local Methods Update\n\n #actionChangedHandler = (event: CustomEvent<string> | InputEvent) => {\n this.selectedAction = event.detail as ActionForFilter;\n this.#loadData();\n };\n\n #typeChangedHandler = async (event: CustomEvent<string> | InputEvent) => {\n this.selectedType = event.detail as string;\n this.#loadData();\n };\n\n #setInitialObjectsStatus = (): void => {\n this.pendingAndIgnored.pendingForUpdate.forEach(pendingObject => {\n const status: UpdateStatusInternal =\n (pendingObject.status as UpdateStatus) ?? \"pending\";\n\n this.objectsStatusMap.set(pendingObject.id, status);\n if (status === \"updated\") {\n this.alreadyUpdatedObjectsIdsSet.add(pendingObject.id);\n }\n });\n this.pendingAndIgnored.ignoredObjects.forEach(ignoredObject => {\n const status: UpdateStatusInternal =\n (ignoredObject.status as UpdateStatus) ?? \"ignored\";\n this.objectsStatusMap.set(ignoredObject.id, status);\n });\n };\n\n #loadData = async (forceLoad: boolean = false): Promise<void> => {\n const filters: UpdateFiltersData = {\n search: this.searchValue,\n type: this.selectedType,\n kbProperties: this.kbPropertiesChecked,\n action: this.selectedAction\n };\n\n try {\n this.loading = true;\n this.objectsMessagesDataMap.clear();\n\n this.pendingAndIgnored = await this.loadCallback(filters, forceLoad);\n this.#setInitialObjectsStatus();\n\n // Is is required to mark/check all objects after loadCallback.\n this.#markPendingObjects();\n } catch (error) {\n // Error handling for update operation\n } finally {\n this.loading = false;\n }\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.alreadyUpdatedObjectsIdsSet.has(pendingId)) {\n this.markedObjectsSet = new Set([...this.markedObjectsSet, pendingId]);\n }\n }\n };\n\n #applyClientFilter = () => {\n // this.pendingObjectsAfterActionFilter = this.#filteredObjects(\n // this.pendingAndIgnored.pendingForUpdate\n // );\n this.pendingObjectsAfterActionFilter =\n this.pendingAndIgnored.pendingForUpdate;\n // this.ignoredObjectsAfterActionFilter = this.#filteredObjects(\n // this.pendingAndIgnored.ignoredObjects\n // );\n this.ignoredObjectsAfterActionFilter =\n this.pendingAndIgnored.ignoredObjects;\n };\n\n // #filteredObjects = (objects: ModifiedObject[]): ModifiedObject[] => {\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 // return filtered;\n // };\n\n #onRowContextMenuHandler =\n () => async (ev: CustomEvent<TabularGridRowContextMenuEvent>) => {\n ev.preventDefault();\n ev.stopPropagation();\n\n const selection = await this.#chGridPendingForUpdateEl.getSelectedRows();\n\n const selectedRowId = (\n await this.#chGridPendingForUpdateEl.getSelectedCell()\n ).rowId;\n\n const source: UpdateSourceType = this.pendingIdsSet.has(selectedRowId)\n ? \"pending\"\n : \"ignored\";\n\n let filteredSelection: string[] = [];\n // remove selected rows from the other source, if any.\n if (selection.length > 1 && source === \"pending\") {\n selection.forEach(async selectedRowId => {\n if (this.ignoredIdsSet.has(selectedRowId)) {\n await this.#chGridPendingForUpdateEl.selectRow(\n selectedRowId,\n false\n );\n } else {\n filteredSelection.push(selectedRowId);\n }\n });\n } else if (selection.length > 1 && source === \"ignored\") {\n selection.forEach(async selectedRowId => {\n if (this.pendingIdsSet.has(selectedRowId)) {\n await this.#chGridPendingForUpdateEl.selectRow(\n selectedRowId,\n false\n );\n } else {\n filteredSelection.push(selectedRowId);\n }\n });\n } else {\n filteredSelection = selection;\n }\n\n await this.contextMenuCallback(source, {\n selection: filteredSelection,\n clientX: ev.detail.clientX,\n clientY: ev.detail.clientY\n });\n };\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 #kbPropertiesChangedHandler = (\n event: ChCheckboxCustomEvent<any> | InputEvent\n ) => {\n this.kbPropertiesChecked = event.detail === CHECKBOX_CHECKED_VALUE;\n this.#loadData(true);\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.lastSynchronized) {\n dateType = \"dateString\";\n }\n\n this.pendingObjectsAfterActionFilter = [\n ...sortTabularGridColumn(\n e,\n this.pendingObjectsAfterActionFilter,\n dateType,\n objectProperty\n )\n ];\n this.ignoredObjectsAfterActionFilter = [\n ...sortTabularGridColumn(\n e,\n this.ignoredObjectsAfterActionFilter,\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.updating || this.loading || this.isUpdateDisabled;\n const gridIsEmpty =\n this.pendingObjectsAfterActionFilter.length === 0 &&\n this.ignoredObjectsAfterActionFilter.length === 0;\n\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n <header class=\"header spacing-body-inline spacing-body-block-start\">\n <div\n // header details\n class=\"header__detail header__detail-1\"\n >\n <p class=\"detail__heading-genexus-server subtitle-semi-bold-s\">\n {this.#componentLocale.commitDetail.title}\n </p>\n <div\n // genexus server\n class=\"detail__genexus-server field field-block\"\n >\n <span class={DETAIL_LABEL_CLASSES}>\n {this.#componentLocale.commitDetail.genexusServer}\n </span>\n <button\n class=\"detail__link body-regular-s\"\n onClick={this.openServerCallback}\n >\n {this.updateFrom ? this.updateFrom.serverUrl : \"\"}\n </button>\n </div>\n\n <div\n // knowledge base\n class=\"detail__knowledge-base field field-block\"\n >\n <span class={DETAIL_LABEL_CLASSES}>\n {this.#componentLocale.commitDetail.knowledgeBase}\n </span>\n <p class=\"body-regular-s\">\n {this.updateFrom ? this.updateFrom.kbName : \"\"}\n </p>\n </div>\n\n <div\n // version\n class=\"detail__version field field-block\"\n >\n <span class={DETAIL_LABEL_CLASSES}>\n {this.#componentLocale.commitDetail.version}\n </span>\n <p class=\"body-regular-s\">\n {this.updateFrom ? this.updateFrom.versionName : \"\"}\n </p>\n </div>\n\n <div\n // last full update\n class=\"detail__last-full-update field field-block\"\n >\n <span class={DETAIL_LABEL_CLASSES}>\n {this.#componentLocale.commitDetail.lastFullUpdate}\n </span>\n <p class=\"body-regular-s\">\n {formatDate(this.updateFrom.lastFullUpdate)}\n </p>\n </div>\n </div>\n </header>\n\n <div class=\"filter-container spacing-body-inline\">\n <div class=\"filter\">\n <ch-edit\n // search\n class=\"input filter__search\"\n disabled={disableControls}\n startImgSrc={SEARCH_ICON}\n accessibleName={\n this.#componentLocale.filter.searchAccessibleName\n }\n placeholder={this.#componentLocale.filter.searchPlaceholder}\n type=\"search\"\n onInput={this.#searchInputHandler}\n debounce={config.inputDebounce}\n ></ch-edit>\n\n <ch-combo-box-render\n // types\n class=\"combo-box filter__types\"\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 // actions\n class=\"combo-box filter__actions\"\n disabled={disableControls}\n model={this.#actionsComboBoxModel}\n value={this.selectedAction}\n onInput={this.#actionChangedHandler}\n accessibleName={\n this.#componentLocale.filter.actionAccesibleName\n }\n placeholder={this.#componentLocale.filter.actionPlaceholder}\n ></ch-combo-box-render>\n\n <ch-checkbox\n // kb properties\n class=\"checkbox filter__kb-properties\"\n caption={this.#componentLocale.filter.kbProperties}\n checkedValue={CHECKBOX_CHECKED_VALUE}\n value={CHECKBOX_UNCHECKED_VALUE}\n onInput={this.#kbPropertiesChangedHandler}\n disabled={disableControls}\n />\n\n <div class=\"buttons-spacer filter__buttons\">\n <button\n // reload button\n class=\"button-secondary button-icon-and-text\"\n disabled={disableControls}\n onClick={this.#reloadClickedHandler}\n >\n <ch-image class=\"icon-md\" src={REFRESH_ICON}></ch-image>\n {this.#componentLocale.filter.reload}\n </button>\n <button\n // update button\n class=\"button-primary button-update\"\n disabled={!this.atLeastOneObjectIsChecked || disableControls}\n onClick={this.#updateCheckedClickedHandler}\n >\n {this.#componentLocale.filter.update}\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"main spacing-body\">\n {!this.loading ? (\n <ch-tabular-grid\n class={{\n \"tabular-grid\": true,\n \"objects-tabular-grid\": true,\n \"disabled-custom-selector\": this.updating,\n \"empty-result\": gridIsEmpty\n }}\n keyboardNavigationMode=\"focus\"\n rowSelectionMode=\"multiple\"\n onRowMarkingChanged={this.#rowMarkingChangedHandler}\n onRowContextMenu={this.#onRowContextMenuHandler()}\n ref={(el: HTMLChTabularGridElement) =>\n (this.#chGridPendingForUpdateEl = el)\n }\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.name}\n columnName={this.#componentLocale.objects.name}\n columnType=\"rich\"\n richRowSelector={!this.allPendingAreUpdated}\n richRowSelectorMode=\"mark\"\n settingable={false}\n sortable={true}\n onColumnSortChanged={this.#sortTabularGridColumnCallback}\n onColumnSelectorClicked={\n this.#columnSelectorClickedCallback\n }\n size=\"max-content\"\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.type}\n columnName={this.#componentLocale.objects.type}\n settingable={false}\n sortable={true}\n onColumnSortChanged={this.#sortTabularGridColumnCallback}\n size=\"max-content\"\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.description}\n columnName={this.#componentLocale.objects.description}\n settingable={false}\n sortable={true}\n onColumnSortChanged={this.#sortTabularGridColumnCallback}\n size={config.tabularGrid.colSize.description}\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.modifiedOn}\n columnName={this.#componentLocale.objects.modifiedOn}\n settingable={false}\n sortable={true}\n onColumnSortChanged={this.#sortTabularGridColumnCallback}\n size=\"max-content\"\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.action}\n columnName={this.#componentLocale.objects.action}\n settingable={false}\n sortable={false}\n size=\"max-content\"\n />\n <ch-tabular-grid-column\n // size of this column should the enough for the largest pill, and no more.\n // this prevents layout shifts when pills state changes.\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.status}\n columnName={this.#componentLocale.objects.status}\n settingable={false}\n sortable={false}\n size=\"100px\"\n />\n </ch-tabular-grid-columnset>\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.pending}\n </ch-tabular-grid-rowset-legend>\n {this.#renderRows(\"pending\")}\n </ch-tabular-grid-rowset>,\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-legend class=\"tabular-grid-rowset-legend\">\n {this.#componentLocale.objects.ignored}\n </ch-tabular-grid-rowset-legend>\n {this.#renderRows(\"ignored\")}\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={FILTER_ICON}\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\n// - - - - - - - - - - - - -\n// Types from Update\n// - - - - - - - - - - - - -\n\nexport type ContextMenuCallback = (\n source: UpdateSourceType,\n contextMenuInfo: ContextMenuInfo\n) => Promise<void>;\n\nexport type PendingItemsCheckedCallback = (\n pendingItemsCheckedState: ItemsCheckedState\n) => Promise<ItemsCheckedResult | undefined>;\n\nexport type UpdateSourceType = \"pending\" | \"ignored\";\n\nexport interface UpdateFromData {\n serverUrl: string;\n kbName: string;\n versionName: string;\n lastFullUpdate: Date;\n}\n\nexport interface MessageData {\n type: \"info\" | \"success\" | \"warning\" | \"error\";\n text: string;\n}\n"],"mappings":"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"}