@digital-realty/ui-launchpad 11.0.3 → 12.0.1-IXUAT-vite.529166

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/dist/lib/action-required.d.ts +43 -0
  2. package/dist/lib/action-required.d.ts.map +1 -0
  3. package/dist/lib/action-required.js +208 -0
  4. package/dist/lib/action-required.js.map +1 -0
  5. package/dist/lib/app-widgets.d.ts +2 -0
  6. package/dist/lib/app-widgets.d.ts.map +1 -0
  7. package/dist/lib/app-widgets.js +304 -0
  8. package/dist/lib/app-widgets.js.map +1 -0
  9. package/dist/lib/constants/app-constants.d.ts +49 -0
  10. package/dist/lib/constants/app-constants.d.ts.map +1 -0
  11. package/dist/lib/constants/app-constants.js +74 -0
  12. package/dist/lib/constants/app-constants.js.map +1 -0
  13. package/dist/lib/constants/knowledgebase-static-data.d.ts +134 -0
  14. package/dist/lib/constants/knowledgebase-static-data.d.ts.map +1 -0
  15. package/dist/lib/constants/knowledgebase-static-data.js +145 -0
  16. package/dist/lib/constants/knowledgebase-static-data.js.map +1 -0
  17. package/dist/lib/contact-us/api-client.d.ts +3 -0
  18. package/dist/lib/contact-us/api-client.d.ts.map +1 -0
  19. package/dist/lib/contact-us/api-client.js +17 -0
  20. package/dist/lib/contact-us/api-client.js.map +1 -0
  21. package/dist/lib/contact-us/contact-us-form.d.ts +28 -0
  22. package/dist/lib/contact-us/contact-us-form.d.ts.map +1 -0
  23. package/dist/lib/contact-us/contact-us-form.js +240 -0
  24. package/dist/lib/contact-us/contact-us-form.js.map +1 -0
  25. package/dist/lib/contact-us/contact-us-result.d.ts +15 -0
  26. package/dist/lib/contact-us/contact-us-result.d.ts.map +1 -0
  27. package/dist/lib/contact-us/contact-us-result.js +103 -0
  28. package/dist/lib/contact-us/contact-us-result.js.map +1 -0
  29. package/dist/lib/contact-us/models.d.ts +11 -0
  30. package/dist/lib/contact-us/models.d.ts.map +1 -0
  31. package/dist/lib/contact-us/models.js +2 -0
  32. package/dist/lib/contact-us/models.js.map +1 -0
  33. package/dist/lib/enums/api-source-enum.d.ts +6 -0
  34. package/dist/lib/enums/api-source-enum.d.ts.map +1 -0
  35. package/dist/lib/enums/api-source-enum.js +8 -0
  36. package/dist/lib/enums/api-source-enum.js.map +1 -0
  37. package/dist/lib/enums/form-status-enum.d.ts +8 -0
  38. package/dist/lib/enums/form-status-enum.d.ts.map +1 -0
  39. package/dist/lib/enums/form-status-enum.js +10 -0
  40. package/dist/lib/enums/form-status-enum.js.map +1 -0
  41. package/dist/lib/enums/permissions-enum.d.ts +8 -0
  42. package/dist/lib/enums/permissions-enum.d.ts.map +1 -0
  43. package/dist/lib/enums/permissions-enum.js +10 -0
  44. package/dist/lib/enums/permissions-enum.js.map +1 -0
  45. package/dist/lib/helpers/config-helper.d.ts +21 -0
  46. package/dist/lib/helpers/config-helper.d.ts.map +1 -0
  47. package/dist/lib/helpers/config-helper.js +9 -0
  48. package/dist/lib/helpers/config-helper.js.map +1 -0
  49. package/dist/lib/helpers/permissions-helper.d.ts +3 -0
  50. package/dist/lib/helpers/permissions-helper.d.ts.map +1 -0
  51. package/dist/lib/helpers/permissions-helper.js +15 -0
  52. package/dist/lib/helpers/permissions-helper.js.map +1 -0
  53. package/dist/lib/helpers/ticket-type-mapping-helper.d.ts +4 -0
  54. package/dist/lib/helpers/ticket-type-mapping-helper.d.ts.map +1 -0
  55. package/dist/lib/helpers/ticket-type-mapping-helper.js +64 -0
  56. package/dist/lib/helpers/ticket-type-mapping-helper.js.map +1 -0
  57. package/dist/lib/icons/icons.d.ts +3 -0
  58. package/dist/lib/icons/icons.d.ts.map +1 -0
  59. package/dist/lib/icons/icons.js +8 -0
  60. package/dist/lib/icons/icons.js.map +1 -0
  61. package/dist/lib/index.d.ts +5 -0
  62. package/dist/lib/index.d.ts.map +1 -0
  63. package/dist/lib/index.js +5 -0
  64. package/dist/lib/index.js.map +1 -0
  65. package/dist/lib/ix-launchpad.d.ts +79 -0
  66. package/dist/lib/ix-launchpad.d.ts.map +1 -0
  67. package/dist/lib/ix-launchpad.js +353 -0
  68. package/dist/lib/ix-launchpad.js.map +1 -0
  69. package/dist/lib/launchpad/api-client.d.ts +41 -0
  70. package/dist/lib/launchpad/api-client.d.ts.map +1 -0
  71. package/dist/lib/launchpad/api-client.js +363 -0
  72. package/dist/lib/launchpad/api-client.js.map +1 -0
  73. package/dist/lib/launchpad/api-constants.d.ts +37 -0
  74. package/dist/lib/launchpad/api-constants.d.ts.map +1 -0
  75. package/dist/lib/launchpad/api-constants.js +36 -0
  76. package/dist/lib/launchpad/api-constants.js.map +1 -0
  77. package/dist/lib/launchpad/auth.d.ts +2 -0
  78. package/dist/lib/launchpad/auth.d.ts.map +1 -0
  79. package/dist/lib/launchpad/auth.js +32 -0
  80. package/dist/lib/launchpad/auth.js.map +1 -0
  81. package/dist/lib/launchpad/comments-tooltip/comments-tooltip.d.ts +2 -0
  82. package/dist/lib/launchpad/comments-tooltip/comments-tooltip.d.ts.map +1 -0
  83. package/dist/lib/launchpad/comments-tooltip/comments-tooltip.js +69 -0
  84. package/dist/lib/launchpad/comments-tooltip/comments-tooltip.js.map +1 -0
  85. package/dist/lib/launchpad/comments-tooltip/ticket-update-comments.d.ts +2 -0
  86. package/dist/lib/launchpad/comments-tooltip/ticket-update-comments.d.ts.map +1 -0
  87. package/dist/lib/launchpad/comments-tooltip/ticket-update-comments.js +134 -0
  88. package/dist/lib/launchpad/comments-tooltip/ticket-update-comments.js.map +1 -0
  89. package/dist/lib/launchpad/model.d.ts +43 -0
  90. package/dist/lib/launchpad/model.d.ts.map +1 -0
  91. package/dist/lib/launchpad/model.js +347 -0
  92. package/dist/lib/launchpad/model.js.map +1 -0
  93. package/dist/lib/register.d.ts +2 -0
  94. package/dist/lib/register.d.ts.map +1 -0
  95. package/dist/lib/register.js +8 -0
  96. package/dist/lib/register.js.map +1 -0
  97. package/dist/lib/routes/app-routing.d.ts +12 -0
  98. package/dist/lib/routes/app-routing.d.ts.map +1 -0
  99. package/dist/lib/routes/app-routing.js +35 -0
  100. package/dist/lib/routes/app-routing.js.map +1 -0
  101. package/dist/lib/routes/routes.d.ts +9 -0
  102. package/dist/lib/routes/routes.d.ts.map +1 -0
  103. package/dist/lib/routes/routes.js +11 -0
  104. package/dist/lib/routes/routes.js.map +1 -0
  105. package/dist/lib/styles/launchpad-styles.d.ts +2 -0
  106. package/dist/lib/styles/launchpad-styles.d.ts.map +1 -0
  107. package/dist/lib/styles/launchpad-styles.js +97 -0
  108. package/dist/lib/styles/launchpad-styles.js.map +1 -0
  109. package/dist/lib/styles/styles.d.ts +2 -0
  110. package/dist/lib/styles/styles.d.ts.map +1 -0
  111. package/dist/lib/styles/styles.js +4 -0
  112. package/dist/lib/styles/styles.js.map +1 -0
  113. package/dist/lib/ticket-updates.d.ts +43 -0
  114. package/dist/lib/ticket-updates.d.ts.map +1 -0
  115. package/dist/lib/ticket-updates.js +209 -0
  116. package/dist/lib/ticket-updates.js.map +1 -0
  117. package/dist/lib/tw.d.ts +2 -0
  118. package/dist/lib/tw.d.ts.map +1 -0
  119. package/dist/lib/tw.js +865 -0
  120. package/dist/lib/tw.js.map +1 -0
  121. package/dist/lib/types.d.ts +19 -0
  122. package/dist/lib/types.d.ts.map +1 -0
  123. package/dist/lib/types.js +7 -0
  124. package/dist/lib/types.js.map +1 -0
  125. package/dist/lib/ui-launchpad.d.ts +7 -0
  126. package/dist/lib/ui-launchpad.d.ts.map +1 -0
  127. package/dist/lib/ui-launchpad.entry.d.ts +2 -0
  128. package/dist/lib/ui-launchpad.entry.d.ts.map +1 -0
  129. package/dist/lib/ui-launchpad.entry.js +2 -0
  130. package/dist/lib/ui-launchpad.entry.js.map +1 -0
  131. package/dist/lib/ui-launchpad.js +16 -0
  132. package/dist/lib/ui-launchpad.js.map +1 -0
  133. package/dist/lib/utils/testIdTransform.d.ts +2 -0
  134. package/dist/lib/utils/testIdTransform.d.ts.map +1 -0
  135. package/dist/lib/utils/testIdTransform.js +2 -0
  136. package/dist/lib/utils/testIdTransform.js.map +1 -0
  137. package/dist/sw.js +1 -1
  138. package/dist/sw.js.map +1 -1
  139. package/dist/ui-launchpad.js +6 -6
  140. package/package.json +25 -3
@@ -0,0 +1,43 @@
1
+ import { LitElement, nothing } from 'lit';
2
+ import '@digital-realty/ix-widget/ix-status-counter-group.js';
3
+ import '@digital-realty/ix-button/ix-button.js';
4
+ import '@digital-realty/ix-widget/ix-contacts.js';
5
+ import '@digital-realty/ix-widget/ix-info-card.js';
6
+ import '@digital-realty/ix-widget/ix-news-feed.js';
7
+ import '@digital-realty/ix-widget/ix-table-data.js';
8
+ import '@digital-realty/ix-widget/ix-nav-item.js';
9
+ import '@digital-realty/ix-widget/ix-nav-list.js';
10
+ import '@digital-realty/ix-dialog/ix-dialog.js';
11
+ import { TabId, Tab, TableRow } from './types.js';
12
+ export declare class LpActionRequired extends LitElement {
13
+ static styles: import("lit").CSSResult[];
14
+ serviceTickets: TableRow;
15
+ orders: TableRow;
16
+ isLoading: boolean;
17
+ isFetching: boolean;
18
+ activeTab: TabId;
19
+ tabs: Tab[];
20
+ permissions: {
21
+ [key: string]: boolean;
22
+ };
23
+ getServiceTickets: (noOfRows?: number, page?: number) => {
24
+ rows: never[];
25
+ totalCount: number;
26
+ } | Promise<{
27
+ rows: any;
28
+ totalCount: any;
29
+ }>;
30
+ getOrders: (noOfRows?: number, page?: number) => {
31
+ rows: never[];
32
+ totalCount: number;
33
+ } | Promise<{
34
+ rows: any;
35
+ totalCount: any;
36
+ }>;
37
+ renderTableNav: () => import("lit-html").TemplateResult<1> | typeof nothing;
38
+ renderTables(): typeof nothing | import("lit-html").TemplateResult<1 | 2 | 3>[];
39
+ ticketSelect(row: any): void;
40
+ firstUpdated(): Promise<void>;
41
+ render(): import("lit-html").TemplateResult<1>;
42
+ }
43
+ //# sourceMappingURL=action-required.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-required.d.ts","sourceRoot":"","sources":["../../src/action-required.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAQ,OAAO,EAAE,MAAM,KAAK,CAAC;AAOhD,OAAO,sDAAsD,CAAC;AAC9D,OAAO,wCAAwC,CAAC;AAChD,OAAO,0CAA0C,CAAC;AAClD,OAAO,2CAA2C,CAAC;AACnD,OAAO,2CAA2C,CAAC;AACnD,OAAO,4CAA4C,CAAC;AACpD,OAAO,0CAA0C,CAAC;AAClD,OAAO,0CAA0C,CAAC;AAClD,OAAO,wCAAwC,CAAC;AAQhD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAElD,qBACa,gBAAiB,SAAQ,UAAU;IAC9C,MAAM,CAAC,MAAM,4BAAc;IAElB,cAAc,EAAE,QAAQ,CAAgB;IAExC,MAAM,EAAE,QAAQ,CAAgB;IAEhC,SAAS,EAAE,OAAO,CAAQ;IAE1B,UAAU,EAAE,OAAO,CAAS;IAE5B,SAAS,EAAE,KAAK,CAAyB;IAElD,IAAI,EAAE,GAAG,EAAE,CAwFT;IAE0B,WAAW,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAGjE;IAEF,iBAAiB;;;;;;OAMf;IAEF,SAAS;;;;;;OAUP;IAEF,cAAc,8DAmBZ;IAEF,YAAY;IAWZ,YAAY,CAAC,GAAG,EAAE,GAAG;IAuBf,YAAY;IAsBlB,MAAM;CAGP"}
@@ -0,0 +1,208 @@
1
+ import { __decorate } from "tslib";
2
+ /* eslint-disable no-case-declarations */
3
+ /* eslint-disable camelcase */
4
+ import { LitElement, html, nothing } from 'lit';
5
+ import { customElement, state, property } from 'lit/decorators.js';
6
+ import { pendingTicketColumns, ticketPaths, requestTypeHasSecondaryPath, } from './launchpad/model.js';
7
+ import '@digital-realty/ix-widget/ix-status-counter-group.js';
8
+ import '@digital-realty/ix-button/ix-button.js';
9
+ import '@digital-realty/ix-widget/ix-contacts.js';
10
+ import '@digital-realty/ix-widget/ix-info-card.js';
11
+ import '@digital-realty/ix-widget/ix-news-feed.js';
12
+ import '@digital-realty/ix-widget/ix-table-data.js';
13
+ import '@digital-realty/ix-widget/ix-nav-item.js';
14
+ import '@digital-realty/ix-widget/ix-nav-list.js';
15
+ import '@digital-realty/ix-dialog/ix-dialog.js';
16
+ import { TWStyles } from './tw.js';
17
+ import { getYourActionRequiredServiceTicketRows, getYourActionRequiredOrderRows, tableDefault, } from './launchpad/api-client.js';
18
+ import { ApiSourceEnum } from './enums/api-source-enum.js';
19
+ import { TabId } from './types.js';
20
+ let LpActionRequired = class LpActionRequired extends LitElement {
21
+ constructor() {
22
+ super(...arguments);
23
+ this.serviceTickets = tableDefault;
24
+ this.orders = tableDefault;
25
+ this.isLoading = true;
26
+ this.isFetching = false;
27
+ this.activeTab = TabId.SERVICE_TICKETS;
28
+ this.tabs = [
29
+ {
30
+ id: TabId.SERVICE_TICKETS,
31
+ text: 'Service Tickets',
32
+ selected: () => this.activeTab === TabId.SERVICE_TICKETS,
33
+ onClick: () => {
34
+ this.activeTab = TabId.SERVICE_TICKETS;
35
+ },
36
+ rowCount: this.serviceTickets.totalCount,
37
+ shouldRender: () => this.permissions.serviceTickets,
38
+ grid: () => html `<ix-table-data
39
+ .columns=${pendingTicketColumns(this.ticketSelect)}
40
+ .rows=${this.serviceTickets.rows}
41
+ header="Your Action Required"
42
+ total-count=${this.serviceTickets.totalCount}
43
+ ?disabled=${this.serviceTickets.totalCount === 0}
44
+ ?hidden=${!this.tabs[0].selected()}
45
+ emptyDescription="No Pending Actions for Service Tickets"
46
+ ?isLoading=${this.isFetching}
47
+ data-testid="lp-serviceTickets"
48
+ showViewAllButtonOnEmpty
49
+ href=${`/service-management/?status_equals=Pending+Approval&permission_privilege=Approve`}
50
+ view-all-text="View all service tickets"
51
+ footer-view-all
52
+ @change=${async (e) => {
53
+ const { page, pageSize } = e.detail;
54
+ this.isFetching = true;
55
+ this.serviceTickets = await this.getServiceTickets(pageSize, page);
56
+ this.isFetching = false;
57
+ }}
58
+ @show-view-more=${async () => {
59
+ this.isFetching = true;
60
+ this.serviceTickets = await this.getServiceTickets(10);
61
+ this.isFetching = false;
62
+ }}
63
+ >
64
+ ${this.renderTableNav()}
65
+ </ix-table-data>`,
66
+ },
67
+ {
68
+ id: TabId.ORDERS,
69
+ text: 'Orders',
70
+ selected: () => this.activeTab === TabId.ORDERS,
71
+ onClick: () => {
72
+ this.activeTab = TabId.ORDERS;
73
+ },
74
+ rowCount: this.orders.totalCount,
75
+ shouldRender: () => this.permissions.orders,
76
+ grid: () => html `<ix-table-data
77
+ .columns=${pendingTicketColumns(this.ticketSelect)}
78
+ .rows=${this.orders.rows}
79
+ header="Your Action Required"
80
+ ?disabled=${this.orders.totalCount === 0}
81
+ ?hidden=${!this.tabs[1].selected()}
82
+ total-count=${this.orders.totalCount}
83
+ emptyDescription="No Pending Actions for Orders"
84
+ showViewAllButtonOnEmpty
85
+ href="/order-management/open-orders"
86
+ @change=${async (e) => {
87
+ const { page, pageSize } = e.detail;
88
+ this.isFetching = true;
89
+ this.orders = await this.getOrders(pageSize, page);
90
+ this.isFetching = false;
91
+ }}
92
+ view-all-text="View all orders"
93
+ data-testid="lp-orders"
94
+ ?isLoading=${this.isFetching}
95
+ @show-view-more=${async () => {
96
+ this.isFetching = true;
97
+ this.orders = await this.getOrders(10);
98
+ this.isFetching = false;
99
+ }}
100
+ footer-view-all
101
+ >
102
+ ${this.renderTableNav()}
103
+ </ix-table-data>`,
104
+ },
105
+ ];
106
+ this.permissions = {
107
+ orders: false,
108
+ serviceTickets: false,
109
+ };
110
+ this.getServiceTickets = (noOfRows = 5, page = 1) => {
111
+ if (this.permissions.serviceTickets) {
112
+ return getYourActionRequiredServiceTicketRows(noOfRows, page);
113
+ }
114
+ return tableDefault;
115
+ };
116
+ this.getOrders = (noOfRows = 5, page = 1) => {
117
+ if (this.permissions.orders) {
118
+ return getYourActionRequiredOrderRows(this.permissions.gomTicketTypes, noOfRows, page);
119
+ }
120
+ return tableDefault;
121
+ };
122
+ this.renderTableNav = () => {
123
+ const tabs = this.tabs.filter((tab) => tab.shouldRender());
124
+ if (tabs.length <= 1) {
125
+ return nothing;
126
+ }
127
+ return html `
128
+ <div slot="tabs">
129
+ <ix-grid-nav
130
+ class="action-required-grid-nav"
131
+ .buttons=${tabs.map((tab) => ({
132
+ text: tab.text,
133
+ selected: tab.selected(),
134
+ onClick: tab.onClick,
135
+ }))}
136
+ ></ix-grid-nav>
137
+ </div>
138
+ `;
139
+ };
140
+ }
141
+ renderTables() {
142
+ const enabledTabs = this.tabs.filter((tab) => tab.shouldRender());
143
+ if (enabledTabs.length === 0) {
144
+ return nothing;
145
+ }
146
+ return enabledTabs.map(tab => tab.grid());
147
+ }
148
+ // eslint-disable-next-line class-methods-use-this
149
+ ticketSelect(row) {
150
+ let destination = '';
151
+ switch (row.source) {
152
+ case ApiSourceEnum.ServiceManagement:
153
+ const { ticket_id, ticket_type, request_type } = row;
154
+ const requestTypePath = requestTypeHasSecondaryPath[request_type]
155
+ ? `/${ticketPaths[request_type]}`
156
+ : '';
157
+ destination = `/${ticketPaths.base}/${ticketPaths[ticket_type]}${requestTypePath}/${ticket_id}`;
158
+ break;
159
+ case ApiSourceEnum.OrderManagement:
160
+ destination = `/order-management/order-details/${row.ticket_id}`;
161
+ break;
162
+ default:
163
+ destination = '/order-management/order-details';
164
+ }
165
+ window.location.href = destination;
166
+ }
167
+ async firstUpdated() {
168
+ const [serviceTickets, orders] = await Promise.all([
169
+ this.getServiceTickets(),
170
+ this.getOrders(),
171
+ ]);
172
+ this.serviceTickets = serviceTickets;
173
+ this.orders = orders;
174
+ let defaultTabIndex = this.tabs.findIndex((tab) => tab.shouldRender() && tab.rowCount > 0);
175
+ if (defaultTabIndex === -1) {
176
+ defaultTabIndex = this.tabs.findIndex((tab) => tab.shouldRender());
177
+ }
178
+ this.activeTab = this.tabs[defaultTabIndex > -1 ? defaultTabIndex : 0].id;
179
+ this.isLoading = false;
180
+ }
181
+ render() {
182
+ return html ` ${this.isLoading ? nothing : html ` ${this.renderTables()} `} `;
183
+ }
184
+ };
185
+ LpActionRequired.styles = [TWStyles];
186
+ __decorate([
187
+ state()
188
+ ], LpActionRequired.prototype, "serviceTickets", void 0);
189
+ __decorate([
190
+ state()
191
+ ], LpActionRequired.prototype, "orders", void 0);
192
+ __decorate([
193
+ state()
194
+ ], LpActionRequired.prototype, "isLoading", void 0);
195
+ __decorate([
196
+ state()
197
+ ], LpActionRequired.prototype, "isFetching", void 0);
198
+ __decorate([
199
+ state()
200
+ ], LpActionRequired.prototype, "activeTab", void 0);
201
+ __decorate([
202
+ property({ type: Object })
203
+ ], LpActionRequired.prototype, "permissions", void 0);
204
+ LpActionRequired = __decorate([
205
+ customElement('lp-action-required')
206
+ ], LpActionRequired);
207
+ export { LpActionRequired };
208
+ //# sourceMappingURL=action-required.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-required.js","sourceRoot":"","sources":["../../src/action-required.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-case-declarations */\n/* eslint-disable camelcase */\nimport { LitElement, html, nothing } from 'lit';\nimport { customElement, state, property } from 'lit/decorators.js';\nimport {\n pendingTicketColumns,\n ticketPaths,\n requestTypeHasSecondaryPath,\n} from './launchpad/model.js';\nimport '@digital-realty/ix-widget/ix-status-counter-group.js';\nimport '@digital-realty/ix-button/ix-button.js';\nimport '@digital-realty/ix-widget/ix-contacts.js';\nimport '@digital-realty/ix-widget/ix-info-card.js';\nimport '@digital-realty/ix-widget/ix-news-feed.js';\nimport '@digital-realty/ix-widget/ix-table-data.js';\nimport '@digital-realty/ix-widget/ix-nav-item.js';\nimport '@digital-realty/ix-widget/ix-nav-list.js';\nimport '@digital-realty/ix-dialog/ix-dialog.js';\nimport { TWStyles } from './tw.js';\nimport {\n getYourActionRequiredServiceTicketRows,\n getYourActionRequiredOrderRows,\n tableDefault,\n} from './launchpad/api-client.js';\nimport { ApiSourceEnum } from './enums/api-source-enum.js';\nimport { TabId, Tab, TableRow } from './types.js';\n\n@customElement('lp-action-required')\nexport class LpActionRequired extends LitElement {\n static styles = [TWStyles];\n\n @state() serviceTickets: TableRow = tableDefault;\n\n @state() orders: TableRow = tableDefault;\n\n @state() isLoading: boolean = true;\n\n @state() isFetching: boolean = false;\n\n @state() activeTab: TabId = TabId.SERVICE_TICKETS;\n\n tabs: Tab[] = [\n {\n id: TabId.SERVICE_TICKETS,\n text: 'Service Tickets',\n selected: () => this.activeTab === TabId.SERVICE_TICKETS,\n onClick: () => {\n this.activeTab = TabId.SERVICE_TICKETS;\n },\n rowCount: this.serviceTickets.totalCount,\n shouldRender: () => this.permissions.serviceTickets,\n grid: () => html`<ix-table-data\n .columns=${pendingTicketColumns(this.ticketSelect)}\n .rows=${this.serviceTickets.rows}\n header=\"Your Action Required\"\n total-count=${this.serviceTickets.totalCount}\n ?disabled=${this.serviceTickets.totalCount === 0}\n ?hidden=${!this.tabs[0].selected()}\n emptyDescription=\"No Pending Actions for Service Tickets\"\n ?isLoading=${this.isFetching}\n data-testid=\"lp-serviceTickets\"\n showViewAllButtonOnEmpty\n href=${`/service-management/?status_equals=Pending+Approval&permission_privilege=Approve`}\n view-all-text=\"View all service tickets\"\n footer-view-all\n @change=${async (e: {\n detail: {\n page: number;\n pageSize: number;\n };\n }) => {\n const { page, pageSize } = e.detail;\n this.isFetching = true;\n this.serviceTickets = await this.getServiceTickets(pageSize, page);\n this.isFetching = false;\n }}\n @show-view-more=${async () => {\n this.isFetching = true;\n this.serviceTickets = await this.getServiceTickets(10);\n this.isFetching = false;\n }}\n >\n ${this.renderTableNav()}\n </ix-table-data>`,\n },\n {\n id: TabId.ORDERS,\n text: 'Orders',\n selected: () => this.activeTab === TabId.ORDERS,\n onClick: () => {\n this.activeTab = TabId.ORDERS;\n },\n rowCount: this.orders.totalCount,\n shouldRender: () => this.permissions.orders,\n grid: () =>\n html`<ix-table-data\n .columns=${pendingTicketColumns(this.ticketSelect)}\n .rows=${this.orders.rows}\n header=\"Your Action Required\"\n ?disabled=${this.orders.totalCount === 0}\n ?hidden=${!this.tabs[1].selected()}\n total-count=${this.orders.totalCount}\n emptyDescription=\"No Pending Actions for Orders\"\n showViewAllButtonOnEmpty\n href=\"/order-management/open-orders\"\n @change=${async (e: {\n detail: {\n page: number;\n pageSize: number;\n };\n }) => {\n const { page, pageSize } = e.detail;\n this.isFetching = true;\n this.orders = await this.getOrders(pageSize, page);\n this.isFetching = false;\n }}\n view-all-text=\"View all orders\"\n data-testid=\"lp-orders\"\n ?isLoading=${this.isFetching}\n @show-view-more=${async () => {\n this.isFetching = true;\n this.orders = await this.getOrders(10);\n this.isFetching = false;\n }}\n footer-view-all\n >\n ${this.renderTableNav()}\n </ix-table-data>`,\n },\n ];\n\n @property({ type: Object }) permissions: { [key: string]: boolean } = {\n orders: false,\n serviceTickets: false,\n };\n\n getServiceTickets = (noOfRows = 5, page = 1) => {\n if (this.permissions.serviceTickets) {\n return getYourActionRequiredServiceTicketRows(noOfRows, page);\n }\n\n return tableDefault;\n };\n\n getOrders = (noOfRows = 5, page = 1) => {\n if (this.permissions.orders) {\n return getYourActionRequiredOrderRows(\n this.permissions.gomTicketTypes,\n noOfRows,\n page\n );\n }\n\n return tableDefault;\n };\n\n renderTableNav = () => {\n const tabs = this.tabs.filter((tab: any) => tab.shouldRender());\n\n if (tabs.length <= 1) {\n return nothing;\n }\n\n return html`\n <div slot=\"tabs\">\n <ix-grid-nav\n class=\"action-required-grid-nav\"\n .buttons=${tabs.map((tab: any) => ({\n text: tab.text,\n selected: tab.selected(),\n onClick: tab.onClick,\n }))}\n ></ix-grid-nav>\n </div>\n `;\n };\n\n renderTables() {\n const enabledTabs = this.tabs.filter((tab: Tab) => tab.shouldRender());\n\n if (enabledTabs.length === 0) {\n return nothing;\n }\n\n return enabledTabs.map(tab => tab.grid());\n }\n\n // eslint-disable-next-line class-methods-use-this\n ticketSelect(row: any) {\n let destination = '';\n switch (row.source) {\n case ApiSourceEnum.ServiceManagement:\n const { ticket_id, ticket_type, request_type } = row;\n const requestTypePath = (requestTypeHasSecondaryPath as any)[\n request_type\n ]\n ? `/${(ticketPaths as any)[request_type]}`\n : '';\n destination = `/${ticketPaths.base}/${\n (ticketPaths as any)[ticket_type]\n }${requestTypePath}/${ticket_id}`;\n break;\n case ApiSourceEnum.OrderManagement:\n destination = `/order-management/order-details/${row.ticket_id}`;\n break;\n default:\n destination = '/order-management/order-details';\n }\n window.location.href = destination;\n }\n\n async firstUpdated() {\n const [serviceTickets, orders] = await Promise.all([\n this.getServiceTickets(),\n this.getOrders(),\n ]);\n\n this.serviceTickets = serviceTickets;\n this.orders = orders;\n\n let defaultTabIndex = this.tabs.findIndex(\n (tab: Tab) => tab.shouldRender() && tab.rowCount > 0\n );\n\n if (defaultTabIndex === -1) {\n defaultTabIndex = this.tabs.findIndex((tab: Tab) => tab.shouldRender());\n }\n\n this.activeTab = this.tabs[defaultTabIndex > -1 ? defaultTabIndex : 0].id;\n\n this.isLoading = false;\n }\n\n render() {\n return html` ${this.isLoading ? nothing : html` ${this.renderTables()} `} `;\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=app-widgets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-widgets.d.ts","sourceRoot":"","sources":["../../src/app-widgets.js"],"names":[],"mappings":""}
@@ -0,0 +1,304 @@
1
+ import { __decorate } from "tslib";
2
+ /* eslint-disable no-case-declarations */
3
+ /* eslint-disable class-methods-use-this */
4
+ /* eslint-disable camelcase */
5
+ import { LitElement, html, nothing } from 'lit';
6
+ import { state } from 'lit/decorators.js';
7
+ import { jwtDecode } from 'jwt-decode';
8
+ import './ix-launchpad.js';
9
+ import { authedUser } from './launchpad/auth.js';
10
+ import { getStatus, ticketColumns, pendingTicketColumns, ticketPaths, requestTypeHasSecondaryPath, navigation, } from './launchpad/model.js';
11
+ import { getMySitesCount, getUsersCount, getServiceTicketsCount, getOrderUpdateRows, getServiceTicketUpdateRows, getYourActionRequiredOrderRows, getYourActionRequiredServiceTicketRows, getPermissions, getDcimEnabledLocationCount, getActiveOrdersCount, getKnowledgeBase, getServiceTicketsPermissions, tableDefault, getValidGOMticketTypes, } from './launchpad/api-client.js';
12
+ import { KBAppName, registeredApps, SERVICE_MANAGEMENT, ORDER_MANAGEMENT, VISITOR_ACCESS, PERMANENT_BADGE, } from './constants/app-constants.js';
13
+ import { getConfig } from './helpers/config-helper.js';
14
+ const { ShowStaticKnowledgeBase: SHOW_STATIC_KNOWLEDGE_BASE, KnowledgeBaseLaunchpadVideoBase: KNOWLEDGE_BASE_LAUNCHPAD_VIDEO_BASE, IsInventoryManagementEnabled: IS_INVENTORY_MANAGEMENT_ENABLED, TrustedOrigins: TRUSTED_ORIGINS, } = getConfig();
15
+ import { KNOWLEDGEBASE_STATIC_DATA, KNOWLEDGEBASE_STATIC_CONTACTS, } from './constants/knowledgebase-static-data.js';
16
+ import './contact-us/contact-us-form.js';
17
+ import './launchpad/comments-tooltip/comments-tooltip.js';
18
+ import './launchpad/comments-tooltip/ticket-update-comments.js';
19
+ import '@digital-realty/ix-tooltip/ix-tooltip.js';
20
+ import { TWStyles } from './tw.js';
21
+ import { launchpadStyles } from './styles/launchpad-styles.js';
22
+ import { validatePermission } from './helpers/permissions-helper.js';
23
+ import { PrivilegeLevelEnum } from './enums/permissions-enum.js';
24
+ import { ApiSourceEnum } from './enums/api-source-enum.js';
25
+ const trustedOriginPatterns = TRUSTED_ORIGINS.split(',').map(pattern => new RegExp(pattern, 'i'));
26
+ class AppWidgets extends LitElement {
27
+ constructor() {
28
+ super();
29
+ this.newReleaseNotes = undefined;
30
+ this.isLoading = true;
31
+ this.getUsers = async () => {
32
+ const res = await getUsersCount();
33
+ this.statusCounts.USERS = res;
34
+ this.status = getStatus(this.permissions, this.statusCounts);
35
+ };
36
+ this.getMySites = async () => {
37
+ const res = await getMySitesCount();
38
+ this.statusCounts.MY_SITES = res;
39
+ this.status = getStatus(this.permissions, this.statusCounts);
40
+ };
41
+ this.getServiceTickets = async () => {
42
+ const res = await getServiceTicketsCount();
43
+ this.statusCounts.ACTIVE_TICKETS = res;
44
+ this.status = getStatus(this.permissions, this.statusCounts);
45
+ };
46
+ this.getDcimEnabledLocations = async () => {
47
+ const res = await getDcimEnabledLocationCount();
48
+ this.statusCounts.DCIM = res;
49
+ this.status = getStatus(this.permissions, this.statusCounts);
50
+ };
51
+ this.getActiveOrders = async () => {
52
+ const res = await getActiveOrdersCount();
53
+ this.statusCounts.ACTIVE_ORDERS = res;
54
+ this.status = getStatus(this.permissions, this.statusCounts);
55
+ };
56
+ this.getTicketUpdates = async (permissions) => {
57
+ const serviceTicketIsAuthorized = validatePermission(permissions, SERVICE_MANAGEMENT, PrivilegeLevelEnum.UPDATE);
58
+ const orderIsAuthorized = validatePermission(permissions, ORDER_MANAGEMENT, PrivilegeLevelEnum.CREATE);
59
+ const { rows: serviceTicketRows } = serviceTicketIsAuthorized
60
+ ? await getServiceTicketUpdateRows()
61
+ : tableDefault;
62
+ const { rows: orderRows } = orderIsAuthorized && IS_INVENTORY_MANAGEMENT_ENABLED
63
+ ? await getOrderUpdateRows(getValidGOMticketTypes(permissions))
64
+ : tableDefault;
65
+ const combinedRows = serviceTicketRows.concat(orderRows);
66
+ const sortedRows = combinedRows.length > 0
67
+ ? combinedRows
68
+ .sort((a, b) => new Date(b.updated_at) - new Date(a.updated_at))
69
+ .slice(0, 5)
70
+ : [];
71
+ this.ticketUpdates = {
72
+ ...this.ticketUpdates,
73
+ rows: sortedRows,
74
+ disabled: serviceTicketRows.length === 0 && orderRows.length === 0,
75
+ isAuthorizedToView: serviceTicketIsAuthorized || orderIsAuthorized,
76
+ };
77
+ };
78
+ this.getYourActionRequired = async (permissions) => {
79
+ const serviceTicketIsAuthorized = validatePermission(permissions, [VISITOR_ACCESS, PERMANENT_BADGE], PrivilegeLevelEnum.APPROVE);
80
+ const orderIsAuthorized = validatePermission(permissions, ORDER_MANAGEMENT, PrivilegeLevelEnum.CREATE);
81
+ const { rows: serviceTicketRows } = serviceTicketIsAuthorized
82
+ ? await getYourActionRequiredServiceTicketRows()
83
+ : tableDefault;
84
+ const { rows: orderRows } = orderIsAuthorized && IS_INVENTORY_MANAGEMENT_ENABLED
85
+ ? await getYourActionRequiredOrderRows(getValidGOMticketTypes(permissions))
86
+ : tableDefault;
87
+ const combinedRows = serviceTicketRows.concat(orderRows);
88
+ const sortedRows = combinedRows.length > 0
89
+ ? combinedRows
90
+ .sort((a, b) => new Date(b.updated_at) - new Date(a.updated_at))
91
+ .slice(0, 5)
92
+ : [];
93
+ this.yourActionRequired = {
94
+ ...this.yourActionRequired,
95
+ rows: sortedRows,
96
+ disabled: serviceTicketRows.length === 0 && orderRows.length === 0,
97
+ isAuthorizedToView: serviceTicketIsAuthorized || orderIsAuthorized,
98
+ };
99
+ };
100
+ this.getKnowledgeBase = async () => {
101
+ var _a;
102
+ if (SHOW_STATIC_KNOWLEDGE_BASE) {
103
+ this.news = KNOWLEDGEBASE_STATIC_DATA.whatsNews;
104
+ this.promotions = KNOWLEDGEBASE_STATIC_DATA.newsAndPromotions;
105
+ this.resources = KNOWLEDGEBASE_STATIC_DATA.resources;
106
+ }
107
+ else {
108
+ const res = await getKnowledgeBase();
109
+ this.news = res.whatsNews;
110
+ if (((_a = this.news) === null || _a === void 0 ? void 0 : _a.length) > 0) {
111
+ this.checkReleaseNotes(this.news[0]);
112
+ }
113
+ this.promotions = res.newsAndPromotions;
114
+ this.resources = res.resources;
115
+ }
116
+ };
117
+ this.status = getStatus();
118
+ this.statusCounts = {
119
+ USERS: undefined,
120
+ ACTIVE_ORDERS: undefined,
121
+ ACTIVE_TICKETS: undefined,
122
+ MY_SITES: undefined,
123
+ DCIM: undefined,
124
+ };
125
+ this.ticketUpdates = {
126
+ header: 'Ticket Updates',
127
+ href: `/service-management/?createdBy_equals=${authedUser === null || authedUser === void 0 ? void 0 : authedUser.userProfileName}&sort=updatedAt&order=desc`,
128
+ columns: ticketColumns(this.ticketSelect),
129
+ isAuthorizedToView: false,
130
+ };
131
+ this.yourActionRequired = {
132
+ header: 'Your Action Required',
133
+ href: '/service-management/?permission_privilege=Approve&status_equals=Pending+Approval',
134
+ columns: pendingTicketColumns(this.ticketSelect),
135
+ isAuthorizedToView: false,
136
+ };
137
+ this.permissions = {};
138
+ this.navItems = navigation(this.permissions, {});
139
+ }
140
+ checkReleaseNotes(newsItem) {
141
+ var _a, _b, _c;
142
+ const xAuth = localStorage.getItem('x-auth');
143
+ const { access_token } = JSON.parse(xAuth);
144
+ const { previous_login_date } = jwtDecode(access_token);
145
+ const previous_login_timestamp = (_a = new Date(previous_login_date)) === null || _a === void 0 ? void 0 : _a.getTime();
146
+ const { id, dateAdded, documents, uid } = newsItem;
147
+ if (localStorage.getItem('releaseNotesViewed') === String(id))
148
+ return;
149
+ const releaseDateTimestamp = (_b = new Date(dateAdded)) === null || _b === void 0 ? void 0 : _b.getTime();
150
+ const DAY = 24 * 60 * 60 * 1000;
151
+ /* if new release notes or last login date
152
+ are missing, don't show the release notes */
153
+ if (Number.isNaN(previous_login_timestamp) ||
154
+ Number.isNaN(releaseDateTimestamp) ||
155
+ previous_login_timestamp > releaseDateTimestamp + DAY)
156
+ return;
157
+ const href = ((_c = documents === null || documents === void 0 ? void 0 : documents[0]) === null || _c === void 0 ? void 0 : _c.url)
158
+ ? `${KNOWLEDGE_BASE_LAUNCHPAD_VIDEO_BASE}${documents[0].url}`
159
+ : `/knowledge-base/details/${uid}`;
160
+ this.newReleaseNotes = {
161
+ id,
162
+ title: 'New Release Updates!',
163
+ href,
164
+ description: `We have introduced new and improved functionality on the Global Portal
165
+ with our monthly release. Learn more by clicking on the link below or review it later in our What's New section!`,
166
+ };
167
+ }
168
+ dismissReleaseNotes() {
169
+ localStorage.setItem('releaseNotesViewed', this.newReleaseNotes.id);
170
+ this.newReleaseNotes = undefined;
171
+ }
172
+ firstUpdated() {
173
+ if (IS_INVENTORY_MANAGEMENT_ENABLED) {
174
+ this.getActiveOrders();
175
+ }
176
+ this.getUsers();
177
+ this.getMySites();
178
+ this.getServiceTickets();
179
+ this.getKnowledgeBase();
180
+ Promise.all([getPermissions(), getServiceTicketsPermissions()]).then(([permissions, serviceTicketsPermissions]) => {
181
+ this.permissions = permissions;
182
+ this.navItems = navigation(this.permissions, serviceTicketsPermissions);
183
+ this.getDcimEnabledLocations();
184
+ this.getTicketUpdates(this.permissions);
185
+ this.getYourActionRequired(this.permissions);
186
+ this.isLoading = false;
187
+ });
188
+ }
189
+ messageHandler(e) {
190
+ const { origin, data } = e;
191
+ const isTrusted = trustedOriginPatterns.some(rx => rx.test(origin));
192
+ if (!isTrusted) {
193
+ // eslint-disable-next-line no-console
194
+ console.warn('Rejected message from untrusted origin:', origin);
195
+ return;
196
+ }
197
+ if (data.knowledgeBaseURL) {
198
+ window.location.href = `${registeredApps[KBAppName].path}${data.knowledgeBaseURL}`;
199
+ }
200
+ }
201
+ connectedCallback() {
202
+ super.connectedCallback();
203
+ window.addEventListener('message', this.messageHandler);
204
+ }
205
+ disconnectedCallback() {
206
+ window.removeEventListener('message', this.messageHandler);
207
+ super.disconnectedCallback();
208
+ }
209
+ route(e) {
210
+ const { route } = e.detail;
211
+ if (route.startsWith('/')) {
212
+ window.location.href = route;
213
+ }
214
+ else {
215
+ const event = new CustomEvent(e.detail.route, {
216
+ bubbles: true,
217
+ composed: true,
218
+ detail: {
219
+ fromLaunchpad: true,
220
+ },
221
+ });
222
+ this.dispatchEvent(event);
223
+ }
224
+ }
225
+ ticketSelect(row) {
226
+ let destination = '';
227
+ switch (row.source) {
228
+ case ApiSourceEnum.ServiceManagement:
229
+ const { ticket_id, ticket_type, request_type } = row;
230
+ const requestTypePath = requestTypeHasSecondaryPath[request_type]
231
+ ? `/${ticketPaths[request_type]}`
232
+ : '';
233
+ destination = `/${ticketPaths.base}/${ticketPaths[ticket_type]}${requestTypePath}/${ticket_id}`;
234
+ break;
235
+ case ApiSourceEnum.OrderManagement:
236
+ destination = `/order-management/order-details/${row.ticket_id}`;
237
+ break;
238
+ default:
239
+ destination = '/order-management/order-details';
240
+ }
241
+ window.location.href = destination;
242
+ }
243
+ renderNewReleaseNotes() {
244
+ return html `<ix-dialog open>
245
+ <h3 slot="headline" class="dlr-text-heading">
246
+ ${this.newReleaseNotes.title}
247
+ </h3>
248
+ <p slot="content" class="md:w-[380px]">
249
+ ${this.newReleaseNotes.description}
250
+ </p>
251
+ <div slot="actions" class="px-2 pb-2 pt-6">
252
+ <ix-button @click=${this.dismissReleaseNotes} appearance="text">
253
+ Dismiss
254
+ </ix-button>
255
+ <ix-button
256
+ @click=${this.dismissReleaseNotes}
257
+ href=${this.newReleaseNotes.href}
258
+ target="_blank"
259
+ appearance="text"
260
+ >
261
+ Read More
262
+ </ix-button>
263
+ </div>
264
+ </ix-dialog>`;
265
+ }
266
+ render() {
267
+ return html `
268
+ <contact-us-form></contact-us-form>
269
+ ${this.newReleaseNotes ? this.renderNewReleaseNotes() : nothing}
270
+ ${this.isLoading
271
+ ? nothing
272
+ : html `
273
+ <ix-launchpad
274
+ class="mb-4 block"
275
+ api-permissions=${JSON.stringify(this.permissions)}
276
+ .status=${this.status}
277
+ .nav=${this.navItems}
278
+ .news=${this.news}
279
+ .promotions=${this.promotions}
280
+ .resources=${this.resources}
281
+ .contacts=${KNOWLEDGEBASE_STATIC_CONTACTS}
282
+ .updates=${this.ticketUpdates}
283
+ .actions=${this.yourActionRequired}
284
+ @route=${this.route}
285
+ ></ix-launchpad>
286
+ `}
287
+ <ix-tooltip></ix-tooltip>
288
+ `;
289
+ }
290
+ }
291
+ AppWidgets.styles = [TWStyles, launchpadStyles];
292
+ AppWidgets.properties = {
293
+ status: [],
294
+ ticketUpdates: {},
295
+ yourActionRequired: {},
296
+ };
297
+ __decorate([
298
+ state(Object)
299
+ ], AppWidgets.prototype, "newReleaseNotes", void 0);
300
+ __decorate([
301
+ state()
302
+ ], AppWidgets.prototype, "isLoading", void 0);
303
+ window.customElements.define('app-widgets', AppWidgets);
304
+ //# sourceMappingURL=app-widgets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-widgets.js","sourceRoot":"","sources":["../../src/app-widgets.js"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-case-declarations */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable camelcase */\nimport { LitElement, html, nothing } from 'lit';\nimport { state } from 'lit/decorators.js';\nimport { jwtDecode } from 'jwt-decode';\nimport './ix-launchpad.js';\nimport { authedUser } from './launchpad/auth.js';\nimport {\n getStatus,\n ticketColumns,\n pendingTicketColumns,\n ticketPaths,\n requestTypeHasSecondaryPath,\n navigation,\n} from './launchpad/model.js';\nimport {\n getMySitesCount,\n getUsersCount,\n getServiceTicketsCount,\n getOrderUpdateRows,\n getServiceTicketUpdateRows,\n getYourActionRequiredOrderRows,\n getYourActionRequiredServiceTicketRows,\n getPermissions,\n getDcimEnabledLocationCount,\n getActiveOrdersCount,\n getKnowledgeBase,\n getServiceTicketsPermissions,\n tableDefault,\n getValidGOMticketTypes,\n} from './launchpad/api-client.js';\nimport {\n KBAppName,\n registeredApps,\n SERVICE_MANAGEMENT,\n ORDER_MANAGEMENT,\n VISITOR_ACCESS,\n PERMANENT_BADGE,\n} from './constants/app-constants.js';\nimport { getConfig } from './helpers/config-helper.js';\n\nconst {\n ShowStaticKnowledgeBase: SHOW_STATIC_KNOWLEDGE_BASE,\n KnowledgeBaseLaunchpadVideoBase: KNOWLEDGE_BASE_LAUNCHPAD_VIDEO_BASE,\n IsInventoryManagementEnabled: IS_INVENTORY_MANAGEMENT_ENABLED,\n TrustedOrigins: TRUSTED_ORIGINS,\n} = getConfig();\nimport {\n KNOWLEDGEBASE_STATIC_DATA,\n KNOWLEDGEBASE_STATIC_CONTACTS,\n} from './constants/knowledgebase-static-data.js';\nimport './contact-us/contact-us-form.js';\nimport './launchpad/comments-tooltip/comments-tooltip.js';\nimport './launchpad/comments-tooltip/ticket-update-comments.js';\nimport '@digital-realty/ix-tooltip/ix-tooltip.js';\nimport { TWStyles } from './tw.js';\nimport { launchpadStyles } from './styles/launchpad-styles.js';\nimport { validatePermission } from './helpers/permissions-helper.js';\nimport { PrivilegeLevelEnum } from './enums/permissions-enum.js';\nimport { ApiSourceEnum } from './enums/api-source-enum.js';\n\nconst trustedOriginPatterns = TRUSTED_ORIGINS.split(',').map(\n pattern => new RegExp(pattern, 'i')\n);\n\nclass AppWidgets extends LitElement {\n static styles = [TWStyles, launchpadStyles];\n\n static properties = {\n status: [],\n ticketUpdates: {},\n yourActionRequired: {},\n };\n\n @state(Object)\n newReleaseNotes = undefined;\n\n @state()\n isLoading = true;\n\n constructor() {\n super();\n this.status = getStatus();\n this.statusCounts = {\n USERS: undefined,\n ACTIVE_ORDERS: undefined,\n ACTIVE_TICKETS: undefined,\n MY_SITES: undefined,\n DCIM: undefined,\n };\n this.ticketUpdates = {\n header: 'Ticket Updates',\n href: `/service-management/?createdBy_equals=${authedUser?.userProfileName}&sort=updatedAt&order=desc`,\n columns: ticketColumns(this.ticketSelect),\n isAuthorizedToView: false,\n };\n this.yourActionRequired = {\n header: 'Your Action Required',\n href: '/service-management/?permission_privilege=Approve&status_equals=Pending+Approval',\n columns: pendingTicketColumns(this.ticketSelect),\n isAuthorizedToView: false,\n };\n this.permissions = {};\n this.navItems = navigation(this.permissions, {});\n }\n\n getUsers = async () => {\n const res = await getUsersCount();\n this.statusCounts.USERS = res;\n this.status = getStatus(this.permissions, this.statusCounts);\n };\n\n getMySites = async () => {\n const res = await getMySitesCount();\n this.statusCounts.MY_SITES = res;\n this.status = getStatus(this.permissions, this.statusCounts);\n };\n\n getServiceTickets = async () => {\n const res = await getServiceTicketsCount();\n this.statusCounts.ACTIVE_TICKETS = res;\n this.status = getStatus(this.permissions, this.statusCounts);\n };\n\n getDcimEnabledLocations = async () => {\n const res = await getDcimEnabledLocationCount();\n this.statusCounts.DCIM = res;\n this.status = getStatus(this.permissions, this.statusCounts);\n };\n\n getActiveOrders = async () => {\n const res = await getActiveOrdersCount();\n this.statusCounts.ACTIVE_ORDERS = res;\n this.status = getStatus(this.permissions, this.statusCounts);\n };\n\n getTicketUpdates = async permissions => {\n const serviceTicketIsAuthorized = validatePermission(\n permissions,\n SERVICE_MANAGEMENT,\n PrivilegeLevelEnum.UPDATE\n );\n\n const orderIsAuthorized = validatePermission(\n permissions,\n ORDER_MANAGEMENT,\n PrivilegeLevelEnum.CREATE\n );\n\n const { rows: serviceTicketRows } = serviceTicketIsAuthorized\n ? await getServiceTicketUpdateRows()\n : tableDefault;\n\n const { rows: orderRows } =\n orderIsAuthorized && IS_INVENTORY_MANAGEMENT_ENABLED\n ? await getOrderUpdateRows(getValidGOMticketTypes(permissions))\n : tableDefault;\n\n const combinedRows = serviceTicketRows.concat(orderRows);\n\n const sortedRows =\n combinedRows.length > 0\n ? combinedRows\n .sort((a, b) => new Date(b.updated_at) - new Date(a.updated_at))\n .slice(0, 5)\n : [];\n\n this.ticketUpdates = {\n ...this.ticketUpdates,\n rows: sortedRows,\n disabled: serviceTicketRows.length === 0 && orderRows.length === 0,\n isAuthorizedToView: serviceTicketIsAuthorized || orderIsAuthorized,\n };\n };\n\n getYourActionRequired = async permissions => {\n const serviceTicketIsAuthorized = validatePermission(\n permissions,\n [VISITOR_ACCESS, PERMANENT_BADGE],\n PrivilegeLevelEnum.APPROVE\n );\n\n const orderIsAuthorized = validatePermission(\n permissions,\n ORDER_MANAGEMENT,\n PrivilegeLevelEnum.CREATE\n );\n\n const { rows: serviceTicketRows } = serviceTicketIsAuthorized\n ? await getYourActionRequiredServiceTicketRows()\n : tableDefault;\n\n const { rows: orderRows } =\n orderIsAuthorized && IS_INVENTORY_MANAGEMENT_ENABLED\n ? await getYourActionRequiredOrderRows(\n getValidGOMticketTypes(permissions)\n )\n : tableDefault;\n\n const combinedRows = serviceTicketRows.concat(orderRows);\n\n const sortedRows =\n combinedRows.length > 0\n ? combinedRows\n .sort((a, b) => new Date(b.updated_at) - new Date(a.updated_at))\n .slice(0, 5)\n : [];\n\n this.yourActionRequired = {\n ...this.yourActionRequired,\n rows: sortedRows,\n disabled: serviceTicketRows.length === 0 && orderRows.length === 0,\n isAuthorizedToView: serviceTicketIsAuthorized || orderIsAuthorized,\n };\n };\n\n getKnowledgeBase = async () => {\n if (SHOW_STATIC_KNOWLEDGE_BASE) {\n this.news = KNOWLEDGEBASE_STATIC_DATA.whatsNews;\n this.promotions = KNOWLEDGEBASE_STATIC_DATA.newsAndPromotions;\n this.resources = KNOWLEDGEBASE_STATIC_DATA.resources;\n } else {\n const res = await getKnowledgeBase();\n this.news = res.whatsNews;\n if (this.news?.length > 0) {\n this.checkReleaseNotes(this.news[0]);\n }\n this.promotions = res.newsAndPromotions;\n this.resources = res.resources;\n }\n };\n\n checkReleaseNotes(newsItem) {\n const xAuth = localStorage.getItem('x-auth');\n const { access_token } = JSON.parse(xAuth);\n const { previous_login_date } = jwtDecode(access_token);\n const previous_login_timestamp = new Date(previous_login_date)?.getTime();\n const { id, dateAdded, documents, uid } = newsItem;\n if (localStorage.getItem('releaseNotesViewed') === String(id)) return;\n\n const releaseDateTimestamp = new Date(dateAdded)?.getTime();\n const DAY = 24 * 60 * 60 * 1000;\n\n /* if new release notes or last login date\n are missing, don't show the release notes */\n if (\n Number.isNaN(previous_login_timestamp) ||\n Number.isNaN(releaseDateTimestamp) ||\n previous_login_timestamp > releaseDateTimestamp + DAY\n )\n return;\n\n const href = documents?.[0]?.url\n ? `${KNOWLEDGE_BASE_LAUNCHPAD_VIDEO_BASE}${documents[0].url}`\n : `/knowledge-base/details/${uid}`;\n\n this.newReleaseNotes = {\n id,\n title: 'New Release Updates!',\n href,\n description: `We have introduced new and improved functionality on the Global Portal\n with our monthly release. Learn more by clicking on the link below or review it later in our What's New section!`,\n };\n }\n\n dismissReleaseNotes() {\n localStorage.setItem('releaseNotesViewed', this.newReleaseNotes.id);\n this.newReleaseNotes = undefined;\n }\n\n firstUpdated() {\n if (IS_INVENTORY_MANAGEMENT_ENABLED) {\n this.getActiveOrders();\n }\n this.getUsers();\n this.getMySites();\n this.getServiceTickets();\n this.getKnowledgeBase();\n\n Promise.all([getPermissions(), getServiceTicketsPermissions()]).then(\n ([permissions, serviceTicketsPermissions]) => {\n this.permissions = permissions;\n this.navItems = navigation(this.permissions, serviceTicketsPermissions);\n this.getDcimEnabledLocations();\n this.getTicketUpdates(this.permissions);\n this.getYourActionRequired(this.permissions);\n this.isLoading = false;\n }\n );\n }\n\n messageHandler(e) {\n const { origin, data } = e;\n const isTrusted = trustedOriginPatterns.some(rx => rx.test(origin));\n\n if (!isTrusted) {\n // eslint-disable-next-line no-console\n console.warn('Rejected message from untrusted origin:', origin);\n return;\n }\n\n if (data.knowledgeBaseURL) {\n window.location.href = `${registeredApps[KBAppName].path}${data.knowledgeBaseURL}`;\n }\n }\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener('message', this.messageHandler);\n }\n\n disconnectedCallback() {\n window.removeEventListener('message', this.messageHandler);\n super.disconnectedCallback();\n }\n\n route(e) {\n const { route } = e.detail;\n if (route.startsWith('/')) {\n window.location.href = route;\n } else {\n const event = new CustomEvent(e.detail.route, {\n bubbles: true,\n composed: true,\n detail: {\n fromLaunchpad: true,\n },\n });\n this.dispatchEvent(event);\n }\n }\n\n ticketSelect(row) {\n let destination = '';\n switch (row.source) {\n case ApiSourceEnum.ServiceManagement:\n const { ticket_id, ticket_type, request_type } = row;\n const requestTypePath = requestTypeHasSecondaryPath[request_type]\n ? `/${ticketPaths[request_type]}`\n : '';\n destination = `/${ticketPaths.base}/${ticketPaths[ticket_type]}${requestTypePath}/${ticket_id}`;\n break;\n case ApiSourceEnum.OrderManagement:\n destination = `/order-management/order-details/${row.ticket_id}`;\n break;\n default:\n destination = '/order-management/order-details';\n }\n window.location.href = destination;\n }\n\n renderNewReleaseNotes() {\n return html`<ix-dialog open>\n <h3 slot=\"headline\" class=\"dlr-text-heading\">\n ${this.newReleaseNotes.title}\n </h3>\n <p slot=\"content\" class=\"md:w-[380px]\">\n ${this.newReleaseNotes.description}\n </p>\n <div slot=\"actions\" class=\"px-2 pb-2 pt-6\">\n <ix-button @click=${this.dismissReleaseNotes} appearance=\"text\">\n Dismiss\n </ix-button>\n <ix-button\n @click=${this.dismissReleaseNotes}\n href=${this.newReleaseNotes.href}\n target=\"_blank\"\n appearance=\"text\"\n >\n Read More\n </ix-button>\n </div>\n </ix-dialog>`;\n }\n\n render() {\n return html`\n <contact-us-form></contact-us-form>\n ${this.newReleaseNotes ? this.renderNewReleaseNotes() : nothing}\n ${this.isLoading\n ? nothing\n : html`\n <ix-launchpad\n class=\"mb-4 block\"\n api-permissions=${JSON.stringify(this.permissions)}\n .status=${this.status}\n .nav=${this.navItems}\n .news=${this.news}\n .promotions=${this.promotions}\n .resources=${this.resources}\n .contacts=${KNOWLEDGEBASE_STATIC_CONTACTS}\n .updates=${this.ticketUpdates}\n .actions=${this.yourActionRequired}\n @route=${this.route}\n ></ix-launchpad>\n `}\n <ix-tooltip></ix-tooltip>\n `;\n }\n}\n\nwindow.customElements.define('app-widgets', AppWidgets);\n"]}