@imposium-hub/components 2.11.3-2 → 2.11.3

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 (171) hide show
  1. package/dist/cjs/components/app-wrapper/AppWrapperV2.d.ts +26 -0
  2. package/dist/cjs/components/app-wrapper/AppWrapperV2.js +266 -0
  3. package/dist/cjs/components/app-wrapper/AppWrapperV2.js.map +1 -0
  4. package/dist/cjs/components/app-wrapper/AppWrapperV3.d.ts +19 -0
  5. package/dist/cjs/components/app-wrapper/AppWrapperV3.js +195 -0
  6. package/dist/cjs/components/app-wrapper/AppWrapperV3.js.map +1 -0
  7. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +27 -0
  8. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js +243 -0
  9. package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +1 -0
  10. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.d.ts +28 -0
  11. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js +255 -0
  12. package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js.map +1 -0
  13. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +27 -0
  14. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js +243 -0
  15. package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +1 -0
  16. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +28 -0
  17. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js +251 -0
  18. package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +1 -0
  19. package/dist/cjs/components/auth-gate/AuthGate.d.ts +2 -0
  20. package/dist/cjs/components/auth-gate/AuthGate.js +105 -0
  21. package/dist/cjs/components/auth-gate/AuthGate.js.map +1 -0
  22. package/dist/cjs/components/dropdown/Dropdown.d.ts +1 -0
  23. package/dist/cjs/components/dropdown/Dropdown.js +2 -2
  24. package/dist/cjs/components/dropdown/Dropdown.js.map +1 -1
  25. package/dist/cjs/components/edit-guide-modal/EditGuideModal.d.ts +8 -0
  26. package/dist/cjs/components/edit-guide-modal/EditGuideModal.js +132 -0
  27. package/dist/cjs/components/edit-guide-modal/EditGuideModal.js.map +1 -0
  28. package/dist/cjs/components/edit-marker-modal/EditMarkerModal.d.ts +8 -0
  29. package/dist/cjs/components/edit-marker-modal/EditMarkerModal.js +104 -0
  30. package/dist/cjs/components/edit-marker-modal/EditMarkerModal.js.map +1 -0
  31. package/dist/cjs/components/error-message-preview/ErrorMessagePreview.d.ts +15 -0
  32. package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js +91 -0
  33. package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js.map +1 -0
  34. package/dist/cjs/components/header/Header_BACKUP_73021.d.ts +33 -0
  35. package/dist/cjs/components/header/Header_BACKUP_73021.js +393 -0
  36. package/dist/cjs/components/header/Header_BACKUP_73021.js.map +1 -0
  37. package/dist/cjs/components/header/Header_BASE_73021.d.ts +29 -0
  38. package/dist/cjs/components/header/Header_BASE_73021.js +376 -0
  39. package/dist/cjs/components/header/Header_BASE_73021.js.map +1 -0
  40. package/dist/cjs/components/header/Header_LOCAL_73021.d.ts +33 -0
  41. package/dist/cjs/components/header/Header_LOCAL_73021.js +382 -0
  42. package/dist/cjs/components/header/Header_LOCAL_73021.js.map +1 -0
  43. package/dist/cjs/components/header/Header_REMOTE_73021.d.ts +30 -0
  44. package/dist/cjs/components/header/Header_REMOTE_73021.js +386 -0
  45. package/dist/cjs/components/header/Header_REMOTE_73021.js.map +1 -0
  46. package/dist/cjs/components/header/StoryDropdown.d.ts +6 -0
  47. package/dist/cjs/components/header/StoryDropdown.js +111 -0
  48. package/dist/cjs/components/header/StoryDropdown.js.map +1 -0
  49. package/dist/cjs/components/publish-wizard/publish/CrMPublishCreativeSelectCell.d.ts +8 -0
  50. package/dist/cjs/components/publish-wizard/publish/CrMPublishCreativeSelectCell.js +56 -0
  51. package/dist/cjs/components/publish-wizard/publish/CrMPublishCreativeSelectCell.js.map +1 -0
  52. package/dist/cjs/components/publish-wizard/publish/CrMPublishCreativeSelectHeader.d.ts +8 -0
  53. package/dist/cjs/components/publish-wizard/publish/CrMPublishCreativeSelectHeader.js +54 -0
  54. package/dist/cjs/components/publish-wizard/publish/CrMPublishCreativeSelectHeader.js.map +1 -0
  55. package/dist/cjs/components/publish-wizard/publish/CrMPublishNameCell.d.ts +6 -0
  56. package/dist/cjs/components/publish-wizard/publish/CrMPublishNameCell.js +66 -0
  57. package/dist/cjs/components/publish-wizard/publish/CrMPublishNameCell.js.map +1 -0
  58. package/dist/cjs/components/publish-wizard/publish/CrMPublishPreviewCell.d.ts +8 -0
  59. package/dist/cjs/components/publish-wizard/publish/CrMPublishPreviewCell.js +48 -0
  60. package/dist/cjs/components/publish-wizard/publish/CrMPublishPreviewCell.js.map +1 -0
  61. package/dist/cjs/components/publish-wizard/publish/CrMPublishStatusCell.d.ts +6 -0
  62. package/dist/cjs/components/publish-wizard/publish/CrMPublishStatusCell.js +10 -0
  63. package/dist/cjs/components/publish-wizard/publish/CrMPublishStatusCell.js.map +1 -0
  64. package/dist/cjs/components/publish-wizard/publish/CrMPublishUI.d.ts +15 -0
  65. package/dist/cjs/components/publish-wizard/publish/CrMPublishUI.js +179 -0
  66. package/dist/cjs/components/publish-wizard/publish/CrMPublishUI.js.map +1 -0
  67. package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.d.ts +11 -0
  68. package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js +213 -0
  69. package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js.map +1 -0
  70. package/dist/cjs/components/tabs/Tabs.d.ts +1 -4
  71. package/dist/cjs/components/tabs/Tabs.stories.d.ts +1 -3
  72. package/dist/cjs/redux/actions/auth.d.ts +9 -0
  73. package/dist/cjs/redux/actions/auth.js +30 -0
  74. package/dist/cjs/redux/actions/auth.js.map +1 -0
  75. package/dist/cjs/redux/reducers/auth.d.ts +3 -0
  76. package/dist/cjs/redux/reducers/auth.js +67 -0
  77. package/dist/cjs/redux/reducers/auth.js.map +1 -0
  78. package/dist/cjs/services/Auth0.d.ts +18 -0
  79. package/dist/cjs/services/Auth0.js +102 -0
  80. package/dist/cjs/services/Auth0.js.map +1 -0
  81. package/dist/cjs/services/Session.d.ts +26 -0
  82. package/dist/cjs/services/Session.js +155 -0
  83. package/dist/cjs/services/Session.js.map +1 -0
  84. package/dist/esm/components/app-wrapper/AppWrapperV2.d.ts +26 -0
  85. package/dist/esm/components/app-wrapper/AppWrapperV2.js +142 -0
  86. package/dist/esm/components/app-wrapper/AppWrapperV2.js.map +1 -0
  87. package/dist/esm/components/app-wrapper/AppWrapperV3.d.ts +19 -0
  88. package/dist/esm/components/app-wrapper/AppWrapperV3.js +88 -0
  89. package/dist/esm/components/app-wrapper/AppWrapperV3.js.map +1 -0
  90. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +27 -0
  91. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js +194 -0
  92. package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +1 -0
  93. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.d.ts +28 -0
  94. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js +208 -0
  95. package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js.map +1 -0
  96. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +27 -0
  97. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js +194 -0
  98. package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +1 -0
  99. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +28 -0
  100. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js +204 -0
  101. package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +1 -0
  102. package/dist/esm/components/auth-gate/AuthGate.d.ts +2 -0
  103. package/dist/esm/components/auth-gate/AuthGate.js +59 -0
  104. package/dist/esm/components/auth-gate/AuthGate.js.map +1 -0
  105. package/dist/esm/components/dropdown/Dropdown.d.ts +1 -0
  106. package/dist/esm/components/dropdown/Dropdown.js +2 -2
  107. package/dist/esm/components/dropdown/Dropdown.js.map +1 -1
  108. package/dist/esm/components/edit-guide-modal/EditGuideModal.d.ts +8 -0
  109. package/dist/esm/components/edit-guide-modal/EditGuideModal.js +65 -0
  110. package/dist/esm/components/edit-guide-modal/EditGuideModal.js.map +1 -0
  111. package/dist/esm/components/edit-marker-modal/EditMarkerModal.d.ts +8 -0
  112. package/dist/esm/components/edit-marker-modal/EditMarkerModal.js +72 -0
  113. package/dist/esm/components/edit-marker-modal/EditMarkerModal.js.map +1 -0
  114. package/dist/esm/components/error-message-preview/ErrorMessagePreview.d.ts +15 -0
  115. package/dist/esm/components/error-message-preview/ErrorMessagePreview.js +35 -0
  116. package/dist/esm/components/error-message-preview/ErrorMessagePreview.js.map +1 -0
  117. package/dist/esm/components/header/Header_BACKUP_73021.d.ts +33 -0
  118. package/dist/esm/components/header/Header_BACKUP_73021.js +336 -0
  119. package/dist/esm/components/header/Header_BACKUP_73021.js.map +1 -0
  120. package/dist/esm/components/header/Header_BASE_73021.d.ts +29 -0
  121. package/dist/esm/components/header/Header_BASE_73021.js +322 -0
  122. package/dist/esm/components/header/Header_BASE_73021.js.map +1 -0
  123. package/dist/esm/components/header/Header_LOCAL_73021.d.ts +33 -0
  124. package/dist/esm/components/header/Header_LOCAL_73021.js +328 -0
  125. package/dist/esm/components/header/Header_LOCAL_73021.js.map +1 -0
  126. package/dist/esm/components/header/Header_REMOTE_73021.d.ts +30 -0
  127. package/dist/esm/components/header/Header_REMOTE_73021.js +329 -0
  128. package/dist/esm/components/header/Header_REMOTE_73021.js.map +1 -0
  129. package/dist/esm/components/header/StoryDropdown.d.ts +6 -0
  130. package/dist/esm/components/header/StoryDropdown.js +82 -0
  131. package/dist/esm/components/header/StoryDropdown.js.map +1 -0
  132. package/dist/esm/components/publish-wizard/publish/CrMPublishCreativeSelectCell.d.ts +8 -0
  133. package/dist/esm/components/publish-wizard/publish/CrMPublishCreativeSelectCell.js +16 -0
  134. package/dist/esm/components/publish-wizard/publish/CrMPublishCreativeSelectCell.js.map +1 -0
  135. package/dist/esm/components/publish-wizard/publish/CrMPublishCreativeSelectHeader.d.ts +8 -0
  136. package/dist/esm/components/publish-wizard/publish/CrMPublishCreativeSelectHeader.js +12 -0
  137. package/dist/esm/components/publish-wizard/publish/CrMPublishCreativeSelectHeader.js.map +1 -0
  138. package/dist/esm/components/publish-wizard/publish/CrMPublishNameCell.d.ts +6 -0
  139. package/dist/esm/components/publish-wizard/publish/CrMPublishNameCell.js +18 -0
  140. package/dist/esm/components/publish-wizard/publish/CrMPublishNameCell.js.map +1 -0
  141. package/dist/esm/components/publish-wizard/publish/CrMPublishPreviewCell.d.ts +8 -0
  142. package/dist/esm/components/publish-wizard/publish/CrMPublishPreviewCell.js +11 -0
  143. package/dist/esm/components/publish-wizard/publish/CrMPublishPreviewCell.js.map +1 -0
  144. package/dist/esm/components/publish-wizard/publish/CrMPublishStatusCell.d.ts +6 -0
  145. package/dist/esm/components/publish-wizard/publish/CrMPublishStatusCell.js +6 -0
  146. package/dist/esm/components/publish-wizard/publish/CrMPublishStatusCell.js.map +1 -0
  147. package/dist/esm/components/publish-wizard/publish/CrMPublishUI.d.ts +15 -0
  148. package/dist/esm/components/publish-wizard/publish/CrMPublishUI.js +114 -0
  149. package/dist/esm/components/publish-wizard/publish/CrMPublishUI.js.map +1 -0
  150. package/dist/esm/components/replace-files-modal/ReplaceFilesModal.d.ts +11 -0
  151. package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js +141 -0
  152. package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js.map +1 -0
  153. package/dist/esm/components/tabs/Tabs.d.ts +1 -4
  154. package/dist/esm/components/tabs/Tabs.stories.d.ts +1 -3
  155. package/dist/esm/redux/actions/auth.d.ts +9 -0
  156. package/dist/esm/redux/actions/auth.js +25 -0
  157. package/dist/esm/redux/actions/auth.js.map +1 -0
  158. package/dist/esm/redux/reducers/auth.d.ts +3 -0
  159. package/dist/esm/redux/reducers/auth.js +27 -0
  160. package/dist/esm/redux/reducers/auth.js.map +1 -0
  161. package/dist/esm/services/Auth0.d.ts +18 -0
  162. package/dist/esm/services/Auth0.js +68 -0
  163. package/dist/esm/services/Auth0.js.map +1 -0
  164. package/dist/esm/services/Session.d.ts +26 -0
  165. package/dist/esm/services/Session.js +107 -0
  166. package/dist/esm/services/Session.js.map +1 -0
  167. package/dist/styles.css +8 -4
  168. package/dist/styles.less +16 -11
  169. package/less/components/shortcut-menu.less +16 -11
  170. package/package.json +2 -2
  171. package/src/components/dropdown/Dropdown.tsx +3 -2
@@ -0,0 +1,114 @@
1
+ import * as React from 'react';
2
+ import * as copy from '../../../constants/copy';
3
+ import { DataTable, HRule, Button, TextField } from '../../..';
4
+ import { useEffect, useState, useCallback } from 'react';
5
+ import { ICON_SEARCH } from '../../../constants/icons';
6
+ import { CREATIVE_STATUSES_TO_PUBLISH } from '../../../constants/publish';
7
+ import { CrMPublishStatusCell } from './CrMPublishStatusCell';
8
+ import { CrMPublishPreviewCell } from './CrMPublishPreviewCell';
9
+ import { CrMPublishNameCell } from './CrMPublishNameCell';
10
+ import { CrMPublishCreativeSelectHeader } from './CrMPublishCreativeSelectHeader';
11
+ import { CrMPublishCreativeSelectCell } from './CrMPublishCreativeSelectCell';
12
+ export const CrMPublishUI = (props) => {
13
+ const { publishing, error, crmBaseUrl, creativeLibraryId, projectId, api, selectedCreatives, onUpdateSelectedCreatives } = props;
14
+ const [nameFilter, setNameFilter] = useState('');
15
+ const [creativeConfig, setCreativeConfig] = useState([]);
16
+ const nameSearch = React.createElement(TextField, { className: 'creative-name', buttons: [
17
+ React.createElement(Button, { key: 'btn-search', style: 'subtle', size: 'small' }, ICON_SEARCH)
18
+ ], width: '150px', value: nameFilter, onChange: (value) => setNameFilter(value) });
19
+ const onSelectChange = useCallback((creativeId, selected) => {
20
+ const previouslySelected = [...selectedCreatives];
21
+ if (selected) {
22
+ onUpdateSelectedCreatives([...previouslySelected, creativeId]);
23
+ }
24
+ else {
25
+ onUpdateSelectedCreatives(previouslySelected.filter(id => id !== creativeId));
26
+ }
27
+ }, []);
28
+ const onSelectAllChange = useCallback((selected) => {
29
+ if (selected) {
30
+ const filteredData = nameFilter
31
+ ? creativeConfig.filter(creative => creative.creativeName.toLowerCase().includes(nameFilter.toLowerCase()) ||
32
+ creative.creativeId.toLowerCase().includes(nameFilter.toLowerCase()))
33
+ : creativeConfig;
34
+ const publishableCreativeIds = filteredData
35
+ .filter(creative => canBePublishedTo(creative.approvalStatus))
36
+ .map(creative => creative.creativeId);
37
+ onUpdateSelectedCreatives(publishableCreativeIds);
38
+ }
39
+ else {
40
+ onUpdateSelectedCreatives([]);
41
+ }
42
+ }, [nameFilter, creativeConfig]);
43
+ const COLUMN_CONFIG = [
44
+ {
45
+ accessor: 'selected',
46
+ width: 25,
47
+ disableResize: true,
48
+ disableSortBy: true,
49
+ Header: () => React.createElement(CrMPublishCreativeSelectHeader, { onSelectChange: onSelectAllChange, selectedCreatives: selectedCreatives, creativeConfig: creativeConfig }),
50
+ Cell: (cell) => React.createElement(CrMPublishCreativeSelectCell, { cell: cell, onSelectChange: onSelectChange, selectedCreatives: selectedCreatives })
51
+ },
52
+ {
53
+ accessor: 'creativeName',
54
+ Header: 'Creative Name',
55
+ width: 250,
56
+ minWidth: 250,
57
+ maxWidth: 250,
58
+ disableSortBy: true,
59
+ Cell: (cell) => React.createElement(CrMPublishNameCell, { cell: cell }),
60
+ Search: nameSearch,
61
+ },
62
+ {
63
+ accessor: 'creativeId',
64
+ Header: 'ID',
65
+ width: 75,
66
+ minWidth: 75,
67
+ maxWidth: 75,
68
+ disableSortBy: true,
69
+ },
70
+ {
71
+ accessor: 'numberOfVersions',
72
+ Header: 'Versions',
73
+ width: 75,
74
+ minWidth: 75,
75
+ maxWidth: 75,
76
+ disableSortBy: true,
77
+ },
78
+ {
79
+ accessor: 'approvalStatus',
80
+ Header: 'Status',
81
+ width: 75,
82
+ minWidth: 75,
83
+ maxWidth: 75,
84
+ disableSortBy: true,
85
+ Cell: (cell) => React.createElement(CrMPublishStatusCell, { cell: cell })
86
+ },
87
+ {
88
+ accessor: 'preview',
89
+ Header: 'Preview',
90
+ width: 50,
91
+ minWidth: 50,
92
+ maxWidth: 50,
93
+ disableSortBy: true,
94
+ Cell: (cell) => React.createElement(CrMPublishPreviewCell, { cell: cell, crmBaseUrl: crmBaseUrl, creativeLibraryId: creativeLibraryId })
95
+ }
96
+ ];
97
+ useEffect(() => {
98
+ api.getCreativesLinkedToProject(creativeLibraryId, projectId).then((res) => {
99
+ setCreativeConfig(res.creatives);
100
+ }).catch((err) => {
101
+ console.error(err);
102
+ });
103
+ }, []);
104
+ return (React.createElement("div", null,
105
+ React.createElement("h2", null, copy.publish.publishStepTitleFromCrM),
106
+ React.createElement(HRule, null),
107
+ React.createElement("p", null, publishing ? copy.publish.publishInProgress : ''),
108
+ React.createElement(DataTable, { showInterstitial: publishing, columns: COLUMN_CONFIG, data: creativeConfig, hidePaginator: true, itemsPerPage: 1000, tightRows: true }),
109
+ error && React.createElement("p", { className: 'publish-error' }, error)));
110
+ };
111
+ export const canBePublishedTo = (approvalStatus) => {
112
+ return CREATIVE_STATUSES_TO_PUBLISH.includes(approvalStatus);
113
+ };
114
+ //# sourceMappingURL=CrMPublishUI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CrMPublishUI.js","sourceRoot":"","sources":["../../../../../src/components/publish-wizard/publish/CrMPublishUI.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export interface IReplaceFilesModalProps {
3
+ onUpload: (f: any) => any;
4
+ onInstantUpload: (f: any) => any;
5
+ onApplyToAll: (e: any) => any;
6
+ onClose: () => void;
7
+ applyToAll: boolean;
8
+ existedAssets: any[];
9
+ existedAssetIds: any[];
10
+ }
11
+ export declare const ReplaceFilesModal: () => React.JSX.Element;
@@ -0,0 +1,141 @@
1
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
2
+ import ReactDOM from 'react-dom';
3
+ import Modal from '../modal/Modal';
4
+ import Button from '../button/Button';
5
+ import CheckboxField from '../checkbox-field/CheckboxField';
6
+ import Section from '../section/Section';
7
+ import { assets as copy } from '../../constants/copy';
8
+ import { replaceFilesModalEvent } from '../../utils/modal';
9
+ export const ReplaceFilesModal = () => {
10
+ const [props, setProps] = useState(null);
11
+ const [isOpen, setIsOpen] = useState(false);
12
+ const [applyToAll, setApplyToAll] = useState();
13
+ const [height, setHeight] = useState(200);
14
+ const [index, setIndex] = useState(0);
15
+ const replaceFileModalRef = useRef(null);
16
+ useEffect(() => {
17
+ if (replaceFileModalRef.current) {
18
+ const { current: { clientHeight } } = replaceFileModalRef;
19
+ setHeight(clientHeight + 40);
20
+ }
21
+ });
22
+ const onOpen = (event) => {
23
+ setProps({
24
+ ...event.detail
25
+ });
26
+ setIsOpen(true);
27
+ };
28
+ const onClose = () => {
29
+ props.onClose();
30
+ setIsOpen(false);
31
+ };
32
+ const onReplaceHandler = (curApplyToAll, curIndex, file, assetId) => {
33
+ const newIndex = curIndex + 1;
34
+ if (curApplyToAll && curIndex === 0) {
35
+ const updatedAssets = props.existedAssets.map((asset, i) => {
36
+ const updatefile = asset;
37
+ updatefile['assetId'] = props.existedAssetIds[i];
38
+ return updatefile;
39
+ });
40
+ props.onInstantUpload(updatedAssets);
41
+ setIndex(0);
42
+ setIsOpen(false);
43
+ }
44
+ else if (curApplyToAll) {
45
+ const updatedAssets = [];
46
+ for (let i = 0; i < props.existedAssets.length; i++) {
47
+ const updateFile = curIndex === 0
48
+ ? props.existedAssets[i]
49
+ : [
50
+ ...props.existedAssets.slice(0, curIndex - 1),
51
+ ...props.existedAssets.slice(curIndex)
52
+ ][i];
53
+ if (updateFile) {
54
+ updateFile['assetId'] =
55
+ curIndex === 0
56
+ ? props.existedAssetIds[i]
57
+ : [
58
+ ...props.existedAssetIds.slice(0, curIndex - 1),
59
+ ...props.existedAssetIds.slice(curIndex)
60
+ ][i];
61
+ updatedAssets.push(updateFile);
62
+ props.onInstantUpload(updatedAssets);
63
+ setIndex(0);
64
+ onClose();
65
+ }
66
+ }
67
+ }
68
+ else {
69
+ if (newIndex === props.existedAssets.length) {
70
+ setIndex(0);
71
+ onClose();
72
+ }
73
+ else {
74
+ setIndex(newIndex);
75
+ }
76
+ const updateFile = file;
77
+ updateFile['assetId'] = assetId;
78
+ props.onUpload([updateFile]);
79
+ }
80
+ };
81
+ const onAsNewHandler = (curApplyToAll, curIndex, file) => {
82
+ const newIndex = curIndex + 1;
83
+ if (curApplyToAll) {
84
+ props.onUpload(curIndex === 0 ? props.existedAssets : props.existedAssets.slice(curIndex));
85
+ setIndex(0);
86
+ onClose();
87
+ }
88
+ else {
89
+ if (newIndex === props.existedAssets.length) {
90
+ setIndex(0);
91
+ onClose();
92
+ }
93
+ else {
94
+ setIndex(newIndex);
95
+ }
96
+ props.onUpload([file]);
97
+ }
98
+ };
99
+ const onApplyToAllHandler = (e) => {
100
+ setApplyToAll(e);
101
+ props.onApplyToAll(e);
102
+ };
103
+ const onReplace = useCallback((curApplyToAll, curIndex, file, assetId) => onReplaceHandler(curApplyToAll, curIndex, file, assetId), [isOpen]);
104
+ const onApplyToAll = useCallback((e) => onApplyToAllHandler(e), [isOpen]);
105
+ const onAsNew = useCallback((curApplyToAll, curIndex, file) => onAsNewHandler(curApplyToAll, curIndex, file), [isOpen]);
106
+ useEffect(() => {
107
+ window.addEventListener(replaceFilesModalEvent, onOpen);
108
+ return () => {
109
+ window.removeEventListener(replaceFilesModalEvent, onOpen);
110
+ };
111
+ }, []);
112
+ const modal = () => {
113
+ if (isOpen) {
114
+ const file = props.existedAssets[index];
115
+ const assetId = props.existedAssetIds[index];
116
+ const name = file.name.slice(0, file.name.lastIndexOf('.'));
117
+ return (React.createElement(Modal, { onRequestClose: onClose, wrapperStyle: {
118
+ left: '0px',
119
+ width: '100%'
120
+ }, style: {
121
+ width: '400px',
122
+ height: `${height}px`,
123
+ top: 'calc(50% - 150px)',
124
+ left: 'calc((100% - 400px) / 2)'
125
+ }, isOpen: true },
126
+ React.createElement(Section, null,
127
+ React.createElement("div", { className: 'replace-files-modal', ref: replaceFileModalRef },
128
+ React.createElement("p", null, copy.uploads.title.replace('[name]', name)),
129
+ React.createElement("div", { className: 'replace-files-buttons' },
130
+ React.createElement("div", { className: 'checkbox' },
131
+ React.createElement(CheckboxField, { label: copy.uploads.applyAll, value: applyToAll, onChange: onApplyToAll })),
132
+ React.createElement("div", { className: 'buttons' },
133
+ React.createElement(Button, { onClick: () => onAsNew(applyToAll, index, file), size: 'large', style: 'bold', color: 'primary' }, copy.uploads.keepBoth),
134
+ React.createElement(Button, { onClick: () => onReplace(applyToAll, index, file, assetId), size: 'large', style: 'bold', color: 'primary' }, copy.uploads.replace),
135
+ React.createElement(Button, { onClick: onClose, size: 'large', style: 'bold', color: 'default' }, copy.uploads.cancelButton)))))));
136
+ }
137
+ };
138
+ const PortalContextComponent = () => ReactDOM.createPortal(modal(), document.querySelector('#react-root'));
139
+ return React.createElement(PortalContextComponent, null);
140
+ };
141
+ //# sourceMappingURL=ReplaceFilesModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReplaceFilesModal.js","sourceRoot":"","sources":["../../../../src/components/replace-files-modal/ReplaceFilesModal.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import * as React from 'react';
2
1
  export interface ITab {
3
2
  content?: any;
4
3
  key?: string;
@@ -7,7 +6,5 @@ export interface ITab {
7
6
  label: any;
8
7
  menuButtons?: JSX.Element;
9
8
  }
10
- declare const _default: React.ForwardRefExoticComponent<Omit<Omit<Omit<Omit<any, "targetRef"> & {
11
- targetRef?: any;
12
- }, "width">, "height">, "ref"> & React.RefAttributes<HTMLElement>>;
9
+ declare const _default: any;
13
10
  export default _default;
@@ -1,9 +1,7 @@
1
1
  import * as React from 'react';
2
2
  declare const _default: {
3
3
  title: string;
4
- component: React.ForwardRefExoticComponent<Omit<Omit<Omit<Omit<any, "targetRef"> & {
5
- targetRef?: any;
6
- }, "width">, "height">, "ref"> & React.RefAttributes<HTMLElement>>;
4
+ component: any;
7
5
  };
8
6
  export default _default;
9
7
  export declare const defaultTabs: () => React.JSX.Element;
@@ -0,0 +1,9 @@
1
+ import { IIdentity } from '../../services/Auth0';
2
+ export declare const AUTH_CACHE_KEY: string;
3
+ export declare const login: (auth: IIdentity) => any;
4
+ export declare const clearCachedAuth: () => any;
5
+ declare const actions: {
6
+ LOGIN: string;
7
+ CLEAR: string;
8
+ };
9
+ export default actions;
@@ -0,0 +1,25 @@
1
+ export const AUTH_CACHE_KEY = 'imposium_hub_creds';
2
+ export const login = (auth) => {
3
+ try {
4
+ localStorage.setItem(AUTH_CACHE_KEY, JSON.stringify(auth));
5
+ }
6
+ catch (e) {
7
+ console.warn('Failed to cache auth creds...');
8
+ }
9
+ return { type: actions.LOGIN, auth };
10
+ };
11
+ export const clearCachedAuth = () => {
12
+ try {
13
+ localStorage.removeItem(AUTH_CACHE_KEY);
14
+ }
15
+ catch (e) {
16
+ console.warn('Failed to remove cached creds');
17
+ }
18
+ return { type: actions.CLEAR };
19
+ };
20
+ const actions = {
21
+ LOGIN: 'auth/LOGIN',
22
+ CLEAR: 'auth/CLEAR'
23
+ };
24
+ export default actions;
25
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/redux/actions/auth.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAW,oBAAoB,CAAC;AAE3D,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAe,EAAO,EAAE;IAC1C,IAAI,CAAC;QACD,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAQ,EAAE;IACrC,IAAI,CAAC;QACD,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG;IACZ,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,YAAY;CACtB,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { IIdentity } from '../../services/Auth0';
2
+ declare const auth: (state: IIdentity, action: any) => any;
3
+ export default auth;
@@ -0,0 +1,27 @@
1
+ import actions, { AUTH_CACHE_KEY } from '../actions/auth';
2
+ import AuthService from '../../services/Auth0';
3
+ let initialState = null;
4
+ try {
5
+ const cachedAuth = JSON.parse(localStorage.getItem(AUTH_CACHE_KEY));
6
+ if (cachedAuth) {
7
+ const { idTokenPayload: { exp } } = cachedAuth;
8
+ if (AuthService.checkExpiry(exp)) {
9
+ initialState = cachedAuth;
10
+ }
11
+ }
12
+ }
13
+ catch (e) {
14
+ console.warn('Cached credentials were malformed or missing, redirected to login.');
15
+ }
16
+ const auth = (state = initialState, action) => {
17
+ switch (action.type) {
18
+ case actions.LOGIN:
19
+ return { ...action.auth };
20
+ case actions.CLEAR:
21
+ return null;
22
+ default:
23
+ return state;
24
+ }
25
+ };
26
+ export default auth;
27
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/redux/reducers/auth.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,WAA0B,MAAM,sBAAsB,CAAC;AAE9D,IAAI,YAAY,GAAc,IAAI,CAAC;AAEnC,IAAI,CAAC;IACD,MAAM,UAAU,GAAc,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAE/E,IAAI,UAAU,EAAE,CAAC;QACb,MAAM,EACF,cAAc,EAAE,EAAE,GAAG,EAAE,EAC1B,GAAG,UAAU,CAAC;QAEf,IAAI,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,YAAY,GAAG,UAAU,CAAC;QAC9B,CAAC;IACL,CAAC;AACL,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACT,OAAO,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,KAAK,GAAG,YAAY,EAAE,MAAM,EAAE,EAAE;IAC1C,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,OAAO,CAAC,KAAK;YACd,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,KAAK,OAAO,CAAC,KAAK;YACd,OAAO,IAAI,CAAC;QAChB;YACI,OAAO,KAAK,CAAC;IACrB,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface IIdentity {
2
+ accessToken: string;
3
+ expiry: number;
4
+ expiresIn: number;
5
+ idToken: string;
6
+ tokenType: string;
7
+ idTokenPayload: any;
8
+ }
9
+ export default class AuthService {
10
+ private static readonly IMPOSIUM_APP_DEFAULTS;
11
+ private static auth0Client;
12
+ static bindToClient: (clientID: string, domain: string) => void;
13
+ static login: () => void;
14
+ static logout: () => void;
15
+ static checkExpiry: (expiry: number) => boolean;
16
+ static parseIdFromHash: (hash: string) => Promise<IIdentity>;
17
+ static checkSession: () => Promise<IIdentity | Error>;
18
+ }
@@ -0,0 +1,68 @@
1
+ import * as auth0 from 'auth0-js';
2
+ export default class AuthService {
3
+ static IMPOSIUM_APP_DEFAULTS = {
4
+ scope: 'openid',
5
+ audience: 'https://api.4cinsights.io/',
6
+ responseType: 'token id_token',
7
+ redirectUri: `${window.location.origin}/auth`
8
+ };
9
+ // Auth0 JS client
10
+ static auth0Client;
11
+ /*
12
+ Initialize the auth0 web client with client ID for a given app-wrapper
13
+ */
14
+ static bindToClient = (clientID, domain) => {
15
+ AuthService.auth0Client = new auth0.WebAuth({
16
+ clientID,
17
+ domain,
18
+ ...AuthService.IMPOSIUM_APP_DEFAULTS
19
+ });
20
+ };
21
+ /*
22
+ redirect to auth0 for login
23
+ */
24
+ static login = () => {
25
+ AuthService.auth0Client.authorize();
26
+ };
27
+ /*
28
+ Re-direct to auth0 to cancel session & instruct auth0 to redirect back to login
29
+ */
30
+ static logout = () => {
31
+ AuthService.auth0Client.logout({ returnTo: `${window.location.origin}/auth` });
32
+ };
33
+ /*
34
+ Validate auth0 expiry timestamp
35
+ */
36
+ static checkExpiry = (expiry) => expiry > Date.now().valueOf() / 1000;
37
+ /*
38
+ Parse out identity from hash
39
+ */
40
+ static parseIdFromHash = (hash) => {
41
+ return new Promise((resolve, reject) => {
42
+ AuthService.auth0Client.parseHash({ options: hash }, (e, id) => {
43
+ if (!e) {
44
+ resolve(id);
45
+ }
46
+ else {
47
+ reject(e);
48
+ }
49
+ });
50
+ });
51
+ };
52
+ /*
53
+ Defer to auth0 web servers to check if users session is valid
54
+ */
55
+ static checkSession = () => {
56
+ return new Promise((resolve, reject) => {
57
+ AuthService.auth0Client.checkSession({}, (e, id) => {
58
+ if (!e) {
59
+ resolve(id);
60
+ }
61
+ else {
62
+ reject(e);
63
+ }
64
+ });
65
+ });
66
+ };
67
+ }
68
+ //# sourceMappingURL=Auth0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Auth0.js","sourceRoot":"","sources":["../../../src/services/Auth0.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAC;AAWlC,MAAM,CAAC,OAAO,OAAO,WAAW;IACpB,MAAM,CAAU,qBAAqB,GAAQ;QACjD,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,4BAA4B;QACtC,YAAY,EAAE,gBAAgB;QAC9B,WAAW,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,OAAO;KAChD,CAAC;IAEF,kBAAkB;IACV,MAAM,CAAC,WAAW,CAAgB;IAE1C;;OAEG;IACI,MAAM,CAAC,YAAY,GAAG,CAAC,QAAgB,EAAE,MAAc,EAAQ,EAAE;QACpE,WAAW,CAAC,WAAW,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC;YACxC,QAAQ;YACR,MAAM;YACN,GAAG,WAAW,CAAC,qBAAqB;SACvC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF;;OAEG;IACI,MAAM,CAAC,KAAK,GAAG,GAAS,EAAE;QAC7B,WAAW,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;IACxC,CAAC,CAAC;IAEF;;OAEG;IACI,MAAM,CAAC,MAAM,GAAG,GAAS,EAAE;QAC9B,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC,CAAC;IAEF;;OAEG;IACI,MAAM,CAAC,WAAW,GAAG,CAAC,MAAc,EAAW,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;IAE9F;;OAEG;IACI,MAAM,CAAC,eAAe,GAAG,CAAC,IAAY,EAAsB,EAAE;QACjE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAQ,EAAE,EAAa,EAAE,EAAE;gBAC7E,IAAI,CAAC,CAAC,EAAE,CAAC;oBACL,OAAO,CAAC,EAAE,CAAC,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,CAAC,CAAC,CAAC;gBACd,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF;;OAEG;IACI,MAAM,CAAC,YAAY,GAAG,GAA+B,EAAE;QAC1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAQ,EAAE,EAAa,EAAE,EAAE;gBACjE,IAAI,CAAC,CAAC,EAAE,CAAC;oBACL,OAAO,CAAC,EAAE,CAAC,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,CAAC,CAAC,CAAC;gBACd,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { IIdentity } from './Auth0';
2
+ export interface IHubSession {
3
+ sub: string;
4
+ organization_id: string;
5
+ story_id: string;
6
+ }
7
+ export default class SessionService {
8
+ private static readonly LOGIN_STORY_ID_CACHE;
9
+ private static readonly LOGIN_ORG_ID_CACHE;
10
+ private static readonly SESSION_COOKIE_NAME;
11
+ private static readonly FRESH_COOKIE;
12
+ static getAccessData: (idToken: string, baseUrl?: string, getTotalRenders?: boolean, accountId?: string) => Promise<any[]>;
13
+ static getSession: () => IHubSession;
14
+ static removeSession: () => void;
15
+ static buildFreshSession: (freshIdentity: IIdentity, orgId?: string, storyId?: string) => void;
16
+ static storeSession: (values: any, auth0Expiry: number) => void;
17
+ static cacheOrgId: (organizationId: string) => void;
18
+ static clearCachedOrgId: () => void;
19
+ static getCachedOrgId: () => string;
20
+ static cacheStoryId: (storyId: string) => void;
21
+ static clearCachedStoryId: () => void;
22
+ static getCachedStoryId: () => string;
23
+ static updateSession: (values: any, auth0Expiry: number) => void;
24
+ private static scrapeDomain;
25
+ private static determineAccessUrl;
26
+ }
@@ -0,0 +1,107 @@
1
+ import * as Cookies from 'js-cookie';
2
+ import axios from 'axios';
3
+ export default class SessionService {
4
+ static LOGIN_STORY_ID_CACHE = 'imp_hub_last_story_id';
5
+ static LOGIN_ORG_ID_CACHE = 'imp_hub_last_org_id';
6
+ static SESSION_COOKIE_NAME = 'auth_state';
7
+ static FRESH_COOKIE = {
8
+ sub: '',
9
+ organization_id: '',
10
+ story_id: ''
11
+ };
12
+ /*
13
+ Get list of accessible services with themes from Imposium API
14
+ */
15
+ static getAccessData = (idToken, baseUrl, getTotalRenders = false, accountId) => {
16
+ return new Promise((resolve, reject) => {
17
+ let accessUrl = baseUrl ? `${baseUrl}/access` : SessionService.determineAccessUrl();
18
+ const headers = { Authorization: `Bearer ${idToken}` };
19
+ if (getTotalRenders) {
20
+ accessUrl += '?include_total_renders=true';
21
+ }
22
+ if (accountId && accountId !== 'undefined') {
23
+ headers['X-Imposium-Account-Id'] = accountId;
24
+ }
25
+ axios
26
+ .get(accessUrl, { headers })
27
+ .then((res) => {
28
+ resolve(res.data ? res.data : []);
29
+ })
30
+ .catch((e) => {
31
+ reject(e);
32
+ });
33
+ });
34
+ };
35
+ static getSession = () => Cookies.getJSON(SessionService.SESSION_COOKIE_NAME);
36
+ static removeSession = () => {
37
+ const domain = SessionService.scrapeDomain();
38
+ Cookies.remove(SessionService.SESSION_COOKIE_NAME, { domain });
39
+ SessionService.clearCachedOrgId();
40
+ SessionService.clearCachedStoryId();
41
+ };
42
+ static buildFreshSession = (freshIdentity, orgId = null, storyId = null) => {
43
+ const { idTokenPayload: { sub, exp } } = freshIdentity;
44
+ const freshSession = {
45
+ sub
46
+ };
47
+ if (orgId) {
48
+ freshSession.organization_id = orgId;
49
+ }
50
+ if (storyId) {
51
+ freshSession.story_id = storyId;
52
+ }
53
+ SessionService.storeSession(freshSession, exp);
54
+ };
55
+ static storeSession = (values, auth0Expiry) => {
56
+ const cookieData = { ...SessionService.FRESH_COOKIE, ...values };
57
+ const domain = SessionService.scrapeDomain();
58
+ const expiry = new Date(auth0Expiry * 1000);
59
+ Cookies.set(SessionService.SESSION_COOKIE_NAME, cookieData, { domain, expires: expiry });
60
+ };
61
+ static cacheOrgId = (organizationId) => {
62
+ localStorage.setItem(SessionService.LOGIN_ORG_ID_CACHE, organizationId);
63
+ };
64
+ static clearCachedOrgId = () => {
65
+ localStorage.removeItem(SessionService.LOGIN_ORG_ID_CACHE);
66
+ };
67
+ static getCachedOrgId = () => {
68
+ return localStorage.getItem(SessionService.LOGIN_ORG_ID_CACHE);
69
+ };
70
+ static cacheStoryId = (storyId) => {
71
+ localStorage.setItem(SessionService.LOGIN_STORY_ID_CACHE, storyId);
72
+ };
73
+ static clearCachedStoryId = () => {
74
+ localStorage.removeItem(SessionService.LOGIN_STORY_ID_CACHE);
75
+ };
76
+ static getCachedStoryId = () => {
77
+ return localStorage.getItem(SessionService.LOGIN_STORY_ID_CACHE);
78
+ };
79
+ static updateSession = (values, auth0Expiry) => {
80
+ const prevCookieData = SessionService.getSession();
81
+ const nextCookieData = { ...prevCookieData, ...values };
82
+ SessionService.storeSession(nextCookieData, auth0Expiry);
83
+ };
84
+ /*
85
+ Determine which domain to assign cookie to
86
+ */
87
+ static scrapeDomain = () => {
88
+ const domainParts = window.location.host.split('.').reverse();
89
+ return domainParts.length > 2 ? `.${domainParts[1]}.${domainParts[0].split(':')[0]}` : null;
90
+ };
91
+ /*
92
+ Figure out which access endpoint to hit based on env
93
+ */
94
+ static determineAccessUrl = () => {
95
+ const { location: { hostname, host } } = window;
96
+ if (hostname === 'localhost') {
97
+ return 'https://api/access';
98
+ }
99
+ else if (host.includes('.staging.')) {
100
+ return 'https://api.staging.imposium.com/access';
101
+ }
102
+ else {
103
+ return 'https://api.imposium.com/access';
104
+ }
105
+ };
106
+ }
107
+ //# sourceMappingURL=Session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Session.js","sourceRoot":"","sources":["../../../src/services/Session.ts"],"names":[],"mappings":"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"}