@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.
- package/dist/cjs/components/app-wrapper/AppWrapperV2.d.ts +26 -0
- package/dist/cjs/components/app-wrapper/AppWrapperV2.js +266 -0
- package/dist/cjs/components/app-wrapper/AppWrapperV2.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapperV3.d.ts +19 -0
- package/dist/cjs/components/app-wrapper/AppWrapperV3.js +195 -0
- package/dist/cjs/components/app-wrapper/AppWrapperV3.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +27 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js +243 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.d.ts +28 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js +255 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +27 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js +243 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +28 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js +251 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +1 -0
- package/dist/cjs/components/auth-gate/AuthGate.d.ts +2 -0
- package/dist/cjs/components/auth-gate/AuthGate.js +105 -0
- package/dist/cjs/components/auth-gate/AuthGate.js.map +1 -0
- package/dist/cjs/components/dropdown/Dropdown.d.ts +1 -0
- package/dist/cjs/components/dropdown/Dropdown.js +2 -2
- package/dist/cjs/components/dropdown/Dropdown.js.map +1 -1
- package/dist/cjs/components/edit-guide-modal/EditGuideModal.d.ts +8 -0
- package/dist/cjs/components/edit-guide-modal/EditGuideModal.js +132 -0
- package/dist/cjs/components/edit-guide-modal/EditGuideModal.js.map +1 -0
- package/dist/cjs/components/edit-marker-modal/EditMarkerModal.d.ts +8 -0
- package/dist/cjs/components/edit-marker-modal/EditMarkerModal.js +104 -0
- package/dist/cjs/components/edit-marker-modal/EditMarkerModal.js.map +1 -0
- package/dist/cjs/components/error-message-preview/ErrorMessagePreview.d.ts +15 -0
- package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js +91 -0
- package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js.map +1 -0
- package/dist/cjs/components/header/Header_BACKUP_73021.d.ts +33 -0
- package/dist/cjs/components/header/Header_BACKUP_73021.js +393 -0
- package/dist/cjs/components/header/Header_BACKUP_73021.js.map +1 -0
- package/dist/cjs/components/header/Header_BASE_73021.d.ts +29 -0
- package/dist/cjs/components/header/Header_BASE_73021.js +376 -0
- package/dist/cjs/components/header/Header_BASE_73021.js.map +1 -0
- package/dist/cjs/components/header/Header_LOCAL_73021.d.ts +33 -0
- package/dist/cjs/components/header/Header_LOCAL_73021.js +382 -0
- package/dist/cjs/components/header/Header_LOCAL_73021.js.map +1 -0
- package/dist/cjs/components/header/Header_REMOTE_73021.d.ts +30 -0
- package/dist/cjs/components/header/Header_REMOTE_73021.js +386 -0
- package/dist/cjs/components/header/Header_REMOTE_73021.js.map +1 -0
- package/dist/cjs/components/header/StoryDropdown.d.ts +6 -0
- package/dist/cjs/components/header/StoryDropdown.js +111 -0
- package/dist/cjs/components/header/StoryDropdown.js.map +1 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishCreativeSelectCell.d.ts +8 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishCreativeSelectCell.js +56 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishCreativeSelectCell.js.map +1 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishCreativeSelectHeader.d.ts +8 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishCreativeSelectHeader.js +54 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishCreativeSelectHeader.js.map +1 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishNameCell.d.ts +6 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishNameCell.js +66 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishNameCell.js.map +1 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishPreviewCell.d.ts +8 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishPreviewCell.js +48 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishPreviewCell.js.map +1 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishStatusCell.d.ts +6 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishStatusCell.js +10 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishStatusCell.js.map +1 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishUI.d.ts +15 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishUI.js +179 -0
- package/dist/cjs/components/publish-wizard/publish/CrMPublishUI.js.map +1 -0
- package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.d.ts +11 -0
- package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js +213 -0
- package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js.map +1 -0
- package/dist/cjs/components/tabs/Tabs.d.ts +1 -4
- package/dist/cjs/components/tabs/Tabs.stories.d.ts +1 -3
- package/dist/cjs/redux/actions/auth.d.ts +9 -0
- package/dist/cjs/redux/actions/auth.js +30 -0
- package/dist/cjs/redux/actions/auth.js.map +1 -0
- package/dist/cjs/redux/reducers/auth.d.ts +3 -0
- package/dist/cjs/redux/reducers/auth.js +67 -0
- package/dist/cjs/redux/reducers/auth.js.map +1 -0
- package/dist/cjs/services/Auth0.d.ts +18 -0
- package/dist/cjs/services/Auth0.js +102 -0
- package/dist/cjs/services/Auth0.js.map +1 -0
- package/dist/cjs/services/Session.d.ts +26 -0
- package/dist/cjs/services/Session.js +155 -0
- package/dist/cjs/services/Session.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapperV2.d.ts +26 -0
- package/dist/esm/components/app-wrapper/AppWrapperV2.js +142 -0
- package/dist/esm/components/app-wrapper/AppWrapperV2.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapperV3.d.ts +19 -0
- package/dist/esm/components/app-wrapper/AppWrapperV3.js +88 -0
- package/dist/esm/components/app-wrapper/AppWrapperV3.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +27 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js +194 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.d.ts +28 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js +208 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +27 -0
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js +194 -0
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +28 -0
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js +204 -0
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +1 -0
- package/dist/esm/components/auth-gate/AuthGate.d.ts +2 -0
- package/dist/esm/components/auth-gate/AuthGate.js +59 -0
- package/dist/esm/components/auth-gate/AuthGate.js.map +1 -0
- package/dist/esm/components/dropdown/Dropdown.d.ts +1 -0
- package/dist/esm/components/dropdown/Dropdown.js +2 -2
- package/dist/esm/components/dropdown/Dropdown.js.map +1 -1
- package/dist/esm/components/edit-guide-modal/EditGuideModal.d.ts +8 -0
- package/dist/esm/components/edit-guide-modal/EditGuideModal.js +65 -0
- package/dist/esm/components/edit-guide-modal/EditGuideModal.js.map +1 -0
- package/dist/esm/components/edit-marker-modal/EditMarkerModal.d.ts +8 -0
- package/dist/esm/components/edit-marker-modal/EditMarkerModal.js +72 -0
- package/dist/esm/components/edit-marker-modal/EditMarkerModal.js.map +1 -0
- package/dist/esm/components/error-message-preview/ErrorMessagePreview.d.ts +15 -0
- package/dist/esm/components/error-message-preview/ErrorMessagePreview.js +35 -0
- package/dist/esm/components/error-message-preview/ErrorMessagePreview.js.map +1 -0
- package/dist/esm/components/header/Header_BACKUP_73021.d.ts +33 -0
- package/dist/esm/components/header/Header_BACKUP_73021.js +336 -0
- package/dist/esm/components/header/Header_BACKUP_73021.js.map +1 -0
- package/dist/esm/components/header/Header_BASE_73021.d.ts +29 -0
- package/dist/esm/components/header/Header_BASE_73021.js +322 -0
- package/dist/esm/components/header/Header_BASE_73021.js.map +1 -0
- package/dist/esm/components/header/Header_LOCAL_73021.d.ts +33 -0
- package/dist/esm/components/header/Header_LOCAL_73021.js +328 -0
- package/dist/esm/components/header/Header_LOCAL_73021.js.map +1 -0
- package/dist/esm/components/header/Header_REMOTE_73021.d.ts +30 -0
- package/dist/esm/components/header/Header_REMOTE_73021.js +329 -0
- package/dist/esm/components/header/Header_REMOTE_73021.js.map +1 -0
- package/dist/esm/components/header/StoryDropdown.d.ts +6 -0
- package/dist/esm/components/header/StoryDropdown.js +82 -0
- package/dist/esm/components/header/StoryDropdown.js.map +1 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishCreativeSelectCell.d.ts +8 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishCreativeSelectCell.js +16 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishCreativeSelectCell.js.map +1 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishCreativeSelectHeader.d.ts +8 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishCreativeSelectHeader.js +12 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishCreativeSelectHeader.js.map +1 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishNameCell.d.ts +6 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishNameCell.js +18 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishNameCell.js.map +1 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishPreviewCell.d.ts +8 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishPreviewCell.js +11 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishPreviewCell.js.map +1 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishStatusCell.d.ts +6 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishStatusCell.js +6 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishStatusCell.js.map +1 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishUI.d.ts +15 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishUI.js +114 -0
- package/dist/esm/components/publish-wizard/publish/CrMPublishUI.js.map +1 -0
- package/dist/esm/components/replace-files-modal/ReplaceFilesModal.d.ts +11 -0
- package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js +141 -0
- package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js.map +1 -0
- package/dist/esm/components/tabs/Tabs.d.ts +1 -4
- package/dist/esm/components/tabs/Tabs.stories.d.ts +1 -3
- package/dist/esm/redux/actions/auth.d.ts +9 -0
- package/dist/esm/redux/actions/auth.js +25 -0
- package/dist/esm/redux/actions/auth.js.map +1 -0
- package/dist/esm/redux/reducers/auth.d.ts +3 -0
- package/dist/esm/redux/reducers/auth.js +27 -0
- package/dist/esm/redux/reducers/auth.js.map +1 -0
- package/dist/esm/services/Auth0.d.ts +18 -0
- package/dist/esm/services/Auth0.js +68 -0
- package/dist/esm/services/Auth0.js.map +1 -0
- package/dist/esm/services/Session.d.ts +26 -0
- package/dist/esm/services/Session.js +107 -0
- package/dist/esm/services/Session.js.map +1 -0
- package/dist/styles.css +8 -4
- package/dist/styles.less +16 -11
- package/less/components/shortcut-menu.less +16 -11
- package/package.json +2 -2
- 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:
|
|
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:
|
|
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,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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"}
|