@imposium-hub/components 2.2.42 → 2.2.43

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 (230) hide show
  1. package/dist/cjs/Util.d.ts +3 -3
  2. package/dist/cjs/Util.js +20 -4
  3. package/dist/cjs/Util.js.map +1 -1
  4. package/dist/cjs/components/advanced-number-field/AdvancedNumberField.d.ts +1 -1
  5. package/dist/cjs/components/anchor-field/AnchorField.d.ts +1 -1
  6. package/dist/cjs/components/app-wrapper/AppWrapper.d.ts +1 -0
  7. package/dist/cjs/components/app-wrapper/AppWrapper.js +27 -6
  8. package/dist/cjs/components/app-wrapper/AppWrapper.js.map +1 -1
  9. package/dist/cjs/components/assets/AssetsTableDateCell.d.ts +1 -6
  10. package/dist/cjs/components/assets/AssetsTableDateCell.js +3 -0
  11. package/dist/cjs/components/assets/AssetsTableDateCell.js.map +1 -1
  12. package/dist/cjs/components/assets/AssetsTablePreviewCell.d.ts +1 -16
  13. package/dist/cjs/components/assets/AssetsTableStatusCell.d.ts +1 -5
  14. package/dist/cjs/components/assets/AssetsTableTagsCell.d.ts +1 -6
  15. package/dist/cjs/components/assets/AssetsTableTypeCell.d.ts +1 -5
  16. package/dist/cjs/components/assets/AssetsTypeIcon.d.ts +1 -5
  17. package/dist/cjs/components/assets/FontAssetPreview.d.ts +1 -1
  18. package/dist/cjs/components/auth-gate/AuthGate.js +2 -2
  19. package/dist/cjs/components/auth-gate/AuthGate.js.map +1 -1
  20. package/dist/cjs/components/button/Button.d.ts +1 -1
  21. package/dist/cjs/components/button/Button.stories.d.ts +5 -6
  22. package/dist/cjs/components/button-group-field/ButtonGroupField.d.ts +1 -1
  23. package/dist/cjs/components/button-group-field/ButtonGroupField.stories.d.ts +1 -2
  24. package/dist/cjs/components/button-menu/ButtonMenu.d.ts +3 -3
  25. package/dist/cjs/components/button-menu/ButtonMenu.stories.d.ts +1 -2
  26. package/dist/cjs/components/button-menu/ButtonMenuItem.d.ts +1 -1
  27. package/dist/cjs/components/card/Card.stories.d.ts +1 -2
  28. package/dist/cjs/components/checkbox-field/CheckboxField.d.ts +1 -1
  29. package/dist/cjs/components/checkbox-field/CheckboxField.stories.d.ts +1 -2
  30. package/dist/cjs/components/color-field/ColorField.d.ts +1 -1
  31. package/dist/cjs/components/color-field/ColorFiled.stories.d.ts +1 -2
  32. package/dist/cjs/components/compositions/TextLayer.d.ts +1 -1
  33. package/dist/cjs/components/context-menu/AnimateComponent.d.ts +1 -2
  34. package/dist/cjs/components/context-menu/ContextMenu.d.ts +1 -2
  35. package/dist/cjs/components/context-menu/ContextMenuItem.d.ts +1 -2
  36. package/dist/cjs/components/context-menu/ContextMenuTrigger.d.ts +1 -2
  37. package/dist/cjs/components/context-menu/SubMenu.d.ts +1 -2
  38. package/dist/cjs/components/context-menu/helper.d.ts +1 -1
  39. package/dist/cjs/components/controlled-list/ControlledList.d.ts +2 -2
  40. package/dist/cjs/components/controlled-list/ControlledList.stories.d.ts +1 -2
  41. package/dist/cjs/components/determinate-loader/DeterminateLoader.stories.d.ts +3 -4
  42. package/dist/cjs/components/dropdown/Dropdown.d.ts +2 -2
  43. package/dist/cjs/components/dropdown/Dropdown.js +5 -5
  44. package/dist/cjs/components/dropdown/Dropdown.js.map +1 -1
  45. package/dist/cjs/components/dropdown/dropdown.stories.d.ts +2 -2
  46. package/dist/cjs/components/field-wrapper/FieldWrapper.d.ts +2 -2
  47. package/dist/cjs/components/field-wrapper/FieldWrapper.stories.d.ts +1 -2
  48. package/dist/cjs/components/font-picker/FontPicker.d.ts +5 -5
  49. package/dist/cjs/components/font-picker/font-manager/FontManager.js +2 -2
  50. package/dist/cjs/components/font-picker/font-manager/FontManager.js.map +1 -1
  51. package/dist/cjs/components/font-picker/font-manager/constants.d.ts +1 -1
  52. package/dist/cjs/components/h-rule/HRule.d.ts +1 -2
  53. package/dist/cjs/components/h-rule/HRule.stories.d.ts +2 -3
  54. package/dist/cjs/components/header/Header.d.ts +1 -1
  55. package/dist/cjs/components/header/Header.js +3 -0
  56. package/dist/cjs/components/header/Header.js.map +1 -1
  57. package/dist/cjs/components/list-field/ListField.d.ts +2 -2
  58. package/dist/cjs/components/list-field/ListField.stories.d.ts +1 -2
  59. package/dist/cjs/components/log-viewer/LogViewer.d.ts +1 -1
  60. package/dist/cjs/components/media-variable-field/MediaVariableField.d.ts +1 -1
  61. package/dist/cjs/components/modal/Modal.d.ts +1 -1
  62. package/dist/cjs/components/modal/Modal.stories.d.ts +1 -2
  63. package/dist/cjs/components/no-access/NoAccess.d.ts +1 -1
  64. package/dist/cjs/components/no-access/NoAccess.js +11 -2
  65. package/dist/cjs/components/no-access/NoAccess.js.map +1 -1
  66. package/dist/cjs/components/number-field/NumberField.d.ts +1 -1
  67. package/dist/cjs/components/number-field/NumberField.stories.d.ts +1 -2
  68. package/dist/cjs/components/players/AudioPlayer.d.ts +1 -1
  69. package/dist/cjs/components/players/AudioPreview.d.ts +1 -1
  70. package/dist/cjs/components/players/ImagePlayer.d.ts +1 -1
  71. package/dist/cjs/components/players/ImagePreview.d.ts +1 -1
  72. package/dist/cjs/components/players/ImageSequencePlayer.d.ts +1 -1
  73. package/dist/cjs/components/players/TemplatePlayer.d.ts +1 -1
  74. package/dist/cjs/components/players/VideoPreview.d.ts +1 -1
  75. package/dist/cjs/components/publish-wizard/PublishWizard.d.ts +4 -4
  76. package/dist/cjs/components/publish-wizard/PublishWizard.js +2 -2
  77. package/dist/cjs/components/publish-wizard/PublishWizard.js.map +1 -1
  78. package/dist/cjs/components/publish-wizard/publish/APIIntegration.d.ts +1 -1
  79. package/dist/cjs/components/publish-wizard/publish/HubSpotFlow.d.ts +1 -1
  80. package/dist/cjs/components/publish-wizard/publish/WebpageHosted.d.ts +2 -6
  81. package/dist/cjs/components/section/Section.d.ts +1 -2
  82. package/dist/cjs/components/section/Section.stories.d.ts +2 -3
  83. package/dist/cjs/components/select-field/SelectField.d.ts +1 -1
  84. package/dist/cjs/components/select-field/SelectField.stories.d.ts +1 -2
  85. package/dist/cjs/components/shortcut-menu/ShortcutMenu.stories.d.ts +1 -2
  86. package/dist/cjs/components/slider-field/SliderField.d.ts +1 -1
  87. package/dist/cjs/components/slider-field/SliderField.stories.d.ts +1 -2
  88. package/dist/cjs/components/smpte-field/SMPTEField.d.ts +1 -1
  89. package/dist/cjs/components/story-previewer/StoryPreviewer.js +17 -8
  90. package/dist/cjs/components/story-previewer/StoryPreviewer.js.map +1 -1
  91. package/dist/cjs/components/tabs/Tabs.d.ts +2 -4
  92. package/dist/cjs/components/tabs/Tabs.stories.d.ts +2 -5
  93. package/dist/cjs/components/tag/Tag.d.ts +1 -9
  94. package/dist/cjs/components/text-area-field/TextAreaField.d.ts +1 -1
  95. package/dist/cjs/components/text-area-field/TextAreaField.stories.d.ts +1 -2
  96. package/dist/cjs/components/text-field/TextField.stories.d.ts +1 -2
  97. package/dist/cjs/constants/assets.d.ts +2 -5
  98. package/dist/cjs/constants/compositions.d.ts +3 -9
  99. package/dist/cjs/constants/fontSizes.d.ts +1 -1
  100. package/dist/cjs/constants/icons.d.ts +70 -71
  101. package/dist/cjs/constants/publish.d.ts +2 -5
  102. package/dist/cjs/constants/variables.d.ts +1 -4
  103. package/dist/cjs/redux/actions/active-batch.d.ts +1 -1
  104. package/dist/cjs/redux/actions/publish.d.ts +2 -2
  105. package/dist/cjs/redux/reducers/selected-assets.d.ts +1 -1
  106. package/dist/cjs/services/Auth0.d.ts +2 -2
  107. package/dist/cjs/services/Auth0.js +2 -3
  108. package/dist/cjs/services/Auth0.js.map +1 -1
  109. package/dist/cjs/services/Session.d.ts +1 -1
  110. package/dist/cjs/services/Session.js +3 -0
  111. package/dist/cjs/services/Session.js.map +1 -1
  112. package/dist/cjs/services/Storage.d.ts +1 -1
  113. package/dist/cjs/utils/assets.d.ts +0 -1
  114. package/dist/esm/Util.d.ts +3 -3
  115. package/dist/esm/Util.js +24 -4
  116. package/dist/esm/Util.js.map +1 -1
  117. package/dist/esm/components/advanced-number-field/AdvancedNumberField.d.ts +1 -1
  118. package/dist/esm/components/anchor-field/AnchorField.d.ts +1 -1
  119. package/dist/esm/components/app-wrapper/AppWrapper.d.ts +1 -0
  120. package/dist/esm/components/app-wrapper/AppWrapper.js +28 -7
  121. package/dist/esm/components/app-wrapper/AppWrapper.js.map +1 -1
  122. package/dist/esm/components/assets/AssetsTableDateCell.d.ts +1 -6
  123. package/dist/esm/components/assets/AssetsTableDateCell.js +3 -0
  124. package/dist/esm/components/assets/AssetsTableDateCell.js.map +1 -1
  125. package/dist/esm/components/assets/AssetsTablePreviewCell.d.ts +1 -16
  126. package/dist/esm/components/assets/AssetsTableStatusCell.d.ts +1 -5
  127. package/dist/esm/components/assets/AssetsTableTagsCell.d.ts +1 -6
  128. package/dist/esm/components/assets/AssetsTableTypeCell.d.ts +1 -5
  129. package/dist/esm/components/assets/AssetsTypeIcon.d.ts +1 -5
  130. package/dist/esm/components/assets/FontAssetPreview.d.ts +1 -1
  131. package/dist/esm/components/auth-gate/AuthGate.js +2 -2
  132. package/dist/esm/components/auth-gate/AuthGate.js.map +1 -1
  133. package/dist/esm/components/button/Button.d.ts +1 -1
  134. package/dist/esm/components/button/Button.stories.d.ts +5 -6
  135. package/dist/esm/components/button-group-field/ButtonGroupField.d.ts +1 -1
  136. package/dist/esm/components/button-group-field/ButtonGroupField.stories.d.ts +1 -2
  137. package/dist/esm/components/button-menu/ButtonMenu.d.ts +3 -3
  138. package/dist/esm/components/button-menu/ButtonMenu.stories.d.ts +1 -2
  139. package/dist/esm/components/button-menu/ButtonMenuItem.d.ts +1 -1
  140. package/dist/esm/components/card/Card.stories.d.ts +1 -2
  141. package/dist/esm/components/checkbox-field/CheckboxField.d.ts +1 -1
  142. package/dist/esm/components/checkbox-field/CheckboxField.stories.d.ts +1 -2
  143. package/dist/esm/components/color-field/ColorField.d.ts +1 -1
  144. package/dist/esm/components/color-field/ColorFiled.stories.d.ts +1 -2
  145. package/dist/esm/components/compositions/TextLayer.d.ts +1 -1
  146. package/dist/esm/components/context-menu/AnimateComponent.d.ts +1 -2
  147. package/dist/esm/components/context-menu/ContextMenu.d.ts +1 -2
  148. package/dist/esm/components/context-menu/ContextMenuItem.d.ts +1 -2
  149. package/dist/esm/components/context-menu/ContextMenuTrigger.d.ts +1 -2
  150. package/dist/esm/components/context-menu/SubMenu.d.ts +1 -2
  151. package/dist/esm/components/context-menu/helper.d.ts +1 -1
  152. package/dist/esm/components/controlled-list/ControlledList.d.ts +2 -2
  153. package/dist/esm/components/controlled-list/ControlledList.stories.d.ts +1 -2
  154. package/dist/esm/components/determinate-loader/DeterminateLoader.stories.d.ts +3 -4
  155. package/dist/esm/components/dropdown/Dropdown.d.ts +2 -2
  156. package/dist/esm/components/dropdown/dropdown.stories.d.ts +2 -2
  157. package/dist/esm/components/field-wrapper/FieldWrapper.d.ts +2 -2
  158. package/dist/esm/components/field-wrapper/FieldWrapper.stories.d.ts +1 -2
  159. package/dist/esm/components/font-picker/FontPicker.d.ts +5 -5
  160. package/dist/esm/components/font-picker/font-manager/constants.d.ts +1 -1
  161. package/dist/esm/components/h-rule/HRule.d.ts +1 -2
  162. package/dist/esm/components/h-rule/HRule.stories.d.ts +2 -3
  163. package/dist/esm/components/header/Header.d.ts +1 -1
  164. package/dist/esm/components/header/Header.js +3 -0
  165. package/dist/esm/components/header/Header.js.map +1 -1
  166. package/dist/esm/components/list-field/ListField.d.ts +2 -2
  167. package/dist/esm/components/list-field/ListField.stories.d.ts +1 -2
  168. package/dist/esm/components/log-viewer/LogViewer.d.ts +1 -1
  169. package/dist/esm/components/media-variable-field/MediaVariableField.d.ts +1 -1
  170. package/dist/esm/components/modal/Modal.d.ts +1 -1
  171. package/dist/esm/components/modal/Modal.stories.d.ts +1 -2
  172. package/dist/esm/components/no-access/NoAccess.d.ts +1 -1
  173. package/dist/esm/components/no-access/NoAccess.js +11 -2
  174. package/dist/esm/components/no-access/NoAccess.js.map +1 -1
  175. package/dist/esm/components/number-field/NumberField.d.ts +1 -1
  176. package/dist/esm/components/number-field/NumberField.stories.d.ts +1 -2
  177. package/dist/esm/components/players/AudioPlayer.d.ts +1 -1
  178. package/dist/esm/components/players/AudioPreview.d.ts +1 -1
  179. package/dist/esm/components/players/ImagePlayer.d.ts +1 -1
  180. package/dist/esm/components/players/ImagePreview.d.ts +1 -1
  181. package/dist/esm/components/players/ImageSequencePlayer.d.ts +1 -1
  182. package/dist/esm/components/players/TemplatePlayer.d.ts +1 -1
  183. package/dist/esm/components/players/VideoPreview.d.ts +1 -1
  184. package/dist/esm/components/publish-wizard/PublishWizard.d.ts +4 -4
  185. package/dist/esm/components/publish-wizard/publish/APIIntegration.d.ts +1 -1
  186. package/dist/esm/components/publish-wizard/publish/HubSpotFlow.d.ts +1 -1
  187. package/dist/esm/components/publish-wizard/publish/WebpageHosted.d.ts +2 -6
  188. package/dist/esm/components/section/Section.d.ts +1 -2
  189. package/dist/esm/components/section/Section.stories.d.ts +2 -3
  190. package/dist/esm/components/select-field/SelectField.d.ts +1 -1
  191. package/dist/esm/components/select-field/SelectField.stories.d.ts +1 -2
  192. package/dist/esm/components/shortcut-menu/ShortcutMenu.stories.d.ts +1 -2
  193. package/dist/esm/components/slider-field/SliderField.d.ts +1 -1
  194. package/dist/esm/components/slider-field/SliderField.stories.d.ts +1 -2
  195. package/dist/esm/components/smpte-field/SMPTEField.d.ts +1 -1
  196. package/dist/esm/components/story-previewer/StoryPreviewer.js +10 -5
  197. package/dist/esm/components/story-previewer/StoryPreviewer.js.map +1 -1
  198. package/dist/esm/components/tabs/Tabs.d.ts +2 -4
  199. package/dist/esm/components/tabs/Tabs.stories.d.ts +2 -5
  200. package/dist/esm/components/tag/Tag.d.ts +1 -9
  201. package/dist/esm/components/text-area-field/TextAreaField.d.ts +1 -1
  202. package/dist/esm/components/text-area-field/TextAreaField.stories.d.ts +1 -2
  203. package/dist/esm/components/text-field/TextField.stories.d.ts +1 -2
  204. package/dist/esm/constants/assets.d.ts +2 -5
  205. package/dist/esm/constants/compositions.d.ts +3 -9
  206. package/dist/esm/constants/fontSizes.d.ts +1 -1
  207. package/dist/esm/constants/icons.d.ts +70 -71
  208. package/dist/esm/constants/publish.d.ts +2 -5
  209. package/dist/esm/constants/variables.d.ts +1 -4
  210. package/dist/esm/redux/actions/active-batch.d.ts +1 -1
  211. package/dist/esm/redux/actions/publish.d.ts +2 -2
  212. package/dist/esm/redux/reducers/selected-assets.d.ts +1 -1
  213. package/dist/esm/services/Auth0.d.ts +2 -2
  214. package/dist/esm/services/Auth0.js +2 -2
  215. package/dist/esm/services/Auth0.js.map +1 -1
  216. package/dist/esm/services/Session.d.ts +1 -1
  217. package/dist/esm/services/Session.js +3 -0
  218. package/dist/esm/services/Session.js.map +1 -1
  219. package/dist/esm/services/Storage.d.ts +1 -1
  220. package/dist/esm/utils/assets.d.ts +0 -1
  221. package/package.json +4 -6
  222. package/src/Util.ts +20 -6
  223. package/src/components/app-wrapper/AppWrapper.tsx +45 -7
  224. package/src/components/assets/AssetsTableDateCell.tsx +2 -0
  225. package/src/components/auth-gate/AuthGate.tsx +3 -2
  226. package/src/components/header/Header.tsx +4 -0
  227. package/src/components/no-access/NoAccess.tsx +14 -3
  228. package/src/components/story-previewer/StoryPreviewer.tsx +12 -22
  229. package/src/services/Auth0.ts +2 -2
  230. package/src/services/Session.ts +3 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@imposium-hub/components",
3
- "version": "2.2.42",
3
+ "version": "2.2.43",
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",
@@ -72,7 +72,6 @@
72
72
  "smpte-timecode": "^1.2.3"
73
73
  },
74
74
  "devDependencies": {
75
- "@babel/core": "^7.17.10",
76
75
  "@fortawesome/fontawesome-svg-core": "^6.1.1",
77
76
  "@fortawesome/free-brands-svg-icons": "^6.1.1",
78
77
  "@fortawesome/free-solid-svg-icons": "^6.1.1",
@@ -91,13 +90,12 @@
91
90
  "@storybook/react": "^7.0.7",
92
91
  "@storybook/testing-library": "^0.0.11",
93
92
  "@types/hoist-non-react-statics": "^3.3.1",
94
- "@types/lodash": "^4.14.178",
93
+ "@types/offscreencanvas": "^2019.6.4",
95
94
  "@types/react": "^17.0.37",
96
95
  "@types/resize-observer-browser": "^0.1.5",
97
- "@typescript-eslint/eslint-plugin": "^5.21.0",
98
- "@typescript-eslint/parser": "^5.24.0",
96
+ "@typescript-eslint/eslint-plugin": "^5.26.0",
97
+ "@typescript-eslint/parser": "^5.26.0",
99
98
  "axios": "^0.21.1",
100
- "babel-loader": "^8.2.5",
101
99
  "concurrently": "^7.1.0",
102
100
  "eslint": "^8.14.0",
103
101
  "eslint-config-prettier": "^8.5.0",
package/src/Util.ts CHANGED
@@ -2,8 +2,13 @@ import Timecode from 'smpte-timecode';
2
2
 
3
3
  export const isLocal = (): boolean => window.location.hostname === 'localhost';
4
4
 
5
- export const getActiveOrg = (activeOrgId: string, access: any): any =>
6
- access.organizations.find((o: any) => o.id === activeOrgId);
5
+ export const getActiveOrg = (activeOrgId: string, access: any): any => {
6
+ if (access && access.organizations && access.organizations.length > 0) {
7
+ return access.organizations.find((o: any) => o.id === activeOrgId);
8
+ } else {
9
+ return false;
10
+ }
11
+ };
7
12
 
8
13
  export const validateAccessLevel = (orgId: string, serviceId: number, access: any): boolean => {
9
14
  const activeOrg: any = getActiveOrg(orgId, access);
@@ -39,10 +44,19 @@ export const getLastModifiedStoryInOrg = (orgId: string, access: any): string =>
39
44
 
40
45
  return sortByLastModified[0].id;
41
46
  };
42
- export const scrapeEmail = (auth: any): string =>
43
- auth && auth.idTokenPayload && auth.idTokenPayload['https://imposium.com/email']
44
- ? auth.idTokenPayload['https://imposium.com/email']
45
- : '';
47
+ export const scrapeEmail = (auth: any): string => {
48
+ if (auth && auth.idTokenPayload) {
49
+ if (auth.idTokenPayload['https://imposium.com/email']) {
50
+ return auth.idTokenPayload['https://imposium.com/email'];
51
+ } else if (auth.idTokenPayload['userEmail']) {
52
+ return auth.idTokenPayload['userEmail'];
53
+ } else {
54
+ return '';
55
+ }
56
+ } else {
57
+ return '';
58
+ }
59
+ };
46
60
 
47
61
  export const parameterizeServiceUrl = (
48
62
  activeOrg: string,
@@ -7,10 +7,11 @@ import { connect } from 'react-redux';
7
7
  import { bindActionCreators } from 'redux';
8
8
  import { login, clearCachedAuth } from '../../redux/actions/auth';
9
9
  import { cacheAccessData, clearCachedAccessList } from '../../redux/actions/access';
10
- import { checkStoryId, getLastModifiedStoryInOrg, validateAccessLevel } from '../../Util';
10
+ import { validateAccessLevel } from '../../Util';
11
11
 
12
12
  export interface IAppWrapperProps {
13
13
  children: React.ReactChildren;
14
+ auth0Domain: string;
14
15
  auth0ClientId: string;
15
16
  organizationId: string;
16
17
  baseUrl: string;
@@ -49,6 +50,13 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
49
50
  />
50
51
  );
51
52
 
53
+ private static readonly NO_ORGS: JSX.Element = (
54
+ <NoAccess
55
+ key='restriction-msg'
56
+ type='no-orgs'
57
+ />
58
+ );
59
+
52
60
  constructor(p: IAppWrapperProps) {
53
61
  super(p);
54
62
 
@@ -59,10 +67,24 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
59
67
  }
60
68
 
61
69
  public componentDidMount = (): void => {
62
- const { auth, access, auth0ClientId, isFreshUser } = this.props;
70
+ const { auth, access, auth0ClientId, auth0Domain, isFreshUser } = this.props;
63
71
  const session: IHubSession = SessionService.getSession();
64
72
 
65
- AuthService.bindToClient(auth0ClientId);
73
+ AuthService.bindToClient(auth0ClientId, auth0Domain);
74
+
75
+ const validAccessLevel = validateAccessLevel(
76
+ this.props.organizationId,
77
+ this.props.serviceId,
78
+ this.props.access
79
+ );
80
+
81
+ if (!this.state.restrictAccess && !validAccessLevel) {
82
+ this.setState({ restrictAccess: true });
83
+ }
84
+
85
+ if (this.state.restrictAccess && validAccessLevel) {
86
+ this.setState({ restrictAccess: false });
87
+ }
66
88
 
67
89
  // If cookie, auth or access data is missing / mismatched,
68
90
  // silently check auth0 session and refresh flow on success
@@ -128,9 +150,16 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
128
150
  private propagateCreds = (): void => {
129
151
  const { auth, access, storyId, onAuthenticated } = this.props;
130
152
  const activeOrgId: string = this.determineActiveOrganization(auth, access);
131
- const activeStoryId: string = checkStoryId(storyId, activeOrgId, access)
132
- ? storyId
133
- : getLastModifiedStoryInOrg(activeOrgId, access);
153
+ let activeStoryId: string = SessionService.getSession().story_id;
154
+ let activeOrg: any;
155
+
156
+ if (this.props.storyId) {
157
+ activeOrg = access.organizations.find((o: any) => o.id === activeOrgId);
158
+
159
+ if (activeOrg && activeOrg.stories.find((s: any) => s.id === storyId)) {
160
+ activeStoryId = storyId;
161
+ }
162
+ }
134
163
 
135
164
  onAuthenticated(activeOrgId, activeStoryId);
136
165
 
@@ -265,9 +294,18 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
265
294
  let innerContent: any;
266
295
 
267
296
  if (!blockRender && restrictAccess) {
297
+ const showNoOrgs =
298
+ this.props.access &&
299
+ this.props.access.organizations &&
300
+ this.props.access.organizations.length === 0;
301
+ const errorIndicator = showNoOrgs
302
+ ? AppWrapper.NO_ORGS
303
+ : showRequestAccess
304
+ ? AppWrapper.RESTRICTED_REQUEST
305
+ : AppWrapper.RESTRICTED_BLOCK;
268
306
  innerContent = [
269
307
  typeof children[0] === 'object' && children[0].type === Header && children[0],
270
- showRequestAccess ? AppWrapper.RESTRICTED_REQUEST : AppWrapper.RESTRICTED_BLOCK
308
+ errorIndicator
271
309
  ];
272
310
  }
273
311
 
@@ -18,6 +18,8 @@ const AssetsTableDateCell: React.FC<IAssetsTableDateCell> = (p: IAssetsTableDate
18
18
  return <div>{formatDateDefault(values.date_created)}</div>;
19
19
  } else if (values.date_modified) {
20
20
  return <div>{formatDateDefault(values.date_modified)}</div>;
21
+ } else if (values.date_updated) {
22
+ return <div>{formatDateDefault(values.date_updated)}</div>;
21
23
  } else {
22
24
  return null;
23
25
  }
@@ -9,6 +9,7 @@ import { cacheAccessData } from '../../redux/actions/access';
9
9
 
10
10
  interface IAuthGateProps {
11
11
  auth0ClientId: string;
12
+ auth0Domain: string;
12
13
  auth0Hash: string;
13
14
  onAuthenticated: () => any;
14
15
  baseUrl?: string;
@@ -24,9 +25,9 @@ class AuthGate extends React.PureComponent<IAuthGateProps> {
24
25
  }
25
26
 
26
27
  public componentDidMount = (): void => {
27
- const { auth0ClientId, auth0Hash, onAuthenticated, baseUrl } = this.props;
28
+ const { auth0ClientId, auth0Hash, auth0Domain, onAuthenticated, baseUrl } = this.props;
28
29
 
29
- AuthService.bindToClient(auth0ClientId);
30
+ AuthService.bindToClient(auth0ClientId, auth0Domain);
30
31
 
31
32
  if (!auth0Hash) {
32
33
  AuthService.login();
@@ -457,6 +457,10 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
457
457
  );
458
458
  }
459
459
 
460
+ if (accessData && accessData.organizations && accessData.organizations.length === 0) {
461
+ storyToggle = null;
462
+ }
463
+
460
464
  if (accessData && activeOrganizationBlob && !hideStoryPicker) {
461
465
  currentStory = activeOrganizationBlob.stories.find((s: any) => s.id === activeStory);
462
466
  storyToggle = (
@@ -4,20 +4,22 @@ import { faUserLock } from '@fortawesome/free-solid-svg-icons/faUserLock';
4
4
  import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons/faExclamationTriangle';
5
5
 
6
6
  interface INoAccessProps {
7
- type: 'request' | 'restrict';
7
+ type: 'request' | 'restrict' | 'no-orgs';
8
8
  }
9
9
 
10
10
  const MAIL_TO: string = 'mailto:info@imposium.com?subject=My access to Imposium is restricted';
11
11
  const REQUEST_ACCESS_TITLE: string = "You don't have access to Imposium yet";
12
12
  const REQUEST_HREF_COPY: string = 'Request Access';
13
13
  const RESTRICTED_ACCESS_TITLE: string = 'Service not found';
14
+ const NO_ORGS_TITLE = 'No organizations found';
14
15
 
15
16
  const NoAccess: React.FC<INoAccessProps> = (p: INoAccessProps) => {
16
17
  if (!p.type) {
17
- throw new Error('NoAccess requires a type of either: request or restrict');
18
+ throw new Error('NoAccess requires a type of either: request or restrict or no-orgs');
18
19
  }
19
20
 
20
21
  const isRequest: boolean = p.type === 'request';
22
+ const isNoOrgs: boolean = p.type === 'no-orgs';
21
23
 
22
24
  return (
23
25
  <div className='no-access'>
@@ -35,8 +37,17 @@ const NoAccess: React.FC<INoAccessProps> = (p: INoAccessProps) => {
35
37
 
36
38
  <div className='no-access-copy'>
37
39
  <h1 className='no-access-heading'>
38
- {isRequest ? REQUEST_ACCESS_TITLE : RESTRICTED_ACCESS_TITLE}
40
+ {isRequest
41
+ ? REQUEST_ACCESS_TITLE
42
+ : isNoOrgs
43
+ ? NO_ORGS_TITLE
44
+ : RESTRICTED_ACCESS_TITLE}
39
45
  </h1>
46
+ <p>
47
+ {isNoOrgs
48
+ ? 'Please request access from an admin already on the organization'
49
+ : null}
50
+ </p>
40
51
  {isRequest && <a href={MAIL_TO}>{REQUEST_HREF_COPY}</a>}
41
52
  </div>
42
53
  </div>
@@ -585,16 +585,10 @@ class StoryPreviewer extends React.PureComponent<IStoryPreviewerProps, IStoryPre
585
585
  }
586
586
 
587
587
  private createExperience() {
588
- const {
589
- storyId,
590
- onNotification,
591
- onError,
592
- api,
593
- onExperienceCreated,
594
- useWorkingCopy,
595
- editor: { fastRender }
596
- } = this.props;
588
+ const { storyId, onNotification, onError, api, onExperienceCreated, useWorkingCopy } =
589
+ this.props;
597
590
 
591
+ const fastRender = this.props.editor?.fastRender || false;
598
592
  const compId = this.getCompId();
599
593
 
600
594
  this.resetState(false, () => {
@@ -660,11 +654,9 @@ class StoryPreviewer extends React.PureComponent<IStoryPreviewerProps, IStoryPre
660
654
  private renderViewerContent() {
661
655
  const { rendering, experience, timeElapsed, activeOutput, isTimeOut } = this.state;
662
656
 
663
- const {
664
- api,
665
- onError,
666
- editor: { playbackRate }
667
- } = this.props;
657
+ const { api, onError } = this.props;
658
+
659
+ const playbackRate = this.props.editor?.playbackRate || 1;
668
660
 
669
661
  if (rendering) {
670
662
  return (
@@ -840,23 +832,21 @@ class StoryPreviewer extends React.PureComponent<IStoryPreviewerProps, IStoryPre
840
832
  }
841
833
 
842
834
  private changePlaybackRate() {
843
- const {
844
- editor: { playbackRate }
845
- } = this.props;
835
+ const playbackRate = this.props.editor?.playbackRate || 1;
846
836
  let newRate = playbackRate + 0.5;
847
837
 
848
838
  if (newRate > this.maxPlaybackRate) {
849
839
  newRate = 1;
850
840
  }
851
841
 
852
- this.props.updateEditorConfig({ playbackRate: newRate });
842
+ if (this.props.updateEditorConfig) {
843
+ this.props.updateEditorConfig({ playbackRate: newRate });
844
+ }
853
845
  }
854
846
 
855
847
  public render() {
856
- const {
857
- allowCompOverride,
858
- editor: { playbackRate }
859
- } = this.props;
848
+ const { allowCompOverride } = this.props;
849
+ const playbackRate = this.props.editor?.playbackRate || 1;
860
850
  const { rendering, experience, activeOutput, experienceId, error } = this.state;
861
851
  const { storyId } = this.props;
862
852
  const renderCopy = experience ? copy.btnReRender : copy.btnRender;
@@ -11,7 +11,6 @@ export interface IIdentity {
11
11
 
12
12
  export default class AuthService {
13
13
  private static readonly IMPOSIUM_APP_DEFAULTS: any = {
14
- domain: 'imposium.auth0.com',
15
14
  scope: 'openid',
16
15
  responseType: 'token id_token',
17
16
  redirectUri: `${window.location.origin}/auth`
@@ -23,9 +22,10 @@ export default class AuthService {
23
22
  /*
24
23
  Initialize the auth0 web client with client ID for a given app-wrapper
25
24
  */
26
- public static bindToClient = (clientID: string): void => {
25
+ public static bindToClient = (clientID: string, domain: string): void => {
27
26
  AuthService.auth0Client = new auth0.WebAuth({
28
27
  clientID,
28
+ domain,
29
29
  ...AuthService.IMPOSIUM_APP_DEFAULTS
30
30
  });
31
31
  };
@@ -98,6 +98,7 @@ export default class SessionService {
98
98
  if (
99
99
  cachedStoryId &&
100
100
  organizationId &&
101
+ activeOrg.stories &&
101
102
  activeOrg.stories.find((s: any) => s.id === cachedStoryId)
102
103
  ) {
103
104
  activeStoryId = cachedStoryId;
@@ -116,6 +117,8 @@ export default class SessionService {
116
117
  // Same for story id if the cache was missing / belonging to a different org
117
118
  if (
118
119
  !activeStoryId &&
120
+ organizations &&
121
+ organizations[0] &&
119
122
  organizations[0].stories.length > 0 &&
120
123
  typeof organizations[0].stories[0] === 'object' &&
121
124
  organizations[0].stories[0].hasOwnProperty('id')