@imposium-hub/components 2.2.44-4 → 2.2.44-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/Util.d.ts +1 -0
- package/dist/cjs/Util.js +8 -1
- package/dist/cjs/Util.js.map +1 -1
- package/dist/cjs/components/Tooltip.d.ts +2 -2
- package/dist/cjs/components/Tooltip.js +4 -7
- package/dist/cjs/components/Tooltip.js.map +1 -1
- package/dist/cjs/components/advanced-number-field/AdvancedNumberField.d.ts +1 -1
- package/dist/cjs/components/anchor-field/AnchorField.d.ts +1 -1
- package/dist/cjs/components/assets/AssetsTableDurationCell.js +1 -4
- package/dist/cjs/components/assets/AssetsTableDurationCell.js.map +1 -1
- package/dist/cjs/components/assets/AssetsTableTypeFilter.js +2 -2
- package/dist/cjs/components/assets/AssetsTableTypeFilter.js.map +1 -1
- package/dist/cjs/components/assets/AssetsUploadMenu.js.map +1 -1
- package/dist/cjs/components/button-group-field/ButtonGroupField.d.ts +1 -1
- package/dist/cjs/components/checkbox-field/CheckboxField.d.ts +1 -1
- package/dist/cjs/components/color-field/ColorField.d.ts +1 -1
- package/dist/cjs/components/context-menu/ContextMenu.js +8 -4
- package/dist/cjs/components/context-menu/ContextMenu.js.map +1 -1
- package/dist/cjs/components/copy-prop-id-button/CopyPropIdButton.d.ts +12 -0
- package/dist/cjs/components/copy-prop-id-button/CopyPropIdButton.js +75 -0
- package/dist/cjs/components/copy-prop-id-button/CopyPropIdButton.js.map +1 -0
- package/dist/cjs/components/header/Header.js +1 -1
- package/dist/cjs/components/header/Header.js.map +1 -1
- package/dist/cjs/components/list-field/ListField.d.ts +1 -1
- package/dist/cjs/components/number-field/NumberField.d.ts +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/select-field/SelectField.d.ts +1 -1
- package/dist/cjs/components/select-field/SelectField.js +4 -0
- package/dist/cjs/components/select-field/SelectField.js.map +1 -1
- package/dist/cjs/components/slider-field/SliderField.d.ts +1 -1
- package/dist/cjs/components/smpte-field/SMPTEField.d.ts +1 -1
- package/dist/cjs/components/text-area-field/TextAreaField.d.ts +1 -1
- package/dist/cjs/components/text-field/TextField.d.ts +1 -1
- package/dist/cjs/constants/copy.d.ts +1 -0
- package/dist/cjs/constants/copy.js +1 -0
- package/dist/cjs/constants/copy.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/redux/actions/asset-uploads.js +16 -19
- package/dist/cjs/redux/actions/asset-uploads.js.map +1 -1
- package/dist/esm/Util.d.ts +1 -0
- package/dist/esm/Util.js +6 -0
- package/dist/esm/Util.js.map +1 -1
- package/dist/esm/components/Tooltip.d.ts +2 -2
- package/dist/esm/components/Tooltip.js +4 -4
- package/dist/esm/components/Tooltip.js.map +1 -1
- package/dist/esm/components/advanced-number-field/AdvancedNumberField.d.ts +1 -1
- package/dist/esm/components/anchor-field/AnchorField.d.ts +1 -1
- package/dist/esm/components/assets/AssetsTableDurationCell.js +2 -5
- package/dist/esm/components/assets/AssetsTableDurationCell.js.map +1 -1
- package/dist/esm/components/assets/AssetsTableTypeFilter.js +2 -2
- package/dist/esm/components/assets/AssetsTableTypeFilter.js.map +1 -1
- package/dist/esm/components/assets/AssetsUploadMenu.js.map +1 -1
- package/dist/esm/components/button-group-field/ButtonGroupField.d.ts +1 -1
- package/dist/esm/components/checkbox-field/CheckboxField.d.ts +1 -1
- package/dist/esm/components/color-field/ColorField.d.ts +1 -1
- package/dist/esm/components/context-menu/ContextMenu.js +7 -3
- package/dist/esm/components/context-menu/ContextMenu.js.map +1 -1
- package/dist/esm/components/copy-prop-id-button/CopyPropIdButton.d.ts +12 -0
- package/dist/esm/components/copy-prop-id-button/CopyPropIdButton.js +24 -0
- package/dist/esm/components/copy-prop-id-button/CopyPropIdButton.js.map +1 -0
- package/dist/esm/components/header/Header.js +1 -1
- package/dist/esm/components/header/Header.js.map +1 -1
- package/dist/esm/components/list-field/ListField.d.ts +1 -1
- package/dist/esm/components/number-field/NumberField.d.ts +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/select-field/SelectField.d.ts +1 -1
- package/dist/esm/components/select-field/SelectField.js +3 -0
- package/dist/esm/components/select-field/SelectField.js.map +1 -1
- package/dist/esm/components/slider-field/SliderField.d.ts +1 -1
- package/dist/esm/components/smpte-field/SMPTEField.d.ts +1 -1
- package/dist/esm/components/text-area-field/TextAreaField.d.ts +1 -1
- package/dist/esm/components/text-field/TextField.d.ts +1 -1
- package/dist/esm/constants/copy.d.ts +1 -0
- package/dist/esm/constants/copy.js +1 -0
- package/dist/esm/constants/copy.js.map +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/redux/actions/asset-uploads.js +15 -18
- package/dist/esm/redux/actions/asset-uploads.js.map +1 -1
- package/dist/styles.css +21 -0
- package/dist/styles.less +25 -1
- package/less/components/button.less +7 -1
- package/less/components/publish-wizard.less +20 -0
- package/package.json +4 -4
- package/src/Util.ts +10 -0
- package/src/components/Tooltip.tsx +9 -9
- package/src/components/advanced-number-field/AdvancedNumberField.tsx +1 -1
- package/src/components/anchor-field/AnchorField.tsx +1 -1
- package/src/components/assets/AssetsTableDurationCell.tsx +2 -5
- package/src/components/assets/AssetsTableTypeFilter.tsx +7 -8
- package/src/components/assets/AssetsUploadMenu.tsx +1 -2
- package/src/components/button-group-field/ButtonGroupField.tsx +1 -1
- package/src/components/checkbox-field/CheckboxField.tsx +1 -1
- package/src/components/color-field/ColorField.tsx +1 -1
- package/src/components/context-menu/ContextMenu.tsx +16 -11
- package/src/components/copy-prop-id-button/CopyPropIdButton.tsx +44 -0
- package/src/components/header/Header.tsx +1 -1
- package/src/components/list-field/ListField.tsx +1 -1
- package/src/components/number-field/NumberField.tsx +1 -1
- package/src/components/publish-wizard/PublishWizard.tsx +15 -7
- package/src/components/publish-wizard/publish/EmailWorkflow.tsx +42 -10
- package/src/components/select-field/SelectField.tsx +4 -1
- package/src/components/slider-field/SliderField.tsx +1 -1
- package/src/components/smpte-field/SMPTEField.tsx +1 -1
- package/src/components/text-area-field/TextAreaField.tsx +1 -1
- package/src/components/text-field/TextField.tsx +1 -1
- package/src/constants/copy.ts +1 -0
- package/src/index.ts +3 -1
- package/src/redux/actions/asset-uploads.ts +16 -18
- /package/dist/cjs/components/dropdown/{dropdown.stories.d.ts → Dropdown.stories.d.ts} +0 -0
- /package/dist/cjs/components/dropdown/{dropdown.stories.js → Dropdown.stories.js} +0 -0
- /package/dist/cjs/components/dropdown/{dropdown.stories.js.map → Dropdown.stories.js.map} +0 -0
- /package/dist/esm/components/dropdown/{dropdown.stories.d.ts → Dropdown.stories.d.ts} +0 -0
- /package/dist/esm/components/dropdown/{dropdown.stories.js → Dropdown.stories.js} +0 -0
- /package/dist/esm/components/dropdown/{dropdown.stories.js.map → Dropdown.stories.js.map} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@imposium-hub/components",
|
|
3
|
-
"version": "2.2.44-
|
|
3
|
+
"version": "2.2.44-6",
|
|
4
4
|
"description": "React & Typescript component / asset library for Imposium front-ends",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
},
|
|
35
35
|
"homepage": "https://github.com/NickelMedia/Imposium-Hub-Components#readme",
|
|
36
36
|
"dependencies": {
|
|
37
|
+
"@imposium-hub/react-color": "^2.19.4",
|
|
37
38
|
"ansi_up": "^5.1.0",
|
|
38
39
|
"auth0-js": "^9.11.3",
|
|
39
40
|
"cogo-toast": "^4.2.3",
|
|
@@ -43,7 +44,6 @@
|
|
|
43
44
|
"js-cookie": "^2.2.1",
|
|
44
45
|
"lodash": "^4.17.21",
|
|
45
46
|
"moment": "^2.29.1",
|
|
46
|
-
"@imposium-hub/react-color": "^2.19.4",
|
|
47
47
|
"react-merge-refs": "^1.1.0",
|
|
48
48
|
"react-moveable": "^0.26.1",
|
|
49
49
|
"react-transition-group": "^4.4.5"
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"react-resize-detector": "^6.7.1",
|
|
69
69
|
"react-spinners": "^0.6.1",
|
|
70
70
|
"react-table": "^7.7.0",
|
|
71
|
-
"react-tooltip": "^
|
|
71
|
+
"react-tooltip": "^5.27.0",
|
|
72
72
|
"smpte-timecode": "^1.2.3"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
"react-resize-detector": "^6.7.1",
|
|
119
119
|
"react-spinners": "^0.6.1",
|
|
120
120
|
"react-table": "^7.7.0",
|
|
121
|
-
"react-tooltip": "^
|
|
121
|
+
"react-tooltip": "^5.27.1",
|
|
122
122
|
"run-sequence": "^2.2.1",
|
|
123
123
|
"sb": "^6.4.22",
|
|
124
124
|
"smpte-timecode": "^1.2.3",
|
package/src/Util.ts
CHANGED
|
@@ -347,6 +347,16 @@ export const formattedTime = (millis: number) => {
|
|
|
347
347
|
return `${minutes < 10 ? '0' : ''}${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
|
|
348
348
|
};
|
|
349
349
|
|
|
350
|
+
export const formatAudioDuration = (duration: number) => {
|
|
351
|
+
const hours: any = Math.floor(duration / 3600);
|
|
352
|
+
const minutes: any = Math.floor((duration % 3600) / 60);
|
|
353
|
+
const seconds: any = duration % 60;
|
|
354
|
+
|
|
355
|
+
return `${hours < 10 ? '0' : ''}${hours}:${minutes < 10 ? '0' : ''}${minutes}:${
|
|
356
|
+
seconds < 10 ? '0' : ''
|
|
357
|
+
}${seconds.toFixed(2)}`;
|
|
358
|
+
};
|
|
359
|
+
|
|
350
360
|
export const s3Url = (cloudFrontUrl: string, distro, origin): string => {
|
|
351
361
|
if (cloudFrontUrl) {
|
|
352
362
|
return cloudFrontUrl.replace(distro, origin);
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import * as ReactDOM from 'react-dom';
|
|
3
|
-
import ReactTooltip,
|
|
3
|
+
import { Tooltip as ReactTooltip, PlacesType } from 'react-tooltip';
|
|
4
4
|
|
|
5
5
|
export interface IToolTipConfig {
|
|
6
6
|
content: string;
|
|
7
|
-
position?:
|
|
7
|
+
position?: PlacesType;
|
|
8
8
|
theme?: string;
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -12,8 +12,8 @@ export const renderTooltipProps = (id: string, config: IToolTipConfig | string):
|
|
|
12
12
|
if (config) {
|
|
13
13
|
const content = typeof config === 'object' ? config.content : config;
|
|
14
14
|
return {
|
|
15
|
-
'data-
|
|
16
|
-
'data-
|
|
15
|
+
'data-tooltip-content': content,
|
|
16
|
+
'data-tooltip-id': id
|
|
17
17
|
};
|
|
18
18
|
} else {
|
|
19
19
|
return {};
|
|
@@ -25,7 +25,7 @@ export const renderTooltip = (id: string, config: IToolTipConfig | string): any
|
|
|
25
25
|
|
|
26
26
|
if (config && tooltipLayer) {
|
|
27
27
|
let theme = 'light';
|
|
28
|
-
let place:
|
|
28
|
+
let place: PlacesType = 'top';
|
|
29
29
|
|
|
30
30
|
if (typeof config === 'object') {
|
|
31
31
|
theme = config.theme ? config.theme : 'light';
|
|
@@ -34,12 +34,12 @@ export const renderTooltip = (id: string, config: IToolTipConfig | string): any
|
|
|
34
34
|
|
|
35
35
|
const tooltipComponent = (
|
|
36
36
|
<ReactTooltip
|
|
37
|
-
place={place}
|
|
38
|
-
offset={{ top: 0, right: 0, bottom: 0, left: 0 }}
|
|
37
|
+
data-tooltip-place={place}
|
|
38
|
+
data-tooltip-offset={{ top: 0, right: 0, bottom: 0, left: 0 }}
|
|
39
39
|
id={id}
|
|
40
40
|
className={`imposium-button-tooltip-${theme}`}
|
|
41
|
-
delayShow={
|
|
42
|
-
|
|
41
|
+
delayShow={500}
|
|
42
|
+
noArrow={true}
|
|
43
43
|
/>
|
|
44
44
|
);
|
|
45
45
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { ASSET_TYPES } from '../../constants/assets';
|
|
3
|
-
import { getDuration } from '../../Util';
|
|
3
|
+
import { formatAudioDuration, getDuration } from '../../Util';
|
|
4
4
|
|
|
5
5
|
interface IAssetsTableDurationCell {
|
|
6
6
|
cell: any;
|
|
@@ -30,10 +30,7 @@ const AssetsTableDurationCell: React.FC<IAssetsTableDurationCell> = (
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
if (type === ASSET_TYPES.AUDIO) {
|
|
33
|
-
|
|
34
|
-
date.setSeconds(original.duration);
|
|
35
|
-
const timestamp = date.toISOString().slice(11, 19);
|
|
36
|
-
duration = `${timestamp}.x`;
|
|
33
|
+
duration = formatAudioDuration(original.duration);
|
|
37
34
|
}
|
|
38
35
|
|
|
39
36
|
if (duration !== null && duration !== undefined) {
|
|
@@ -62,15 +62,14 @@ class AssetsTableTypeFilter extends React.PureComponent<
|
|
|
62
62
|
buttonRef={this.typeFilterRef}
|
|
63
63
|
onClick={() => this.setState({ openMenu: !openMenu })}>
|
|
64
64
|
<AssetsTypeIcon type={type || 'filter'} />
|
|
65
|
-
|
|
66
|
-
<ImposiumDropdown
|
|
67
|
-
show={openMenu}
|
|
68
|
-
position='bottomleft'
|
|
69
|
-
toggleRef={this.typeFilterRef}
|
|
70
|
-
onOutsideClick={() => this.setState({ openMenu: false })}>
|
|
71
|
-
{filterButtons}
|
|
72
|
-
</ImposiumDropdown>
|
|
73
65
|
</Button>
|
|
66
|
+
<ImposiumDropdown
|
|
67
|
+
show={openMenu}
|
|
68
|
+
position='bottomleft'
|
|
69
|
+
toggleRef={this.typeFilterRef}
|
|
70
|
+
onOutsideClick={() => this.setState({ openMenu: false })}>
|
|
71
|
+
{filterButtons}
|
|
72
|
+
</ImposiumDropdown>
|
|
74
73
|
</div>
|
|
75
74
|
);
|
|
76
75
|
};
|
|
@@ -98,7 +98,6 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps, IAsse
|
|
|
98
98
|
this.props.updateEditorConfig({
|
|
99
99
|
assetUploads: newState
|
|
100
100
|
});
|
|
101
|
-
|
|
102
101
|
this.props.updateUploadTags();
|
|
103
102
|
}
|
|
104
103
|
|
|
@@ -167,7 +166,6 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps, IAsse
|
|
|
167
166
|
|
|
168
167
|
let uploadsListInner;
|
|
169
168
|
const uploading = [];
|
|
170
|
-
|
|
171
169
|
if (uploads.length > 0) {
|
|
172
170
|
uploadsListInner = uploads.map((u: any) => {
|
|
173
171
|
const { filename, percent, tags } = u;
|
|
@@ -273,6 +271,7 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps, IAsse
|
|
|
273
271
|
const modifier = this.state.assetOver ? 'asset-over' : '';
|
|
274
272
|
const show = this.props.show ? 'show' : '';
|
|
275
273
|
const tableHover = this.props.tableHover ? 'table-hover' : '';
|
|
274
|
+
|
|
276
275
|
return (
|
|
277
276
|
<AssetsTableDropzone
|
|
278
277
|
className={`uploads-dropzone ${show} ${tableHover} ${modifier}`}
|
|
@@ -19,6 +19,8 @@ const ContextMenu = ({
|
|
|
19
19
|
}) => {
|
|
20
20
|
const contextMenuEl = useRef(null);
|
|
21
21
|
const [isVisible, setVisible] = useState(false);
|
|
22
|
+
const [top, setTop] = useState('');
|
|
23
|
+
const [left, setLeft] = useState('');
|
|
22
24
|
const [clientPosition, setClientPosition] = useState(null);
|
|
23
25
|
|
|
24
26
|
const showMenu = (e) => {
|
|
@@ -107,8 +109,8 @@ const ContextMenu = ({
|
|
|
107
109
|
if (windowInnerHeight < clientY + elemHeight) newClientY = clientY - elemHeight;
|
|
108
110
|
if (windowInnerWidth < clientX + elemWidth) newClientX = clientX - elemWidth;
|
|
109
111
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
+
setTop(`${newClientY + 2}px`);
|
|
113
|
+
setLeft(`${newClientX + 2}px`);
|
|
112
114
|
|
|
113
115
|
if (onShow) onShow();
|
|
114
116
|
}
|
|
@@ -118,15 +120,18 @@ const ContextMenu = ({
|
|
|
118
120
|
React.cloneElement(child, { id })
|
|
119
121
|
);
|
|
120
122
|
|
|
121
|
-
const ContextComponent = () =>
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
123
|
+
const ContextComponent = () => {
|
|
124
|
+
return (
|
|
125
|
+
<div
|
|
126
|
+
className={`contextmenu`}
|
|
127
|
+
ref={contextMenuEl}
|
|
128
|
+
style={{ top, left }}
|
|
129
|
+
onMouseLeave={handleMouseLeave}
|
|
130
|
+
{...attributes}>
|
|
131
|
+
{childrenWithProps}
|
|
132
|
+
</div>
|
|
133
|
+
);
|
|
134
|
+
};
|
|
130
135
|
|
|
131
136
|
const PortalContextComponent = () =>
|
|
132
137
|
ReactDOM.createPortal(<ContextComponent />, document.querySelector(appendTo));
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ICON_CLIPBOARD } from '../../constants/icons';
|
|
3
|
+
import Button from '../button/Button';
|
|
4
|
+
import { compositions as copy } from '../../constants/copy';
|
|
5
|
+
|
|
6
|
+
interface ICopyPropIdButtonProps {
|
|
7
|
+
copyPropId: string;
|
|
8
|
+
onNotification?(e): void;
|
|
9
|
+
onError?(e): void;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
class CopyPropIdButton extends React.PureComponent<ICopyPropIdButtonProps, undefined> {
|
|
13
|
+
private clickHandler = () => this.copyPropId();
|
|
14
|
+
|
|
15
|
+
private copyPropId() {
|
|
16
|
+
const { onNotification, onError, copyPropId } = this.props;
|
|
17
|
+
navigator.clipboard.writeText(copyPropId).then(
|
|
18
|
+
() => {
|
|
19
|
+
if (onNotification) {
|
|
20
|
+
onNotification(`Property ID copied to clipboard.`);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
() => {
|
|
24
|
+
if (onError) {
|
|
25
|
+
onError('Error copying property ID to clipboard.');
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public render() {
|
|
32
|
+
return (
|
|
33
|
+
<Button
|
|
34
|
+
tooltip={copy.tooltipPropId}
|
|
35
|
+
onClick={this.clickHandler}
|
|
36
|
+
size='small'
|
|
37
|
+
style='subtle'>
|
|
38
|
+
{ICON_CLIPBOARD}
|
|
39
|
+
</Button>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export default CopyPropIdButton;
|
|
@@ -557,7 +557,7 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
557
557
|
{storyToggle}
|
|
558
558
|
{accountDropdownToggle}
|
|
559
559
|
<a
|
|
560
|
-
href='https://
|
|
560
|
+
href='https://support.flashtalking.com/hc/en-us/sections/25515903148819-Imposium'
|
|
561
561
|
target='_blank'>
|
|
562
562
|
<div className='btn-help'>{ICON_HELP}</div>
|
|
563
563
|
</a>
|
|
@@ -66,6 +66,7 @@ interface IPublishWizardProps {
|
|
|
66
66
|
renderBatch: (batchId: string, postRenderActions?: any) => any;
|
|
67
67
|
publishData: any;
|
|
68
68
|
onDeleteBatch?: (batchId: string) => any;
|
|
69
|
+
onBackBtn?: () => void;
|
|
69
70
|
}
|
|
70
71
|
|
|
71
72
|
export interface ICredential {
|
|
@@ -349,13 +350,20 @@ class PublishWizard extends React.PureComponent<IPublishWizardProps, IPublishWiz
|
|
|
349
350
|
size={'large'}
|
|
350
351
|
key='btn-back'
|
|
351
352
|
onClick={() =>
|
|
352
|
-
this.setState(
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
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
|
+
)
|
|
359
367
|
}
|
|
360
368
|
color='primary'>
|
|
361
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[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' }}
|
|
@@ -7,7 +7,7 @@ import { copying } from '../../constants/copy';
|
|
|
7
7
|
|
|
8
8
|
interface ISelectFieldProps {
|
|
9
9
|
buttons?: any;
|
|
10
|
-
label?:
|
|
10
|
+
label?: any;
|
|
11
11
|
selectRef?: any;
|
|
12
12
|
options: any;
|
|
13
13
|
disable?: boolean;
|
|
@@ -61,6 +61,9 @@ class SelectField extends React.PureComponent<ISelectFieldProps> {
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
this.props.onChange(val);
|
|
64
|
+
if (this.props.selectRef?.current) {
|
|
65
|
+
this.props.selectRef.current.blur();
|
|
66
|
+
}
|
|
64
67
|
}
|
|
65
68
|
|
|
66
69
|
public render() {
|
package/src/constants/copy.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -156,6 +156,7 @@ import AssetsTableRateCell from './components/assets/AssetsTableRateCell';
|
|
|
156
156
|
import ContextMenu from './components/context-menu/ContextMenu';
|
|
157
157
|
import ContextMenuItem from './components/context-menu/ContextMenuItem';
|
|
158
158
|
import ContextMenuTrigger from './components/context-menu/ContextMenuTrigger';
|
|
159
|
+
import CopyPropIdButton from './components/copy-prop-id-button/CopyPropIdButton';
|
|
159
160
|
import Submenu from './components/context-menu/SubMenu';
|
|
160
161
|
|
|
161
162
|
export {
|
|
@@ -309,5 +310,6 @@ export {
|
|
|
309
310
|
ContextMenu,
|
|
310
311
|
ContextMenuItem,
|
|
311
312
|
ContextMenuTrigger,
|
|
312
|
-
Submenu
|
|
313
|
+
Submenu,
|
|
314
|
+
CopyPropIdButton
|
|
313
315
|
};
|
|
@@ -12,7 +12,7 @@ const assetUploadsActions: any = {
|
|
|
12
12
|
|
|
13
13
|
const POLL_INTERVAL: number = 5000;
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
let uploadFiles: File[] = [];
|
|
16
16
|
let setBindToOverlay;
|
|
17
17
|
|
|
18
18
|
export const uploadAssets = (
|
|
@@ -394,21 +394,23 @@ const pollAssetJobs = (api, ongoingJobs: any[], timeout: number): void => {
|
|
|
394
394
|
}, POLL_INTERVAL);
|
|
395
395
|
};
|
|
396
396
|
|
|
397
|
+
const removeUploadHander = (fileName: string, api: IImposiumAPI, dispatch): any => {
|
|
398
|
+
uploadFiles = uploadFiles.filter((f) => f.name !== fileName);
|
|
399
|
+
api.cancelUploadAssets(fileName);
|
|
400
|
+
dispatch({
|
|
401
|
+
type: assetUploadsActions.REMOVE_UPLOAD,
|
|
402
|
+
filename: fileName
|
|
403
|
+
});
|
|
404
|
+
};
|
|
405
|
+
|
|
397
406
|
export const cancelAssetUpload = (fileName: string, api: IImposiumAPI, assetId: string): any => {
|
|
398
407
|
return (dispatch) => {
|
|
399
|
-
uploadFiles.filter((f) => {
|
|
400
|
-
return f.name !== fileName;
|
|
401
|
-
});
|
|
402
|
-
api.cancelUploadAssets(fileName);
|
|
403
408
|
if (assetId) {
|
|
404
409
|
api.deleteAsset(assetId)
|
|
405
410
|
.then()
|
|
406
411
|
.catch((e) => console.error(e));
|
|
407
412
|
}
|
|
408
|
-
dispatch
|
|
409
|
-
type: assetUploadsActions.REMOVE_UPLOAD,
|
|
410
|
-
filename: fileName
|
|
411
|
-
});
|
|
413
|
+
removeUploadHander(fileName, api, dispatch);
|
|
412
414
|
};
|
|
413
415
|
};
|
|
414
416
|
|
|
@@ -418,15 +420,11 @@ export const cancelNonUploadedAssets = (api: IImposiumAPI): any => {
|
|
|
418
420
|
assetUploads: { uploads }
|
|
419
421
|
} = getStore();
|
|
420
422
|
|
|
421
|
-
if (
|
|
422
|
-
for (const file of
|
|
423
|
-
const
|
|
424
|
-
if (percent === 0) {
|
|
425
|
-
|
|
426
|
-
dispatch({
|
|
427
|
-
type: assetUploadsActions.REMOVE_UPLOAD,
|
|
428
|
-
filename: file.name
|
|
429
|
-
});
|
|
423
|
+
if (uploads.length > 0) {
|
|
424
|
+
for (const file of uploads) {
|
|
425
|
+
const upload = uploads.find((f) => f.filename === file.filename);
|
|
426
|
+
if (upload.percent === 0) {
|
|
427
|
+
removeUploadHander(file.filename, api, dispatch);
|
|
430
428
|
}
|
|
431
429
|
}
|
|
432
430
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|