@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.
Files changed (185) hide show
  1. package/dist/cjs/Util.js +1 -2
  2. package/dist/cjs/Util.js.map +1 -1
  3. package/dist/cjs/components/app-wrapper/AppWrapper.d.ts +32 -21
  4. package/dist/cjs/components/app-wrapper/AppWrapper.js +244 -208
  5. package/dist/cjs/components/app-wrapper/AppWrapper.js.map +1 -1
  6. package/dist/cjs/components/app-wrapper/AppWrapperV2.d.ts +3 -9
  7. package/dist/cjs/components/app-wrapper/AppWrapperV2.js +119 -45
  8. package/dist/cjs/components/app-wrapper/AppWrapperV2.js.map +1 -1
  9. package/dist/cjs/components/app-wrapper/AppWrapperV3.d.ts +1 -1
  10. package/dist/cjs/components/app-wrapper/AppWrapperV3.js +7 -44
  11. package/dist/cjs/components/app-wrapper/AppWrapperV3.js.map +1 -1
  12. package/dist/cjs/components/assets/StoryTableNameFilter.d.ts +9 -2
  13. package/dist/cjs/components/assets/StoryTableNameFilter.js +3 -13
  14. package/dist/cjs/components/assets/StoryTableNameFilter.js.map +1 -1
  15. package/dist/cjs/components/compositions/TextLayer.js +0 -1
  16. package/dist/cjs/components/compositions/TextLayer.js.map +1 -1
  17. package/dist/cjs/components/context-menu/AnimateComponent.d.ts +6 -6
  18. package/dist/cjs/components/context-menu/AnimateComponent.js.map +1 -1
  19. package/dist/cjs/components/context-menu/ContextMenu.d.ts +12 -27
  20. package/dist/cjs/components/context-menu/ContextMenu.js +2 -15
  21. package/dist/cjs/components/context-menu/ContextMenu.js.map +1 -1
  22. package/dist/cjs/components/context-menu/ContextMenuItem.d.ts +6 -18
  23. package/dist/cjs/components/context-menu/ContextMenuItem.js +2 -21
  24. package/dist/cjs/components/context-menu/ContextMenuItem.js.map +1 -1
  25. package/dist/cjs/components/context-menu/ContextMenuTrigger.d.ts +6 -16
  26. package/dist/cjs/components/context-menu/ContextMenuTrigger.js +2 -20
  27. package/dist/cjs/components/context-menu/ContextMenuTrigger.js.map +1 -1
  28. package/dist/cjs/components/context-menu/SubMenu.d.ts +4 -12
  29. package/dist/cjs/components/context-menu/SubMenu.js +2 -17
  30. package/dist/cjs/components/context-menu/SubMenu.js.map +1 -1
  31. package/dist/cjs/components/data-table/Paginator.d.ts +16 -1
  32. package/dist/cjs/components/data-table/Paginator.js +1 -1
  33. package/dist/cjs/components/data-table/Paginator.js.map +1 -1
  34. package/dist/cjs/components/font-picker/font-manager/constants.d.ts +4 -0
  35. package/dist/cjs/components/font-picker/font-manager/constants.js +5 -1
  36. package/dist/cjs/components/font-picker/font-manager/constants.js.map +1 -1
  37. package/dist/cjs/components/header/Header.d.ts +8 -9
  38. package/dist/cjs/components/header/Header.js +95 -160
  39. package/dist/cjs/components/header/Header.js.map +1 -1
  40. package/dist/cjs/components/header/ProjectDropdown.d.ts +13 -0
  41. package/dist/cjs/components/header/ProjectDropdown.js +128 -0
  42. package/dist/cjs/components/header/ProjectDropdown.js.map +1 -0
  43. package/dist/cjs/components/header/StoryDropdown.d.ts +6 -0
  44. package/dist/cjs/components/header/StoryDropdown.js +111 -0
  45. package/dist/cjs/components/header/StoryDropdown.js.map +1 -0
  46. package/dist/cjs/components/modal/Modal.d.ts +1 -1
  47. package/dist/cjs/components/modal/Modal.js +2 -3
  48. package/dist/cjs/components/modal/Modal.js.map +1 -1
  49. package/dist/cjs/components/portal/Portal.d.ts +0 -2
  50. package/dist/cjs/components/portal/Portal.js.map +1 -1
  51. package/dist/cjs/components/publish-wizard/PublishWizard.d.ts +1 -3
  52. package/dist/cjs/components/publish-wizard/PublishWizard.js.map +1 -1
  53. package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
  54. package/dist/cjs/constants/copy.d.ts +3 -0
  55. package/dist/cjs/constants/copy.js +3 -0
  56. package/dist/cjs/constants/copy.js.map +1 -1
  57. package/dist/cjs/index.d.ts +4 -7
  58. package/dist/cjs/index.js +11 -17
  59. package/dist/cjs/index.js.map +1 -1
  60. package/dist/cjs/redux/actions/asset-uploads.js +0 -1
  61. package/dist/cjs/redux/actions/asset-uploads.js.map +1 -1
  62. package/dist/cjs/services/API.d.ts +10 -3
  63. package/dist/cjs/services/API.js +230 -84
  64. package/dist/cjs/services/API.js.map +1 -1
  65. package/dist/cjs/services/Session.d.ts +0 -11
  66. package/dist/cjs/services/Session.js +3 -126
  67. package/dist/cjs/services/Session.js.map +1 -1
  68. package/dist/cjs/utils/modal.d.ts +2 -0
  69. package/dist/cjs/utils/modal.js +11 -0
  70. package/dist/cjs/utils/modal.js.map +1 -0
  71. package/dist/cjs/utils/pendo.d.ts +24 -0
  72. package/dist/cjs/utils/pendo.js +62 -0
  73. package/dist/cjs/utils/pendo.js.map +1 -0
  74. package/dist/cjs/utils/routing.d.ts +2 -0
  75. package/dist/cjs/utils/routing.js +10 -1
  76. package/dist/cjs/utils/routing.js.map +1 -1
  77. package/dist/esm/Util.js +1 -2
  78. package/dist/esm/Util.js.map +1 -1
  79. package/dist/esm/components/app-wrapper/AppWrapper.d.ts +32 -21
  80. package/dist/esm/components/app-wrapper/AppWrapper.js +143 -172
  81. package/dist/esm/components/app-wrapper/AppWrapper.js.map +1 -1
  82. package/dist/esm/components/app-wrapper/AppWrapperV2.d.ts +3 -9
  83. package/dist/esm/components/app-wrapper/AppWrapperV2.js +30 -33
  84. package/dist/esm/components/app-wrapper/AppWrapperV2.js.map +1 -1
  85. package/dist/esm/components/app-wrapper/AppWrapperV3.d.ts +1 -1
  86. package/dist/esm/components/app-wrapper/AppWrapperV3.js +5 -42
  87. package/dist/esm/components/app-wrapper/AppWrapperV3.js.map +1 -1
  88. package/dist/esm/components/assets/StoryTableNameFilter.d.ts +9 -2
  89. package/dist/esm/components/assets/StoryTableNameFilter.js +3 -13
  90. package/dist/esm/components/assets/StoryTableNameFilter.js.map +1 -1
  91. package/dist/esm/components/compositions/TextLayer.js +0 -1
  92. package/dist/esm/components/compositions/TextLayer.js.map +1 -1
  93. package/dist/esm/components/context-menu/AnimateComponent.d.ts +6 -6
  94. package/dist/esm/components/context-menu/AnimateComponent.js.map +1 -1
  95. package/dist/esm/components/context-menu/ContextMenu.d.ts +12 -27
  96. package/dist/esm/components/context-menu/ContextMenu.js +2 -4
  97. package/dist/esm/components/context-menu/ContextMenu.js.map +1 -1
  98. package/dist/esm/components/context-menu/ContextMenuItem.d.ts +6 -18
  99. package/dist/esm/components/context-menu/ContextMenuItem.js +2 -10
  100. package/dist/esm/components/context-menu/ContextMenuItem.js.map +1 -1
  101. package/dist/esm/components/context-menu/ContextMenuTrigger.d.ts +6 -16
  102. package/dist/esm/components/context-menu/ContextMenuTrigger.js +2 -9
  103. package/dist/esm/components/context-menu/ContextMenuTrigger.js.map +1 -1
  104. package/dist/esm/components/context-menu/SubMenu.d.ts +4 -12
  105. package/dist/esm/components/context-menu/SubMenu.js +2 -6
  106. package/dist/esm/components/context-menu/SubMenu.js.map +1 -1
  107. package/dist/esm/components/data-table/Paginator.d.ts +16 -1
  108. package/dist/esm/components/data-table/Paginator.js +1 -1
  109. package/dist/esm/components/data-table/Paginator.js.map +1 -1
  110. package/dist/esm/components/font-picker/font-manager/constants.d.ts +4 -0
  111. package/dist/esm/components/font-picker/font-manager/constants.js +4 -0
  112. package/dist/esm/components/font-picker/font-manager/constants.js.map +1 -1
  113. package/dist/esm/components/header/Header.d.ts +8 -9
  114. package/dist/esm/components/header/Header.js +93 -147
  115. package/dist/esm/components/header/Header.js.map +1 -1
  116. package/dist/esm/components/header/ProjectDropdown.d.ts +13 -0
  117. package/dist/esm/components/header/ProjectDropdown.js +101 -0
  118. package/dist/esm/components/header/ProjectDropdown.js.map +1 -0
  119. package/dist/esm/components/header/StoryDropdown.d.ts +6 -0
  120. package/dist/esm/components/header/StoryDropdown.js +82 -0
  121. package/dist/esm/components/header/StoryDropdown.js.map +1 -0
  122. package/dist/esm/components/modal/Modal.d.ts +1 -1
  123. package/dist/esm/components/modal/Modal.js +2 -3
  124. package/dist/esm/components/modal/Modal.js.map +1 -1
  125. package/dist/esm/components/portal/Portal.d.ts +0 -2
  126. package/dist/esm/components/portal/Portal.js.map +1 -1
  127. package/dist/esm/components/publish-wizard/PublishWizard.d.ts +1 -3
  128. package/dist/esm/components/publish-wizard/PublishWizard.js.map +1 -1
  129. package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
  130. package/dist/esm/constants/copy.d.ts +3 -0
  131. package/dist/esm/constants/copy.js +3 -0
  132. package/dist/esm/constants/copy.js.map +1 -1
  133. package/dist/esm/index.d.ts +4 -7
  134. package/dist/esm/index.js +4 -7
  135. package/dist/esm/index.js.map +1 -1
  136. package/dist/esm/redux/actions/asset-uploads.js +0 -1
  137. package/dist/esm/redux/actions/asset-uploads.js.map +1 -1
  138. package/dist/esm/services/API.d.ts +10 -3
  139. package/dist/esm/services/API.js +74 -27
  140. package/dist/esm/services/API.js.map +1 -1
  141. package/dist/esm/services/Session.d.ts +0 -11
  142. package/dist/esm/services/Session.js +3 -84
  143. package/dist/esm/services/Session.js.map +1 -1
  144. package/dist/esm/utils/modal.d.ts +2 -0
  145. package/dist/esm/utils/modal.js +7 -0
  146. package/dist/esm/utils/modal.js.map +1 -0
  147. package/dist/esm/utils/pendo.d.ts +24 -0
  148. package/dist/esm/utils/pendo.js +52 -0
  149. package/dist/esm/utils/pendo.js.map +1 -0
  150. package/dist/esm/utils/routing.d.ts +2 -0
  151. package/dist/esm/utils/routing.js +7 -0
  152. package/dist/esm/utils/routing.js.map +1 -1
  153. package/dist/styles.css +0 -5
  154. package/dist/styles.less +0 -1
  155. package/less/components/button.less +0 -1
  156. package/package.json +5 -2
  157. package/src/Util.ts +1 -2
  158. package/src/components/app-wrapper/AppWrapper.tsx +245 -257
  159. package/src/components/assets/StoryTableNameFilter.tsx +6 -22
  160. package/src/components/compositions/TextLayer.tsx +0 -1
  161. package/src/components/context-menu/AnimateComponent.tsx +12 -1
  162. package/src/components/context-menu/ContextMenu.tsx +16 -8
  163. package/src/components/context-menu/ContextMenuItem.tsx +12 -11
  164. package/src/components/context-menu/ContextMenuTrigger.tsx +12 -10
  165. package/src/components/context-menu/SubMenu.tsx +6 -8
  166. package/src/components/data-table/Paginator.tsx +19 -6
  167. package/src/components/font-picker/font-manager/constants.ts +5 -0
  168. package/src/components/header/Header.tsx +130 -242
  169. package/src/components/header/ProjectDropdown.tsx +174 -0
  170. package/src/components/modal/Modal.tsx +7 -10
  171. package/src/components/portal/Portal.tsx +1 -2
  172. package/src/components/publish-wizard/PublishWizard.tsx +1 -1
  173. package/src/components/publish-wizard/publish/EmailWorkflow.tsx +7 -1
  174. package/src/constants/copy.ts +3 -0
  175. package/src/index.ts +6 -14
  176. package/src/redux/actions/asset-uploads.ts +0 -1
  177. package/src/services/API.ts +92 -30
  178. package/src/utils/modal.ts +9 -0
  179. package/src/utils/pendo.ts +61 -0
  180. package/src/utils/routing.ts +10 -0
  181. package/src/components/auth-gate/AuthGate.tsx +0 -84
  182. package/src/redux/actions/auth.ts +0 -30
  183. package/src/redux/reducers/auth.ts +0 -33
  184. package/src/services/Auth0.ts +0 -82
  185. 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?(e): void;
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, onRequestClose } = this.props;
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
- {btnClose}
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 { ReactNode, ReactPortal } from 'react';
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
- const CrMOptions = ({ options, onChange, errorCopy = '' }) => {
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;
@@ -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,
@@ -410,7 +410,6 @@ const pollAssetJobs = (api, ongoingJobs: any[], timeout: number): void => {
410
410
  );
411
411
  }
412
412
  }
413
- // TODO: handle errored out
414
413
  });
415
414
 
416
415
  if (ongoingJobs.length > 0) {
@@ -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 { assets as copy } from '../constants/copy';
11
+ import { API_AUTH_TYPES } from '../components/font-picker/font-manager/constants';
12
12
 
13
13
  export interface IImposiumAPI {
14
- updateProjectVersion(storyId: string);
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
- constructor(baseURL: string, idToken: string, organizationId?: string) {
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
- 'Authorization': `Bearer ${idToken}`,
192
- 'X-Imposium-API-Version': '2.0.2',
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,9 @@
1
+ import { IConfirmModalProps } from '../components/confirm-modal/ConfirmModal';
2
+
3
+ export const openConfirmModal = (detail: IConfirmModalProps) => {
4
+ const event = new CustomEvent('openconfirmmodal', {
5
+ detail
6
+ });
7
+
8
+ window.dispatchEvent(event);
9
+ };
@@ -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
+ };
@@ -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 }