@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.
Files changed (154) hide show
  1. package/dist/cjs/Util.js +2 -0
  2. package/dist/cjs/Util.js.map +1 -1
  3. package/dist/cjs/components/app-wrapper/AppWrapper.d.ts +1 -2
  4. package/dist/cjs/components/app-wrapper/AppWrapper.js +70 -82
  5. package/dist/cjs/components/app-wrapper/AppWrapper.js.map +1 -1
  6. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +27 -0
  7. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js +243 -0
  8. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +1 -0
  9. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.d.ts +28 -0
  10. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js +255 -0
  11. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js.map +1 -0
  12. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +27 -0
  13. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js +243 -0
  14. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +1 -0
  15. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +28 -0
  16. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js +251 -0
  17. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +1 -0
  18. package/dist/cjs/components/assets/AssetsTableDurationCell.js +18 -2
  19. package/dist/cjs/components/assets/AssetsTableDurationCell.js.map +1 -1
  20. package/dist/cjs/components/assets/AssetsTableGlobalCell.d.ts +6 -0
  21. package/dist/cjs/components/assets/AssetsTableGlobalCell.js +33 -0
  22. package/dist/cjs/components/assets/AssetsTableGlobalCell.js.map +1 -0
  23. package/dist/cjs/components/assets/AssetsTableNameCell.js +2 -2
  24. package/dist/cjs/components/assets/AssetsTableNameCell.js.map +1 -1
  25. package/dist/cjs/components/assets/AssetsUploadMenu.js +3 -2
  26. package/dist/cjs/components/assets/AssetsUploadMenu.js.map +1 -1
  27. package/dist/cjs/components/auth-gate/AuthGate.js +8 -5
  28. package/dist/cjs/components/auth-gate/AuthGate.js.map +1 -1
  29. package/dist/cjs/components/header/Header.d.ts +5 -0
  30. package/dist/cjs/components/header/Header.js +40 -22
  31. package/dist/cjs/components/header/Header.js.map +1 -1
  32. package/dist/cjs/components/header/Header_BACKUP_73021.d.ts +33 -0
  33. package/dist/cjs/components/header/Header_BACKUP_73021.js +393 -0
  34. package/dist/cjs/components/header/Header_BACKUP_73021.js.map +1 -0
  35. package/dist/cjs/components/header/Header_BASE_73021.d.ts +29 -0
  36. package/dist/cjs/components/header/Header_BASE_73021.js +376 -0
  37. package/dist/cjs/components/header/Header_BASE_73021.js.map +1 -0
  38. package/dist/cjs/components/header/Header_LOCAL_73021.d.ts +33 -0
  39. package/dist/cjs/components/header/Header_LOCAL_73021.js +382 -0
  40. package/dist/cjs/components/header/Header_LOCAL_73021.js.map +1 -0
  41. package/dist/cjs/components/header/Header_REMOTE_73021.d.ts +30 -0
  42. package/dist/cjs/components/header/Header_REMOTE_73021.js +386 -0
  43. package/dist/cjs/components/header/Header_REMOTE_73021.js.map +1 -0
  44. package/dist/cjs/components/publish-wizard/PublishWizard.js +119 -59
  45. package/dist/cjs/components/publish-wizard/PublishWizard.js.map +1 -1
  46. package/dist/cjs/components/story-previewer/StoryPreviewer.js +15 -10
  47. package/dist/cjs/components/story-previewer/StoryPreviewer.js.map +1 -1
  48. package/dist/cjs/constants/copy.d.ts +6 -0
  49. package/dist/cjs/constants/copy.js +7 -1
  50. package/dist/cjs/constants/copy.js.map +1 -1
  51. package/dist/cjs/constants/icons.d.ts +1 -0
  52. package/dist/cjs/constants/icons.js +3 -1
  53. package/dist/cjs/constants/icons.js.map +1 -1
  54. package/dist/cjs/index.d.ts +2 -2
  55. package/dist/cjs/index.js +2 -4
  56. package/dist/cjs/index.js.map +1 -1
  57. package/dist/cjs/redux/actions/access.d.ts +1 -3
  58. package/dist/cjs/redux/actions/access.js +10 -43
  59. package/dist/cjs/redux/actions/access.js.map +1 -1
  60. package/dist/cjs/redux/actions/publish.js +4 -3
  61. package/dist/cjs/redux/actions/publish.js.map +1 -1
  62. package/dist/cjs/redux/reducers/access.js +7 -30
  63. package/dist/cjs/redux/reducers/access.js.map +1 -1
  64. package/dist/cjs/services/Session.d.ts +9 -8
  65. package/dist/cjs/services/Session.js +31 -127
  66. package/dist/cjs/services/Session.js.map +1 -1
  67. package/dist/esm/Util.js +2 -0
  68. package/dist/esm/Util.js.map +1 -1
  69. package/dist/esm/components/app-wrapper/AppWrapper.d.ts +1 -2
  70. package/dist/esm/components/app-wrapper/AppWrapper.js +68 -82
  71. package/dist/esm/components/app-wrapper/AppWrapper.js.map +1 -1
  72. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +27 -0
  73. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js +194 -0
  74. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +1 -0
  75. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.d.ts +28 -0
  76. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js +208 -0
  77. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js.map +1 -0
  78. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +27 -0
  79. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js +194 -0
  80. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +1 -0
  81. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +28 -0
  82. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js +204 -0
  83. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +1 -0
  84. package/dist/esm/components/assets/AssetsTableDurationCell.js +18 -2
  85. package/dist/esm/components/assets/AssetsTableDurationCell.js.map +1 -1
  86. package/dist/esm/components/assets/AssetsTableGlobalCell.d.ts +6 -0
  87. package/dist/esm/components/assets/AssetsTableGlobalCell.js +8 -0
  88. package/dist/esm/components/assets/AssetsTableGlobalCell.js.map +1 -0
  89. package/dist/esm/components/assets/AssetsTableNameCell.js +2 -2
  90. package/dist/esm/components/assets/AssetsTableNameCell.js.map +1 -1
  91. package/dist/esm/components/assets/AssetsUploadMenu.js +3 -2
  92. package/dist/esm/components/assets/AssetsUploadMenu.js.map +1 -1
  93. package/dist/esm/components/auth-gate/AuthGate.js +9 -6
  94. package/dist/esm/components/auth-gate/AuthGate.js.map +1 -1
  95. package/dist/esm/components/header/Header.d.ts +5 -0
  96. package/dist/esm/components/header/Header.js +37 -22
  97. package/dist/esm/components/header/Header.js.map +1 -1
  98. package/dist/esm/components/header/Header_BACKUP_73021.d.ts +33 -0
  99. package/dist/esm/components/header/Header_BACKUP_73021.js +336 -0
  100. package/dist/esm/components/header/Header_BACKUP_73021.js.map +1 -0
  101. package/dist/esm/components/header/Header_BASE_73021.d.ts +29 -0
  102. package/dist/esm/components/header/Header_BASE_73021.js +322 -0
  103. package/dist/esm/components/header/Header_BASE_73021.js.map +1 -0
  104. package/dist/esm/components/header/Header_LOCAL_73021.d.ts +33 -0
  105. package/dist/esm/components/header/Header_LOCAL_73021.js +328 -0
  106. package/dist/esm/components/header/Header_LOCAL_73021.js.map +1 -0
  107. package/dist/esm/components/header/Header_REMOTE_73021.d.ts +30 -0
  108. package/dist/esm/components/header/Header_REMOTE_73021.js +329 -0
  109. package/dist/esm/components/header/Header_REMOTE_73021.js.map +1 -0
  110. package/dist/esm/components/publish-wizard/PublishWizard.js +119 -60
  111. package/dist/esm/components/publish-wizard/PublishWizard.js.map +1 -1
  112. package/dist/esm/components/story-previewer/StoryPreviewer.js +15 -10
  113. package/dist/esm/components/story-previewer/StoryPreviewer.js.map +1 -1
  114. package/dist/esm/constants/copy.d.ts +6 -0
  115. package/dist/esm/constants/copy.js +7 -1
  116. package/dist/esm/constants/copy.js.map +1 -1
  117. package/dist/esm/constants/icons.d.ts +1 -0
  118. package/dist/esm/constants/icons.js +2 -0
  119. package/dist/esm/constants/icons.js.map +1 -1
  120. package/dist/esm/index.d.ts +2 -2
  121. package/dist/esm/index.js +2 -2
  122. package/dist/esm/index.js.map +1 -1
  123. package/dist/esm/redux/actions/access.d.ts +1 -3
  124. package/dist/esm/redux/actions/access.js +8 -37
  125. package/dist/esm/redux/actions/access.js.map +1 -1
  126. package/dist/esm/redux/actions/publish.js +4 -3
  127. package/dist/esm/redux/actions/publish.js.map +1 -1
  128. package/dist/esm/redux/reducers/access.js +5 -8
  129. package/dist/esm/redux/reducers/access.js.map +1 -1
  130. package/dist/esm/services/Session.d.ts +9 -8
  131. package/dist/esm/services/Session.js +29 -102
  132. package/dist/esm/services/Session.js.map +1 -1
  133. package/dist/styles.css +24 -0
  134. package/dist/styles.less +27 -0
  135. package/less/components/context-menu.less +1 -0
  136. package/less/components/header.less +13 -0
  137. package/less/components/publish-wizard.less +13 -0
  138. package/package.json +1 -1
  139. package/src/Util.ts +3 -0
  140. package/src/components/app-wrapper/AppWrapper.tsx +77 -123
  141. package/src/components/assets/AssetsTableDurationCell.tsx +23 -2
  142. package/src/components/assets/AssetsTableNameCell.tsx +4 -1
  143. package/src/components/assets/AssetsUploadMenu.tsx +13 -8
  144. package/src/components/auth-gate/AuthGate.tsx +14 -8
  145. package/src/components/header/Header.tsx +88 -42
  146. package/src/components/publish-wizard/PublishWizard.tsx +172 -87
  147. package/src/components/story-previewer/StoryPreviewer.tsx +17 -10
  148. package/src/constants/copy.ts +8 -1
  149. package/src/constants/icons.tsx +3 -0
  150. package/src/index.ts +1 -10
  151. package/src/redux/actions/access.ts +5 -67
  152. package/src/redux/actions/publish.ts +6 -3
  153. package/src/redux/reducers/access.ts +5 -8
  154. 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@imposium-hub/components",
3
- "version": "2.2.44",
3
+ "version": "2.2.45-0",
4
4
  "description": "React & Typescript component / asset library for Imposium front-ends",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",
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, { IHubSession } from '../../services/Session';
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 { auth, access, auth0ClientId, auth0Domain, isFreshUser } = this.props;
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
- // If cookie, auth or access data is missing / mismatched,
90
- // silently check auth0 session and refresh flow on success
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 (this.props.organizationId !== prevProps.organizationId) {
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 { auth, access, storyId, onAuthenticated } = this.props;
152
- const activeOrgId: string = this.determineActiveOrganization(auth, access);
153
- let activeStoryId: string = SessionService.getSession().story_id;
154
- let activeOrg: any;
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 (this.props.storyId) {
157
- activeOrg = access.organizations.find((o: any) => o.id === activeOrgId);
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
- if (activeOrg && activeOrg.stories.find((s: any) => s.id === storyId)) {
160
- activeStoryId = storyId;
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
- onAuthenticated(activeOrgId, activeStoryId);
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
- SessionService.getAccessData(freshIdentity.idToken, baseUrl)
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.props.cacheAccessData(freshAccess);
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
- clearCachedAuth,
331
- cacheAccessData,
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: { duration }
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'>{secondsToTime(duration)}</div>;
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
- <CheckboxField
167
- width='50%'
168
- label={copy.uploads.assignToProjectInput}
169
- info={copy.uploads.assignToProjectInfo}
170
- value={assignToStory}
171
- onChange={() => this.props.toggleAssignToStory(!assignToStory)}
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 { cacheAccessData } from '../../redux/actions/access';
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
- SessionService.getAccessData(freshIdentity.idToken, baseUrl)
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.cacheAccessData(freshAccess);
41
- SessionService.buildFreshSession(freshIdentity, freshAccess);
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
- cacheAccessData
73
+ setAccessData
68
74
  },
69
75
  dispatch
70
76
  );