@imposium-hub/components 2.6.0-0 → 2.6.0-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/app-wrapper/AppWrapper.d.ts +24 -5
- package/dist/cjs/components/app-wrapper/AppWrapper.js +104 -22
- package/dist/cjs/components/app-wrapper/AppWrapper.js.map +1 -1
- package/dist/cjs/components/assets/StoryTableNameFilter.d.ts +9 -2
- package/dist/cjs/components/assets/StoryTableNameFilter.js +3 -13
- package/dist/cjs/components/assets/StoryTableNameFilter.js.map +1 -1
- package/dist/cjs/components/context-menu/AnimateComponent.d.ts +6 -6
- package/dist/cjs/components/context-menu/AnimateComponent.js.map +1 -1
- package/dist/cjs/components/context-menu/ContextMenu.d.ts +12 -27
- package/dist/cjs/components/context-menu/ContextMenu.js +2 -15
- package/dist/cjs/components/context-menu/ContextMenu.js.map +1 -1
- package/dist/cjs/components/context-menu/ContextMenuItem.d.ts +6 -18
- package/dist/cjs/components/context-menu/ContextMenuItem.js +2 -21
- package/dist/cjs/components/context-menu/ContextMenuItem.js.map +1 -1
- package/dist/cjs/components/context-menu/ContextMenuTrigger.d.ts +6 -16
- package/dist/cjs/components/context-menu/ContextMenuTrigger.js +2 -20
- package/dist/cjs/components/context-menu/ContextMenuTrigger.js.map +1 -1
- package/dist/cjs/components/context-menu/SubMenu.d.ts +4 -12
- package/dist/cjs/components/context-menu/SubMenu.js +2 -17
- package/dist/cjs/components/context-menu/SubMenu.js.map +1 -1
- package/dist/cjs/components/data-table/Paginator.d.ts +16 -1
- package/dist/cjs/components/data-table/Paginator.js +1 -1
- package/dist/cjs/components/data-table/Paginator.js.map +1 -1
- package/dist/cjs/components/font-picker/font-manager/constants.d.ts +4 -0
- package/dist/cjs/components/font-picker/font-manager/constants.js +5 -1
- package/dist/cjs/components/font-picker/font-manager/constants.js.map +1 -1
- package/dist/cjs/components/header/Header.d.ts +3 -5
- package/dist/cjs/components/header/Header.js +77 -126
- package/dist/cjs/components/header/Header.js.map +1 -1
- package/dist/cjs/components/header/ProjectDropdown.d.ts +13 -0
- package/dist/cjs/components/header/ProjectDropdown.js +128 -0
- package/dist/cjs/components/header/ProjectDropdown.js.map +1 -0
- package/dist/cjs/components/header/StoryDropdown.d.ts +6 -0
- package/dist/cjs/components/header/StoryDropdown.js +111 -0
- package/dist/cjs/components/header/StoryDropdown.js.map +1 -0
- package/dist/cjs/components/portal/Portal.d.ts +0 -2
- package/dist/cjs/components/portal/Portal.js.map +1 -1
- package/dist/cjs/components/publish-wizard/PublishWizard.d.ts +1 -3
- package/dist/cjs/components/publish-wizard/PublishWizard.js.map +1 -1
- package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
- package/dist/cjs/constants/copy.d.ts +3 -0
- package/dist/cjs/constants/copy.js +3 -0
- package/dist/cjs/constants/copy.js.map +1 -1
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.js +9 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/services/API.d.ts +5 -2
- package/dist/cjs/services/API.js +198 -75
- package/dist/cjs/services/API.js.map +1 -1
- package/dist/cjs/utils/modal.d.ts +2 -0
- package/dist/cjs/utils/modal.js +11 -0
- package/dist/cjs/utils/modal.js.map +1 -0
- package/dist/cjs/utils/pendo.d.ts +24 -0
- package/dist/cjs/utils/pendo.js +62 -0
- package/dist/cjs/utils/pendo.js.map +1 -0
- package/dist/cjs/utils/routing.d.ts +2 -0
- package/dist/cjs/utils/routing.js +10 -1
- package/dist/cjs/utils/routing.js.map +1 -1
- package/dist/esm/components/app-wrapper/AppWrapper.d.ts +24 -5
- package/dist/esm/components/app-wrapper/AppWrapper.js +97 -19
- package/dist/esm/components/app-wrapper/AppWrapper.js.map +1 -1
- package/dist/esm/components/assets/StoryTableNameFilter.d.ts +9 -2
- package/dist/esm/components/assets/StoryTableNameFilter.js +3 -13
- package/dist/esm/components/assets/StoryTableNameFilter.js.map +1 -1
- package/dist/esm/components/context-menu/AnimateComponent.d.ts +6 -6
- package/dist/esm/components/context-menu/AnimateComponent.js.map +1 -1
- package/dist/esm/components/context-menu/ContextMenu.d.ts +12 -27
- package/dist/esm/components/context-menu/ContextMenu.js +2 -4
- package/dist/esm/components/context-menu/ContextMenu.js.map +1 -1
- package/dist/esm/components/context-menu/ContextMenuItem.d.ts +6 -18
- package/dist/esm/components/context-menu/ContextMenuItem.js +2 -10
- package/dist/esm/components/context-menu/ContextMenuItem.js.map +1 -1
- package/dist/esm/components/context-menu/ContextMenuTrigger.d.ts +6 -16
- package/dist/esm/components/context-menu/ContextMenuTrigger.js +2 -9
- package/dist/esm/components/context-menu/ContextMenuTrigger.js.map +1 -1
- package/dist/esm/components/context-menu/SubMenu.d.ts +4 -12
- package/dist/esm/components/context-menu/SubMenu.js +2 -6
- package/dist/esm/components/context-menu/SubMenu.js.map +1 -1
- package/dist/esm/components/data-table/Paginator.d.ts +16 -1
- package/dist/esm/components/data-table/Paginator.js +1 -1
- package/dist/esm/components/data-table/Paginator.js.map +1 -1
- package/dist/esm/components/font-picker/font-manager/constants.d.ts +4 -0
- package/dist/esm/components/font-picker/font-manager/constants.js +4 -0
- package/dist/esm/components/font-picker/font-manager/constants.js.map +1 -1
- package/dist/esm/components/header/Header.d.ts +3 -5
- package/dist/esm/components/header/Header.js +75 -115
- package/dist/esm/components/header/Header.js.map +1 -1
- package/dist/esm/components/header/ProjectDropdown.d.ts +13 -0
- package/dist/esm/components/header/ProjectDropdown.js +101 -0
- package/dist/esm/components/header/ProjectDropdown.js.map +1 -0
- package/dist/esm/components/header/StoryDropdown.d.ts +6 -0
- package/dist/esm/components/header/StoryDropdown.js +82 -0
- package/dist/esm/components/header/StoryDropdown.js.map +1 -0
- package/dist/esm/components/portal/Portal.d.ts +0 -2
- package/dist/esm/components/portal/Portal.js.map +1 -1
- package/dist/esm/components/publish-wizard/PublishWizard.d.ts +1 -3
- package/dist/esm/components/publish-wizard/PublishWizard.js.map +1 -1
- package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
- package/dist/esm/constants/copy.d.ts +3 -0
- package/dist/esm/constants/copy.js +3 -0
- package/dist/esm/constants/copy.js.map +1 -1
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/services/API.d.ts +5 -2
- package/dist/esm/services/API.js +43 -18
- package/dist/esm/services/API.js.map +1 -1
- package/dist/esm/utils/modal.d.ts +2 -0
- package/dist/esm/utils/modal.js +7 -0
- package/dist/esm/utils/modal.js.map +1 -0
- package/dist/esm/utils/pendo.d.ts +24 -0
- package/dist/esm/utils/pendo.js +52 -0
- package/dist/esm/utils/pendo.js.map +1 -0
- package/dist/esm/utils/routing.d.ts +2 -0
- package/dist/esm/utils/routing.js +7 -0
- package/dist/esm/utils/routing.js.map +1 -1
- package/package.json +3 -1
- package/src/components/app-wrapper/AppWrapper.tsx +155 -26
- package/src/components/assets/StoryTableNameFilter.tsx +6 -22
- package/src/components/context-menu/AnimateComponent.tsx +12 -1
- package/src/components/context-menu/ContextMenu.tsx +16 -8
- package/src/components/context-menu/ContextMenuItem.tsx +12 -11
- package/src/components/context-menu/ContextMenuTrigger.tsx +12 -10
- package/src/components/context-menu/SubMenu.tsx +6 -8
- package/src/components/data-table/Paginator.tsx +19 -6
- package/src/components/font-picker/font-manager/constants.ts +5 -0
- package/src/components/header/Header.tsx +103 -190
- package/src/components/header/ProjectDropdown.tsx +174 -0
- package/src/components/portal/Portal.tsx +1 -2
- package/src/components/publish-wizard/PublishWizard.tsx +1 -1
- package/src/components/publish-wizard/publish/EmailWorkflow.tsx +7 -1
- package/src/constants/copy.ts +3 -0
- package/src/index.ts +5 -0
- package/src/services/API.ts +51 -20
- package/src/utils/modal.ts +9 -0
- package/src/utils/pendo.ts +61 -0
- package/src/utils/routing.ts +10 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
import ImposiumDropdown from '../dropdown/Dropdown';
|
|
3
|
+
import StoryTableNameFilter from '../assets/StoryTableNameFilter';
|
|
4
|
+
import { StoryTableTotalRendersCell } from '../assets/StoryTableTotalRendersCell';
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import AssetsTableDateCell from '../assets/AssetsTableDateCell';
|
|
7
|
+
import DataTable from '../data-table/DataTable';
|
|
8
|
+
import { ImposiumHeader } from '../..';
|
|
9
|
+
import _ from 'lodash';
|
|
10
|
+
|
|
11
|
+
interface IProjectDropdownProps {
|
|
12
|
+
position: any;
|
|
13
|
+
api: any;
|
|
14
|
+
toggleRef: any;
|
|
15
|
+
show: boolean;
|
|
16
|
+
storiesArray: any;
|
|
17
|
+
changeStory(storyRow: any): void;
|
|
18
|
+
setAccessData(data): void;
|
|
19
|
+
onClose(): void;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const ProjectDropdown = (props: IProjectDropdownProps) => {
|
|
23
|
+
const { toggleRef, changeStory, storiesArray, show, onClose, setAccessData, api, position } =
|
|
24
|
+
props;
|
|
25
|
+
|
|
26
|
+
const [storyFilter, setStoryFilter] = useState({
|
|
27
|
+
name: ''
|
|
28
|
+
});
|
|
29
|
+
const [totalRendersLoading, setTotalRendersLoading] = useState(false);
|
|
30
|
+
const [order] = useState('date_modified');
|
|
31
|
+
const [orderDirection] = useState('desc');
|
|
32
|
+
|
|
33
|
+
if (!storiesArray) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
if (show) {
|
|
39
|
+
setTotalRendersLoading(true);
|
|
40
|
+
api.getAccessData(true).then((data) => {
|
|
41
|
+
setAccessData(data);
|
|
42
|
+
setTotalRendersLoading(false);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}, [show]);
|
|
46
|
+
|
|
47
|
+
const closeProjectDropdown = () => {
|
|
48
|
+
setStoryFilter({
|
|
49
|
+
name: ''
|
|
50
|
+
});
|
|
51
|
+
onClose();
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const getStoriesColumns = () => {
|
|
55
|
+
return [
|
|
56
|
+
{
|
|
57
|
+
accessor: 'name',
|
|
58
|
+
Header: 'Name',
|
|
59
|
+
width: 115,
|
|
60
|
+
minWidth: 115,
|
|
61
|
+
Search: () => (
|
|
62
|
+
<StoryTableNameFilter
|
|
63
|
+
filter={storyFilter.name}
|
|
64
|
+
updateFilter={setStoryFilter}
|
|
65
|
+
/>
|
|
66
|
+
),
|
|
67
|
+
disableSortBy: false
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
accessor: 'total_renders',
|
|
71
|
+
Header: 'Total Renders',
|
|
72
|
+
width: 60,
|
|
73
|
+
minWidth: 60,
|
|
74
|
+
maxWidth: 60,
|
|
75
|
+
disableSortBy: false,
|
|
76
|
+
Cell: (cell: any) => (
|
|
77
|
+
<StoryTableTotalRendersCell
|
|
78
|
+
loading={totalRendersLoading}
|
|
79
|
+
cell={cell}
|
|
80
|
+
date_created={false}
|
|
81
|
+
/>
|
|
82
|
+
)
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
accessor: 'last_modified_by',
|
|
86
|
+
Header: 'Last Modified By',
|
|
87
|
+
width: 60,
|
|
88
|
+
minWidth: 60,
|
|
89
|
+
maxWidth: 60,
|
|
90
|
+
disableSortBy: true
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
accessor: 'date_modified',
|
|
94
|
+
Header: 'Last Modified',
|
|
95
|
+
width: 65,
|
|
96
|
+
minWidth: 65,
|
|
97
|
+
maxWidth: 65,
|
|
98
|
+
disableSortBy: false,
|
|
99
|
+
Cell: (cell: any) => (
|
|
100
|
+
<AssetsTableDateCell
|
|
101
|
+
cell={cell}
|
|
102
|
+
date_created={false}
|
|
103
|
+
/>
|
|
104
|
+
)
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
accessor: 'date_created',
|
|
108
|
+
Header: 'Created Date',
|
|
109
|
+
width: 65,
|
|
110
|
+
minWidth: 65,
|
|
111
|
+
maxWidth: 65,
|
|
112
|
+
disableSortBy: false,
|
|
113
|
+
Cell: (cell: any) => (
|
|
114
|
+
<AssetsTableDateCell
|
|
115
|
+
cell={cell}
|
|
116
|
+
date_created={true}
|
|
117
|
+
/>
|
|
118
|
+
)
|
|
119
|
+
}
|
|
120
|
+
];
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
const sortBy =
|
|
124
|
+
order && orderDirection ? [{ id: order, desc: orderDirection === 'desc' }] : undefined;
|
|
125
|
+
|
|
126
|
+
let sortedStories = _.orderBy(storiesArray, ['date_modified'], ['desc']);
|
|
127
|
+
|
|
128
|
+
if (storyFilter.name) {
|
|
129
|
+
const storyFilterLowercase = storyFilter.name.toLowerCase();
|
|
130
|
+
|
|
131
|
+
sortedStories = sortedStories.filter((stories) =>
|
|
132
|
+
stories.name.toLowerCase().includes(storyFilterLowercase)
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
const sortById = sortedStories.filter((stories) =>
|
|
136
|
+
stories.id.includes(storyFilterLowercase)
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
if (sortById.length > 0) {
|
|
140
|
+
sortedStories = sortById;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const onRowClick = (r: any) => {
|
|
145
|
+
onClose();
|
|
146
|
+
changeStory(r);
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
return (
|
|
150
|
+
<>
|
|
151
|
+
<ImposiumDropdown
|
|
152
|
+
key='stories-dropdown'
|
|
153
|
+
position={position}
|
|
154
|
+
show={show}
|
|
155
|
+
toggleRef={toggleRef}
|
|
156
|
+
onOutsideClick={closeProjectDropdown}>
|
|
157
|
+
<div className='stories-menu'>
|
|
158
|
+
{
|
|
159
|
+
<DataTable
|
|
160
|
+
columns={getStoriesColumns()}
|
|
161
|
+
data={sortedStories}
|
|
162
|
+
sortBy={sortBy}
|
|
163
|
+
noDataText={ImposiumHeader.NO_STORIES_COPY}
|
|
164
|
+
itemsPerPage={storiesArray.length}
|
|
165
|
+
hidePaginator={true}
|
|
166
|
+
onRowClick={onRowClick}
|
|
167
|
+
keyboardNav={true}
|
|
168
|
+
/>
|
|
169
|
+
}
|
|
170
|
+
</div>
|
|
171
|
+
</ImposiumDropdown>
|
|
172
|
+
</>
|
|
173
|
+
);
|
|
174
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ReactPortal } from 'react';
|
|
2
2
|
import { useEffect } from 'react';
|
|
3
3
|
import { createPortal } from 'react-dom';
|
|
4
4
|
|
|
@@ -7,7 +7,6 @@ import { createPortal } from 'react-dom';
|
|
|
7
7
|
// Just wrap desired element in <Portal>{YourElement}</Portal>
|
|
8
8
|
|
|
9
9
|
interface IPortalProps {
|
|
10
|
-
children: ReactNode;
|
|
11
10
|
id: string;
|
|
12
11
|
}
|
|
13
12
|
|
|
@@ -779,7 +779,7 @@ export const BigButton: React.FC<IBigButtonProps> = (p) => (
|
|
|
779
779
|
</div>
|
|
780
780
|
);
|
|
781
781
|
|
|
782
|
-
export const TabContent = ({ children }) => (
|
|
782
|
+
export const TabContent: React.FC = ({ children }) => (
|
|
783
783
|
<div className='tab-content'>
|
|
784
784
|
<div className='settings-tab'>
|
|
785
785
|
<div className='integration-details'>{children}</div>
|
|
@@ -876,7 +876,13 @@ const mapStateToProps = (state): any => {
|
|
|
876
876
|
};
|
|
877
877
|
};
|
|
878
878
|
|
|
879
|
-
|
|
879
|
+
interface ICrMOptionsProps {
|
|
880
|
+
options: any;
|
|
881
|
+
onChange(options: any): void;
|
|
882
|
+
errorCopy: string;
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
const CrMOptions: React.FC<ICrMOptionsProps> = ({ options, onChange, errorCopy = '' }) => {
|
|
880
886
|
const onInputChange = (key, val) => {
|
|
881
887
|
const newOpts = { ...options };
|
|
882
888
|
newOpts[key] = val;
|
package/src/constants/copy.ts
CHANGED
|
@@ -238,6 +238,9 @@ export const integration = {
|
|
|
238
238
|
};
|
|
239
239
|
|
|
240
240
|
export const header = {
|
|
241
|
+
noSave: `Don't Save`,
|
|
242
|
+
onSave: 'Save',
|
|
243
|
+
checkUnsaved: 'You have unsaved changes, would you like to save and continue?',
|
|
241
244
|
publishing: 'Publishing...',
|
|
242
245
|
working: 'Using Working Copy',
|
|
243
246
|
statusError: 'Error getting project status',
|
package/src/index.ts
CHANGED
|
@@ -159,8 +159,13 @@ import { resetStoryFilter, updateStoryFilter } from './redux/actions/story-filte
|
|
|
159
159
|
import storyFilter from './redux/reducers/story-filter';
|
|
160
160
|
import StoryTableNameFilter from './components/assets/StoryTableNameFilter';
|
|
161
161
|
import { AppWrapper } from './components/app-wrapper/AppWrapper';
|
|
162
|
+
import { pushRoute, replaceRoute } from './utils/routing';
|
|
163
|
+
import { ProjectDropdown } from './components/header/ProjectDropdown';
|
|
162
164
|
|
|
163
165
|
export {
|
|
166
|
+
ProjectDropdown,
|
|
167
|
+
pushRoute,
|
|
168
|
+
replaceRoute,
|
|
164
169
|
AppWrapper,
|
|
165
170
|
ImposiumHeader,
|
|
166
171
|
ImposiumDropdown,
|
package/src/services/API.ts
CHANGED
|
@@ -8,8 +8,10 @@ import axios, {
|
|
|
8
8
|
} from 'axios';
|
|
9
9
|
import { isObjEmpty } from '../Util';
|
|
10
10
|
import { JOB_TYPES } from '../constants/api';
|
|
11
|
+
import { API_AUTH_TYPES } from '../components/font-picker/font-manager/constants';
|
|
11
12
|
|
|
12
13
|
export interface IImposiumAPI {
|
|
14
|
+
init(baseUrl: string, credentials: any, orgId?: string);
|
|
13
15
|
getAssets(filters: any, storyId: string, unprocessed?: boolean, showVariables?: boolean);
|
|
14
16
|
getAssetItem(assetId: string);
|
|
15
17
|
uploadAsset(
|
|
@@ -145,7 +147,7 @@ export interface IImposiumAPI {
|
|
|
145
147
|
getAssetMap(storyId: string);
|
|
146
148
|
clearStoryCache(storyId: string);
|
|
147
149
|
debugId(id: string);
|
|
148
|
-
cacheActiveStory(serviceId:
|
|
150
|
+
cacheActiveStory(serviceId: any, orgId: string, storyId: string);
|
|
149
151
|
getCachedStoryForOrg(serviceId: string, orgId: string);
|
|
150
152
|
getAccessData(includeTotalRenders?: boolean, orgId?: string);
|
|
151
153
|
}
|
|
@@ -183,38 +185,51 @@ export default class API {
|
|
|
183
185
|
|
|
184
186
|
private cancelTokens: object = {};
|
|
185
187
|
|
|
186
|
-
|
|
188
|
+
private getToken;
|
|
189
|
+
|
|
190
|
+
private authType;
|
|
191
|
+
|
|
192
|
+
public init(baseURL: string, credentials: any, organizationId?: string): void {
|
|
187
193
|
// JWT
|
|
188
194
|
const headers = {
|
|
189
|
-
'Authorization': `Bearer ${idToken}`,
|
|
190
195
|
'X-Imposium-API-Version': '2.0.2'
|
|
191
|
-
// 'X-Imposium-Account-Id': organizationId || ''
|
|
192
196
|
};
|
|
193
197
|
|
|
194
198
|
if (organizationId) {
|
|
195
199
|
headers['X-Imposium-Account-Id'] = organizationId;
|
|
196
200
|
}
|
|
197
|
-
if (idToken) {
|
|
198
|
-
this.http = axios.create({
|
|
199
|
-
baseURL,
|
|
200
|
-
headers
|
|
201
|
-
});
|
|
202
201
|
|
|
203
|
-
|
|
204
|
-
|
|
202
|
+
// If the token is a string, it's an accessKey, so use the X-Imposium-Access-Key header
|
|
203
|
+
if (typeof credentials === 'string') {
|
|
204
|
+
this.authType = API_AUTH_TYPES.ACCESS_KEY;
|
|
205
205
|
this.http = axios.create({
|
|
206
206
|
baseURL,
|
|
207
207
|
headers: {
|
|
208
|
-
'X-Imposium-Access-Key': `${
|
|
208
|
+
'X-Imposium-Access-Key': `${credentials}`,
|
|
209
209
|
'X-Imposium-API-Version': '2.0.0'
|
|
210
210
|
}
|
|
211
211
|
});
|
|
212
|
+
} else {
|
|
213
|
+
this.authType = API_AUTH_TYPES.TOKEN;
|
|
214
|
+
this.http = axios.create({
|
|
215
|
+
baseURL,
|
|
216
|
+
headers
|
|
217
|
+
});
|
|
212
218
|
}
|
|
213
219
|
|
|
220
|
+
this.getToken = credentials;
|
|
214
221
|
this.awsHttp = axios.create();
|
|
215
222
|
}
|
|
216
223
|
|
|
217
|
-
private doRequest = (config: AxiosRequestConfig, reqAlias: string = ''): Promise<any> => {
|
|
224
|
+
private doRequest = async (config: AxiosRequestConfig, reqAlias: string = ''): Promise<any> => {
|
|
225
|
+
if (this.authType === API_AUTH_TYPES.TOKEN) {
|
|
226
|
+
const token = await this.getToken();
|
|
227
|
+
const headers = {
|
|
228
|
+
Authorization: `Bearer ${token}`
|
|
229
|
+
};
|
|
230
|
+
config.headers = headers;
|
|
231
|
+
}
|
|
232
|
+
|
|
218
233
|
return new Promise((resolve, reject) => {
|
|
219
234
|
this.http(config)
|
|
220
235
|
.then((res: AxiosResponse) => {
|
|
@@ -1024,11 +1039,19 @@ export default class API {
|
|
|
1024
1039
|
};
|
|
1025
1040
|
|
|
1026
1041
|
return new Promise((resolve, reject) => {
|
|
1027
|
-
this.pollForJob(config, resolve, reject);
|
|
1042
|
+
void this.pollForJob(config, resolve, reject);
|
|
1028
1043
|
});
|
|
1029
1044
|
};
|
|
1030
1045
|
|
|
1031
|
-
private pollForJob = (config, resolve, reject) => {
|
|
1046
|
+
private pollForJob = async (config, resolve, reject) => {
|
|
1047
|
+
if (this.authType === API_AUTH_TYPES.TOKEN) {
|
|
1048
|
+
const token = await this.getToken();
|
|
1049
|
+
const headers = {
|
|
1050
|
+
Authorization: `Bearer ${token}`
|
|
1051
|
+
};
|
|
1052
|
+
config.headers = headers;
|
|
1053
|
+
}
|
|
1054
|
+
|
|
1032
1055
|
this.http(config)
|
|
1033
1056
|
.then((res: AxiosResponse) => {
|
|
1034
1057
|
const {
|
|
@@ -1041,7 +1064,7 @@ export default class API {
|
|
|
1041
1064
|
resolve(res.data);
|
|
1042
1065
|
} else {
|
|
1043
1066
|
this.jobPollTimer = setTimeout(() => {
|
|
1044
|
-
this.pollForJob(config, resolve, reject);
|
|
1067
|
+
void this.pollForJob(config, resolve, reject);
|
|
1045
1068
|
}, this.pollingInterval);
|
|
1046
1069
|
}
|
|
1047
1070
|
})
|
|
@@ -1050,7 +1073,15 @@ export default class API {
|
|
|
1050
1073
|
});
|
|
1051
1074
|
};
|
|
1052
1075
|
|
|
1053
|
-
private pollForExperience = (config, resolve, reject) => {
|
|
1076
|
+
private pollForExperience = async (config, resolve, reject) => {
|
|
1077
|
+
if (this.authType === API_AUTH_TYPES.TOKEN) {
|
|
1078
|
+
const token = await this.getToken();
|
|
1079
|
+
const headers = {
|
|
1080
|
+
Authorization: `Bearer ${token}`
|
|
1081
|
+
};
|
|
1082
|
+
config.headers = headers;
|
|
1083
|
+
}
|
|
1084
|
+
|
|
1054
1085
|
this.http(config)
|
|
1055
1086
|
.then((res: AxiosResponse) => {
|
|
1056
1087
|
if (res.data.status === 'failed') {
|
|
@@ -1060,14 +1091,14 @@ export default class API {
|
|
|
1060
1091
|
} else if (res.data.output !== undefined) {
|
|
1061
1092
|
if (isObjEmpty(res.data.output)) {
|
|
1062
1093
|
this.experiencePollTimer = setTimeout(() => {
|
|
1063
|
-
this.pollForExperience(config, resolve, reject);
|
|
1094
|
+
void this.pollForExperience(config, resolve, reject);
|
|
1064
1095
|
}, this.pollingInterval);
|
|
1065
1096
|
} else {
|
|
1066
1097
|
resolve(res.data);
|
|
1067
1098
|
}
|
|
1068
1099
|
} else {
|
|
1069
1100
|
this.experiencePollTimer = setTimeout(() => {
|
|
1070
|
-
this.pollForExperience(config, resolve, reject);
|
|
1101
|
+
void this.pollForExperience(config, resolve, reject);
|
|
1071
1102
|
}, this.pollingInterval);
|
|
1072
1103
|
}
|
|
1073
1104
|
})
|
|
@@ -1189,7 +1220,7 @@ export default class API {
|
|
|
1189
1220
|
return this.doRequest(config);
|
|
1190
1221
|
} else {
|
|
1191
1222
|
return new Promise((resolve, reject) => {
|
|
1192
|
-
this.pollForExperience(config, resolve, reject);
|
|
1223
|
+
void this.pollForExperience(config, resolve, reject);
|
|
1193
1224
|
});
|
|
1194
1225
|
}
|
|
1195
1226
|
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [initPendo description]
|
|
3
|
+
* This initalizes the Pendo Help system in the application
|
|
4
|
+
* The Pendo script should be added to the DOM in `index.html`
|
|
5
|
+
* This function takes the user object and sets some initial information on Pendo for tracking
|
|
6
|
+
* For full documentation of Pendo object please see Pendo Docs
|
|
7
|
+
*
|
|
8
|
+
* To prevent application breaking things, we wrap both groups in a try/catch
|
|
9
|
+
* This allows our Application to work regardless of the status of Pendo
|
|
10
|
+
* *************************************************************
|
|
11
|
+
* We DO NOT WANT TO BREAK OUR APP if a 3rd party script fails
|
|
12
|
+
* *************************************************************
|
|
13
|
+
*
|
|
14
|
+
* @param {object} userInfo User object from crm/v1/user
|
|
15
|
+
* Each application's `user/` endpoint returns slightly different data
|
|
16
|
+
* The `visitor` object will need to be adjusted based on the data returned
|
|
17
|
+
* We should always have access to:
|
|
18
|
+
* id
|
|
19
|
+
* email
|
|
20
|
+
* full_name
|
|
21
|
+
*
|
|
22
|
+
* @return {undefined} Nothing
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
declare const pendo;
|
|
26
|
+
|
|
27
|
+
export const initPendo = (environment, userInfo) => {
|
|
28
|
+
if (/dev/gi.test(environment)) {
|
|
29
|
+
console.info(
|
|
30
|
+
'%cPendo%c is %cdisabled%c for local testing',
|
|
31
|
+
'color: #e247e5; font-weight:bold;',
|
|
32
|
+
'color:#fff; font-weight:normal;',
|
|
33
|
+
'color:red; font-weight:bold;',
|
|
34
|
+
'color:#fff; font-weight:normal;'
|
|
35
|
+
);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
try {
|
|
40
|
+
const visitor = {
|
|
41
|
+
id: userInfo.sub,
|
|
42
|
+
email: userInfo['https://imposium.com/email']
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/* eslint-disable no-undef */
|
|
46
|
+
pendo.initialize({
|
|
47
|
+
visitor: {
|
|
48
|
+
...visitor,
|
|
49
|
+
environment,
|
|
50
|
+
product: 'Imposium Project Editor',
|
|
51
|
+
language: navigator.language
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
/* eslint-enable no-undef */
|
|
55
|
+
} catch (err) {
|
|
56
|
+
console.groupCollapsed('Pendo Init Problem');
|
|
57
|
+
console.error('Problem Starting up Pendo');
|
|
58
|
+
console.error(err);
|
|
59
|
+
console.groupEnd();
|
|
60
|
+
}
|
|
61
|
+
};
|
package/src/utils/routing.ts
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
import { browserHistory } from 'react-router';
|
|
2
|
+
|
|
3
|
+
export const pushRoute = (route): void => {
|
|
4
|
+
browserHistory.push(route);
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export const replaceRoute = (route): void => {
|
|
8
|
+
browserHistory.replace(route);
|
|
9
|
+
};
|
|
10
|
+
|
|
1
11
|
export const getDemoURL = (): string => {
|
|
2
12
|
const {
|
|
3
13
|
location: { href }
|