@imposium-hub/components 2.5.18 → 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/Util.js +1 -2
- package/dist/cjs/Util.js.map +1 -1
- package/dist/cjs/components/app-wrapper/AppWrapper.d.ts +32 -21
- package/dist/cjs/components/app-wrapper/AppWrapper.js +244 -208
- package/dist/cjs/components/app-wrapper/AppWrapper.js.map +1 -1
- package/dist/cjs/components/app-wrapper/AppWrapperV2.d.ts +3 -9
- package/dist/cjs/components/app-wrapper/AppWrapperV2.js +119 -45
- package/dist/cjs/components/app-wrapper/AppWrapperV2.js.map +1 -1
- package/dist/cjs/components/app-wrapper/AppWrapperV3.d.ts +1 -1
- package/dist/cjs/components/app-wrapper/AppWrapperV3.js +7 -44
- package/dist/cjs/components/app-wrapper/AppWrapperV3.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/compositions/TextLayer.js +0 -1
- package/dist/cjs/components/compositions/TextLayer.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 +8 -9
- package/dist/cjs/components/header/Header.js +95 -160
- 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/modal/Modal.d.ts +1 -1
- package/dist/cjs/components/modal/Modal.js +2 -3
- package/dist/cjs/components/modal/Modal.js.map +1 -1
- 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 +4 -7
- package/dist/cjs/index.js +11 -17
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/redux/actions/asset-uploads.js +0 -1
- package/dist/cjs/redux/actions/asset-uploads.js.map +1 -1
- package/dist/cjs/services/API.d.ts +10 -3
- package/dist/cjs/services/API.js +230 -84
- package/dist/cjs/services/API.js.map +1 -1
- package/dist/cjs/services/Session.d.ts +0 -11
- package/dist/cjs/services/Session.js +3 -126
- package/dist/cjs/services/Session.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/Util.js +1 -2
- package/dist/esm/Util.js.map +1 -1
- package/dist/esm/components/app-wrapper/AppWrapper.d.ts +32 -21
- package/dist/esm/components/app-wrapper/AppWrapper.js +143 -172
- package/dist/esm/components/app-wrapper/AppWrapper.js.map +1 -1
- package/dist/esm/components/app-wrapper/AppWrapperV2.d.ts +3 -9
- package/dist/esm/components/app-wrapper/AppWrapperV2.js +30 -33
- package/dist/esm/components/app-wrapper/AppWrapperV2.js.map +1 -1
- package/dist/esm/components/app-wrapper/AppWrapperV3.d.ts +1 -1
- package/dist/esm/components/app-wrapper/AppWrapperV3.js +5 -42
- package/dist/esm/components/app-wrapper/AppWrapperV3.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/compositions/TextLayer.js +0 -1
- package/dist/esm/components/compositions/TextLayer.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 +8 -9
- package/dist/esm/components/header/Header.js +93 -147
- 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/modal/Modal.d.ts +1 -1
- package/dist/esm/components/modal/Modal.js +2 -3
- package/dist/esm/components/modal/Modal.js.map +1 -1
- 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 +4 -7
- package/dist/esm/index.js +4 -7
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/redux/actions/asset-uploads.js +0 -1
- package/dist/esm/redux/actions/asset-uploads.js.map +1 -1
- package/dist/esm/services/API.d.ts +10 -3
- package/dist/esm/services/API.js +74 -27
- package/dist/esm/services/API.js.map +1 -1
- package/dist/esm/services/Session.d.ts +0 -11
- package/dist/esm/services/Session.js +3 -84
- package/dist/esm/services/Session.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/dist/styles.css +0 -5
- package/dist/styles.less +0 -1
- package/less/components/button.less +0 -1
- package/package.json +5 -2
- package/src/Util.ts +1 -2
- package/src/components/app-wrapper/AppWrapper.tsx +245 -257
- package/src/components/assets/StoryTableNameFilter.tsx +6 -22
- package/src/components/compositions/TextLayer.tsx +0 -1
- 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 +130 -242
- package/src/components/header/ProjectDropdown.tsx +174 -0
- package/src/components/modal/Modal.tsx +7 -10
- 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 +6 -14
- package/src/redux/actions/asset-uploads.ts +0 -1
- package/src/services/API.ts +92 -30
- package/src/utils/modal.ts +9 -0
- package/src/utils/pendo.ts +61 -0
- package/src/utils/routing.ts +10 -0
- package/src/components/auth-gate/AuthGate.tsx +0 -84
- package/src/redux/actions/auth.ts +0 -30
- package/src/redux/reducers/auth.ts +0 -33
- package/src/services/Auth0.ts +0 -82
- package/src/services/Session.ts +0 -153
|
@@ -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
|
+
};
|
|
@@ -8,7 +8,7 @@ interface IModalProps {
|
|
|
8
8
|
isOpen: boolean;
|
|
9
9
|
style?: any;
|
|
10
10
|
wrapperStyle?: any;
|
|
11
|
-
onRequestClose
|
|
11
|
+
onRequestClose(e): void;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
class Modal extends React.PureComponent<IModalProps> {
|
|
@@ -49,14 +49,7 @@ class Modal extends React.PureComponent<IModalProps> {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
public render() {
|
|
52
|
-
const { isOpen, style, wrapperStyle
|
|
53
|
-
const btnClose = onRequestClose ? (
|
|
54
|
-
<Button
|
|
55
|
-
onClick={this.evtHandlers.onClose}
|
|
56
|
-
customStyles={this.closeStyles}>
|
|
57
|
-
{ICON_TIMES}
|
|
58
|
-
</Button>
|
|
59
|
-
) : null;
|
|
52
|
+
const { isOpen, style, wrapperStyle } = this.props;
|
|
60
53
|
|
|
61
54
|
if (isOpen) {
|
|
62
55
|
return (
|
|
@@ -71,7 +64,11 @@ class Modal extends React.PureComponent<IModalProps> {
|
|
|
71
64
|
className='modal-container'
|
|
72
65
|
style={style}>
|
|
73
66
|
<div className='modal-content'>{this.props.children}</div>
|
|
74
|
-
|
|
67
|
+
<Button
|
|
68
|
+
onClick={this.evtHandlers.onClose}
|
|
69
|
+
customStyles={this.closeStyles}>
|
|
70
|
+
{ICON_TIMES}
|
|
71
|
+
</Button>
|
|
75
72
|
</div>
|
|
76
73
|
</div>
|
|
77
74
|
);
|
|
@@ -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
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
React Components
|
|
3
3
|
*/
|
|
4
|
-
import AppWrapper from './components/app-wrapper/AppWrapper';
|
|
5
|
-
import AuthGate from './components/auth-gate/AuthGate';
|
|
6
4
|
import ImposiumHeader from './components/header/Header';
|
|
7
5
|
import ImposiumDropdown from './components/dropdown/Dropdown';
|
|
8
6
|
import Button from './components/button/Button';
|
|
@@ -74,8 +72,6 @@ import SMPTEField from './components/smpte-field/SMPTEField';
|
|
|
74
72
|
/*
|
|
75
73
|
Redux Handlers / Thunks
|
|
76
74
|
*/
|
|
77
|
-
import auth from './redux/reducers/auth';
|
|
78
|
-
import { login, clearCachedAuth } from './redux/actions/auth';
|
|
79
75
|
import access from './redux/reducers/access';
|
|
80
76
|
import publish from './redux/reducers/publish';
|
|
81
77
|
import {
|
|
@@ -118,8 +114,6 @@ import batchActions from './redux/actions/active-batch';
|
|
|
118
114
|
/*
|
|
119
115
|
Statics / Services
|
|
120
116
|
*/
|
|
121
|
-
import AuthService, { IIdentity } from './services/Auth0';
|
|
122
|
-
import SessionService, { IHubSession } from './services/Session';
|
|
123
117
|
import API, { IImposiumAPI } from './services/API';
|
|
124
118
|
import LegacyAPI from './services/API-Legacy';
|
|
125
119
|
import StorageService from './services/Storage';
|
|
@@ -164,10 +158,15 @@ import AssetsTableAssetIdCell from './components/assets/AssetsTableAssetIdCell';
|
|
|
164
158
|
import { resetStoryFilter, updateStoryFilter } from './redux/actions/story-filter';
|
|
165
159
|
import storyFilter from './redux/reducers/story-filter';
|
|
166
160
|
import StoryTableNameFilter from './components/assets/StoryTableNameFilter';
|
|
161
|
+
import { AppWrapper } from './components/app-wrapper/AppWrapper';
|
|
162
|
+
import { pushRoute, replaceRoute } from './utils/routing';
|
|
163
|
+
import { ProjectDropdown } from './components/header/ProjectDropdown';
|
|
167
164
|
|
|
168
165
|
export {
|
|
166
|
+
ProjectDropdown,
|
|
167
|
+
pushRoute,
|
|
168
|
+
replaceRoute,
|
|
169
169
|
AppWrapper,
|
|
170
|
-
AuthGate,
|
|
171
170
|
ImposiumHeader,
|
|
172
171
|
ImposiumDropdown,
|
|
173
172
|
Button,
|
|
@@ -239,9 +238,6 @@ export {
|
|
|
239
238
|
DroppableAssetRenderer,
|
|
240
239
|
PreviewNotAvailable,
|
|
241
240
|
IStaticComposition,
|
|
242
|
-
auth,
|
|
243
|
-
login,
|
|
244
|
-
clearCachedAuth,
|
|
245
241
|
access,
|
|
246
242
|
setAccessData,
|
|
247
243
|
storyAdded,
|
|
@@ -276,10 +272,6 @@ export {
|
|
|
276
272
|
assetActions,
|
|
277
273
|
activeBatch,
|
|
278
274
|
batchActions,
|
|
279
|
-
AuthService,
|
|
280
|
-
IIdentity,
|
|
281
|
-
SessionService,
|
|
282
|
-
IHubSession,
|
|
283
275
|
API,
|
|
284
276
|
IImposiumAPI,
|
|
285
277
|
LegacyAPI,
|
package/src/services/API.ts
CHANGED
|
@@ -8,10 +8,10 @@ import axios, {
|
|
|
8
8
|
} from 'axios';
|
|
9
9
|
import { isObjEmpty } from '../Util';
|
|
10
10
|
import { JOB_TYPES } from '../constants/api';
|
|
11
|
-
import {
|
|
11
|
+
import { API_AUTH_TYPES } from '../components/font-picker/font-manager/constants';
|
|
12
12
|
|
|
13
13
|
export interface IImposiumAPI {
|
|
14
|
-
|
|
14
|
+
init(baseUrl: string, credentials: any, orgId?: string);
|
|
15
15
|
getAssets(filters: any, storyId: string, unprocessed?: boolean, showVariables?: boolean);
|
|
16
16
|
getAssetItem(assetId: string);
|
|
17
17
|
uploadAsset(
|
|
@@ -147,6 +147,9 @@ export interface IImposiumAPI {
|
|
|
147
147
|
getAssetMap(storyId: string);
|
|
148
148
|
clearStoryCache(storyId: string);
|
|
149
149
|
debugId(id: string);
|
|
150
|
+
cacheActiveStory(serviceId: any, orgId: string, storyId: string);
|
|
151
|
+
getCachedStoryForOrg(serviceId: string, orgId: string);
|
|
152
|
+
getAccessData(includeTotalRenders?: boolean, orgId?: string);
|
|
150
153
|
}
|
|
151
154
|
|
|
152
155
|
interface ITTSOptions {
|
|
@@ -182,33 +185,51 @@ export default class API {
|
|
|
182
185
|
|
|
183
186
|
private cancelTokens: object = {};
|
|
184
187
|
|
|
185
|
-
|
|
188
|
+
private getToken;
|
|
189
|
+
|
|
190
|
+
private authType;
|
|
191
|
+
|
|
192
|
+
public init(baseURL: string, credentials: any, organizationId?: string): void {
|
|
186
193
|
// JWT
|
|
194
|
+
const headers = {
|
|
195
|
+
'X-Imposium-API-Version': '2.0.2'
|
|
196
|
+
};
|
|
197
|
+
|
|
187
198
|
if (organizationId) {
|
|
199
|
+
headers['X-Imposium-Account-Id'] = organizationId;
|
|
200
|
+
}
|
|
201
|
+
|
|
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;
|
|
188
205
|
this.http = axios.create({
|
|
189
206
|
baseURL,
|
|
190
207
|
headers: {
|
|
191
|
-
'
|
|
192
|
-
'X-Imposium-API-Version': '2.0.
|
|
193
|
-
'X-Imposium-Account-Id': organizationId || ''
|
|
208
|
+
'X-Imposium-Access-Key': `${credentials}`,
|
|
209
|
+
'X-Imposium-API-Version': '2.0.0'
|
|
194
210
|
}
|
|
195
211
|
});
|
|
196
|
-
|
|
197
|
-
// Basic Access Key
|
|
198
212
|
} else {
|
|
213
|
+
this.authType = API_AUTH_TYPES.TOKEN;
|
|
199
214
|
this.http = axios.create({
|
|
200
215
|
baseURL,
|
|
201
|
-
headers
|
|
202
|
-
'X-Imposium-Access-Key': `${idToken}`,
|
|
203
|
-
'X-Imposium-API-Version': '2.0.0'
|
|
204
|
-
}
|
|
216
|
+
headers
|
|
205
217
|
});
|
|
206
218
|
}
|
|
207
219
|
|
|
220
|
+
this.getToken = credentials;
|
|
208
221
|
this.awsHttp = axios.create();
|
|
209
222
|
}
|
|
210
223
|
|
|
211
|
-
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
|
+
|
|
212
233
|
return new Promise((resolve, reject) => {
|
|
213
234
|
this.http(config)
|
|
214
235
|
.then((res: AxiosResponse) => {
|
|
@@ -222,21 +243,11 @@ export default class API {
|
|
|
222
243
|
if (!axios.isCancel(e) && reqAlias) {
|
|
223
244
|
this.clearCache(reqAlias);
|
|
224
245
|
}
|
|
225
|
-
if (e.response && (e.response.status === 403 || e.response.status === 401)) {
|
|
226
|
-
alert(copy.sessionExpired);
|
|
227
|
-
}
|
|
228
246
|
reject(e);
|
|
229
247
|
});
|
|
230
248
|
});
|
|
231
249
|
};
|
|
232
250
|
|
|
233
|
-
public updateProjectVersion = (storyId: string): Promise<any | Error> => {
|
|
234
|
-
return this.doRequest({
|
|
235
|
-
method: 'POST',
|
|
236
|
-
url: `/story/${storyId}/update-project-version`
|
|
237
|
-
});
|
|
238
|
-
};
|
|
239
|
-
|
|
240
251
|
public saveQueueAssoc = (
|
|
241
252
|
queueId: string,
|
|
242
253
|
storyId: string,
|
|
@@ -1028,11 +1039,19 @@ export default class API {
|
|
|
1028
1039
|
};
|
|
1029
1040
|
|
|
1030
1041
|
return new Promise((resolve, reject) => {
|
|
1031
|
-
this.pollForJob(config, resolve, reject);
|
|
1042
|
+
void this.pollForJob(config, resolve, reject);
|
|
1032
1043
|
});
|
|
1033
1044
|
};
|
|
1034
1045
|
|
|
1035
|
-
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
|
+
|
|
1036
1055
|
this.http(config)
|
|
1037
1056
|
.then((res: AxiosResponse) => {
|
|
1038
1057
|
const {
|
|
@@ -1045,7 +1064,7 @@ export default class API {
|
|
|
1045
1064
|
resolve(res.data);
|
|
1046
1065
|
} else {
|
|
1047
1066
|
this.jobPollTimer = setTimeout(() => {
|
|
1048
|
-
this.pollForJob(config, resolve, reject);
|
|
1067
|
+
void this.pollForJob(config, resolve, reject);
|
|
1049
1068
|
}, this.pollingInterval);
|
|
1050
1069
|
}
|
|
1051
1070
|
})
|
|
@@ -1054,7 +1073,15 @@ export default class API {
|
|
|
1054
1073
|
});
|
|
1055
1074
|
};
|
|
1056
1075
|
|
|
1057
|
-
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
|
+
|
|
1058
1085
|
this.http(config)
|
|
1059
1086
|
.then((res: AxiosResponse) => {
|
|
1060
1087
|
if (res.data.status === 'failed') {
|
|
@@ -1064,14 +1091,14 @@ export default class API {
|
|
|
1064
1091
|
} else if (res.data.output !== undefined) {
|
|
1065
1092
|
if (isObjEmpty(res.data.output)) {
|
|
1066
1093
|
this.experiencePollTimer = setTimeout(() => {
|
|
1067
|
-
this.pollForExperience(config, resolve, reject);
|
|
1094
|
+
void this.pollForExperience(config, resolve, reject);
|
|
1068
1095
|
}, this.pollingInterval);
|
|
1069
1096
|
} else {
|
|
1070
1097
|
resolve(res.data);
|
|
1071
1098
|
}
|
|
1072
1099
|
} else {
|
|
1073
1100
|
this.experiencePollTimer = setTimeout(() => {
|
|
1074
|
-
this.pollForExperience(config, resolve, reject);
|
|
1101
|
+
void this.pollForExperience(config, resolve, reject);
|
|
1075
1102
|
}, this.pollingInterval);
|
|
1076
1103
|
}
|
|
1077
1104
|
})
|
|
@@ -1193,7 +1220,7 @@ export default class API {
|
|
|
1193
1220
|
return this.doRequest(config);
|
|
1194
1221
|
} else {
|
|
1195
1222
|
return new Promise((resolve, reject) => {
|
|
1196
|
-
this.pollForExperience(config, resolve, reject);
|
|
1223
|
+
void this.pollForExperience(config, resolve, reject);
|
|
1197
1224
|
});
|
|
1198
1225
|
}
|
|
1199
1226
|
};
|
|
@@ -1657,4 +1684,39 @@ export default class API {
|
|
|
1657
1684
|
method: 'GET'
|
|
1658
1685
|
});
|
|
1659
1686
|
};
|
|
1687
|
+
|
|
1688
|
+
public cacheActiveStory = (serviceId, orgId, storyId): Promise<any | Error> => {
|
|
1689
|
+
const route = `/service/${serviceId}/${orgId}/active`;
|
|
1690
|
+
|
|
1691
|
+
return this.doRequest({
|
|
1692
|
+
method: 'POST',
|
|
1693
|
+
url: route,
|
|
1694
|
+
data: {
|
|
1695
|
+
story_id: storyId,
|
|
1696
|
+
organization_id: orgId
|
|
1697
|
+
}
|
|
1698
|
+
});
|
|
1699
|
+
};
|
|
1700
|
+
|
|
1701
|
+
public getCachedStoryForOrg = (serviceId, orgId): Promise<any | Error> => {
|
|
1702
|
+
const route = `/service/${serviceId}/${orgId}/last_active`;
|
|
1703
|
+
|
|
1704
|
+
return this.doRequest({
|
|
1705
|
+
method: 'GET',
|
|
1706
|
+
url: route
|
|
1707
|
+
});
|
|
1708
|
+
};
|
|
1709
|
+
|
|
1710
|
+
public getAccessData = (getTotalRenders: boolean = false): Promise<any | Error> => {
|
|
1711
|
+
let route = `/access`;
|
|
1712
|
+
|
|
1713
|
+
if (getTotalRenders) {
|
|
1714
|
+
route += '?include_total_renders=true';
|
|
1715
|
+
}
|
|
1716
|
+
|
|
1717
|
+
return this.doRequest({
|
|
1718
|
+
method: 'GET',
|
|
1719
|
+
url: route
|
|
1720
|
+
});
|
|
1721
|
+
};
|
|
1660
1722
|
}
|
|
@@ -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 }
|