@imposium-hub/components 2.2.45-0 → 2.2.46-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 (266) hide show
  1. package/dist/cjs/Util.d.ts +1 -0
  2. package/dist/cjs/Util.js +8 -1
  3. package/dist/cjs/Util.js.map +1 -1
  4. package/dist/cjs/components/Tooltip.d.ts +2 -2
  5. package/dist/cjs/components/Tooltip.js +4 -7
  6. package/dist/cjs/components/Tooltip.js.map +1 -1
  7. package/dist/cjs/components/advanced-number-field/AdvancedNumberField.d.ts +1 -1
  8. package/dist/cjs/components/anchor-field/AnchorField.d.ts +1 -1
  9. package/dist/cjs/components/app-wrapper/AppWrapper.d.ts +2 -1
  10. package/dist/cjs/components/app-wrapper/AppWrapper.js +79 -71
  11. package/dist/cjs/components/app-wrapper/AppWrapper.js.map +1 -1
  12. package/dist/cjs/components/assets/AssetField.js +2 -2
  13. package/dist/cjs/components/assets/AssetField.js.map +1 -1
  14. package/dist/cjs/components/assets/AssetsTableDurationCell.js +1 -4
  15. package/dist/cjs/components/assets/AssetsTableDurationCell.js.map +1 -1
  16. package/dist/cjs/components/assets/AssetsTableGlobalCell.js +1 -1
  17. package/dist/cjs/components/assets/AssetsTableGlobalCell.js.map +1 -1
  18. package/dist/cjs/components/assets/AssetsTableNameCell.js +4 -3
  19. package/dist/cjs/components/assets/AssetsTableNameCell.js.map +1 -1
  20. package/dist/cjs/components/assets/AssetsTableRateCell.js +9 -3
  21. package/dist/cjs/components/assets/AssetsTableRateCell.js.map +1 -1
  22. package/dist/cjs/components/assets/AssetsTableTypeFilter.js +2 -2
  23. package/dist/cjs/components/assets/AssetsTableTypeFilter.js.map +1 -1
  24. package/dist/cjs/components/assets/AssetsUploadMenu.js +157 -34
  25. package/dist/cjs/components/assets/AssetsUploadMenu.js.map +1 -1
  26. package/dist/cjs/components/auth-gate/AuthGate.js +5 -8
  27. package/dist/cjs/components/auth-gate/AuthGate.js.map +1 -1
  28. package/dist/cjs/components/button-group-field/ButtonGroupField.d.ts +1 -1
  29. package/dist/cjs/components/checkbox-field/CheckboxField.d.ts +1 -1
  30. package/dist/cjs/components/color-field/ColorField.d.ts +1 -1
  31. package/dist/cjs/components/color-field/ColorField.js +2 -2
  32. package/dist/cjs/components/color-field/ColorField.js.map +1 -1
  33. package/dist/cjs/components/context-menu/ContextMenu.js +8 -4
  34. package/dist/cjs/components/context-menu/ContextMenu.js.map +1 -1
  35. package/dist/cjs/components/copy-prop-id-button/CopyPropIdButton.d.ts +12 -0
  36. package/dist/cjs/components/copy-prop-id-button/CopyPropIdButton.js +75 -0
  37. package/dist/cjs/components/copy-prop-id-button/CopyPropIdButton.js.map +1 -0
  38. package/dist/cjs/components/data-table/DataTable.js +2 -2
  39. package/dist/cjs/components/data-table/DataTable.js.map +1 -1
  40. package/dist/cjs/components/dropdown/{dropdown.stories.js → Dropdown.stories.js} +1 -1
  41. package/dist/cjs/components/dropdown/{dropdown.stories.js.map → Dropdown.stories.js.map} +1 -1
  42. package/dist/cjs/components/header/Header.d.ts +0 -4
  43. package/dist/cjs/components/header/Header.js +19 -27
  44. package/dist/cjs/components/header/Header.js.map +1 -1
  45. package/dist/cjs/components/list-field/ListField.d.ts +1 -1
  46. package/dist/cjs/components/number-field/NumberField.d.ts +1 -1
  47. package/dist/cjs/components/publish-wizard/PublishWizard.js +63 -119
  48. package/dist/cjs/components/publish-wizard/PublishWizard.js.map +1 -1
  49. package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js +28 -5
  50. package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
  51. package/dist/cjs/components/select-field/SelectField.d.ts +1 -1
  52. package/dist/cjs/components/select-field/SelectField.js +4 -0
  53. package/dist/cjs/components/select-field/SelectField.js.map +1 -1
  54. package/dist/cjs/components/slider-field/SliderField.d.ts +1 -1
  55. package/dist/cjs/components/smpte-field/SMPTEField.d.ts +1 -1
  56. package/dist/cjs/components/text-area-field/TextAreaField.d.ts +1 -1
  57. package/dist/cjs/components/text-field/TextField.d.ts +1 -1
  58. package/dist/cjs/constants/copy.d.ts +2 -5
  59. package/dist/cjs/constants/copy.js +5 -8
  60. package/dist/cjs/constants/copy.js.map +1 -1
  61. package/dist/cjs/constants/icons.d.ts +0 -1
  62. package/dist/cjs/constants/icons.js +1 -3
  63. package/dist/cjs/constants/icons.js.map +1 -1
  64. package/dist/cjs/index.d.ts +5 -3
  65. package/dist/cjs/index.js +8 -3
  66. package/dist/cjs/index.js.map +1 -1
  67. package/dist/cjs/redux/actions/access.d.ts +3 -1
  68. package/dist/cjs/redux/actions/access.js +43 -10
  69. package/dist/cjs/redux/actions/access.js.map +1 -1
  70. package/dist/cjs/redux/actions/asset-uploads.d.ts +5 -10
  71. package/dist/cjs/redux/actions/asset-uploads.js +262 -182
  72. package/dist/cjs/redux/actions/asset-uploads.js.map +1 -1
  73. package/dist/cjs/redux/actions/publish.js +3 -4
  74. package/dist/cjs/redux/actions/publish.js.map +1 -1
  75. package/dist/cjs/redux/reducers/access.js +30 -7
  76. package/dist/cjs/redux/reducers/access.js.map +1 -1
  77. package/dist/cjs/redux/reducers/asset-uploads.js +8 -24
  78. package/dist/cjs/redux/reducers/asset-uploads.js.map +1 -1
  79. package/dist/cjs/services/Session.d.ts +8 -9
  80. package/dist/cjs/services/Session.js +127 -31
  81. package/dist/cjs/services/Session.js.map +1 -1
  82. package/dist/esm/Util.d.ts +1 -0
  83. package/dist/esm/Util.js +6 -0
  84. package/dist/esm/Util.js.map +1 -1
  85. package/dist/esm/components/Tooltip.d.ts +2 -2
  86. package/dist/esm/components/Tooltip.js +4 -4
  87. package/dist/esm/components/Tooltip.js.map +1 -1
  88. package/dist/esm/components/advanced-number-field/AdvancedNumberField.d.ts +1 -1
  89. package/dist/esm/components/anchor-field/AnchorField.d.ts +1 -1
  90. package/dist/esm/components/app-wrapper/AppWrapper.d.ts +2 -1
  91. package/dist/esm/components/app-wrapper/AppWrapper.js +79 -69
  92. package/dist/esm/components/app-wrapper/AppWrapper.js.map +1 -1
  93. package/dist/esm/components/assets/AssetField.js +2 -2
  94. package/dist/esm/components/assets/AssetField.js.map +1 -1
  95. package/dist/esm/components/assets/AssetsTableDurationCell.js +2 -5
  96. package/dist/esm/components/assets/AssetsTableDurationCell.js.map +1 -1
  97. package/dist/esm/components/assets/AssetsTableGlobalCell.js +1 -1
  98. package/dist/esm/components/assets/AssetsTableGlobalCell.js.map +1 -1
  99. package/dist/esm/components/assets/AssetsTableNameCell.js +4 -3
  100. package/dist/esm/components/assets/AssetsTableNameCell.js.map +1 -1
  101. package/dist/esm/components/assets/AssetsTableRateCell.js +9 -3
  102. package/dist/esm/components/assets/AssetsTableRateCell.js.map +1 -1
  103. package/dist/esm/components/assets/AssetsTableTypeFilter.js +2 -2
  104. package/dist/esm/components/assets/AssetsTableTypeFilter.js.map +1 -1
  105. package/dist/esm/components/assets/AssetsUploadMenu.js +138 -34
  106. package/dist/esm/components/assets/AssetsUploadMenu.js.map +1 -1
  107. package/dist/esm/components/auth-gate/AuthGate.js +6 -9
  108. package/dist/esm/components/auth-gate/AuthGate.js.map +1 -1
  109. package/dist/esm/components/button-group-field/ButtonGroupField.d.ts +1 -1
  110. package/dist/esm/components/checkbox-field/CheckboxField.d.ts +1 -1
  111. package/dist/esm/components/color-field/ColorField.d.ts +1 -1
  112. package/dist/esm/components/color-field/ColorField.js +2 -2
  113. package/dist/esm/components/color-field/ColorField.js.map +1 -1
  114. package/dist/esm/components/context-menu/ContextMenu.js +7 -3
  115. package/dist/esm/components/context-menu/ContextMenu.js.map +1 -1
  116. package/dist/esm/components/copy-prop-id-button/CopyPropIdButton.d.ts +12 -0
  117. package/dist/esm/components/copy-prop-id-button/CopyPropIdButton.js +24 -0
  118. package/dist/esm/components/copy-prop-id-button/CopyPropIdButton.js.map +1 -0
  119. package/dist/esm/components/data-table/DataTable.js +2 -2
  120. package/dist/esm/components/data-table/DataTable.js.map +1 -1
  121. package/dist/esm/components/dropdown/{dropdown.stories.js → Dropdown.stories.js} +1 -1
  122. package/dist/esm/components/dropdown/{dropdown.stories.js.map → Dropdown.stories.js.map} +1 -1
  123. package/dist/esm/components/header/Header.d.ts +0 -4
  124. package/dist/esm/components/header/Header.js +19 -27
  125. package/dist/esm/components/header/Header.js.map +1 -1
  126. package/dist/esm/components/list-field/ListField.d.ts +1 -1
  127. package/dist/esm/components/number-field/NumberField.d.ts +1 -1
  128. package/dist/esm/components/publish-wizard/PublishWizard.js +64 -119
  129. package/dist/esm/components/publish-wizard/PublishWizard.js.map +1 -1
  130. package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js +28 -5
  131. package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
  132. package/dist/esm/components/select-field/SelectField.d.ts +1 -1
  133. package/dist/esm/components/select-field/SelectField.js +3 -0
  134. package/dist/esm/components/select-field/SelectField.js.map +1 -1
  135. package/dist/esm/components/slider-field/SliderField.d.ts +1 -1
  136. package/dist/esm/components/smpte-field/SMPTEField.d.ts +1 -1
  137. package/dist/esm/components/text-area-field/TextAreaField.d.ts +1 -1
  138. package/dist/esm/components/text-field/TextField.d.ts +1 -1
  139. package/dist/esm/constants/copy.d.ts +2 -5
  140. package/dist/esm/constants/copy.js +5 -8
  141. package/dist/esm/constants/copy.js.map +1 -1
  142. package/dist/esm/constants/icons.d.ts +0 -1
  143. package/dist/esm/constants/icons.js +0 -2
  144. package/dist/esm/constants/icons.js.map +1 -1
  145. package/dist/esm/index.d.ts +5 -3
  146. package/dist/esm/index.js +5 -3
  147. package/dist/esm/index.js.map +1 -1
  148. package/dist/esm/redux/actions/access.d.ts +3 -1
  149. package/dist/esm/redux/actions/access.js +37 -8
  150. package/dist/esm/redux/actions/access.js.map +1 -1
  151. package/dist/esm/redux/actions/asset-uploads.d.ts +5 -10
  152. package/dist/esm/redux/actions/asset-uploads.js +224 -167
  153. package/dist/esm/redux/actions/asset-uploads.js.map +1 -1
  154. package/dist/esm/redux/actions/publish.js +3 -4
  155. package/dist/esm/redux/actions/publish.js.map +1 -1
  156. package/dist/esm/redux/reducers/access.js +8 -5
  157. package/dist/esm/redux/reducers/access.js.map +1 -1
  158. package/dist/esm/redux/reducers/asset-uploads.js +11 -48
  159. package/dist/esm/redux/reducers/asset-uploads.js.map +1 -1
  160. package/dist/esm/services/Session.d.ts +8 -9
  161. package/dist/esm/services/Session.js +102 -29
  162. package/dist/esm/services/Session.js.map +1 -1
  163. package/dist/styles.css +151 -25
  164. package/dist/styles.less +280 -100
  165. package/less/components/assets.less +237 -63
  166. package/less/components/button.less +7 -1
  167. package/less/components/data-table.less +17 -11
  168. package/less/components/header.less +0 -13
  169. package/less/components/publish-wizard.less +20 -13
  170. package/less/components/story-previewer.less +1 -0
  171. package/package.json +6 -6
  172. package/src/Util.ts +10 -0
  173. package/src/components/Tooltip.tsx +9 -9
  174. package/src/components/advanced-number-field/AdvancedNumberField.tsx +1 -1
  175. package/src/components/anchor-field/AnchorField.tsx +1 -1
  176. package/src/components/app-wrapper/AppWrapper.tsx +120 -79
  177. package/src/components/assets/AssetField.tsx +3 -8
  178. package/src/components/assets/AssetsTableDurationCell.tsx +2 -5
  179. package/src/components/assets/AssetsTableGlobalCell.tsx +15 -0
  180. package/src/components/assets/AssetsTableNameCell.tsx +3 -5
  181. package/src/components/assets/AssetsTableRateCell.tsx +11 -4
  182. package/src/components/assets/AssetsTableTypeFilter.tsx +7 -8
  183. package/src/components/assets/AssetsUploadMenu.tsx +271 -98
  184. package/src/components/auth-gate/AuthGate.tsx +8 -14
  185. package/src/components/button-group-field/ButtonGroupField.tsx +1 -1
  186. package/src/components/checkbox-field/CheckboxField.tsx +1 -1
  187. package/src/components/color-field/ColorField.tsx +3 -3
  188. package/src/components/context-menu/ContextMenu.tsx +16 -11
  189. package/src/components/copy-prop-id-button/CopyPropIdButton.tsx +44 -0
  190. package/src/components/data-table/DataTable.tsx +2 -2
  191. package/src/components/header/Header.tsx +39 -74
  192. package/src/components/list-field/ListField.tsx +1 -1
  193. package/src/components/number-field/NumberField.tsx +1 -1
  194. package/src/components/publish-wizard/PublishWizard.tsx +102 -180
  195. package/src/components/publish-wizard/publish/EmailWorkflow.tsx +42 -10
  196. package/src/components/select-field/SelectField.tsx +4 -1
  197. package/src/components/slider-field/SliderField.tsx +1 -1
  198. package/src/components/smpte-field/SMPTEField.tsx +1 -1
  199. package/src/components/text-area-field/TextAreaField.tsx +1 -1
  200. package/src/components/text-field/TextField.tsx +1 -1
  201. package/src/constants/copy.ts +5 -9
  202. package/src/constants/icons.tsx +0 -3
  203. package/src/index.ts +16 -9
  204. package/src/redux/actions/access.ts +67 -5
  205. package/src/redux/actions/asset-uploads.ts +305 -205
  206. package/src/redux/actions/publish.ts +3 -6
  207. package/src/redux/reducers/access.ts +8 -5
  208. package/src/redux/reducers/asset-uploads.ts +13 -48
  209. package/src/services/Session.ts +120 -34
  210. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +0 -27
  211. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js +0 -243
  212. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +0 -1
  213. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.d.ts +0 -28
  214. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js +0 -255
  215. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js.map +0 -1
  216. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +0 -27
  217. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js +0 -243
  218. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +0 -1
  219. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +0 -28
  220. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js +0 -251
  221. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +0 -1
  222. package/dist/cjs/components/error-message-preview/ErrorMessagePreview.d.ts +0 -15
  223. package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js +0 -91
  224. package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js.map +0 -1
  225. package/dist/cjs/components/header/Header_BACKUP_73021.d.ts +0 -33
  226. package/dist/cjs/components/header/Header_BACKUP_73021.js +0 -393
  227. package/dist/cjs/components/header/Header_BACKUP_73021.js.map +0 -1
  228. package/dist/cjs/components/header/Header_BASE_73021.d.ts +0 -29
  229. package/dist/cjs/components/header/Header_BASE_73021.js +0 -376
  230. package/dist/cjs/components/header/Header_BASE_73021.js.map +0 -1
  231. package/dist/cjs/components/header/Header_LOCAL_73021.d.ts +0 -33
  232. package/dist/cjs/components/header/Header_LOCAL_73021.js +0 -382
  233. package/dist/cjs/components/header/Header_LOCAL_73021.js.map +0 -1
  234. package/dist/cjs/components/header/Header_REMOTE_73021.d.ts +0 -30
  235. package/dist/cjs/components/header/Header_REMOTE_73021.js +0 -386
  236. package/dist/cjs/components/header/Header_REMOTE_73021.js.map +0 -1
  237. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +0 -27
  238. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js +0 -194
  239. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +0 -1
  240. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.d.ts +0 -28
  241. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js +0 -208
  242. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js.map +0 -1
  243. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +0 -27
  244. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js +0 -194
  245. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +0 -1
  246. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +0 -28
  247. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js +0 -204
  248. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +0 -1
  249. package/dist/esm/components/error-message-preview/ErrorMessagePreview.d.ts +0 -15
  250. package/dist/esm/components/error-message-preview/ErrorMessagePreview.js +0 -35
  251. package/dist/esm/components/error-message-preview/ErrorMessagePreview.js.map +0 -1
  252. package/dist/esm/components/header/Header_BACKUP_73021.d.ts +0 -33
  253. package/dist/esm/components/header/Header_BACKUP_73021.js +0 -336
  254. package/dist/esm/components/header/Header_BACKUP_73021.js.map +0 -1
  255. package/dist/esm/components/header/Header_BASE_73021.d.ts +0 -29
  256. package/dist/esm/components/header/Header_BASE_73021.js +0 -322
  257. package/dist/esm/components/header/Header_BASE_73021.js.map +0 -1
  258. package/dist/esm/components/header/Header_LOCAL_73021.d.ts +0 -33
  259. package/dist/esm/components/header/Header_LOCAL_73021.js +0 -328
  260. package/dist/esm/components/header/Header_LOCAL_73021.js.map +0 -1
  261. package/dist/esm/components/header/Header_REMOTE_73021.d.ts +0 -30
  262. package/dist/esm/components/header/Header_REMOTE_73021.js +0 -329
  263. package/dist/esm/components/header/Header_REMOTE_73021.js.map +0 -1
  264. /package/dist/cjs/components/dropdown/{dropdown.stories.d.ts → Dropdown.stories.d.ts} +0 -0
  265. /package/dist/esm/components/dropdown/{dropdown.stories.d.ts → Dropdown.stories.d.ts} +0 -0
  266. /package/src/components/dropdown/{dropdown.stories.tsx → Dropdown.stories.tsx} +0 -0
@@ -1,10 +1,10 @@
1
1
  import * as React from 'react';
2
2
  import * as ReactDOM from 'react-dom';
3
- import ReactTooltip, { Place } from 'react-tooltip';
3
+ import { Tooltip as ReactTooltip, PlacesType } from 'react-tooltip';
4
4
 
5
5
  export interface IToolTipConfig {
6
6
  content: string;
7
- position?: Place;
7
+ position?: PlacesType;
8
8
  theme?: string;
9
9
  }
10
10
 
@@ -12,8 +12,8 @@ export const renderTooltipProps = (id: string, config: IToolTipConfig | string):
12
12
  if (config) {
13
13
  const content = typeof config === 'object' ? config.content : config;
14
14
  return {
15
- 'data-tip': content,
16
- 'data-for': id
15
+ 'data-tooltip-content': content,
16
+ 'data-tooltip-id': id
17
17
  };
18
18
  } else {
19
19
  return {};
@@ -25,7 +25,7 @@ export const renderTooltip = (id: string, config: IToolTipConfig | string): any
25
25
 
26
26
  if (config && tooltipLayer) {
27
27
  let theme = 'light';
28
- let place: Place = 'top';
28
+ let place: PlacesType = 'top';
29
29
 
30
30
  if (typeof config === 'object') {
31
31
  theme = config.theme ? config.theme : 'light';
@@ -34,12 +34,12 @@ export const renderTooltip = (id: string, config: IToolTipConfig | string): any
34
34
 
35
35
  const tooltipComponent = (
36
36
  <ReactTooltip
37
- place={place}
38
- offset={{ top: 0, right: 0, bottom: 0, left: 0 }}
37
+ data-tooltip-place={place}
38
+ data-tooltip-offset={{ top: 0, right: 0, bottom: 0, left: 0 }}
39
39
  id={id}
40
40
  className={`imposium-button-tooltip-${theme}`}
41
- delayShow={1000}
42
- effect='solid'
41
+ delayShow={500}
42
+ noArrow={true}
43
43
  />
44
44
  );
45
45
 
@@ -5,7 +5,7 @@ import { IToolTipConfig } from '../Tooltip';
5
5
 
6
6
  interface IAdvancedNumberFieldProps {
7
7
  buttons?: any;
8
- label?: string;
8
+ label?: any;
9
9
  placeholder?: string;
10
10
  readOnly?: boolean;
11
11
  value: number;
@@ -21,7 +21,7 @@ interface IAnchorFieldProps {
21
21
  labelPosition?: string;
22
22
  tooltip?: IToolTipConfig | string;
23
23
  width?: string | number;
24
- label?: string;
24
+ label?: any;
25
25
  labelWidth?: string | number;
26
26
  }
27
27
 
@@ -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 from '../../services/Session';
4
+ import SessionService, { IHubSession } 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';
9
10
  import { validateAccessLevel } from '../../Util';
10
- import { setAccessData } from '../../redux/actions/access';
11
11
 
12
12
  export interface IAppWrapperProps {
13
13
  children: React.ReactChildren;
@@ -20,13 +20,14 @@ export interface IAppWrapperProps {
20
20
  access: any;
21
21
  auth: any;
22
22
  isFreshUser: boolean;
23
- setAccessData(accessData: any): any;
24
23
  allowUnauthenticatedRender: boolean;
25
24
  onAuthenticated: (activeOrgId: string, activeStoryId: string) => any;
26
25
  onAuthenticationFailure: (e: Error) => any;
27
26
  showRequestAccess?: boolean;
28
27
  login: (id: IIdentity) => any;
29
28
  clearCachedAuth: () => any;
29
+ cacheAccessData: (accessData: any) => any;
30
+ clearCachedAccessList: () => any;
30
31
  }
31
32
 
32
33
  export interface IAppWrapperState {
@@ -66,7 +67,8 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
66
67
  }
67
68
 
68
69
  public componentDidMount = (): void => {
69
- const { auth0ClientId, auth0Domain } = this.props;
70
+ const { auth, access, auth0ClientId, auth0Domain, isFreshUser } = this.props;
71
+ const session: IHubSession = SessionService.getSession();
70
72
 
71
73
  AuthService.bindToClient(auth0ClientId, auth0Domain);
72
74
 
@@ -84,8 +86,22 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
84
86
  this.setState({ restrictAccess: false });
85
87
  }
86
88
 
87
- // Always check the session
88
- this.doCheckSession(true);
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
+ }
89
105
  };
90
106
 
91
107
  /*
@@ -106,14 +122,12 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
106
122
 
107
123
  if (!validSession) {
108
124
  this.props.clearCachedAuth();
125
+ this.props.clearCachedAccessList();
109
126
  this.doCheckSession();
110
127
  }
111
128
  }
112
129
 
113
- if (
114
- this.props.organizationId !== prevProps.organizationId ||
115
- this.props.access !== prevProps.access
116
- ) {
130
+ if (this.props.organizationId !== prevProps.organizationId) {
117
131
  validAccessLevel = validateAccessLevel(
118
132
  this.props.organizationId,
119
133
  this.props.serviceId,
@@ -133,58 +147,16 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
133
147
  /*
134
148
  Emit creds to React parent
135
149
  */
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
- };
159
-
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
- }
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;
171
154
 
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;
183
- }
155
+ if (storyId) {
156
+ activeStoryId = storyId;
184
157
  }
185
158
 
186
- SessionService.buildFreshSession(freshIdentity, initialOrganizationId, initialStoryId);
187
- onAuthenticated(initialOrganizationId, initialStoryId);
159
+ onAuthenticated(activeOrgId, activeStoryId);
188
160
 
189
161
  if (this.state.blockRender) {
190
162
  this.setState({ blockRender: false });
@@ -195,19 +167,8 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
195
167
  Bust cached creds if exist, invoke auth failure handler
196
168
  */
197
169
  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
-
210
170
  this.props.clearCachedAuth();
171
+ this.props.clearCachedAccessList();
211
172
  this.props.onAuthenticationFailure(e);
212
173
  };
213
174
 
@@ -220,16 +181,15 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
220
181
  if (blockRender) {
221
182
  this.setState({ blockRender: true });
222
183
  }
184
+
223
185
  AuthService.checkSession()
224
186
  .then((freshIdentity: IIdentity) => {
225
- const orgId = this.props.organizationId
226
- ? this.props.organizationId
227
- : SessionService.getCachedOrgId();
228
- SessionService.getAccessData(freshIdentity.idToken, baseUrl, false, orgId)
187
+ SessionService.getAccessData(freshIdentity.idToken, baseUrl)
229
188
  .then((freshAccess: any) => {
230
- this.props.setAccessData(freshAccess);
231
189
  this.props.login(freshIdentity);
232
- this.propagateCreds(freshAccess, freshIdentity);
190
+ this.props.cacheAccessData(freshAccess);
191
+ SessionService.buildFreshSession(freshIdentity, freshAccess);
192
+ this.propagateCreds();
233
193
  })
234
194
  .catch((e: Error) => {
235
195
  console.error(e);
@@ -242,6 +202,86 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
242
202
  });
243
203
  };
244
204
 
205
+ private determineActiveOrganizationIn(
206
+ auth: IIdentity,
207
+ session: IHubSession,
208
+ organizationIds: string[]
209
+ ) {
210
+ const { organizationId } = this.props;
211
+ const {
212
+ idTokenPayload: { exp }
213
+ } = auth;
214
+
215
+ if (organizationIds.length > 0) {
216
+ if (organizationId && organizationIds.indexOf(organizationId) > -1) {
217
+ return this.setActiveOrganization(organizationId, exp, session);
218
+ }
219
+
220
+ if (
221
+ session &&
222
+ session.organization_id &&
223
+ organizationIds.indexOf(session.organization_id) > -1
224
+ ) {
225
+ return session.organization_id;
226
+ }
227
+
228
+ return this.setActiveOrganization(organizationIds[0], exp, session);
229
+ }
230
+
231
+ return '';
232
+ }
233
+
234
+ /*
235
+ Figure out what the active org should be based on app-wrapper configuration
236
+ */
237
+ private determineActiveOrganization = (auth: IIdentity, access: any): string => {
238
+ const { serviceId } = this.props;
239
+ const { organizations } = access;
240
+ const session: IHubSession = SessionService.getSession();
241
+ const allOrgIdsFlattened: string[] = organizations.map((o: any) => o.id);
242
+
243
+ const activeOrgId: string = this.determineActiveOrganizationIn(
244
+ auth,
245
+ session,
246
+ allOrgIdsFlattened
247
+ );
248
+ const activeOrg: any = organizations.find((o) => o.id === activeOrgId);
249
+
250
+ if (activeOrg && !activeOrg.services.includes(serviceId)) {
251
+ this.setState({ restrictAccess: true });
252
+ }
253
+
254
+ return activeOrgId;
255
+ };
256
+
257
+ /*
258
+ Update session if no session exists or diff in org id
259
+ */
260
+ private setActiveOrganization = (
261
+ organizationId: string,
262
+ exp: number,
263
+ sharedSession: IHubSession
264
+ ): string => {
265
+ if (
266
+ !sharedSession ||
267
+ !sharedSession.organization_id ||
268
+ sharedSession.organization_id !== organizationId
269
+ ) {
270
+ const activeOrg: any = this.props.access.organizations.find(
271
+ (o: any) => o.id === organizationId
272
+ );
273
+ const firstStoryId: string =
274
+ typeof activeOrg.stories[0] === 'object' ? activeOrg.stories[0].id : '';
275
+
276
+ SessionService.updateSession(
277
+ { organization_id: organizationId, story_id: firstStoryId },
278
+ exp
279
+ );
280
+ }
281
+
282
+ return organizationId;
283
+ };
284
+
245
285
  public render = (): JSX.Element => {
246
286
  const { blockRender, restrictAccess } = this.state;
247
287
  const { children, showRequestAccess, allowUnauthenticatedRender } = this.props;
@@ -282,8 +322,9 @@ const mapDispatchToProps = (dispatch) => {
282
322
  return bindActionCreators(
283
323
  {
284
324
  login,
285
- setAccessData,
286
- clearCachedAuth
325
+ clearCachedAuth,
326
+ cacheAccessData,
327
+ clearCachedAccessList
287
328
  },
288
329
  dispatch
289
330
  );
@@ -28,12 +28,7 @@ interface IAssetFieldProps {
28
28
  tooltip: string;
29
29
  onChange: (asset: any) => any;
30
30
  updateFilters: (filters: any) => any;
31
- uploadAssets: (
32
- api: any,
33
- files: File[],
34
- storyId?: string,
35
- bindToOverlay?: (f: any) => any
36
- ) => any;
31
+ uploadAssets: (api: any, files: File[], bindToOverlay?: (f: any) => any) => any;
37
32
  accepts?: string | string[];
38
33
  labelPosition?: string;
39
34
  onError?: (message: string) => void;
@@ -108,14 +103,14 @@ class AssetField extends React.PureComponent<IAssetFieldProps, IAssetFieldState>
108
103
  }
109
104
 
110
105
  private onFileDrop = (i: any, monitor: any): void => {
111
- const { accepts, storyId, api } = this.props;
106
+ const { accepts, api } = this.props;
112
107
  if (monitor) {
113
108
  const { files } = monitor.getItem();
114
109
 
115
110
  if (mimetypeConformsToOverlay(accepts, files[0])) {
116
111
  this.setState({ assetUploading: true });
117
112
 
118
- this.props.uploadAssets(api, [files[0]], storyId, (f: any) => {
113
+ this.props.uploadAssets(api, [files[0]], (f: any) => {
119
114
  this.setState({ assetName: f.name, error: false }, () => {
120
115
  this.setState({ assetUploading: false });
121
116
  this.props.onChange(f);
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { ASSET_TYPES } from '../../constants/assets';
3
- import { getDuration } from '../../Util';
3
+ import { formatAudioDuration, getDuration } from '../../Util';
4
4
 
5
5
  interface IAssetsTableDurationCell {
6
6
  cell: any;
@@ -30,10 +30,7 @@ const AssetsTableDurationCell: React.FC<IAssetsTableDurationCell> = (
30
30
  }
31
31
 
32
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`;
33
+ duration = formatAudioDuration(original.duration);
37
34
  }
38
35
 
39
36
  if (duration !== null && duration !== undefined) {
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+ import { ICON_GLOBE } from '../../constants/icons';
3
+
4
+ interface IAssetsTableGlobalCell {
5
+ cell: any; // React table cell wrapper
6
+ }
7
+
8
+ const AssetsTableGlobalCell: React.FC<IAssetsTableGlobalCell> = (p: IAssetsTableGlobalCell) => {
9
+ return (
10
+ <div className='asset-global-cell'>{p.cell.row.original.story_id ? null : ICON_GLOBE}</div>
11
+ );
12
+ };
13
+
14
+ const AssetsTableGlobalCellMemoized = React.memo(AssetsTableGlobalCell);
15
+ export default AssetsTableGlobalCellMemoized;
@@ -6,11 +6,11 @@ import { connect } from 'react-redux';
6
6
  import { bindActionCreators } from 'redux';
7
7
  import { IImposiumAPI } from '../../services/API';
8
8
  import { DeterminateLoader } from '../determinate-loader/DeterminateLoader';
9
+ import { assets as copy } from '../../constants/copy';
9
10
 
10
11
  interface IAssetsTableNameCell {
11
12
  cell: any;
12
13
  api: IImposiumAPI;
13
- disabled: boolean;
14
14
  updateAssetName: (api: any, id: string, name: string, delay?: boolean) => any;
15
15
  }
16
16
 
@@ -21,8 +21,7 @@ const AssetsTableNameCell: React.FC<IAssetsTableNameCell> = (props: IAssetsTable
21
21
  row: {
22
22
  original: { name, id, percent: uploadProgress }
23
23
  }
24
- },
25
- disabled
24
+ }
26
25
  } = props;
27
26
 
28
27
  const [localName, setLocalName] = useState(name);
@@ -52,7 +51,7 @@ const AssetsTableNameCell: React.FC<IAssetsTableNameCell> = (props: IAssetsTable
52
51
  text={name}
53
52
  />
54
53
  ) : (
55
- <span>Preparing asset...</span>
54
+ <span>{copy.uploads.preparePhase}</span>
56
55
  );
57
56
  return loader;
58
57
  } else {
@@ -60,7 +59,6 @@ const AssetsTableNameCell: React.FC<IAssetsTableNameCell> = (props: IAssetsTable
60
59
  <TextField
61
60
  value={localName}
62
61
  width={'100%'}
63
- disabled={disabled}
64
62
  onChange={(n) => onUpdate(n)}
65
63
  />
66
64
  );
@@ -1,20 +1,27 @@
1
1
  import * as React from 'react';
2
+ import { ASSET_TYPES } from '../../constants/assets';
2
3
 
3
4
  interface IAssetsTableRateCell {
4
5
  cell: any;
5
6
  }
6
-
7
7
  const AssetsTableRateCell: React.FC<IAssetsTableRateCell> = (props: IAssetsTableRateCell) => {
8
8
  const {
9
9
  cell: {
10
10
  row: {
11
- original: { rate }
11
+ original: { type, data, rate }
12
12
  }
13
13
  }
14
14
  } = props;
15
15
 
16
- if (rate !== null && rate !== undefined) {
17
- return <div className='asset-rate-cell'>{Number(rate).toFixed(2)}</div>;
16
+ let framerate = rate !== null && rate !== undefined ? rate : '';
17
+
18
+ if (type === ASSET_TYPES.VIDEO_COMPOSITION && data) {
19
+ const { rate: frame_rate } = JSON.parse(data);
20
+ framerate = frame_rate;
21
+ }
22
+
23
+ if (framerate !== null && framerate !== undefined && framerate !== '') {
24
+ return <div className='asset-rate-cell'>{Number(framerate).toFixed(2)}</div>;
18
25
  } else {
19
26
  return <div className='asset-rate-cell'></div>;
20
27
  }
@@ -62,15 +62,14 @@ class AssetsTableTypeFilter extends React.PureComponent<
62
62
  buttonRef={this.typeFilterRef}
63
63
  onClick={() => this.setState({ openMenu: !openMenu })}>
64
64
  <AssetsTypeIcon type={type || 'filter'} />
65
-
66
- <ImposiumDropdown
67
- show={openMenu}
68
- position='bottomleft'
69
- toggleRef={this.typeFilterRef}
70
- onOutsideClick={() => this.setState({ openMenu: false })}>
71
- {filterButtons}
72
- </ImposiumDropdown>
73
65
  </Button>
66
+ <ImposiumDropdown
67
+ show={openMenu}
68
+ position='bottomleft'
69
+ toggleRef={this.typeFilterRef}
70
+ onOutsideClick={() => this.setState({ openMenu: false })}>
71
+ {filterButtons}
72
+ </ImposiumDropdown>
74
73
  </div>
75
74
  );
76
75
  };