@imposium-hub/components 2.4.0-4 → 2.4.0-5
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/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/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/AssetsTableTypeFilter.js +2 -2
- package/dist/cjs/components/assets/AssetsTableTypeFilter.js.map +1 -1
- package/dist/cjs/components/assets/AssetsUploadMenu.js +157 -34
- 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/color-field/ColorField.js +2 -2
- package/dist/cjs/components/color-field/ColorField.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/data-table/DataTable.js +2 -2
- package/dist/cjs/components/data-table/DataTable.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 +5 -1
- 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/story-previewer/StoryPreviewer.js +7 -2
- package/dist/cjs/components/story-previewer/StoryPreviewer.js.map +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 +2 -0
- package/dist/cjs/constants/copy.js +5 -3
- package/dist/cjs/constants/copy.js.map +1 -1
- package/dist/cjs/index.d.ts +4 -2
- package/dist/cjs/index.js +6 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/redux/actions/asset-uploads.d.ts +6 -11
- 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 +10 -24
- package/dist/cjs/redux/reducers/asset-uploads.js.map +1 -1
- package/dist/cjs/services/API.d.ts +2 -2
- package/dist/cjs/services/API.js +2 -1
- package/dist/cjs/services/API.js.map +1 -1
- package/dist/cjs/utils/assets.d.ts +1 -2
- package/dist/cjs/utils/assets.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/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/AssetsTableTypeFilter.js +2 -2
- package/dist/esm/components/assets/AssetsTableTypeFilter.js.map +1 -1
- package/dist/esm/components/assets/AssetsUploadMenu.js +138 -34
- 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/color-field/ColorField.js +2 -2
- package/dist/esm/components/color-field/ColorField.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/data-table/DataTable.js +2 -2
- package/dist/esm/components/data-table/DataTable.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 +5 -1
- 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/story-previewer/StoryPreviewer.js +7 -2
- package/dist/esm/components/story-previewer/StoryPreviewer.js.map +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 +2 -0
- package/dist/esm/constants/copy.js +5 -3
- package/dist/esm/constants/copy.js.map +1 -1
- package/dist/esm/index.d.ts +4 -2
- package/dist/esm/index.js +4 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/redux/actions/asset-uploads.d.ts +6 -11
- 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 +15 -47
- package/dist/esm/redux/reducers/asset-uploads.js.map +1 -1
- package/dist/esm/services/API.d.ts +2 -2
- package/dist/esm/services/API.js +2 -1
- package/dist/esm/services/API.js.map +1 -1
- package/dist/esm/utils/assets.d.ts +1 -2
- package/dist/esm/utils/assets.js.map +1 -1
- package/dist/styles.css +151 -2
- package/dist/styles.less +280 -74
- package/less/components/assets.less +237 -63
- package/less/components/button.less +7 -1
- 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 +6 -6
- 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/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/AssetsTableTypeFilter.tsx +7 -8
- package/src/components/assets/AssetsUploadMenu.tsx +271 -98
- 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 +3 -3
- package/src/components/copy-prop-id-button/CopyPropIdButton.tsx +44 -0
- package/src/components/data-table/DataTable.tsx +2 -2
- 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 +16 -9
- 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/story-previewer/StoryPreviewer.tsx +10 -6
- package/src/components/text-area-field/TextAreaField.tsx +1 -1
- package/src/components/text-field/TextField.tsx +1 -1
- package/src/constants/copy.ts +5 -3
- package/src/index.ts +6 -8
- package/src/redux/actions/asset-uploads.ts +307 -206
- package/src/redux/reducers/asset-uploads.ts +17 -47
- package/src/services/API.ts +7 -2
- package/src/utils/assets.ts +1 -2
|
@@ -28,12 +28,7 @@ interface IAssetFieldProps {
|
|
|
28
28
|
tooltip: string;
|
|
29
29
|
onChange: (asset: any) => any;
|
|
30
30
|
updateFilters: (filters: any) => any;
|
|
31
|
-
uploadAssets: (
|
|
32
|
-
api: any,
|
|
33
|
-
files: File[],
|
|
34
|
-
storyId?: string,
|
|
35
|
-
bindToOverlay?: (f: any) => any
|
|
36
|
-
) => any;
|
|
31
|
+
uploadAssets: (api: any, files: File[], bindToOverlay?: (f: any) => any) => any;
|
|
37
32
|
accepts?: string | string[];
|
|
38
33
|
labelPosition?: string;
|
|
39
34
|
onError?: (message: string) => void;
|
|
@@ -108,14 +103,14 @@ class AssetField extends React.PureComponent<IAssetFieldProps, IAssetFieldState>
|
|
|
108
103
|
}
|
|
109
104
|
|
|
110
105
|
private onFileDrop = (i: any, monitor: any): void => {
|
|
111
|
-
const { accepts,
|
|
106
|
+
const { accepts, api } = this.props;
|
|
112
107
|
if (monitor) {
|
|
113
108
|
const { files } = monitor.getItem();
|
|
114
109
|
|
|
115
110
|
if (mimetypeConformsToOverlay(accepts, files[0])) {
|
|
116
111
|
this.setState({ assetUploading: true });
|
|
117
112
|
|
|
118
|
-
this.props.uploadAssets(api, [files[0]],
|
|
113
|
+
this.props.uploadAssets(api, [files[0]], (f: any) => {
|
|
119
114
|
this.setState({ assetName: f.name, error: false }, () => {
|
|
120
115
|
this.setState({ assetUploading: false });
|
|
121
116
|
this.props.onChange(f);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ICON_GLOBE } from '../../constants/icons';
|
|
3
|
+
|
|
4
|
+
interface IAssetsTableGlobalCell {
|
|
5
|
+
cell: any; // React table cell wrapper
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const AssetsTableGlobalCell: React.FC<IAssetsTableGlobalCell> = (p: IAssetsTableGlobalCell) => {
|
|
9
|
+
return (
|
|
10
|
+
<div className='asset-global-cell'>{p.cell.row.original.story_id ? null : ICON_GLOBE}</div>
|
|
11
|
+
);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const AssetsTableGlobalCellMemoized = React.memo(AssetsTableGlobalCell);
|
|
15
|
+
export default AssetsTableGlobalCellMemoized;
|
|
@@ -6,6 +6,7 @@ import { connect } from 'react-redux';
|
|
|
6
6
|
import { bindActionCreators } from 'redux';
|
|
7
7
|
import { IImposiumAPI } from '../../services/API';
|
|
8
8
|
import { DeterminateLoader } from '../determinate-loader/DeterminateLoader';
|
|
9
|
+
import { assets as copy } from '../../constants/copy';
|
|
9
10
|
|
|
10
11
|
interface IAssetsTableNameCell {
|
|
11
12
|
cell: any;
|
|
@@ -52,7 +53,7 @@ const AssetsTableNameCell: React.FC<IAssetsTableNameCell> = (props: IAssetsTable
|
|
|
52
53
|
text={name}
|
|
53
54
|
/>
|
|
54
55
|
) : (
|
|
55
|
-
<span>
|
|
56
|
+
<span>{copy.uploads.preparePhase}</span>
|
|
56
57
|
);
|
|
57
58
|
return loader;
|
|
58
59
|
} else {
|
|
@@ -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
|
};
|
|
@@ -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,27 +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
|
-
editor: any;
|
|
33
|
-
toggleAutoTag: (toggle: boolean) => any;
|
|
34
|
-
toggleTagFileName: (toggle: boolean) => any;
|
|
35
|
-
toggleAssignToStory: (toggle: boolean) => any;
|
|
36
|
-
toggleTagDelimiter: (togglle: boolean) => any;
|
|
37
|
-
setDelimiter: (delimiter: string) => any;
|
|
38
|
-
toggleManualTagging: (togglle: boolean) => any;
|
|
39
|
-
addManualTag: (tag: string) => any;
|
|
40
|
-
deleteManualTag: (tag: string) => any;
|
|
41
|
-
deleteManualTags: () => void;
|
|
42
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;
|
|
43
40
|
}
|
|
44
41
|
|
|
45
|
-
|
|
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
|
+
|
|
46
51
|
constructor(props: IAssetsUploadMenuProps) {
|
|
47
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);
|
|
48
73
|
}
|
|
49
74
|
|
|
50
75
|
private handleCancelAssetUpload(fileName: string) {
|
|
@@ -52,82 +77,180 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps> {
|
|
|
52
77
|
this.props.cancelAssetUpload(fileName, api);
|
|
53
78
|
}
|
|
54
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
|
+
|
|
55
149
|
public render() {
|
|
56
150
|
const {
|
|
57
|
-
assetUploads: {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
151
|
+
assetUploads: { uploads },
|
|
152
|
+
editor: {
|
|
153
|
+
showUploadsMenu,
|
|
154
|
+
assetUploads: {
|
|
155
|
+
tagByDelimiter,
|
|
156
|
+
delimiter,
|
|
157
|
+
assignToStory,
|
|
158
|
+
tagByFileName,
|
|
159
|
+
tagManually,
|
|
160
|
+
manualTags
|
|
161
|
+
}
|
|
65
162
|
},
|
|
66
|
-
assetTags
|
|
67
|
-
editor: { fromCrM }
|
|
163
|
+
assetTags
|
|
68
164
|
} = this.props;
|
|
165
|
+
const disable = uploads.length > 0 ? false : true;
|
|
166
|
+
|
|
69
167
|
let uploadsListInner;
|
|
168
|
+
const uploading = [];
|
|
70
169
|
if (uploads.length > 0) {
|
|
71
170
|
uploadsListInner = uploads.map((u: any) => {
|
|
72
|
-
const { filename, percent } = u;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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>
|
|
78
182
|
);
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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>
|
|
96
204
|
</div>
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
205
|
+
);
|
|
206
|
+
} else {
|
|
207
|
+
uploading.push(true);
|
|
208
|
+
}
|
|
100
209
|
});
|
|
101
210
|
} else {
|
|
102
211
|
uploadsListInner = <div className='no-ongoing-uploads'>{copy.uploads.noUploads}</div>;
|
|
103
212
|
}
|
|
104
213
|
|
|
214
|
+
if (uploading.length === uploads.length) {
|
|
215
|
+
uploadsListInner = <div className='no-ongoing-uploads'>{copy.uploads.noUploads}</div>;
|
|
216
|
+
}
|
|
217
|
+
|
|
105
218
|
const delimiterSelector = tagByDelimiter && (
|
|
106
219
|
<SelectField
|
|
107
220
|
width='35%'
|
|
108
221
|
options={DELIMITER_OPTIONS}
|
|
109
222
|
value={delimiter}
|
|
110
|
-
onChange={(c) =>
|
|
223
|
+
onChange={(c) => {
|
|
224
|
+
this.uploadsSetting({ delimiter: c });
|
|
225
|
+
}}
|
|
111
226
|
/>
|
|
112
227
|
);
|
|
228
|
+
|
|
113
229
|
const tagsArray = [...new Set(manualTags)];
|
|
230
|
+
|
|
114
231
|
const tagsMarkup = tagsArray.map((tag: string) => (
|
|
115
232
|
<Tag
|
|
116
233
|
key={tag}
|
|
117
234
|
copy={tag}
|
|
118
235
|
colorize={AssetsTableTagsPivot.COLORIZE_TAGS}
|
|
119
|
-
removeHandler={() =>
|
|
236
|
+
removeHandler={() => {
|
|
237
|
+
this.deleteManualTag(tag);
|
|
238
|
+
}}
|
|
120
239
|
/>
|
|
121
240
|
));
|
|
241
|
+
|
|
122
242
|
const removeTagsBtn =
|
|
123
243
|
tagsArray.length > 0 ? (
|
|
124
244
|
<Button
|
|
125
245
|
tooltip='Remove All Tags'
|
|
126
246
|
style='sublte'
|
|
127
|
-
onClick={() =>
|
|
247
|
+
onClick={() => {
|
|
248
|
+
this.uploadsSetting({ manualTags: [] });
|
|
249
|
+
}}>
|
|
128
250
|
<FontAwesomeIcon icon={faEraser} />
|
|
129
251
|
</Button>
|
|
130
252
|
) : null;
|
|
253
|
+
|
|
131
254
|
const tagsColumn = tagManually && (
|
|
132
255
|
<div className='tags-column'>
|
|
133
256
|
<TextField
|
|
@@ -136,48 +259,103 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps> {
|
|
|
136
259
|
suggestions={assetTags}
|
|
137
260
|
label={copy.tags.add}
|
|
138
261
|
width={AssetsTableTagsPivot.ADD_TAG_INPUT_WIDTH}
|
|
139
|
-
doSubmit={(t) =>
|
|
262
|
+
doSubmit={(t) => {
|
|
263
|
+
this.addManualTag(t);
|
|
264
|
+
}}
|
|
140
265
|
/>
|
|
141
266
|
{tagsMarkup}
|
|
142
267
|
{removeTagsBtn}
|
|
143
268
|
</div>
|
|
144
269
|
);
|
|
145
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
|
+
|
|
146
276
|
return (
|
|
147
|
-
<
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
<
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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>
|
|
287
|
+
</div>
|
|
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
|
+
/>
|
|
169
314
|
<CheckboxField
|
|
170
315
|
width='50%'
|
|
171
316
|
label={copy.uploads.assignToProjectInput}
|
|
172
317
|
info={copy.uploads.assignToProjectInfo}
|
|
173
|
-
value={assignToStory}
|
|
174
|
-
onChange={() => this.
|
|
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
|
+
}
|
|
175
333
|
/>
|
|
176
|
-
|
|
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>
|
|
177
357
|
</div>
|
|
178
|
-
|
|
179
|
-
<div className='uploads-list'>{uploadsListInner}</div>
|
|
180
|
-
</div>
|
|
358
|
+
</AssetsTableDropzone>
|
|
181
359
|
);
|
|
182
360
|
}
|
|
183
361
|
}
|
|
@@ -185,15 +363,10 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps> {
|
|
|
185
363
|
const mapDispatchToProps = (dispatch): any => {
|
|
186
364
|
return bindActionCreators(
|
|
187
365
|
{
|
|
188
|
-
toggleAssignToStory,
|
|
189
|
-
toggleTagFileName,
|
|
190
366
|
cancelAssetUpload,
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
addManualTag,
|
|
195
|
-
deleteManualTag,
|
|
196
|
-
deleteManualTags
|
|
367
|
+
cancelNonUploadedAssets,
|
|
368
|
+
uploadingAsset,
|
|
369
|
+
updateUploadTags
|
|
197
370
|
},
|
|
198
371
|
dispatch
|
|
199
372
|
);
|
|
@@ -202,8 +375,8 @@ const mapDispatchToProps = (dispatch): any => {
|
|
|
202
375
|
const mapStateToProps = (state): any => {
|
|
203
376
|
return {
|
|
204
377
|
assetUploads: state.assetUploads,
|
|
205
|
-
|
|
206
|
-
|
|
378
|
+
assetTags: state.assetTags,
|
|
379
|
+
editor: state.editor
|
|
207
380
|
};
|
|
208
381
|
};
|
|
209
382
|
|
|
@@ -1,11 +1,11 @@
|
|
|
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;
|
|
8
|
-
label?:
|
|
8
|
+
label?: any;
|
|
9
9
|
placeholder?: string;
|
|
10
10
|
readOnly?: boolean;
|
|
11
11
|
value: string;
|
|
@@ -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);
|
|
@@ -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;
|