@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.
- package/dist/lib/action-required.d.ts +43 -0
- package/dist/lib/action-required.d.ts.map +1 -0
- package/dist/lib/action-required.js +208 -0
- package/dist/lib/action-required.js.map +1 -0
- package/dist/lib/app-widgets.d.ts +2 -0
- package/dist/lib/app-widgets.d.ts.map +1 -0
- package/dist/lib/app-widgets.js +304 -0
- package/dist/lib/app-widgets.js.map +1 -0
- package/dist/lib/constants/app-constants.d.ts +49 -0
- package/dist/lib/constants/app-constants.d.ts.map +1 -0
- package/dist/lib/constants/app-constants.js +74 -0
- package/dist/lib/constants/app-constants.js.map +1 -0
- package/dist/lib/constants/knowledgebase-static-data.d.ts +134 -0
- package/dist/lib/constants/knowledgebase-static-data.d.ts.map +1 -0
- package/dist/lib/constants/knowledgebase-static-data.js +145 -0
- package/dist/lib/constants/knowledgebase-static-data.js.map +1 -0
- package/dist/lib/contact-us/api-client.d.ts +3 -0
- package/dist/lib/contact-us/api-client.d.ts.map +1 -0
- package/dist/lib/contact-us/api-client.js +17 -0
- package/dist/lib/contact-us/api-client.js.map +1 -0
- package/dist/lib/contact-us/contact-us-form.d.ts +28 -0
- package/dist/lib/contact-us/contact-us-form.d.ts.map +1 -0
- package/dist/lib/contact-us/contact-us-form.js +240 -0
- package/dist/lib/contact-us/contact-us-form.js.map +1 -0
- package/dist/lib/contact-us/contact-us-result.d.ts +15 -0
- package/dist/lib/contact-us/contact-us-result.d.ts.map +1 -0
- package/dist/lib/contact-us/contact-us-result.js +103 -0
- package/dist/lib/contact-us/contact-us-result.js.map +1 -0
- package/dist/lib/contact-us/models.d.ts +11 -0
- package/dist/lib/contact-us/models.d.ts.map +1 -0
- package/dist/lib/contact-us/models.js +2 -0
- package/dist/lib/contact-us/models.js.map +1 -0
- package/dist/lib/enums/api-source-enum.d.ts +6 -0
- package/dist/lib/enums/api-source-enum.d.ts.map +1 -0
- package/dist/lib/enums/api-source-enum.js +8 -0
- package/dist/lib/enums/api-source-enum.js.map +1 -0
- package/dist/lib/enums/form-status-enum.d.ts +8 -0
- package/dist/lib/enums/form-status-enum.d.ts.map +1 -0
- package/dist/lib/enums/form-status-enum.js +10 -0
- package/dist/lib/enums/form-status-enum.js.map +1 -0
- package/dist/lib/enums/permissions-enum.d.ts +8 -0
- package/dist/lib/enums/permissions-enum.d.ts.map +1 -0
- package/dist/lib/enums/permissions-enum.js +10 -0
- package/dist/lib/enums/permissions-enum.js.map +1 -0
- package/dist/lib/helpers/config-helper.d.ts +21 -0
- package/dist/lib/helpers/config-helper.d.ts.map +1 -0
- package/dist/lib/helpers/config-helper.js +9 -0
- package/dist/lib/helpers/config-helper.js.map +1 -0
- package/dist/lib/helpers/permissions-helper.d.ts +3 -0
- package/dist/lib/helpers/permissions-helper.d.ts.map +1 -0
- package/dist/lib/helpers/permissions-helper.js +15 -0
- package/dist/lib/helpers/permissions-helper.js.map +1 -0
- package/dist/lib/helpers/ticket-type-mapping-helper.d.ts +4 -0
- package/dist/lib/helpers/ticket-type-mapping-helper.d.ts.map +1 -0
- package/dist/lib/helpers/ticket-type-mapping-helper.js +64 -0
- package/dist/lib/helpers/ticket-type-mapping-helper.js.map +1 -0
- package/dist/lib/icons/icons.d.ts +3 -0
- package/dist/lib/icons/icons.d.ts.map +1 -0
- package/dist/lib/icons/icons.js +8 -0
- package/dist/lib/icons/icons.js.map +1 -0
- package/dist/lib/index.d.ts +5 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +5 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/ix-launchpad.d.ts +79 -0
- package/dist/lib/ix-launchpad.d.ts.map +1 -0
- package/dist/lib/ix-launchpad.js +353 -0
- package/dist/lib/ix-launchpad.js.map +1 -0
- package/dist/lib/launchpad/api-client.d.ts +41 -0
- package/dist/lib/launchpad/api-client.d.ts.map +1 -0
- package/dist/lib/launchpad/api-client.js +363 -0
- package/dist/lib/launchpad/api-client.js.map +1 -0
- package/dist/lib/launchpad/api-constants.d.ts +37 -0
- package/dist/lib/launchpad/api-constants.d.ts.map +1 -0
- package/dist/lib/launchpad/api-constants.js +36 -0
- package/dist/lib/launchpad/api-constants.js.map +1 -0
- package/dist/lib/launchpad/auth.d.ts +2 -0
- package/dist/lib/launchpad/auth.d.ts.map +1 -0
- package/dist/lib/launchpad/auth.js +32 -0
- package/dist/lib/launchpad/auth.js.map +1 -0
- package/dist/lib/launchpad/comments-tooltip/comments-tooltip.d.ts +2 -0
- package/dist/lib/launchpad/comments-tooltip/comments-tooltip.d.ts.map +1 -0
- package/dist/lib/launchpad/comments-tooltip/comments-tooltip.js +69 -0
- package/dist/lib/launchpad/comments-tooltip/comments-tooltip.js.map +1 -0
- package/dist/lib/launchpad/comments-tooltip/ticket-update-comments.d.ts +2 -0
- package/dist/lib/launchpad/comments-tooltip/ticket-update-comments.d.ts.map +1 -0
- package/dist/lib/launchpad/comments-tooltip/ticket-update-comments.js +134 -0
- package/dist/lib/launchpad/comments-tooltip/ticket-update-comments.js.map +1 -0
- package/dist/lib/launchpad/model.d.ts +43 -0
- package/dist/lib/launchpad/model.d.ts.map +1 -0
- package/dist/lib/launchpad/model.js +347 -0
- package/dist/lib/launchpad/model.js.map +1 -0
- package/dist/lib/register.d.ts +2 -0
- package/dist/lib/register.d.ts.map +1 -0
- package/dist/lib/register.js +8 -0
- package/dist/lib/register.js.map +1 -0
- package/dist/lib/routes/app-routing.d.ts +12 -0
- package/dist/lib/routes/app-routing.d.ts.map +1 -0
- package/dist/lib/routes/app-routing.js +35 -0
- package/dist/lib/routes/app-routing.js.map +1 -0
- package/dist/lib/routes/routes.d.ts +9 -0
- package/dist/lib/routes/routes.d.ts.map +1 -0
- package/dist/lib/routes/routes.js +11 -0
- package/dist/lib/routes/routes.js.map +1 -0
- package/dist/lib/styles/launchpad-styles.d.ts +2 -0
- package/dist/lib/styles/launchpad-styles.d.ts.map +1 -0
- package/dist/lib/styles/launchpad-styles.js +97 -0
- package/dist/lib/styles/launchpad-styles.js.map +1 -0
- package/dist/lib/styles/styles.d.ts +2 -0
- package/dist/lib/styles/styles.d.ts.map +1 -0
- package/dist/lib/styles/styles.js +4 -0
- package/dist/lib/styles/styles.js.map +1 -0
- package/dist/lib/ticket-updates.d.ts +43 -0
- package/dist/lib/ticket-updates.d.ts.map +1 -0
- package/dist/lib/ticket-updates.js +209 -0
- package/dist/lib/ticket-updates.js.map +1 -0
- package/dist/lib/tw.d.ts +2 -0
- package/dist/lib/tw.d.ts.map +1 -0
- package/dist/lib/tw.js +865 -0
- package/dist/lib/tw.js.map +1 -0
- package/dist/lib/types.d.ts +19 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +7 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/ui-launchpad.d.ts +7 -0
- package/dist/lib/ui-launchpad.d.ts.map +1 -0
- package/dist/lib/ui-launchpad.entry.d.ts +2 -0
- package/dist/lib/ui-launchpad.entry.d.ts.map +1 -0
- package/dist/lib/ui-launchpad.entry.js +2 -0
- package/dist/lib/ui-launchpad.entry.js.map +1 -0
- package/dist/lib/ui-launchpad.js +16 -0
- package/dist/lib/ui-launchpad.js.map +1 -0
- package/dist/lib/utils/testIdTransform.d.ts +2 -0
- package/dist/lib/utils/testIdTransform.d.ts.map +1 -0
- package/dist/lib/utils/testIdTransform.js +2 -0
- package/dist/lib/utils/testIdTransform.js.map +1 -0
- package/dist/sw.js +1 -1
- package/dist/sw.js.map +1 -1
- package/dist/ui-launchpad.js +6 -6
- 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 @@
|
|
|
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"]}
|