@imposium-hub/components 2.6.0-0 → 2.6.0-2
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.d.ts +1 -1
- package/dist/cjs/Util.js +33 -20
- package/dist/cjs/Util.js.map +1 -1
- package/dist/cjs/components/app-wrapper/AppWrapper.d.ts +26 -5
- package/dist/cjs/components/app-wrapper/AppWrapper.js +110 -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 +4 -5
- package/dist/cjs/components/header/Header.js +77 -128
- 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 +4 -2
- package/dist/cjs/index.js +10 -4
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/redux/actions/access.js +44 -37
- package/dist/cjs/redux/actions/access.js.map +1 -1
- package/dist/cjs/services/API.d.ts +9 -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 +2 -0
- package/dist/cjs/utils/pendo.js +39 -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.d.ts +1 -1
- package/dist/esm/Util.js +10 -19
- package/dist/esm/Util.js.map +1 -1
- package/dist/esm/components/app-wrapper/AppWrapper.d.ts +26 -5
- package/dist/esm/components/app-wrapper/AppWrapper.js +103 -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 +4 -5
- package/dist/esm/components/header/Header.js +75 -117
- 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 +4 -2
- package/dist/esm/index.js +4 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/redux/actions/access.js +63 -56
- package/dist/esm/redux/actions/access.js.map +1 -1
- package/dist/esm/services/API.d.ts +9 -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 +2 -0
- package/dist/esm/utils/pendo.js +29 -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 +10 -7
- package/src/Util.ts +10 -16
- package/src/components/app-wrapper/AppWrapper.tsx +167 -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 +105 -192
- 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 +8 -3
- package/src/redux/actions/access.ts +64 -72
- package/src/services/API.ts +55 -20
- package/src/utils/modal.ts +9 -0
- package/src/utils/pendo.ts +38 -0
- package/src/utils/routing.ts +10 -0
|
@@ -9,29 +9,30 @@ import {
|
|
|
9
9
|
ICON_UP_RIGHT_FROM_SQUARE
|
|
10
10
|
} from '../../constants/icons';
|
|
11
11
|
import { connect } from 'react-redux';
|
|
12
|
-
import _ from 'lodash';
|
|
13
|
-
import DataTable from '../data-table/DataTable';
|
|
14
|
-
import AssetsTableDateCell from '../assets/AssetsTableDateCell';
|
|
15
12
|
import Button from '../button/Button';
|
|
16
13
|
import Select, { createFilter } from 'react-select';
|
|
17
14
|
import { setAccessData } from '../../redux/actions/access';
|
|
18
15
|
import { bindActionCreators } from 'redux';
|
|
19
|
-
import { StoryTableTotalRendersCell } from '../assets/StoryTableTotalRendersCell';
|
|
20
|
-
import StoryTableNameFilter from '../assets/StoryTableNameFilter';
|
|
21
16
|
import { updateStoryFilter } from '../../redux/actions/story-filter';
|
|
22
17
|
import { IImposiumAPI } from '../../services/API';
|
|
23
|
-
|
|
18
|
+
import { pushRoute } from '../../utils/routing';
|
|
19
|
+
import { openConfirmModal } from '../../utils/modal';
|
|
20
|
+
import { header } from '../../constants/copy';
|
|
21
|
+
import { ProjectDropdown } from './ProjectDropdown';
|
|
22
|
+
import { APP_WRAPPER_ERROR_STATES } from '../app-wrapper/AppWrapper';
|
|
24
23
|
export interface IHeaderProps {
|
|
24
|
+
email: string;
|
|
25
25
|
auth0: any;
|
|
26
26
|
api: IImposiumAPI;
|
|
27
|
+
errorState?: string;
|
|
27
28
|
activeServiceId: string;
|
|
28
29
|
activeOrganization: string;
|
|
29
30
|
activeStory?: string;
|
|
30
31
|
hideStoryPicker?: boolean;
|
|
31
32
|
hideOrgPicker?: boolean;
|
|
32
33
|
setAccessData(access: any): void;
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
unsavedChanges: boolean;
|
|
35
|
+
saveStory();
|
|
35
36
|
onLogout();
|
|
36
37
|
additionalButtons?: any[];
|
|
37
38
|
CrMLink?: string;
|
|
@@ -53,9 +54,6 @@ export interface IHeaderState {
|
|
|
53
54
|
showServiceDropdown: boolean;
|
|
54
55
|
dropdownToggleColor: string;
|
|
55
56
|
activeFirstChar: string;
|
|
56
|
-
order: string;
|
|
57
|
-
orderDirection: string;
|
|
58
|
-
totalRendersLoading: boolean;
|
|
59
57
|
}
|
|
60
58
|
|
|
61
59
|
class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
@@ -104,10 +102,7 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
104
102
|
showStoriesDropdown: false,
|
|
105
103
|
showServiceDropdown: false,
|
|
106
104
|
dropdownToggleColor: ImposiumHeader.DEFAULT_ACCOUNT_TOGGLE_COLOR,
|
|
107
|
-
activeFirstChar: ''
|
|
108
|
-
order: 'date_modified',
|
|
109
|
-
orderDirection: 'desc',
|
|
110
|
-
totalRendersLoading: false
|
|
105
|
+
activeFirstChar: ''
|
|
111
106
|
};
|
|
112
107
|
|
|
113
108
|
this.serviceToggleRef = React.createRef();
|
|
@@ -165,42 +160,80 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
165
160
|
});
|
|
166
161
|
};
|
|
167
162
|
|
|
168
|
-
private closeStoriesDropDown() {
|
|
169
|
-
this.setState({ showStoriesDropdown: false }, () =>
|
|
170
|
-
this.props.updateStoryFilter({ name: '' })
|
|
171
|
-
);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
163
|
private changeStory = (story: any): void => {
|
|
175
|
-
const {
|
|
164
|
+
const { activeOrganization, api, activeServiceId, unsavedChanges } = this.props;
|
|
176
165
|
|
|
177
|
-
|
|
178
|
-
|
|
166
|
+
const changeStory = () => {
|
|
167
|
+
pushRoute(`/${activeOrganization}/${story.id}`);
|
|
179
168
|
api.cacheActiveStory(activeServiceId, activeOrganization, story.id);
|
|
180
|
-
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
if (unsavedChanges) {
|
|
172
|
+
const onYes = () => {
|
|
173
|
+
if (this.props.saveStory) {
|
|
174
|
+
this.props.saveStory();
|
|
175
|
+
}
|
|
176
|
+
changeStory();
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
openConfirmModal({
|
|
180
|
+
showCancel: true,
|
|
181
|
+
noLabel: header.noSave,
|
|
182
|
+
onNo: () => changeStory(),
|
|
183
|
+
yesLabel: header.onSave,
|
|
184
|
+
onYes: () => onYes(),
|
|
185
|
+
title: header.checkUnsaved
|
|
186
|
+
});
|
|
187
|
+
} else {
|
|
188
|
+
changeStory();
|
|
181
189
|
}
|
|
182
190
|
};
|
|
183
191
|
|
|
184
192
|
private toggleAccountDropdown = (toggle: boolean, orgId: string = ''): void => {
|
|
185
|
-
const {
|
|
193
|
+
const { api, activeServiceId, unsavedChanges } = this.props;
|
|
186
194
|
if (toggle) {
|
|
187
195
|
this.setState({ showAccountDropdown: true });
|
|
188
196
|
} else {
|
|
189
197
|
this.setState({ showAccountDropdown: false });
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
.
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
198
|
+
|
|
199
|
+
if (orgId) {
|
|
200
|
+
const lastModified = getLastModifiedStoryInOrg(orgId, this.props.access);
|
|
201
|
+
const changeOrg = () => {
|
|
202
|
+
let storyId = lastModified;
|
|
203
|
+
api.getCachedStoryForOrg(activeServiceId, orgId)
|
|
204
|
+
.then((res) => {
|
|
205
|
+
storyId = res.story_id ? res.story_id : lastModified;
|
|
206
|
+
if (storyId) {
|
|
207
|
+
pushRoute(`/${orgId}/${storyId}`);
|
|
208
|
+
api.cacheActiveStory(activeServiceId, orgId, storyId);
|
|
209
|
+
} else {
|
|
210
|
+
pushRoute(`/${orgId}`);
|
|
211
|
+
}
|
|
212
|
+
})
|
|
213
|
+
.catch((e) => {
|
|
214
|
+
console.error('Error getting cached storyID for Org');
|
|
215
|
+
pushRoute(`/${orgId}/${storyId}`);
|
|
216
|
+
api.cacheActiveStory(activeServiceId, orgId, storyId);
|
|
217
|
+
});
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
if (unsavedChanges) {
|
|
221
|
+
const onYes = () => {
|
|
222
|
+
this.props.saveStory();
|
|
223
|
+
changeOrg();
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
openConfirmModal({
|
|
227
|
+
showCancel: true,
|
|
228
|
+
noLabel: header.noSave,
|
|
229
|
+
onNo: () => changeOrg(),
|
|
230
|
+
yesLabel: header.onSave,
|
|
231
|
+
onYes: () => onYes(),
|
|
232
|
+
title: header.checkUnsaved
|
|
202
233
|
});
|
|
203
|
-
|
|
234
|
+
} else {
|
|
235
|
+
changeOrg();
|
|
236
|
+
}
|
|
204
237
|
}
|
|
205
238
|
}
|
|
206
239
|
};
|
|
@@ -254,70 +287,6 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
254
287
|
</div>
|
|
255
288
|
);
|
|
256
289
|
|
|
257
|
-
private getStoriesColumns() {
|
|
258
|
-
return [
|
|
259
|
-
{
|
|
260
|
-
accessor: 'name',
|
|
261
|
-
Header: 'Name',
|
|
262
|
-
width: 115,
|
|
263
|
-
minWidth: 115,
|
|
264
|
-
Search: () => <StoryTableNameFilter />,
|
|
265
|
-
disableSortBy: false
|
|
266
|
-
},
|
|
267
|
-
{
|
|
268
|
-
accessor: 'total_renders',
|
|
269
|
-
Header: 'Total Renders',
|
|
270
|
-
width: 60,
|
|
271
|
-
minWidth: 60,
|
|
272
|
-
maxWidth: 60,
|
|
273
|
-
disableSortBy: false,
|
|
274
|
-
Cell: (cell: any) => (
|
|
275
|
-
<StoryTableTotalRendersCell
|
|
276
|
-
loading={this.state.totalRendersLoading}
|
|
277
|
-
cell={cell}
|
|
278
|
-
date_created={false}
|
|
279
|
-
/>
|
|
280
|
-
)
|
|
281
|
-
},
|
|
282
|
-
{
|
|
283
|
-
accessor: 'last_modified_by',
|
|
284
|
-
Header: 'Last Modified By',
|
|
285
|
-
width: 60,
|
|
286
|
-
minWidth: 60,
|
|
287
|
-
maxWidth: 60,
|
|
288
|
-
disableSortBy: true
|
|
289
|
-
},
|
|
290
|
-
{
|
|
291
|
-
accessor: 'date_modified',
|
|
292
|
-
Header: 'Last Modified',
|
|
293
|
-
width: 65,
|
|
294
|
-
minWidth: 65,
|
|
295
|
-
maxWidth: 65,
|
|
296
|
-
disableSortBy: false,
|
|
297
|
-
Cell: (cell: any) => (
|
|
298
|
-
<AssetsTableDateCell
|
|
299
|
-
cell={cell}
|
|
300
|
-
date_created={false}
|
|
301
|
-
/>
|
|
302
|
-
)
|
|
303
|
-
},
|
|
304
|
-
{
|
|
305
|
-
accessor: 'date_created',
|
|
306
|
-
Header: 'Created Date',
|
|
307
|
-
width: 65,
|
|
308
|
-
minWidth: 65,
|
|
309
|
-
maxWidth: 65,
|
|
310
|
-
disableSortBy: false,
|
|
311
|
-
Cell: (cell: any) => (
|
|
312
|
-
<AssetsTableDateCell
|
|
313
|
-
cell={cell}
|
|
314
|
-
date_created={true}
|
|
315
|
-
/>
|
|
316
|
-
)
|
|
317
|
-
}
|
|
318
|
-
];
|
|
319
|
-
}
|
|
320
|
-
|
|
321
290
|
public render() {
|
|
322
291
|
const {
|
|
323
292
|
activeOrganization,
|
|
@@ -330,7 +299,9 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
330
299
|
hideDocs,
|
|
331
300
|
access,
|
|
332
301
|
api,
|
|
333
|
-
access: { organizations }
|
|
302
|
+
access: { organizations },
|
|
303
|
+
errorState,
|
|
304
|
+
email
|
|
334
305
|
} = this.props;
|
|
335
306
|
const {
|
|
336
307
|
showAccountDropdown,
|
|
@@ -339,9 +310,7 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
339
310
|
activeOrganizationBlob,
|
|
340
311
|
activeFirstChar,
|
|
341
312
|
dropdownToggleColor,
|
|
342
|
-
showServiceDropdown
|
|
343
|
-
order,
|
|
344
|
-
orderDirection
|
|
313
|
+
showServiceDropdown
|
|
345
314
|
} = this.state;
|
|
346
315
|
|
|
347
316
|
let currentStory: any;
|
|
@@ -352,9 +321,6 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
352
321
|
let privateAnchors: JSX.Element[];
|
|
353
322
|
let accountDropdownToggle: JSX.Element;
|
|
354
323
|
let storyToggle: JSX.Element;
|
|
355
|
-
let storyMenuInner: JSX.Element = (
|
|
356
|
-
<div className='no-stories-dialog'>{ImposiumHeader.NO_STORIES_COPY}</div>
|
|
357
|
-
);
|
|
358
324
|
let serviceDropdownToggle: JSX.Element;
|
|
359
325
|
let serviceDropdownMenu: JSX.Element;
|
|
360
326
|
|
|
@@ -438,21 +404,22 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
438
404
|
</div>
|
|
439
405
|
);
|
|
440
406
|
|
|
441
|
-
serviceDropdownToggle =
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
407
|
+
serviceDropdownToggle =
|
|
408
|
+
errorState !== APP_WRAPPER_ERROR_STATES.UNAUTHORIZED_ORG ? (
|
|
409
|
+
<button
|
|
410
|
+
id='btn-toggle-services'
|
|
411
|
+
className='btn-toggle-services'
|
|
412
|
+
style={serviceDropdownColor}
|
|
413
|
+
ref={this.serviceToggleRef}
|
|
414
|
+
onClick={() =>
|
|
415
|
+
this.setState({ showServiceDropdown: !this.state.showServiceDropdown })
|
|
416
|
+
}>
|
|
417
|
+
<span>
|
|
418
|
+
{activeService ? activeService.name : ImposiumHeader.SERVICE_MESH_ALIAS}
|
|
419
|
+
</span>
|
|
420
|
+
{this.renderDropdownChevron(showServiceDropdown)}
|
|
421
|
+
</button>
|
|
422
|
+
) : null;
|
|
456
423
|
|
|
457
424
|
accountDropdownToggle =
|
|
458
425
|
!hideOrgPicker && access.organizations.length > 0 ? (
|
|
@@ -486,21 +453,7 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
486
453
|
className='btn-toggle-story'
|
|
487
454
|
ref={this.storyToggleRef}
|
|
488
455
|
onClick={() => {
|
|
489
|
-
this.setState({ showStoriesDropdown: !showStoriesDropdown }
|
|
490
|
-
if (showStoriesDropdown === false) {
|
|
491
|
-
this.props.updateStoryFilter({ name: '' });
|
|
492
|
-
this.setState({ totalRendersLoading: true });
|
|
493
|
-
api.getAccessData(true)
|
|
494
|
-
.then((res) => {
|
|
495
|
-
this.props.setAccessData(res);
|
|
496
|
-
this.setState({ totalRendersLoading: false });
|
|
497
|
-
})
|
|
498
|
-
.catch((e) => {
|
|
499
|
-
console.error(e);
|
|
500
|
-
console.error('Error getting access data from Header');
|
|
501
|
-
});
|
|
502
|
-
}
|
|
503
|
-
});
|
|
456
|
+
this.setState({ showStoriesDropdown: !showStoriesDropdown });
|
|
504
457
|
}}>
|
|
505
458
|
<div className='story-name'>
|
|
506
459
|
{currentStory
|
|
@@ -512,48 +465,6 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
512
465
|
{this.renderDropdownChevron(showStoriesDropdown)}
|
|
513
466
|
</button>
|
|
514
467
|
);
|
|
515
|
-
|
|
516
|
-
if (activeOrganizationBlob.stories.length !== 0) {
|
|
517
|
-
const sortBy =
|
|
518
|
-
order && orderDirection
|
|
519
|
-
? [{ id: order, desc: orderDirection === 'desc' }]
|
|
520
|
-
: undefined;
|
|
521
|
-
|
|
522
|
-
let sortedStories = _.orderBy(
|
|
523
|
-
activeOrganizationBlob.stories,
|
|
524
|
-
['date_modified'],
|
|
525
|
-
['desc']
|
|
526
|
-
);
|
|
527
|
-
|
|
528
|
-
if (this.props.storyFilter && this.props.storyFilter?.name) {
|
|
529
|
-
const storyFilter = this.props.storyFilter.name.toLowerCase();
|
|
530
|
-
|
|
531
|
-
sortedStories = sortedStories.filter((stories) =>
|
|
532
|
-
stories.name.toLowerCase().includes(storyFilter)
|
|
533
|
-
);
|
|
534
|
-
|
|
535
|
-
const sortById = sortedStories.filter((stories) =>
|
|
536
|
-
stories.id.includes(storyFilter)
|
|
537
|
-
);
|
|
538
|
-
|
|
539
|
-
if (sortById.length > 0) {
|
|
540
|
-
sortedStories = sortById;
|
|
541
|
-
}
|
|
542
|
-
}
|
|
543
|
-
|
|
544
|
-
storyMenuInner = (
|
|
545
|
-
<DataTable
|
|
546
|
-
columns={this.getStoriesColumns()}
|
|
547
|
-
data={sortedStories}
|
|
548
|
-
sortBy={sortBy}
|
|
549
|
-
noDataText={ImposiumHeader.NO_STORIES_COPY}
|
|
550
|
-
itemsPerPage={activeOrganizationBlob.stories.length}
|
|
551
|
-
hidePaginator={true}
|
|
552
|
-
onRowClick={this.changeStory}
|
|
553
|
-
keyboardNav={true}
|
|
554
|
-
/>
|
|
555
|
-
);
|
|
556
|
-
}
|
|
557
468
|
}
|
|
558
469
|
|
|
559
470
|
const orgOptions = [];
|
|
@@ -565,8 +476,6 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
565
476
|
});
|
|
566
477
|
}
|
|
567
478
|
|
|
568
|
-
const email = '';
|
|
569
|
-
// const email = scrapeEmail(auth);
|
|
570
479
|
// TODO: plug this back in
|
|
571
480
|
const orgSelect = () => {
|
|
572
481
|
return (
|
|
@@ -653,14 +562,18 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
653
562
|
{serviceDropdownMenu}
|
|
654
563
|
</ImposiumDropdown>
|
|
655
564
|
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
565
|
+
{activeOrganizationBlob && (
|
|
566
|
+
<ProjectDropdown
|
|
567
|
+
api={api}
|
|
568
|
+
position='bottomright'
|
|
569
|
+
setAccessData={this.props.setAccessData}
|
|
570
|
+
storiesArray={activeOrganizationBlob.stories}
|
|
571
|
+
show={this.state.showStoriesDropdown}
|
|
572
|
+
onClose={() => this.setState({ showStoriesDropdown: false })}
|
|
573
|
+
changeStory={this.changeStory}
|
|
574
|
+
toggleRef={this.storyToggleRef}
|
|
575
|
+
/>
|
|
576
|
+
)}
|
|
664
577
|
|
|
665
578
|
<ImposiumDropdown
|
|
666
579
|
key='org-dropdown'
|
|
@@ -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
|
@@ -129,7 +129,6 @@ import {
|
|
|
129
129
|
toFixed,
|
|
130
130
|
padStart,
|
|
131
131
|
parameterizeServiceUrl,
|
|
132
|
-
scrapeEmail,
|
|
133
132
|
fitToContainer,
|
|
134
133
|
filterHotkeys,
|
|
135
134
|
mimetypeConformsToOverlay,
|
|
@@ -139,7 +138,8 @@ import {
|
|
|
139
138
|
formattedTime,
|
|
140
139
|
getSMPTE,
|
|
141
140
|
checkStoryId,
|
|
142
|
-
IMAGE_EXTENSIONS
|
|
141
|
+
IMAGE_EXTENSIONS,
|
|
142
|
+
getOrgIdFromStory
|
|
143
143
|
} from './Util';
|
|
144
144
|
import PublishStatusIndicator from './components/publish-wizard/publish/PublishStatusIndicator';
|
|
145
145
|
import { getMediaPreviewStyle } from './utils/assets';
|
|
@@ -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,
|
|
@@ -276,8 +281,8 @@ export {
|
|
|
276
281
|
getFirstStoryInOrg,
|
|
277
282
|
string2HexCode,
|
|
278
283
|
parameterizeServiceUrl,
|
|
279
|
-
scrapeEmail,
|
|
280
284
|
fitToContainer,
|
|
285
|
+
getOrgIdFromStory,
|
|
281
286
|
formattedTime,
|
|
282
287
|
filterHotkeys,
|
|
283
288
|
mimetypeConformsToOverlay,
|