@imposium-hub/components 2.2.44 → 2.2.45-0
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 +2 -0
- package/dist/cjs/Util.js.map +1 -1
- package/dist/cjs/components/app-wrapper/AppWrapper.d.ts +1 -2
- package/dist/cjs/components/app-wrapper/AppWrapper.js +70 -82
- package/dist/cjs/components/app-wrapper/AppWrapper.js.map +1 -1
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +27 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js +243 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.d.ts +28 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js +255 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +27 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js +243 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +28 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js +251 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +1 -0
- package/dist/cjs/components/assets/AssetsTableDurationCell.js +18 -2
- package/dist/cjs/components/assets/AssetsTableDurationCell.js.map +1 -1
- package/dist/cjs/components/assets/AssetsTableGlobalCell.d.ts +6 -0
- package/dist/cjs/components/assets/AssetsTableGlobalCell.js +33 -0
- package/dist/cjs/components/assets/AssetsTableGlobalCell.js.map +1 -0
- package/dist/cjs/components/assets/AssetsTableNameCell.js +2 -2
- package/dist/cjs/components/assets/AssetsTableNameCell.js.map +1 -1
- package/dist/cjs/components/assets/AssetsUploadMenu.js +3 -2
- package/dist/cjs/components/assets/AssetsUploadMenu.js.map +1 -1
- package/dist/cjs/components/auth-gate/AuthGate.js +8 -5
- package/dist/cjs/components/auth-gate/AuthGate.js.map +1 -1
- package/dist/cjs/components/header/Header.d.ts +5 -0
- package/dist/cjs/components/header/Header.js +40 -22
- package/dist/cjs/components/header/Header.js.map +1 -1
- package/dist/cjs/components/header/Header_BACKUP_73021.d.ts +33 -0
- package/dist/cjs/components/header/Header_BACKUP_73021.js +393 -0
- package/dist/cjs/components/header/Header_BACKUP_73021.js.map +1 -0
- package/dist/cjs/components/header/Header_BASE_73021.d.ts +29 -0
- package/dist/cjs/components/header/Header_BASE_73021.js +376 -0
- package/dist/cjs/components/header/Header_BASE_73021.js.map +1 -0
- package/dist/cjs/components/header/Header_LOCAL_73021.d.ts +33 -0
- package/dist/cjs/components/header/Header_LOCAL_73021.js +382 -0
- package/dist/cjs/components/header/Header_LOCAL_73021.js.map +1 -0
- package/dist/cjs/components/header/Header_REMOTE_73021.d.ts +30 -0
- package/dist/cjs/components/header/Header_REMOTE_73021.js +386 -0
- package/dist/cjs/components/header/Header_REMOTE_73021.js.map +1 -0
- package/dist/cjs/components/publish-wizard/PublishWizard.js +119 -59
- package/dist/cjs/components/publish-wizard/PublishWizard.js.map +1 -1
- package/dist/cjs/components/story-previewer/StoryPreviewer.js +15 -10
- package/dist/cjs/components/story-previewer/StoryPreviewer.js.map +1 -1
- package/dist/cjs/constants/copy.d.ts +6 -0
- package/dist/cjs/constants/copy.js +7 -1
- package/dist/cjs/constants/copy.js.map +1 -1
- package/dist/cjs/constants/icons.d.ts +1 -0
- package/dist/cjs/constants/icons.js +3 -1
- package/dist/cjs/constants/icons.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.js +2 -4
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/redux/actions/access.d.ts +1 -3
- package/dist/cjs/redux/actions/access.js +10 -43
- package/dist/cjs/redux/actions/access.js.map +1 -1
- package/dist/cjs/redux/actions/publish.js +4 -3
- package/dist/cjs/redux/actions/publish.js.map +1 -1
- package/dist/cjs/redux/reducers/access.js +7 -30
- package/dist/cjs/redux/reducers/access.js.map +1 -1
- package/dist/cjs/services/Session.d.ts +9 -8
- package/dist/cjs/services/Session.js +31 -127
- package/dist/cjs/services/Session.js.map +1 -1
- package/dist/esm/Util.js +2 -0
- package/dist/esm/Util.js.map +1 -1
- package/dist/esm/components/app-wrapper/AppWrapper.d.ts +1 -2
- package/dist/esm/components/app-wrapper/AppWrapper.js +68 -82
- package/dist/esm/components/app-wrapper/AppWrapper.js.map +1 -1
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +27 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js +194 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.d.ts +28 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js +208 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +27 -0
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js +194 -0
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +28 -0
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js +204 -0
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +1 -0
- package/dist/esm/components/assets/AssetsTableDurationCell.js +18 -2
- package/dist/esm/components/assets/AssetsTableDurationCell.js.map +1 -1
- package/dist/esm/components/assets/AssetsTableGlobalCell.d.ts +6 -0
- package/dist/esm/components/assets/AssetsTableGlobalCell.js +8 -0
- package/dist/esm/components/assets/AssetsTableGlobalCell.js.map +1 -0
- package/dist/esm/components/assets/AssetsTableNameCell.js +2 -2
- package/dist/esm/components/assets/AssetsTableNameCell.js.map +1 -1
- package/dist/esm/components/assets/AssetsUploadMenu.js +3 -2
- package/dist/esm/components/assets/AssetsUploadMenu.js.map +1 -1
- package/dist/esm/components/auth-gate/AuthGate.js +9 -6
- package/dist/esm/components/auth-gate/AuthGate.js.map +1 -1
- package/dist/esm/components/header/Header.d.ts +5 -0
- package/dist/esm/components/header/Header.js +37 -22
- package/dist/esm/components/header/Header.js.map +1 -1
- package/dist/esm/components/header/Header_BACKUP_73021.d.ts +33 -0
- package/dist/esm/components/header/Header_BACKUP_73021.js +336 -0
- package/dist/esm/components/header/Header_BACKUP_73021.js.map +1 -0
- package/dist/esm/components/header/Header_BASE_73021.d.ts +29 -0
- package/dist/esm/components/header/Header_BASE_73021.js +322 -0
- package/dist/esm/components/header/Header_BASE_73021.js.map +1 -0
- package/dist/esm/components/header/Header_LOCAL_73021.d.ts +33 -0
- package/dist/esm/components/header/Header_LOCAL_73021.js +328 -0
- package/dist/esm/components/header/Header_LOCAL_73021.js.map +1 -0
- package/dist/esm/components/header/Header_REMOTE_73021.d.ts +30 -0
- package/dist/esm/components/header/Header_REMOTE_73021.js +329 -0
- package/dist/esm/components/header/Header_REMOTE_73021.js.map +1 -0
- package/dist/esm/components/publish-wizard/PublishWizard.js +119 -60
- package/dist/esm/components/publish-wizard/PublishWizard.js.map +1 -1
- package/dist/esm/components/story-previewer/StoryPreviewer.js +15 -10
- package/dist/esm/components/story-previewer/StoryPreviewer.js.map +1 -1
- package/dist/esm/constants/copy.d.ts +6 -0
- package/dist/esm/constants/copy.js +7 -1
- package/dist/esm/constants/copy.js.map +1 -1
- package/dist/esm/constants/icons.d.ts +1 -0
- package/dist/esm/constants/icons.js +2 -0
- package/dist/esm/constants/icons.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/redux/actions/access.d.ts +1 -3
- package/dist/esm/redux/actions/access.js +8 -37
- package/dist/esm/redux/actions/access.js.map +1 -1
- package/dist/esm/redux/actions/publish.js +4 -3
- package/dist/esm/redux/actions/publish.js.map +1 -1
- package/dist/esm/redux/reducers/access.js +5 -8
- package/dist/esm/redux/reducers/access.js.map +1 -1
- package/dist/esm/services/Session.d.ts +9 -8
- package/dist/esm/services/Session.js +29 -102
- package/dist/esm/services/Session.js.map +1 -1
- package/dist/styles.css +24 -0
- package/dist/styles.less +27 -0
- package/less/components/context-menu.less +1 -0
- package/less/components/header.less +13 -0
- package/less/components/publish-wizard.less +13 -0
- package/package.json +1 -1
- package/src/Util.ts +3 -0
- package/src/components/app-wrapper/AppWrapper.tsx +77 -123
- package/src/components/assets/AssetsTableDurationCell.tsx +23 -2
- package/src/components/assets/AssetsTableNameCell.tsx +4 -1
- package/src/components/assets/AssetsUploadMenu.tsx +13 -8
- package/src/components/auth-gate/AuthGate.tsx +14 -8
- package/src/components/header/Header.tsx +88 -42
- package/src/components/publish-wizard/PublishWizard.tsx +172 -87
- package/src/components/story-previewer/StoryPreviewer.tsx +17 -10
- package/src/constants/copy.ts +8 -1
- package/src/constants/icons.tsx +3 -0
- package/src/index.ts +1 -10
- package/src/redux/actions/access.ts +5 -67
- package/src/redux/actions/publish.ts +6 -3
- package/src/redux/reducers/access.ts +5 -8
- package/src/services/Session.ts +34 -120
|
@@ -164,6 +164,15 @@
|
|
|
164
164
|
background-repeat: no-repeat;
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
+
.ft-logo{
|
|
168
|
+
width:125px;
|
|
169
|
+
height:30px;
|
|
170
|
+
margin: 0px 5px 0px 0px;
|
|
171
|
+
background: url('data:image/png;base64,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Z2VSZWFkeXHJZTwAAAMoaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA5LjEtYzAwMiA3OS5kYmEzZGEzYjUsIDIwMjMvMTIvMTUtMTA6NDI6MzcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNS42IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBMzQ5QTkwRjY5NDExRUU4NDVFQjg4MTlGNTlEMjkxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBMzQ5QTkxRjY5NDExRUU4NDVFQjg4MTlGNTlEMjkxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RTdGRDNFODlGMzU0MTFFRTg0NUVCODgxOUY1OUQyOTEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RTdGRDNFOEFGMzU0MTFFRTg0NUVCODgxOUY1OUQyOTEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5Kx1QxAAATvElEQVR42uxdCXhU1RU+byaZhCxkIewQIlBAFFoBxQqKIFttVbQtWosVtYpWa5XW+imttVZb61Jp6aKiFKkKCpSi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');
|
|
172
|
+
background-size: 125px 30px;
|
|
173
|
+
background-repeat: no-repeat;
|
|
174
|
+
}
|
|
175
|
+
|
|
167
176
|
.heading {
|
|
168
177
|
.font-style;
|
|
169
178
|
margin: 0;
|
|
@@ -183,6 +192,10 @@
|
|
|
183
192
|
a{
|
|
184
193
|
border:none;
|
|
185
194
|
}
|
|
195
|
+
|
|
196
|
+
.additional-buttons{
|
|
197
|
+
margin-right:10px;
|
|
198
|
+
}
|
|
186
199
|
|
|
187
200
|
.btn-help {
|
|
188
201
|
.circle-style;
|
|
@@ -8,6 +8,18 @@
|
|
|
8
8
|
color: red;
|
|
9
9
|
word-break: break-word;
|
|
10
10
|
}
|
|
11
|
+
|
|
12
|
+
.publish-error{
|
|
13
|
+
padding:5px;
|
|
14
|
+
background:@backgroundDark;
|
|
15
|
+
margin-top:10px;
|
|
16
|
+
border-radius:5px;
|
|
17
|
+
box-sizing: border-box;
|
|
18
|
+
width:100%;
|
|
19
|
+
.icon{
|
|
20
|
+
color:@danger;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
11
23
|
|
|
12
24
|
.publish-wizard-header{
|
|
13
25
|
position:absolute;
|
|
@@ -85,6 +97,7 @@
|
|
|
85
97
|
border:1px solid darken(@background, 4%);
|
|
86
98
|
cursor:pointer;
|
|
87
99
|
position: relative;
|
|
100
|
+
text-decoration: none;
|
|
88
101
|
|
|
89
102
|
&.disabled{
|
|
90
103
|
pointer-events: none;
|
package/package.json
CHANGED
package/src/Util.ts
CHANGED
|
@@ -26,6 +26,8 @@ export const getFirstStoryInOrg = (orgId: string, access: any): string => {
|
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
export const checkStoryId = (storyId: string, orgId: string, access: any): any => {
|
|
29
|
+
if (!access) return false;
|
|
30
|
+
|
|
29
31
|
const activeOrg: any = getActiveOrg(orgId, access);
|
|
30
32
|
if (activeOrg) {
|
|
31
33
|
const story = activeOrg.stories.find((s) => s.id === storyId);
|
|
@@ -38,6 +40,7 @@ export const checkStoryId = (storyId: string, orgId: string, access: any): any =
|
|
|
38
40
|
return false;
|
|
39
41
|
}
|
|
40
42
|
};
|
|
43
|
+
|
|
41
44
|
export const getLastModifiedStoryInOrg = (orgId: string, access: any): string => {
|
|
42
45
|
const activeOrg: any = getActiveOrg(orgId, access);
|
|
43
46
|
const sortByLastModified = activeOrg.stories.sort((a, b) => b.date_modified - a.date_modified);
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import NoAccess from '../no-access/NoAccess';
|
|
3
3
|
import Header from '../header/Header';
|
|
4
|
-
import SessionService
|
|
4
|
+
import SessionService from '../../services/Session';
|
|
5
5
|
import AuthService, { IIdentity } from '../../services/Auth0';
|
|
6
6
|
import { connect } from 'react-redux';
|
|
7
7
|
import { bindActionCreators } from 'redux';
|
|
8
8
|
import { login, clearCachedAuth } from '../../redux/actions/auth';
|
|
9
|
-
import { cacheAccessData, clearCachedAccessList } from '../../redux/actions/access';
|
|
10
9
|
import { validateAccessLevel } from '../../Util';
|
|
10
|
+
import { setAccessData } from '../../redux/actions/access';
|
|
11
11
|
|
|
12
12
|
export interface IAppWrapperProps {
|
|
13
13
|
children: React.ReactChildren;
|
|
@@ -20,14 +20,13 @@ export interface IAppWrapperProps {
|
|
|
20
20
|
access: any;
|
|
21
21
|
auth: any;
|
|
22
22
|
isFreshUser: boolean;
|
|
23
|
+
setAccessData(accessData: any): any;
|
|
23
24
|
allowUnauthenticatedRender: boolean;
|
|
24
25
|
onAuthenticated: (activeOrgId: string, activeStoryId: string) => any;
|
|
25
26
|
onAuthenticationFailure: (e: Error) => any;
|
|
26
27
|
showRequestAccess?: boolean;
|
|
27
28
|
login: (id: IIdentity) => any;
|
|
28
29
|
clearCachedAuth: () => any;
|
|
29
|
-
cacheAccessData: (accessData: any) => any;
|
|
30
|
-
clearCachedAccessList: () => any;
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
export interface IAppWrapperState {
|
|
@@ -67,8 +66,7 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
|
|
|
67
66
|
}
|
|
68
67
|
|
|
69
68
|
public componentDidMount = (): void => {
|
|
70
|
-
const {
|
|
71
|
-
const session: IHubSession = SessionService.getSession();
|
|
69
|
+
const { auth0ClientId, auth0Domain } = this.props;
|
|
72
70
|
|
|
73
71
|
AuthService.bindToClient(auth0ClientId, auth0Domain);
|
|
74
72
|
|
|
@@ -86,22 +84,8 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
|
|
|
86
84
|
this.setState({ restrictAccess: false });
|
|
87
85
|
}
|
|
88
86
|
|
|
89
|
-
//
|
|
90
|
-
|
|
91
|
-
if (
|
|
92
|
-
!isFreshUser &&
|
|
93
|
-
auth !== null &&
|
|
94
|
-
access !== null &&
|
|
95
|
-
typeof session === 'object' &&
|
|
96
|
-
typeof session.sub === 'string' &&
|
|
97
|
-
session.sub === auth.idTokenPayload.sub &&
|
|
98
|
-
session.stories_hash === SessionService.generateStoriesHash(access) &&
|
|
99
|
-
session.orgs_hash === SessionService.generateOrgsHash(access)
|
|
100
|
-
) {
|
|
101
|
-
this.propagateCreds();
|
|
102
|
-
} else {
|
|
103
|
-
this.doCheckSession(true);
|
|
104
|
-
}
|
|
87
|
+
// Always check the session
|
|
88
|
+
this.doCheckSession(true);
|
|
105
89
|
};
|
|
106
90
|
|
|
107
91
|
/*
|
|
@@ -122,12 +106,14 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
|
|
|
122
106
|
|
|
123
107
|
if (!validSession) {
|
|
124
108
|
this.props.clearCachedAuth();
|
|
125
|
-
this.props.clearCachedAccessList();
|
|
126
109
|
this.doCheckSession();
|
|
127
110
|
}
|
|
128
111
|
}
|
|
129
112
|
|
|
130
|
-
if (
|
|
113
|
+
if (
|
|
114
|
+
this.props.organizationId !== prevProps.organizationId ||
|
|
115
|
+
this.props.access !== prevProps.access
|
|
116
|
+
) {
|
|
131
117
|
validAccessLevel = validateAccessLevel(
|
|
132
118
|
this.props.organizationId,
|
|
133
119
|
this.props.serviceId,
|
|
@@ -147,21 +133,58 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
|
|
|
147
133
|
/*
|
|
148
134
|
Emit creds to React parent
|
|
149
135
|
*/
|
|
150
|
-
private propagateCreds = (): void => {
|
|
151
|
-
const {
|
|
152
|
-
|
|
153
|
-
let
|
|
154
|
-
let
|
|
136
|
+
private propagateCreds = (freshAccess, freshIdentity): void => {
|
|
137
|
+
const { storyId, organizationId, onAuthenticated } = this.props;
|
|
138
|
+
|
|
139
|
+
let initialStoryId = storyId;
|
|
140
|
+
let initialOrganizationId = organizationId;
|
|
141
|
+
|
|
142
|
+
const firstOrg = freshAccess.organizations[0];
|
|
143
|
+
|
|
144
|
+
const getIDsFromSession = () => {
|
|
145
|
+
const session = SessionService.getSession();
|
|
146
|
+
if (session && session.story_id && session.organization_id) {
|
|
147
|
+
const org = freshAccess.organizations.find(
|
|
148
|
+
(o: any) => o.id === session.organization_id
|
|
149
|
+
);
|
|
150
|
+
if (org) {
|
|
151
|
+
const story = org.stories.find((s: any) => s.id === session.story_id);
|
|
152
|
+
if (story) {
|
|
153
|
+
return { orgId: org.id, storyId: story.id };
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
};
|
|
155
159
|
|
|
156
|
-
if
|
|
157
|
-
|
|
160
|
+
// If the org ID is not provided, but the storyID is provided, find the org ID if we can, if not, use the first org ID found and we'll show the story not found interface
|
|
161
|
+
if (!initialOrganizationId && initialStoryId) {
|
|
162
|
+
const org = freshAccess.organizations.find((o: any) =>
|
|
163
|
+
o.stories.find((s: any) => s.id === initialStoryId)
|
|
164
|
+
);
|
|
165
|
+
if (org) {
|
|
166
|
+
initialOrganizationId = org.id;
|
|
167
|
+
} else {
|
|
168
|
+
initialOrganizationId = firstOrg.id;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
158
171
|
|
|
159
|
-
|
|
160
|
-
|
|
172
|
+
if (!initialStoryId) {
|
|
173
|
+
// If storyID is not provided, try to use the one from the previous session
|
|
174
|
+
const sessionIds = getIDsFromSession();
|
|
175
|
+
if (sessionIds) {
|
|
176
|
+
initialOrganizationId = sessionIds.orgId;
|
|
177
|
+
initialStoryId = sessionIds.storyId;
|
|
178
|
+
} else {
|
|
179
|
+
// If that doesn't work - default to the first org & story
|
|
180
|
+
const story = firstOrg.stories[0];
|
|
181
|
+
initialOrganizationId = firstOrg.id;
|
|
182
|
+
initialStoryId = story.id;
|
|
161
183
|
}
|
|
162
184
|
}
|
|
163
185
|
|
|
164
|
-
|
|
186
|
+
SessionService.buildFreshSession(freshIdentity, initialOrganizationId, initialStoryId);
|
|
187
|
+
onAuthenticated(initialOrganizationId, initialStoryId);
|
|
165
188
|
|
|
166
189
|
if (this.state.blockRender) {
|
|
167
190
|
this.setState({ blockRender: false });
|
|
@@ -172,8 +195,19 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
|
|
|
172
195
|
Bust cached creds if exist, invoke auth failure handler
|
|
173
196
|
*/
|
|
174
197
|
private handleCheckSessionFailure = (e: Error): void => {
|
|
198
|
+
if (this.props.storyId) {
|
|
199
|
+
SessionService.cacheStoryId(this.props.storyId);
|
|
200
|
+
} else {
|
|
201
|
+
SessionService.clearCachedStoryId();
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (this.props.organizationId) {
|
|
205
|
+
SessionService.cacheOrgId(this.props.organizationId);
|
|
206
|
+
} else {
|
|
207
|
+
SessionService.clearCachedOrgId();
|
|
208
|
+
}
|
|
209
|
+
|
|
175
210
|
this.props.clearCachedAuth();
|
|
176
|
-
this.props.clearCachedAccessList();
|
|
177
211
|
this.props.onAuthenticationFailure(e);
|
|
178
212
|
};
|
|
179
213
|
|
|
@@ -186,15 +220,16 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
|
|
|
186
220
|
if (blockRender) {
|
|
187
221
|
this.setState({ blockRender: true });
|
|
188
222
|
}
|
|
189
|
-
|
|
190
223
|
AuthService.checkSession()
|
|
191
224
|
.then((freshIdentity: IIdentity) => {
|
|
192
|
-
|
|
225
|
+
const orgId = this.props.organizationId
|
|
226
|
+
? this.props.organizationId
|
|
227
|
+
: SessionService.getCachedOrgId();
|
|
228
|
+
SessionService.getAccessData(freshIdentity.idToken, baseUrl, false, orgId)
|
|
193
229
|
.then((freshAccess: any) => {
|
|
230
|
+
this.props.setAccessData(freshAccess);
|
|
194
231
|
this.props.login(freshIdentity);
|
|
195
|
-
this.
|
|
196
|
-
SessionService.buildFreshSession(freshIdentity, freshAccess);
|
|
197
|
-
this.propagateCreds();
|
|
232
|
+
this.propagateCreds(freshAccess, freshIdentity);
|
|
198
233
|
})
|
|
199
234
|
.catch((e: Error) => {
|
|
200
235
|
console.error(e);
|
|
@@ -207,86 +242,6 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
|
|
|
207
242
|
});
|
|
208
243
|
};
|
|
209
244
|
|
|
210
|
-
private determineActiveOrganizationIn(
|
|
211
|
-
auth: IIdentity,
|
|
212
|
-
session: IHubSession,
|
|
213
|
-
organizationIds: string[]
|
|
214
|
-
) {
|
|
215
|
-
const { organizationId } = this.props;
|
|
216
|
-
const {
|
|
217
|
-
idTokenPayload: { exp }
|
|
218
|
-
} = auth;
|
|
219
|
-
|
|
220
|
-
if (organizationIds.length > 0) {
|
|
221
|
-
if (organizationId && organizationIds.indexOf(organizationId) > -1) {
|
|
222
|
-
return this.setActiveOrganization(organizationId, exp, session);
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
if (
|
|
226
|
-
session &&
|
|
227
|
-
session.organization_id &&
|
|
228
|
-
organizationIds.indexOf(session.organization_id) > -1
|
|
229
|
-
) {
|
|
230
|
-
return session.organization_id;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
return this.setActiveOrganization(organizationIds[0], exp, session);
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
return '';
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
/*
|
|
240
|
-
Figure out what the active org should be based on app-wrapper configuration
|
|
241
|
-
*/
|
|
242
|
-
private determineActiveOrganization = (auth: IIdentity, access: any): string => {
|
|
243
|
-
const { serviceId } = this.props;
|
|
244
|
-
const { organizations } = access;
|
|
245
|
-
const session: IHubSession = SessionService.getSession();
|
|
246
|
-
const allOrgIdsFlattened: string[] = organizations.map((o: any) => o.id);
|
|
247
|
-
|
|
248
|
-
const activeOrgId: string = this.determineActiveOrganizationIn(
|
|
249
|
-
auth,
|
|
250
|
-
session,
|
|
251
|
-
allOrgIdsFlattened
|
|
252
|
-
);
|
|
253
|
-
const activeOrg: any = organizations.find((o) => o.id === activeOrgId);
|
|
254
|
-
|
|
255
|
-
if (activeOrg && !activeOrg.services.includes(serviceId)) {
|
|
256
|
-
this.setState({ restrictAccess: true });
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
return activeOrgId;
|
|
260
|
-
};
|
|
261
|
-
|
|
262
|
-
/*
|
|
263
|
-
Update session if no session exists or diff in org id
|
|
264
|
-
*/
|
|
265
|
-
private setActiveOrganization = (
|
|
266
|
-
organizationId: string,
|
|
267
|
-
exp: number,
|
|
268
|
-
sharedSession: IHubSession
|
|
269
|
-
): string => {
|
|
270
|
-
if (
|
|
271
|
-
!sharedSession ||
|
|
272
|
-
!sharedSession.organization_id ||
|
|
273
|
-
sharedSession.organization_id !== organizationId
|
|
274
|
-
) {
|
|
275
|
-
const activeOrg: any = this.props.access.organizations.find(
|
|
276
|
-
(o: any) => o.id === organizationId
|
|
277
|
-
);
|
|
278
|
-
const firstStoryId: string =
|
|
279
|
-
typeof activeOrg.stories[0] === 'object' ? activeOrg.stories[0].id : '';
|
|
280
|
-
|
|
281
|
-
SessionService.updateSession(
|
|
282
|
-
{ organization_id: organizationId, story_id: firstStoryId },
|
|
283
|
-
exp
|
|
284
|
-
);
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
return organizationId;
|
|
288
|
-
};
|
|
289
|
-
|
|
290
245
|
public render = (): JSX.Element => {
|
|
291
246
|
const { blockRender, restrictAccess } = this.state;
|
|
292
247
|
const { children, showRequestAccess, allowUnauthenticatedRender } = this.props;
|
|
@@ -327,9 +282,8 @@ const mapDispatchToProps = (dispatch) => {
|
|
|
327
282
|
return bindActionCreators(
|
|
328
283
|
{
|
|
329
284
|
login,
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
clearCachedAccessList
|
|
285
|
+
setAccessData,
|
|
286
|
+
clearCachedAuth
|
|
333
287
|
},
|
|
334
288
|
dispatch
|
|
335
289
|
);
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { ASSET_TYPES } from '../../constants/assets';
|
|
3
|
+
import { getDuration } from '../../Util';
|
|
2
4
|
|
|
3
5
|
interface IAssetsTableDurationCell {
|
|
4
6
|
cell: any;
|
|
@@ -10,13 +12,32 @@ const AssetsTableDurationCell: React.FC<IAssetsTableDurationCell> = (
|
|
|
10
12
|
const {
|
|
11
13
|
cell: {
|
|
12
14
|
row: {
|
|
13
|
-
original
|
|
15
|
+
original,
|
|
16
|
+
original: { type, data, rate, frame_count }
|
|
14
17
|
}
|
|
15
18
|
}
|
|
16
19
|
} = props;
|
|
17
20
|
|
|
21
|
+
let duration = rate && frame_count ? getDuration(frame_count, rate) : '';
|
|
22
|
+
|
|
23
|
+
if (type === ASSET_TYPES.IMAGE_SEQUENCE) {
|
|
24
|
+
duration = `${original.duration} frames`;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (type === ASSET_TYPES.VIDEO_COMPOSITION) {
|
|
28
|
+
const { frames, rate: frame_rate } = JSON.parse(data);
|
|
29
|
+
duration = getDuration(frames, frame_rate);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (type === ASSET_TYPES.AUDIO) {
|
|
33
|
+
const date = new Date(null);
|
|
34
|
+
date.setSeconds(original.duration);
|
|
35
|
+
const timestamp = date.toISOString().slice(11, 19);
|
|
36
|
+
duration = `${timestamp}.x`;
|
|
37
|
+
}
|
|
38
|
+
|
|
18
39
|
if (duration !== null && duration !== undefined) {
|
|
19
|
-
return <div className='asset-duration-cell'>{
|
|
40
|
+
return <div className='asset-duration-cell'>{duration}</div>;
|
|
20
41
|
} else {
|
|
21
42
|
return <div className='asset-duration-cell'></div>;
|
|
22
43
|
}
|
|
@@ -10,6 +10,7 @@ import { DeterminateLoader } from '../determinate-loader/DeterminateLoader';
|
|
|
10
10
|
interface IAssetsTableNameCell {
|
|
11
11
|
cell: any;
|
|
12
12
|
api: IImposiumAPI;
|
|
13
|
+
disabled: boolean;
|
|
13
14
|
updateAssetName: (api: any, id: string, name: string, delay?: boolean) => any;
|
|
14
15
|
}
|
|
15
16
|
|
|
@@ -20,7 +21,8 @@ const AssetsTableNameCell: React.FC<IAssetsTableNameCell> = (props: IAssetsTable
|
|
|
20
21
|
row: {
|
|
21
22
|
original: { name, id, percent: uploadProgress }
|
|
22
23
|
}
|
|
23
|
-
}
|
|
24
|
+
},
|
|
25
|
+
disabled
|
|
24
26
|
} = props;
|
|
25
27
|
|
|
26
28
|
const [localName, setLocalName] = useState(name);
|
|
@@ -58,6 +60,7 @@ const AssetsTableNameCell: React.FC<IAssetsTableNameCell> = (props: IAssetsTable
|
|
|
58
60
|
<TextField
|
|
59
61
|
value={localName}
|
|
60
62
|
width={'100%'}
|
|
63
|
+
disabled={disabled}
|
|
61
64
|
onChange={(n) => onUpdate(n)}
|
|
62
65
|
/>
|
|
63
66
|
);
|
|
@@ -29,6 +29,7 @@ interface IAssetsUploadMenuProps {
|
|
|
29
29
|
assetUploads: any;
|
|
30
30
|
assetTags: string[];
|
|
31
31
|
api: any;
|
|
32
|
+
editor: any;
|
|
32
33
|
toggleAutoTag: (toggle: boolean) => any;
|
|
33
34
|
toggleTagFileName: (toggle: boolean) => any;
|
|
34
35
|
toggleAssignToStory: (toggle: boolean) => any;
|
|
@@ -62,7 +63,8 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps> {
|
|
|
62
63
|
tagManually,
|
|
63
64
|
manualTags
|
|
64
65
|
},
|
|
65
|
-
assetTags
|
|
66
|
+
assetTags,
|
|
67
|
+
editor: { fromCrM }
|
|
66
68
|
} = this.props;
|
|
67
69
|
let uploadsListInner;
|
|
68
70
|
if (uploads.length > 0) {
|
|
@@ -163,13 +165,15 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps> {
|
|
|
163
165
|
value={tagByFileName}
|
|
164
166
|
onChange={() => this.props.toggleTagFileName(!tagByFileName)}
|
|
165
167
|
/>
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
168
|
+
{!fromCrM && (
|
|
169
|
+
<CheckboxField
|
|
170
|
+
width='50%'
|
|
171
|
+
label={copy.uploads.assignToProjectInput}
|
|
172
|
+
info={copy.uploads.assignToProjectInfo}
|
|
173
|
+
value={assignToStory}
|
|
174
|
+
onChange={() => this.props.toggleAssignToStory(!assignToStory)}
|
|
175
|
+
/>
|
|
176
|
+
)}
|
|
173
177
|
</div>
|
|
174
178
|
{tagsColumn}
|
|
175
179
|
<div className='uploads-list'>{uploadsListInner}</div>
|
|
@@ -198,6 +202,7 @@ const mapDispatchToProps = (dispatch): any => {
|
|
|
198
202
|
const mapStateToProps = (state): any => {
|
|
199
203
|
return {
|
|
200
204
|
assetUploads: state.assetUploads,
|
|
205
|
+
editor: state.editor,
|
|
201
206
|
assetTags: state.assetTags
|
|
202
207
|
};
|
|
203
208
|
};
|
|
@@ -5,16 +5,18 @@ import AuthService, { IIdentity } from '../../services/Auth0';
|
|
|
5
5
|
import { connect } from 'react-redux';
|
|
6
6
|
import { bindActionCreators } from 'redux';
|
|
7
7
|
import { login } from '../../redux/actions/auth';
|
|
8
|
-
import {
|
|
8
|
+
import { setAccessData } from '../../redux/actions/access';
|
|
9
9
|
|
|
10
10
|
interface IAuthGateProps {
|
|
11
11
|
auth0ClientId: string;
|
|
12
12
|
auth0Domain: string;
|
|
13
13
|
auth0Hash: string;
|
|
14
|
-
onAuthenticated: () => any;
|
|
14
|
+
onAuthenticated: (storyId, orgId) => any;
|
|
15
|
+
storyId: string;
|
|
16
|
+
organizationId: string;
|
|
15
17
|
baseUrl?: string;
|
|
18
|
+
setAccessData(accessData: any): any;
|
|
16
19
|
login: (id: IIdentity) => any;
|
|
17
|
-
cacheAccessData: (accessData: any) => any;
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
class AuthGate extends React.PureComponent<IAuthGateProps> {
|
|
@@ -34,12 +36,16 @@ class AuthGate extends React.PureComponent<IAuthGateProps> {
|
|
|
34
36
|
} else {
|
|
35
37
|
AuthService.parseIdFromHash(auth0Hash)
|
|
36
38
|
.then((freshIdentity: IIdentity) => {
|
|
37
|
-
|
|
39
|
+
// Use the cached org ID and story ID if it exists
|
|
40
|
+
const orgId = SessionService.getCachedOrgId() || null;
|
|
41
|
+
const storyId = SessionService.getCachedStoryId() || null;
|
|
42
|
+
|
|
43
|
+
SessionService.getAccessData(freshIdentity.idToken, baseUrl, false, orgId)
|
|
38
44
|
.then((freshAccess: any) => {
|
|
39
45
|
this.props.login(freshIdentity);
|
|
40
|
-
this.props.
|
|
41
|
-
SessionService.buildFreshSession(freshIdentity,
|
|
42
|
-
onAuthenticated();
|
|
46
|
+
this.props.setAccessData(freshAccess);
|
|
47
|
+
SessionService.buildFreshSession(freshIdentity, orgId, storyId);
|
|
48
|
+
onAuthenticated(storyId, orgId);
|
|
43
49
|
})
|
|
44
50
|
.catch((e) => {
|
|
45
51
|
AuthService.login();
|
|
@@ -64,7 +70,7 @@ const mapDispatchToProps = (dispatch) => {
|
|
|
64
70
|
return bindActionCreators(
|
|
65
71
|
{
|
|
66
72
|
login,
|
|
67
|
-
|
|
73
|
+
setAccessData
|
|
68
74
|
},
|
|
69
75
|
dispatch
|
|
70
76
|
);
|