@imposium-hub/components 2.3.5 → 2.3.6
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/assets/AssetField.js +2 -2
- package/dist/cjs/components/assets/AssetField.js.map +1 -1
- package/dist/cjs/components/assets/AssetsTableGlobalCell.js +1 -1
- package/dist/cjs/components/assets/AssetsTableGlobalCell.js.map +1 -1
- package/dist/cjs/components/assets/AssetsTableNameCell.js +2 -1
- package/dist/cjs/components/assets/AssetsTableNameCell.js.map +1 -1
- package/dist/cjs/components/assets/AssetsTableRateCell.js.map +1 -1
- package/dist/cjs/components/assets/AssetsUploadMenu.js +157 -33
- package/dist/cjs/components/assets/AssetsUploadMenu.js.map +1 -1
- package/dist/cjs/components/color-field/ColorField.js +2 -2
- package/dist/cjs/components/color-field/ColorField.js.map +1 -1
- package/dist/cjs/components/data-table/DataTable.js +2 -2
- package/dist/cjs/components/data-table/DataTable.js.map +1 -1
- package/dist/cjs/components/dropdown/{dropdown.stories.js → Dropdown.stories.js} +1 -1
- package/dist/cjs/components/dropdown/{dropdown.stories.js.map → Dropdown.stories.js.map} +1 -1
- package/dist/cjs/components/publish-wizard/PublishWizard.js +4 -0
- package/dist/cjs/components/publish-wizard/PublishWizard.js.map +1 -1
- package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js +28 -5
- package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
- package/dist/cjs/components/story-previewer/StoryPreviewer.js +7 -2
- package/dist/cjs/components/story-previewer/StoryPreviewer.js.map +1 -1
- package/dist/cjs/constants/copy.d.ts +1 -0
- package/dist/cjs/constants/copy.js +4 -3
- package/dist/cjs/constants/copy.js.map +1 -1
- package/dist/cjs/index.d.ts +3 -2
- package/dist/cjs/index.js +3 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/redux/actions/asset-uploads.d.ts +5 -10
- package/dist/cjs/redux/actions/asset-uploads.js +262 -182
- package/dist/cjs/redux/actions/asset-uploads.js.map +1 -1
- package/dist/cjs/redux/reducers/asset-uploads.js +8 -24
- package/dist/cjs/redux/reducers/asset-uploads.js.map +1 -1
- package/dist/esm/components/assets/AssetField.js +2 -2
- package/dist/esm/components/assets/AssetField.js.map +1 -1
- package/dist/esm/components/assets/AssetsTableGlobalCell.js +1 -1
- package/dist/esm/components/assets/AssetsTableGlobalCell.js.map +1 -1
- package/dist/esm/components/assets/AssetsTableNameCell.js +2 -1
- package/dist/esm/components/assets/AssetsTableNameCell.js.map +1 -1
- package/dist/esm/components/assets/AssetsTableRateCell.js.map +1 -1
- package/dist/esm/components/assets/AssetsUploadMenu.js +138 -33
- package/dist/esm/components/assets/AssetsUploadMenu.js.map +1 -1
- package/dist/esm/components/color-field/ColorField.js +2 -2
- package/dist/esm/components/color-field/ColorField.js.map +1 -1
- package/dist/esm/components/data-table/DataTable.js +2 -2
- package/dist/esm/components/data-table/DataTable.js.map +1 -1
- package/dist/esm/components/dropdown/{dropdown.stories.js → Dropdown.stories.js} +1 -1
- package/dist/esm/components/dropdown/{dropdown.stories.js.map → Dropdown.stories.js.map} +1 -1
- package/dist/esm/components/publish-wizard/PublishWizard.js +4 -0
- package/dist/esm/components/publish-wizard/PublishWizard.js.map +1 -1
- package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js +28 -5
- package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
- package/dist/esm/components/story-previewer/StoryPreviewer.js +7 -2
- package/dist/esm/components/story-previewer/StoryPreviewer.js.map +1 -1
- package/dist/esm/constants/copy.d.ts +1 -0
- package/dist/esm/constants/copy.js +4 -3
- package/dist/esm/constants/copy.js.map +1 -1
- package/dist/esm/index.d.ts +3 -2
- package/dist/esm/index.js +3 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/redux/actions/asset-uploads.d.ts +5 -10
- package/dist/esm/redux/actions/asset-uploads.js +224 -167
- package/dist/esm/redux/actions/asset-uploads.js.map +1 -1
- package/dist/esm/redux/reducers/asset-uploads.js +11 -48
- package/dist/esm/redux/reducers/asset-uploads.js.map +1 -1
- package/dist/styles.css +146 -2
- package/dist/styles.less +274 -73
- package/less/components/assets.less +237 -63
- package/less/components/data-table.less +17 -11
- package/less/components/publish-wizard.less +20 -0
- package/less/components/story-previewer.less +1 -0
- package/package.json +5 -5
- package/src/components/assets/AssetField.tsx +3 -8
- package/src/components/assets/AssetsTableGlobalCell.tsx +15 -0
- package/src/components/assets/AssetsTableNameCell.tsx +2 -1
- package/src/components/assets/AssetsTableRateCell.tsx +0 -1
- package/src/components/assets/AssetsUploadMenu.tsx +275 -97
- package/src/components/color-field/ColorField.tsx +2 -2
- package/src/components/data-table/DataTable.tsx +2 -2
- package/src/components/publish-wizard/PublishWizard.tsx +15 -8
- package/src/components/publish-wizard/publish/EmailWorkflow.tsx +42 -10
- package/src/components/story-previewer/StoryPreviewer.tsx +10 -6
- package/src/constants/copy.ts +4 -3
- package/src/index.ts +3 -7
- package/src/redux/actions/asset-uploads.ts +305 -205
- package/src/redux/reducers/asset-uploads.ts +13 -48
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +0 -27
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js +0 -243
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +0 -1
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.d.ts +0 -28
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js +0 -255
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js.map +0 -1
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +0 -27
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js +0 -243
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +0 -1
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +0 -28
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js +0 -251
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +0 -1
- package/dist/cjs/components/error-message-preview/ErrorMessagePreview.d.ts +0 -15
- package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js +0 -91
- package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js.map +0 -1
- package/dist/cjs/components/header/Header_BACKUP_73021.d.ts +0 -33
- package/dist/cjs/components/header/Header_BACKUP_73021.js +0 -393
- package/dist/cjs/components/header/Header_BACKUP_73021.js.map +0 -1
- package/dist/cjs/components/header/Header_BASE_73021.d.ts +0 -29
- package/dist/cjs/components/header/Header_BASE_73021.js +0 -376
- package/dist/cjs/components/header/Header_BASE_73021.js.map +0 -1
- package/dist/cjs/components/header/Header_LOCAL_73021.d.ts +0 -33
- package/dist/cjs/components/header/Header_LOCAL_73021.js +0 -382
- package/dist/cjs/components/header/Header_LOCAL_73021.js.map +0 -1
- package/dist/cjs/components/header/Header_REMOTE_73021.d.ts +0 -30
- package/dist/cjs/components/header/Header_REMOTE_73021.js +0 -386
- package/dist/cjs/components/header/Header_REMOTE_73021.js.map +0 -1
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +0 -27
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js +0 -194
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +0 -1
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.d.ts +0 -28
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js +0 -208
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js.map +0 -1
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +0 -27
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js +0 -194
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +0 -1
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +0 -28
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js +0 -204
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +0 -1
- package/dist/esm/components/error-message-preview/ErrorMessagePreview.d.ts +0 -15
- package/dist/esm/components/error-message-preview/ErrorMessagePreview.js +0 -35
- package/dist/esm/components/error-message-preview/ErrorMessagePreview.js.map +0 -1
- package/dist/esm/components/header/Header_BACKUP_73021.d.ts +0 -33
- package/dist/esm/components/header/Header_BACKUP_73021.js +0 -336
- package/dist/esm/components/header/Header_BACKUP_73021.js.map +0 -1
- package/dist/esm/components/header/Header_BASE_73021.d.ts +0 -29
- package/dist/esm/components/header/Header_BASE_73021.js +0 -322
- package/dist/esm/components/header/Header_BASE_73021.js.map +0 -1
- package/dist/esm/components/header/Header_LOCAL_73021.d.ts +0 -33
- package/dist/esm/components/header/Header_LOCAL_73021.js +0 -328
- package/dist/esm/components/header/Header_LOCAL_73021.js.map +0 -1
- package/dist/esm/components/header/Header_REMOTE_73021.d.ts +0 -30
- package/dist/esm/components/header/Header_REMOTE_73021.js +0 -329
- package/dist/esm/components/header/Header_REMOTE_73021.js.map +0 -1
- /package/dist/cjs/components/dropdown/{dropdown.stories.d.ts → Dropdown.stories.d.ts} +0 -0
- /package/dist/esm/components/dropdown/{dropdown.stories.d.ts → Dropdown.stories.d.ts} +0 -0
- /package/src/components/dropdown/{dropdown.stories.tsx → Dropdown.stories.tsx} +0 -0
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { assets as copy } from '../../constants/copy';
|
|
3
3
|
import CheckboxField from '../checkbox-field/CheckboxField';
|
|
4
|
-
import { DeterminateLoader } from '../determinate-loader/DeterminateLoader';
|
|
5
4
|
import {
|
|
6
|
-
toggleAssignToStory,
|
|
7
5
|
cancelAssetUpload,
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
toggleManualTagging,
|
|
12
|
-
addManualTag,
|
|
13
|
-
deleteManualTag,
|
|
14
|
-
deleteManualTags
|
|
6
|
+
uploadingAsset,
|
|
7
|
+
updateUploadTags,
|
|
8
|
+
cancelNonUploadedAssets
|
|
15
9
|
} from '../../redux/actions/asset-uploads';
|
|
16
10
|
import { bindActionCreators } from 'redux';
|
|
17
11
|
import { connect } from 'react-redux';
|
|
@@ -24,26 +18,58 @@ import AssetsTableTagsPivot from './AssetsTableTagsPivot';
|
|
|
24
18
|
import Tag from '../tag/Tag';
|
|
25
19
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
26
20
|
import { faEraser } from '@fortawesome/free-solid-svg-icons';
|
|
21
|
+
import { ICON_TIMES, ICON_UPLOAD } from '../../constants/icons';
|
|
22
|
+
import AssetsTableDropzone from './AssetsTableDropzone';
|
|
27
23
|
|
|
28
24
|
interface IAssetsUploadMenuProps {
|
|
25
|
+
editor: any;
|
|
29
26
|
assetUploads: any;
|
|
30
27
|
assetTags: string[];
|
|
31
28
|
api: any;
|
|
32
|
-
toggleAutoTag: (toggle: boolean) => any;
|
|
33
|
-
toggleTagFileName: (toggle: boolean) => any;
|
|
34
|
-
toggleAssignToStory: (toggle: boolean) => any;
|
|
35
|
-
toggleTagDelimiter: (togglle: boolean) => any;
|
|
36
|
-
setDelimiter: (delimiter: string) => any;
|
|
37
|
-
toggleManualTagging: (togglle: boolean) => any;
|
|
38
|
-
addManualTag: (tag: string) => any;
|
|
39
|
-
deleteManualTag: (tag: string) => any;
|
|
40
|
-
deleteManualTags: () => void;
|
|
41
29
|
cancelAssetUpload: (fileName: string, api: IImposiumAPI) => any;
|
|
30
|
+
cancelNonUploadedAssets: (api: IImposiumAPI) => any;
|
|
31
|
+
updateEditorConfig(c): void;
|
|
32
|
+
uploadingAsset: (api: IImposiumAPI) => void;
|
|
33
|
+
updateUploadTags: () => void;
|
|
34
|
+
onDrop: (i, m) => any;
|
|
35
|
+
show: boolean;
|
|
36
|
+
onMenuHover: (o) => void;
|
|
37
|
+
toggleRef?: any;
|
|
38
|
+
onOutsideClick: (...args) => any;
|
|
39
|
+
tableHover: boolean;
|
|
42
40
|
}
|
|
43
41
|
|
|
44
|
-
|
|
42
|
+
interface IAssetsUploadMenuState {
|
|
43
|
+
assetOver: boolean;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps, IAssetsUploadMenuState> {
|
|
47
|
+
private menuRef: any = null;
|
|
48
|
+
|
|
49
|
+
private clickHandler: any = (e) => this.detectOutsideClick(e);
|
|
50
|
+
|
|
45
51
|
constructor(props: IAssetsUploadMenuProps) {
|
|
46
52
|
super(props);
|
|
53
|
+
|
|
54
|
+
this.state = {
|
|
55
|
+
assetOver: false
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
this.menuRef = React.createRef();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
public componentDidUpdate(prevProps: IAssetsUploadMenuProps) {
|
|
62
|
+
if (this.props.show && !prevProps.show) {
|
|
63
|
+
window.addEventListener('mousedown', this.clickHandler);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (!this.props.show && prevProps.show) {
|
|
67
|
+
window.removeEventListener('mousedown', this.clickHandler);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
public componentWillUnmount(): void {
|
|
72
|
+
window.removeEventListener('mousedown', this.clickHandler);
|
|
47
73
|
}
|
|
48
74
|
|
|
49
75
|
private handleCancelAssetUpload(fileName: string) {
|
|
@@ -51,81 +77,180 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps> {
|
|
|
51
77
|
this.props.cancelAssetUpload(fileName, api);
|
|
52
78
|
}
|
|
53
79
|
|
|
80
|
+
private uploadFileHandler() {
|
|
81
|
+
const { api } = this.props;
|
|
82
|
+
this.props.uploadingAsset(api);
|
|
83
|
+
this.props.updateEditorConfig({ showUploadsDropdown: false });
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
private cancelUploadHandler(remove: boolean) {
|
|
87
|
+
const { api } = this.props;
|
|
88
|
+
if (!remove) {
|
|
89
|
+
this.props.cancelNonUploadedAssets(api);
|
|
90
|
+
}
|
|
91
|
+
this.props.updateEditorConfig({ showUploadsDropdown: false });
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
private uploadsSetting(state) {
|
|
95
|
+
const currState = this.props.editor.assetUploads;
|
|
96
|
+
|
|
97
|
+
const newState = { ...currState, ...state };
|
|
98
|
+
this.props.updateEditorConfig({
|
|
99
|
+
assetUploads: newState
|
|
100
|
+
});
|
|
101
|
+
this.props.updateUploadTags();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
private deleteManualTag(tag) {
|
|
105
|
+
const { manualTags } = this.props.editor.assetUploads;
|
|
106
|
+
const updatedManualTags = manualTags.filter((t: string) => t !== tag);
|
|
107
|
+
this.uploadsSetting({ manualTags: updatedManualTags });
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private addManualTag(tag) {
|
|
111
|
+
const { manualTags } = this.props.editor.assetUploads;
|
|
112
|
+
const updatedManualTags = manualTags ? manualTags : [];
|
|
113
|
+
updatedManualTags.push(tag);
|
|
114
|
+
this.uploadsSetting({ manualTags: updatedManualTags });
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
private checkHover(monitor) {
|
|
118
|
+
const isOver = monitor.isOver();
|
|
119
|
+
if (isOver !== this.state.assetOver) {
|
|
120
|
+
this.setState({ assetOver: isOver }, () => this.props.onMenuHover(isOver));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
private detectOutsideClick = (e: any): void => {
|
|
125
|
+
const { toggleRef } = this.props;
|
|
126
|
+
const { target } = e;
|
|
127
|
+
|
|
128
|
+
const isResizing = target.classList.contains('Resizer') ? true : false;
|
|
129
|
+
const clickInside =
|
|
130
|
+
this.menuRef.current && this.menuRef.current.contains(target) ? true : false;
|
|
131
|
+
const clickOnToggle =
|
|
132
|
+
toggleRef && toggleRef.current && toggleRef.current.contains(target) ? true : false;
|
|
133
|
+
|
|
134
|
+
if (!isResizing && !clickInside && !clickOnToggle) {
|
|
135
|
+
this.cancelRender(true);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
private cancelRender = (forced: boolean = false): void => {
|
|
140
|
+
const { onOutsideClick } = this.props;
|
|
141
|
+
|
|
142
|
+
window.removeEventListener('mousedown', this.clickHandler);
|
|
143
|
+
|
|
144
|
+
if (forced) {
|
|
145
|
+
onOutsideClick();
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
|
|
54
149
|
public render() {
|
|
55
150
|
const {
|
|
56
|
-
assetUploads: {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
151
|
+
assetUploads: { uploads },
|
|
152
|
+
editor: {
|
|
153
|
+
showUploadsMenu,
|
|
154
|
+
assetUploads: {
|
|
155
|
+
tagByDelimiter,
|
|
156
|
+
delimiter,
|
|
157
|
+
assignToStory,
|
|
158
|
+
tagByFileName,
|
|
159
|
+
tagManually,
|
|
160
|
+
manualTags
|
|
161
|
+
}
|
|
64
162
|
},
|
|
65
163
|
assetTags
|
|
66
164
|
} = this.props;
|
|
165
|
+
const disable = uploads.length > 0 ? false : true;
|
|
166
|
+
|
|
67
167
|
let uploadsListInner;
|
|
168
|
+
const uploading = [];
|
|
68
169
|
if (uploads.length > 0) {
|
|
69
170
|
uploadsListInner = uploads.map((u: any) => {
|
|
70
|
-
const { filename, percent } = u;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
171
|
+
const { filename, percent, tags } = u;
|
|
172
|
+
|
|
173
|
+
if (percent === 0) {
|
|
174
|
+
const closeButton = (
|
|
175
|
+
<Button
|
|
176
|
+
key='btn-cancel'
|
|
177
|
+
onClick={() => this.handleCancelAssetUpload(filename)}
|
|
178
|
+
style='subtle'
|
|
179
|
+
size='small'>
|
|
180
|
+
{ICON_TIMES}
|
|
181
|
+
</Button>
|
|
76
182
|
);
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
183
|
+
|
|
184
|
+
const fileTags = tags.map((tag: string) => (
|
|
185
|
+
<Tag
|
|
186
|
+
key={tag}
|
|
187
|
+
copy={tag}
|
|
188
|
+
colorize={AssetsTableTagsPivot.COLORIZE_TAGS}
|
|
189
|
+
/>
|
|
190
|
+
));
|
|
191
|
+
return (
|
|
192
|
+
<div
|
|
193
|
+
className='ongoing-upload'
|
|
194
|
+
key={filename}>
|
|
195
|
+
<div className='ongoing-upload-inner'>
|
|
196
|
+
<input
|
|
197
|
+
className='upload-filename'
|
|
198
|
+
value={filename}
|
|
199
|
+
readOnly
|
|
200
|
+
/>
|
|
201
|
+
<div className='tags-column'>{fileTags}</div>
|
|
202
|
+
{closeButton}
|
|
203
|
+
</div>
|
|
94
204
|
</div>
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
205
|
+
);
|
|
206
|
+
} else {
|
|
207
|
+
uploading.push(true);
|
|
208
|
+
}
|
|
98
209
|
});
|
|
99
210
|
} else {
|
|
100
211
|
uploadsListInner = <div className='no-ongoing-uploads'>{copy.uploads.noUploads}</div>;
|
|
101
212
|
}
|
|
102
213
|
|
|
214
|
+
if (uploading.length === uploads.length) {
|
|
215
|
+
uploadsListInner = <div className='no-ongoing-uploads'>{copy.uploads.noUploads}</div>;
|
|
216
|
+
}
|
|
217
|
+
|
|
103
218
|
const delimiterSelector = tagByDelimiter && (
|
|
104
219
|
<SelectField
|
|
105
220
|
width='35%'
|
|
106
221
|
options={DELIMITER_OPTIONS}
|
|
107
222
|
value={delimiter}
|
|
108
|
-
onChange={(c) =>
|
|
223
|
+
onChange={(c) => {
|
|
224
|
+
this.uploadsSetting({ delimiter: c });
|
|
225
|
+
}}
|
|
109
226
|
/>
|
|
110
227
|
);
|
|
228
|
+
|
|
111
229
|
const tagsArray = [...new Set(manualTags)];
|
|
230
|
+
|
|
112
231
|
const tagsMarkup = tagsArray.map((tag: string) => (
|
|
113
232
|
<Tag
|
|
114
233
|
key={tag}
|
|
115
234
|
copy={tag}
|
|
116
235
|
colorize={AssetsTableTagsPivot.COLORIZE_TAGS}
|
|
117
|
-
removeHandler={() =>
|
|
236
|
+
removeHandler={() => {
|
|
237
|
+
this.deleteManualTag(tag);
|
|
238
|
+
}}
|
|
118
239
|
/>
|
|
119
240
|
));
|
|
241
|
+
|
|
120
242
|
const removeTagsBtn =
|
|
121
243
|
tagsArray.length > 0 ? (
|
|
122
244
|
<Button
|
|
123
245
|
tooltip='Remove All Tags'
|
|
124
246
|
style='sublte'
|
|
125
|
-
onClick={() =>
|
|
247
|
+
onClick={() => {
|
|
248
|
+
this.uploadsSetting({ manualTags: [] });
|
|
249
|
+
}}>
|
|
126
250
|
<FontAwesomeIcon icon={faEraser} />
|
|
127
251
|
</Button>
|
|
128
252
|
) : null;
|
|
253
|
+
|
|
129
254
|
const tagsColumn = tagManually && (
|
|
130
255
|
<div className='tags-column'>
|
|
131
256
|
<TextField
|
|
@@ -134,46 +259,103 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps> {
|
|
|
134
259
|
suggestions={assetTags}
|
|
135
260
|
label={copy.tags.add}
|
|
136
261
|
width={AssetsTableTagsPivot.ADD_TAG_INPUT_WIDTH}
|
|
137
|
-
doSubmit={(t) =>
|
|
262
|
+
doSubmit={(t) => {
|
|
263
|
+
this.addManualTag(t);
|
|
264
|
+
}}
|
|
138
265
|
/>
|
|
139
266
|
{tagsMarkup}
|
|
140
267
|
{removeTagsBtn}
|
|
141
268
|
</div>
|
|
142
269
|
);
|
|
143
270
|
|
|
271
|
+
const modifier = this.state.assetOver ? 'asset-over' : '';
|
|
272
|
+
const show = this.props.show ? 'show' : '';
|
|
273
|
+
const tableHover = this.props.tableHover ? 'table-hover' : '';
|
|
274
|
+
const width = document.getElementsByClassName('assetUploads')[0]?.clientWidth;
|
|
275
|
+
|
|
144
276
|
return (
|
|
145
|
-
<
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
width='50%'
|
|
156
|
-
label={copy.uploads.manualTagging}
|
|
157
|
-
value={tagManually}
|
|
158
|
-
onChange={() => this.props.toggleManualTagging(!tagManually)}
|
|
159
|
-
/>
|
|
160
|
-
<CheckboxField
|
|
161
|
-
width='50%'
|
|
162
|
-
label={copy.uploads.autoTagFilname}
|
|
163
|
-
value={tagByFileName}
|
|
164
|
-
onChange={() => this.props.toggleTagFileName(!tagByFileName)}
|
|
165
|
-
/>
|
|
166
|
-
<CheckboxField
|
|
167
|
-
width='50%'
|
|
168
|
-
label={copy.uploads.assignToProjectInput}
|
|
169
|
-
info={copy.uploads.assignToProjectInfo}
|
|
170
|
-
value={assignToStory}
|
|
171
|
-
onChange={() => this.props.toggleAssignToStory(!assignToStory)}
|
|
172
|
-
/>
|
|
277
|
+
<AssetsTableDropzone
|
|
278
|
+
className={`uploads-dropzone ${show} ${tableHover} ${modifier}`}
|
|
279
|
+
onDrop={(i, m) => {
|
|
280
|
+
this.props.onDrop(i, m);
|
|
281
|
+
}}
|
|
282
|
+
onExternalCollect={(o) => this.checkHover(o)}>
|
|
283
|
+
<div className='overlay'>
|
|
284
|
+
<p style={{ display: this.state.assetOver ? 'block' : 'none' }}>
|
|
285
|
+
{copy.dropAsset}
|
|
286
|
+
</p>
|
|
173
287
|
</div>
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
288
|
+
<div
|
|
289
|
+
className='uploads-menu'
|
|
290
|
+
style={{ width }}
|
|
291
|
+
ref={this.menuRef}>
|
|
292
|
+
<div className='uploads-controls'>
|
|
293
|
+
<CheckboxField
|
|
294
|
+
width='50%'
|
|
295
|
+
label={copy.uploads.autoTagDelimiter}
|
|
296
|
+
value={tagByDelimiter}
|
|
297
|
+
onChange={() =>
|
|
298
|
+
this.uploadsSetting({ tagByDelimiter: !tagByDelimiter })
|
|
299
|
+
}
|
|
300
|
+
/>
|
|
301
|
+
{delimiterSelector}
|
|
302
|
+
<CheckboxField
|
|
303
|
+
width='50%'
|
|
304
|
+
label={copy.uploads.manualTagging}
|
|
305
|
+
value={tagManually}
|
|
306
|
+
onChange={() => this.uploadsSetting({ tagManually: !tagManually })}
|
|
307
|
+
/>
|
|
308
|
+
<CheckboxField
|
|
309
|
+
width='50%'
|
|
310
|
+
label={copy.uploads.autoTagFilname}
|
|
311
|
+
value={tagByFileName}
|
|
312
|
+
onChange={() => this.uploadsSetting({ tagByFileName: !tagByFileName })}
|
|
313
|
+
/>
|
|
314
|
+
<CheckboxField
|
|
315
|
+
width='50%'
|
|
316
|
+
label={copy.uploads.assignToProjectInput}
|
|
317
|
+
info={copy.uploads.assignToProjectInfo}
|
|
318
|
+
value={!assignToStory}
|
|
319
|
+
onChange={() => this.uploadsSetting({ assignToStory: !assignToStory })}
|
|
320
|
+
/>
|
|
321
|
+
</div>
|
|
322
|
+
{tagsColumn}
|
|
323
|
+
<div className='uploads-list'>{uploadsListInner}</div>
|
|
324
|
+
<div className='uploads-confirm'>
|
|
325
|
+
<CheckboxField
|
|
326
|
+
label={`Don't show again`}
|
|
327
|
+
value={!showUploadsMenu}
|
|
328
|
+
onChange={() =>
|
|
329
|
+
this.props.updateEditorConfig({
|
|
330
|
+
showUploadsMenu: !showUploadsMenu
|
|
331
|
+
})
|
|
332
|
+
}
|
|
333
|
+
/>
|
|
334
|
+
<Button
|
|
335
|
+
key='cancel-upload'
|
|
336
|
+
onClick={() => this.cancelUploadHandler(disable)}
|
|
337
|
+
customStyles={{
|
|
338
|
+
color: 'black'
|
|
339
|
+
}}
|
|
340
|
+
style='bold'
|
|
341
|
+
color='secondary'
|
|
342
|
+
width='60px'
|
|
343
|
+
size='small'>
|
|
344
|
+
Cancel
|
|
345
|
+
</Button>
|
|
346
|
+
<Button
|
|
347
|
+
key='upload-file'
|
|
348
|
+
disabled={disable}
|
|
349
|
+
onClick={() => this.uploadFileHandler()}
|
|
350
|
+
style='bold'
|
|
351
|
+
color='primary'
|
|
352
|
+
width='80px'
|
|
353
|
+
size='small'>
|
|
354
|
+
Upload {ICON_UPLOAD}
|
|
355
|
+
</Button>
|
|
356
|
+
</div>
|
|
357
|
+
</div>
|
|
358
|
+
</AssetsTableDropzone>
|
|
177
359
|
);
|
|
178
360
|
}
|
|
179
361
|
}
|
|
@@ -181,15 +363,10 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps> {
|
|
|
181
363
|
const mapDispatchToProps = (dispatch): any => {
|
|
182
364
|
return bindActionCreators(
|
|
183
365
|
{
|
|
184
|
-
toggleAssignToStory,
|
|
185
|
-
toggleTagFileName,
|
|
186
366
|
cancelAssetUpload,
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
addManualTag,
|
|
191
|
-
deleteManualTag,
|
|
192
|
-
deleteManualTags
|
|
367
|
+
cancelNonUploadedAssets,
|
|
368
|
+
uploadingAsset,
|
|
369
|
+
updateUploadTags
|
|
193
370
|
},
|
|
194
371
|
dispatch
|
|
195
372
|
);
|
|
@@ -198,7 +375,8 @@ const mapDispatchToProps = (dispatch): any => {
|
|
|
198
375
|
const mapStateToProps = (state): any => {
|
|
199
376
|
return {
|
|
200
377
|
assetUploads: state.assetUploads,
|
|
201
|
-
assetTags: state.assetTags
|
|
378
|
+
assetTags: state.assetTags,
|
|
379
|
+
editor: state.editor
|
|
202
380
|
};
|
|
203
381
|
};
|
|
204
382
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import FieldWrapper from '../field-wrapper/FieldWrapper';
|
|
3
3
|
import { IToolTipConfig } from '../Tooltip';
|
|
4
|
-
import { SketchPicker } from 'react-color';
|
|
4
|
+
import { SketchPicker } from '@imposium-hub/react-color';
|
|
5
5
|
|
|
6
6
|
interface IColorFieldProps {
|
|
7
7
|
buttons?: any;
|
|
@@ -29,7 +29,7 @@ class ColorField extends React.PureComponent<IColorFieldProps, IColorFieldState>
|
|
|
29
29
|
|
|
30
30
|
private picker: any;
|
|
31
31
|
|
|
32
|
-
private transparentBg = `url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/
|
|
32
|
+
private transparentBg = `url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAADBJREFUOE9jPHPmzH8GPMDY2BifNAPjqAHDIgz+//+PNx2cPXsWfzoYNYCBceiHAQD1OVMJc/dYeAAAAABJRU5ErkJggg==") left center`;
|
|
33
33
|
|
|
34
34
|
constructor(props) {
|
|
35
35
|
super(props);
|
|
@@ -265,7 +265,7 @@ const DataTable: React.FC<IDataTableProps> = (props: IDataTableProps) => {
|
|
|
265
265
|
{...column.getHeaderProps()}
|
|
266
266
|
className={`ip-table-header ${
|
|
267
267
|
column.canSort ? 'ip-sortable' : ''
|
|
268
|
-
}`}>
|
|
268
|
+
} ${column.pin ? 'pin' : ''}`}>
|
|
269
269
|
{!searchable && (
|
|
270
270
|
<div
|
|
271
271
|
{...toggleProps}
|
|
@@ -371,7 +371,7 @@ const DataTable: React.FC<IDataTableProps> = (props: IDataTableProps) => {
|
|
|
371
371
|
{...cell.getCellProps()}
|
|
372
372
|
className={`ip-table-col ${
|
|
373
373
|
cell.column.overflowVisible ? 'overflow-visible' : ''
|
|
374
|
-
}`.trim()}>
|
|
374
|
+
} ${cell.column.pin ? 'pin' : ''}`.trim()}>
|
|
375
375
|
{cell.render('Cell')}
|
|
376
376
|
</td>
|
|
377
377
|
));
|
|
@@ -25,7 +25,6 @@ import { connect } from 'react-redux';
|
|
|
25
25
|
interface IPublishWizardProps {
|
|
26
26
|
story: any;
|
|
27
27
|
project: any;
|
|
28
|
-
updateEditorConfig(c): void;
|
|
29
28
|
editor: any;
|
|
30
29
|
updateScene(d): void;
|
|
31
30
|
editStory(s): void;
|
|
@@ -67,6 +66,7 @@ interface IPublishWizardProps {
|
|
|
67
66
|
renderBatch: (batchId: string, postRenderActions?: any) => any;
|
|
68
67
|
publishData: any;
|
|
69
68
|
onDeleteBatch?: (batchId: string) => any;
|
|
69
|
+
onBackBtn?: () => void;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
export interface ICredential {
|
|
@@ -350,13 +350,20 @@ class PublishWizard extends React.PureComponent<IPublishWizardProps, IPublishWiz
|
|
|
350
350
|
size={'large'}
|
|
351
351
|
key='btn-back'
|
|
352
352
|
onClick={() =>
|
|
353
|
-
this.setState(
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
353
|
+
this.setState(
|
|
354
|
+
{
|
|
355
|
+
screenIndex: backIndex,
|
|
356
|
+
next: false,
|
|
357
|
+
nextStep: false,
|
|
358
|
+
error: false,
|
|
359
|
+
done: false
|
|
360
|
+
},
|
|
361
|
+
() => {
|
|
362
|
+
if (this.props.onBackBtn) {
|
|
363
|
+
this.props.onBackBtn();
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
)
|
|
360
367
|
}
|
|
361
368
|
color='primary'>
|
|
362
369
|
{copy.publish.btnBack}
|
|
@@ -488,12 +488,7 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
488
488
|
}
|
|
489
489
|
|
|
490
490
|
public renderLabel() {
|
|
491
|
-
const {
|
|
492
|
-
isExport,
|
|
493
|
-
batchJobs,
|
|
494
|
-
publishDataset,
|
|
495
|
-
batchesList: { error }
|
|
496
|
-
} = this.props;
|
|
491
|
+
const { isExport, batchJobs, publishDataset } = this.props;
|
|
497
492
|
const { renderedBatch, selectedBatchId, uploading, uploadComplete } = this.state;
|
|
498
493
|
|
|
499
494
|
if (
|
|
@@ -512,10 +507,6 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
512
507
|
);
|
|
513
508
|
}
|
|
514
509
|
|
|
515
|
-
if (batchJobs.failed && error[selectedBatchId]) {
|
|
516
|
-
return <>{error[selectedBatchId].error}</>;
|
|
517
|
-
}
|
|
518
|
-
|
|
519
510
|
if (uploading) {
|
|
520
511
|
const uploadingCopy = isExport
|
|
521
512
|
? copy.publish.importingData
|
|
@@ -670,9 +661,14 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
670
661
|
batchError,
|
|
671
662
|
creativeManagerOverrides
|
|
672
663
|
} = this.state;
|
|
664
|
+
|
|
673
665
|
const {
|
|
674
666
|
isExport,
|
|
675
667
|
batchJobs: { missing, renders, failed },
|
|
668
|
+
batchesList: {
|
|
669
|
+
error,
|
|
670
|
+
selected: { name }
|
|
671
|
+
},
|
|
676
672
|
isCrM,
|
|
677
673
|
publishDataset
|
|
678
674
|
} = this.props;
|
|
@@ -776,13 +772,49 @@ class EmailWorkflow extends React.PureComponent<IEmailWorkflowProps, IEmailWorkf
|
|
|
776
772
|
const title = publishDataset
|
|
777
773
|
? copy.publish.datasetTitle.replace('[dataset_name]', this.props.activeDataset?.name)
|
|
778
774
|
: copy.publish.emailTitle;
|
|
775
|
+
|
|
779
776
|
const desc = publishDataset ? '' : copy.publish.emailDesc;
|
|
780
777
|
|
|
778
|
+
const showBatchError = () => {
|
|
779
|
+
if (failed && error && error[selectedBatchId]) {
|
|
780
|
+
let errorMsg: JSX.Element = <></>;
|
|
781
|
+
let errorExpMsg: JSX.Element = <></>;
|
|
782
|
+
if (error[selectedBatchId]) {
|
|
783
|
+
const { experience } = error[selectedBatchId];
|
|
784
|
+
errorMsg = <span className='error-title'>{error[selectedBatchId].error}</span>;
|
|
785
|
+
errorExpMsg = experience?.error ? <div>{experience.error}</div> : <></>;
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
return (
|
|
789
|
+
<div className='batch-job-error'>
|
|
790
|
+
<h2>{`Batch "${name}" stopped due to errors.`}</h2>
|
|
791
|
+
<table>
|
|
792
|
+
<thead></thead>
|
|
793
|
+
<tbody>
|
|
794
|
+
<tr>
|
|
795
|
+
<td>Batch ID:</td>
|
|
796
|
+
<td>{selectedBatchId}</td>
|
|
797
|
+
</tr>
|
|
798
|
+
<tr>
|
|
799
|
+
<td>First Error:</td>
|
|
800
|
+
<td>
|
|
801
|
+
{errorMsg}
|
|
802
|
+
<br />
|
|
803
|
+
{errorExpMsg}
|
|
804
|
+
</td>
|
|
805
|
+
</tr>
|
|
806
|
+
</tbody>
|
|
807
|
+
</table>
|
|
808
|
+
</div>
|
|
809
|
+
);
|
|
810
|
+
}
|
|
811
|
+
};
|
|
781
812
|
const uploadCSV = (
|
|
782
813
|
<div>
|
|
783
814
|
<h2>{title}</h2>
|
|
784
815
|
<HRule />
|
|
785
816
|
<p>{desc}</p>
|
|
817
|
+
{showBatchError()}
|
|
786
818
|
<input
|
|
787
819
|
type='file'
|
|
788
820
|
style={{ display: 'none' }}
|
|
@@ -509,9 +509,9 @@ class StoryPreviewer extends React.PureComponent<IStoryPreviewerProps, IStoryPre
|
|
|
509
509
|
api.cancelExperiencePolling().then(
|
|
510
510
|
() => {
|
|
511
511
|
onError(
|
|
512
|
-
copy.
|
|
513
|
-
'[
|
|
514
|
-
|
|
512
|
+
copy.runExpError.replace(
|
|
513
|
+
'[error]',
|
|
514
|
+
e.error
|
|
515
515
|
)
|
|
516
516
|
);
|
|
517
517
|
|
|
@@ -572,9 +572,13 @@ class StoryPreviewer extends React.PureComponent<IStoryPreviewerProps, IStoryPre
|
|
|
572
572
|
.catch((e) => {
|
|
573
573
|
this.resetState();
|
|
574
574
|
if (onError) {
|
|
575
|
-
|
|
576
|
-
copy.
|
|
577
|
-
|
|
575
|
+
if (e.error) {
|
|
576
|
+
onError(copy.runExpError.replace('[error]', e.error));
|
|
577
|
+
} else {
|
|
578
|
+
onError(
|
|
579
|
+
copy.runExpIdError.replace('[expId]', experienceId)
|
|
580
|
+
);
|
|
581
|
+
}
|
|
578
582
|
}
|
|
579
583
|
});
|
|
580
584
|
}
|