@imposium-hub/components 2.4.0-4 → 2.4.0-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/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 +159 -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 +278 -100
- 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,181 @@ 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
|
+
fromCrM,
|
|
154
|
+
showUploadsMenu,
|
|
155
|
+
assetUploads: {
|
|
156
|
+
tagByDelimiter,
|
|
157
|
+
delimiter,
|
|
158
|
+
assignToStory,
|
|
159
|
+
tagByFileName,
|
|
160
|
+
tagManually,
|
|
161
|
+
manualTags
|
|
162
|
+
}
|
|
65
163
|
},
|
|
66
|
-
assetTags
|
|
67
|
-
editor: { fromCrM }
|
|
164
|
+
assetTags
|
|
68
165
|
} = this.props;
|
|
166
|
+
const disable = uploads.length > 0 ? false : true;
|
|
167
|
+
|
|
69
168
|
let uploadsListInner;
|
|
169
|
+
const uploading = [];
|
|
70
170
|
if (uploads.length > 0) {
|
|
71
171
|
uploadsListInner = uploads.map((u: any) => {
|
|
72
|
-
const { filename, percent } = u;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
172
|
+
const { filename, percent, tags } = u;
|
|
173
|
+
|
|
174
|
+
if (percent === 0) {
|
|
175
|
+
const closeButton = (
|
|
176
|
+
<Button
|
|
177
|
+
key='btn-cancel'
|
|
178
|
+
onClick={() => this.handleCancelAssetUpload(filename)}
|
|
179
|
+
style='subtle'
|
|
180
|
+
size='small'>
|
|
181
|
+
{ICON_TIMES}
|
|
182
|
+
</Button>
|
|
78
183
|
);
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
184
|
+
|
|
185
|
+
const fileTags = tags.map((tag: string) => (
|
|
186
|
+
<Tag
|
|
187
|
+
key={tag}
|
|
188
|
+
copy={tag}
|
|
189
|
+
colorize={AssetsTableTagsPivot.COLORIZE_TAGS}
|
|
190
|
+
/>
|
|
191
|
+
));
|
|
192
|
+
return (
|
|
193
|
+
<div
|
|
194
|
+
className='ongoing-upload'
|
|
195
|
+
key={filename}>
|
|
196
|
+
<div className='ongoing-upload-inner'>
|
|
197
|
+
<input
|
|
198
|
+
className='upload-filename'
|
|
199
|
+
value={filename}
|
|
200
|
+
readOnly
|
|
201
|
+
/>
|
|
202
|
+
<div className='tags-column'>{fileTags}</div>
|
|
203
|
+
{closeButton}
|
|
204
|
+
</div>
|
|
96
205
|
</div>
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
206
|
+
);
|
|
207
|
+
} else {
|
|
208
|
+
uploading.push(true);
|
|
209
|
+
}
|
|
100
210
|
});
|
|
101
211
|
} else {
|
|
102
212
|
uploadsListInner = <div className='no-ongoing-uploads'>{copy.uploads.noUploads}</div>;
|
|
103
213
|
}
|
|
104
214
|
|
|
215
|
+
if (uploading.length === uploads.length) {
|
|
216
|
+
uploadsListInner = <div className='no-ongoing-uploads'>{copy.uploads.noUploads}</div>;
|
|
217
|
+
}
|
|
218
|
+
|
|
105
219
|
const delimiterSelector = tagByDelimiter && (
|
|
106
220
|
<SelectField
|
|
107
221
|
width='35%'
|
|
108
222
|
options={DELIMITER_OPTIONS}
|
|
109
223
|
value={delimiter}
|
|
110
|
-
onChange={(c) =>
|
|
224
|
+
onChange={(c) => {
|
|
225
|
+
this.uploadsSetting({ delimiter: c });
|
|
226
|
+
}}
|
|
111
227
|
/>
|
|
112
228
|
);
|
|
229
|
+
|
|
113
230
|
const tagsArray = [...new Set(manualTags)];
|
|
231
|
+
|
|
114
232
|
const tagsMarkup = tagsArray.map((tag: string) => (
|
|
115
233
|
<Tag
|
|
116
234
|
key={tag}
|
|
117
235
|
copy={tag}
|
|
118
236
|
colorize={AssetsTableTagsPivot.COLORIZE_TAGS}
|
|
119
|
-
removeHandler={() =>
|
|
237
|
+
removeHandler={() => {
|
|
238
|
+
this.deleteManualTag(tag);
|
|
239
|
+
}}
|
|
120
240
|
/>
|
|
121
241
|
));
|
|
242
|
+
|
|
122
243
|
const removeTagsBtn =
|
|
123
244
|
tagsArray.length > 0 ? (
|
|
124
245
|
<Button
|
|
125
246
|
tooltip='Remove All Tags'
|
|
126
247
|
style='sublte'
|
|
127
|
-
onClick={() =>
|
|
248
|
+
onClick={() => {
|
|
249
|
+
this.uploadsSetting({ manualTags: [] });
|
|
250
|
+
}}>
|
|
128
251
|
<FontAwesomeIcon icon={faEraser} />
|
|
129
252
|
</Button>
|
|
130
253
|
) : null;
|
|
254
|
+
|
|
131
255
|
const tagsColumn = tagManually && (
|
|
132
256
|
<div className='tags-column'>
|
|
133
257
|
<TextField
|
|
@@ -136,48 +260,107 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps> {
|
|
|
136
260
|
suggestions={assetTags}
|
|
137
261
|
label={copy.tags.add}
|
|
138
262
|
width={AssetsTableTagsPivot.ADD_TAG_INPUT_WIDTH}
|
|
139
|
-
doSubmit={(t) =>
|
|
263
|
+
doSubmit={(t) => {
|
|
264
|
+
this.addManualTag(t);
|
|
265
|
+
}}
|
|
140
266
|
/>
|
|
141
267
|
{tagsMarkup}
|
|
142
268
|
{removeTagsBtn}
|
|
143
269
|
</div>
|
|
144
270
|
);
|
|
145
271
|
|
|
272
|
+
const modifier = this.state.assetOver ? 'asset-over' : '';
|
|
273
|
+
const show = this.props.show ? 'show' : '';
|
|
274
|
+
const tableHover = this.props.tableHover ? 'table-hover' : '';
|
|
275
|
+
const width = document.getElementsByClassName('assetUploads')[0]?.clientWidth;
|
|
276
|
+
|
|
146
277
|
return (
|
|
147
|
-
<
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
<
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
278
|
+
<AssetsTableDropzone
|
|
279
|
+
className={`uploads-dropzone ${show} ${tableHover} ${modifier}`}
|
|
280
|
+
onDrop={(i, m) => {
|
|
281
|
+
this.props.onDrop(i, m);
|
|
282
|
+
}}
|
|
283
|
+
onExternalCollect={(o) => this.checkHover(o)}>
|
|
284
|
+
<div className='overlay'>
|
|
285
|
+
<p style={{ display: this.state.assetOver ? 'block' : 'none' }}>
|
|
286
|
+
{copy.dropAsset}
|
|
287
|
+
</p>
|
|
288
|
+
</div>
|
|
289
|
+
<div
|
|
290
|
+
className='uploads-menu'
|
|
291
|
+
style={{ width }}
|
|
292
|
+
ref={this.menuRef}>
|
|
293
|
+
<div className='uploads-controls'>
|
|
294
|
+
<CheckboxField
|
|
295
|
+
width='50%'
|
|
296
|
+
label={copy.uploads.autoTagDelimiter}
|
|
297
|
+
value={tagByDelimiter}
|
|
298
|
+
onChange={() =>
|
|
299
|
+
this.uploadsSetting({ tagByDelimiter: !tagByDelimiter })
|
|
300
|
+
}
|
|
301
|
+
/>
|
|
302
|
+
{delimiterSelector}
|
|
169
303
|
<CheckboxField
|
|
170
304
|
width='50%'
|
|
171
|
-
label={copy.uploads.
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
onChange={() => this.props.toggleAssignToStory(!assignToStory)}
|
|
305
|
+
label={copy.uploads.manualTagging}
|
|
306
|
+
value={tagManually}
|
|
307
|
+
onChange={() => this.uploadsSetting({ tagManually: !tagManually })}
|
|
175
308
|
/>
|
|
176
|
-
|
|
309
|
+
<CheckboxField
|
|
310
|
+
width='50%'
|
|
311
|
+
label={copy.uploads.autoTagFilname}
|
|
312
|
+
value={tagByFileName}
|
|
313
|
+
onChange={() => this.uploadsSetting({ tagByFileName: !tagByFileName })}
|
|
314
|
+
/>
|
|
315
|
+
{!fromCrM && (
|
|
316
|
+
<CheckboxField
|
|
317
|
+
width='50%'
|
|
318
|
+
label={copy.uploads.assignToProjectInput}
|
|
319
|
+
info={copy.uploads.assignToProjectInfo}
|
|
320
|
+
value={!assignToStory}
|
|
321
|
+
onChange={() =>
|
|
322
|
+
this.uploadsSetting({ assignToStory: !assignToStory })
|
|
323
|
+
}
|
|
324
|
+
/>
|
|
325
|
+
)}
|
|
326
|
+
</div>
|
|
327
|
+
{tagsColumn}
|
|
328
|
+
<div className='uploads-list'>{uploadsListInner}</div>
|
|
329
|
+
<div className='uploads-confirm'>
|
|
330
|
+
<CheckboxField
|
|
331
|
+
label={`Don't show again`}
|
|
332
|
+
value={!showUploadsMenu}
|
|
333
|
+
onChange={() =>
|
|
334
|
+
this.props.updateEditorConfig({
|
|
335
|
+
showUploadsMenu: !showUploadsMenu
|
|
336
|
+
})
|
|
337
|
+
}
|
|
338
|
+
/>
|
|
339
|
+
<Button
|
|
340
|
+
key='cancel-upload'
|
|
341
|
+
onClick={() => this.cancelUploadHandler(disable)}
|
|
342
|
+
customStyles={{
|
|
343
|
+
color: 'black'
|
|
344
|
+
}}
|
|
345
|
+
style='bold'
|
|
346
|
+
color='secondary'
|
|
347
|
+
width='60px'
|
|
348
|
+
size='small'>
|
|
349
|
+
Cancel
|
|
350
|
+
</Button>
|
|
351
|
+
<Button
|
|
352
|
+
key='upload-file'
|
|
353
|
+
disabled={disable}
|
|
354
|
+
onClick={() => this.uploadFileHandler()}
|
|
355
|
+
style='bold'
|
|
356
|
+
color='primary'
|
|
357
|
+
width='80px'
|
|
358
|
+
size='small'>
|
|
359
|
+
Upload {ICON_UPLOAD}
|
|
360
|
+
</Button>
|
|
361
|
+
</div>
|
|
177
362
|
</div>
|
|
178
|
-
|
|
179
|
-
<div className='uploads-list'>{uploadsListInner}</div>
|
|
180
|
-
</div>
|
|
363
|
+
</AssetsTableDropzone>
|
|
181
364
|
);
|
|
182
365
|
}
|
|
183
366
|
}
|
|
@@ -185,15 +368,10 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps> {
|
|
|
185
368
|
const mapDispatchToProps = (dispatch): any => {
|
|
186
369
|
return bindActionCreators(
|
|
187
370
|
{
|
|
188
|
-
toggleAssignToStory,
|
|
189
|
-
toggleTagFileName,
|
|
190
371
|
cancelAssetUpload,
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
addManualTag,
|
|
195
|
-
deleteManualTag,
|
|
196
|
-
deleteManualTags
|
|
372
|
+
cancelNonUploadedAssets,
|
|
373
|
+
uploadingAsset,
|
|
374
|
+
updateUploadTags
|
|
197
375
|
},
|
|
198
376
|
dispatch
|
|
199
377
|
);
|
|
@@ -202,8 +380,8 @@ const mapDispatchToProps = (dispatch): any => {
|
|
|
202
380
|
const mapStateToProps = (state): any => {
|
|
203
381
|
return {
|
|
204
382
|
assetUploads: state.assetUploads,
|
|
205
|
-
|
|
206
|
-
|
|
383
|
+
assetTags: state.assetTags,
|
|
384
|
+
editor: state.editor
|
|
207
385
|
};
|
|
208
386
|
};
|
|
209
387
|
|
|
@@ -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;
|