@imposium-hub/components 2.2.16 → 2.2.17
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/AssetsTableTagsPivot.js +13 -12
- package/dist/cjs/components/assets/AssetsTableTagsPivot.js.map +1 -1
- package/dist/cjs/components/assets/AssetsUploadMenu.js +86 -28
- package/dist/cjs/components/assets/AssetsUploadMenu.js.map +1 -1
- package/dist/cjs/components/button/Button.stories.d.ts +0 -1
- package/dist/cjs/components/button-group-field/ButtonGroupField.stories.d.ts +0 -1
- package/dist/cjs/components/button-menu/ButtonMenu.stories.d.ts +0 -1
- package/dist/cjs/components/card/Card.stories.d.ts +0 -1
- package/dist/cjs/components/checkbox-field/CheckboxField.stories.d.ts +0 -1
- package/dist/cjs/components/color-field/ColorFiled.stories.d.ts +0 -1
- package/dist/cjs/components/controlled-list/ControlledList.stories.d.ts +0 -1
- package/dist/cjs/components/field-wrapper/FieldWrapper.stories.d.ts +0 -1
- package/dist/cjs/components/font-picker/font-manager/FontManager.js +2 -2
- package/dist/cjs/components/font-picker/font-manager/FontManager.js.map +1 -1
- package/dist/cjs/components/font-picker/font-manager/constants.d.ts +1 -1
- package/dist/cjs/components/h-rule/HRule.d.ts +0 -1
- package/dist/cjs/components/h-rule/HRule.stories.d.ts +0 -1
- package/dist/cjs/components/header/Header.js +9 -9
- package/dist/cjs/components/list-field/ListField.stories.d.ts +0 -1
- package/dist/cjs/components/modal/Modal.stories.d.ts +0 -1
- package/dist/cjs/components/number-field/NumberField.stories.d.ts +0 -1
- package/dist/cjs/components/publish-wizard/PublishWizard.js +2 -2
- package/dist/cjs/components/publish-wizard/PublishWizard.js.map +1 -1
- package/dist/cjs/components/section/Section.d.ts +0 -1
- package/dist/cjs/components/section/Section.stories.d.ts +0 -1
- package/dist/cjs/components/select-field/SelectField.stories.d.ts +0 -1
- package/dist/cjs/components/slider-field/SliderField.stories.d.ts +0 -1
- package/dist/cjs/components/story-previewer/StoryPreviewer.js +2 -2
- package/dist/cjs/components/story-previewer/StoryPreviewer.js.map +1 -1
- package/dist/cjs/components/tabs/Tabs.stories.d.ts +1 -3
- package/dist/cjs/components/tag/Tag.js.map +1 -1
- package/dist/cjs/components/text-area-field/TextAreaField.stories.d.ts +0 -1
- package/dist/cjs/components/text-field/TextField.stories.d.ts +0 -1
- package/dist/cjs/constants/assets.d.ts +4 -0
- package/dist/cjs/constants/assets.js +15 -1
- package/dist/cjs/constants/assets.js.map +1 -1
- package/dist/cjs/constants/copy.d.ts +4 -1
- package/dist/cjs/constants/copy.js +4 -1
- package/dist/cjs/constants/copy.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/redux/actions/active-batch.d.ts +1 -1
- package/dist/cjs/redux/actions/asset-uploads.d.ts +7 -1
- package/dist/cjs/redux/actions/asset-uploads.js +77 -8
- package/dist/cjs/redux/actions/asset-uploads.js.map +1 -1
- package/dist/cjs/redux/actions/publish.d.ts +2 -2
- package/dist/cjs/redux/reducers/asset-uploads.js +21 -3
- package/dist/cjs/redux/reducers/asset-uploads.js.map +1 -1
- package/dist/cjs/services/Storage.d.ts +1 -1
- package/dist/esm/components/assets/AssetsTableTagsPivot.js +2 -2
- package/dist/esm/components/assets/AssetsTableTagsPivot.js.map +1 -1
- package/dist/esm/components/assets/AssetsUploadMenu.js +40 -7
- package/dist/esm/components/assets/AssetsUploadMenu.js.map +1 -1
- package/dist/esm/components/button/Button.stories.d.ts +0 -1
- package/dist/esm/components/button-group-field/ButtonGroupField.stories.d.ts +0 -1
- package/dist/esm/components/button-menu/ButtonMenu.stories.d.ts +0 -1
- package/dist/esm/components/card/Card.stories.d.ts +0 -1
- package/dist/esm/components/checkbox-field/CheckboxField.stories.d.ts +0 -1
- package/dist/esm/components/color-field/ColorFiled.stories.d.ts +0 -1
- package/dist/esm/components/controlled-list/ControlledList.stories.d.ts +0 -1
- package/dist/esm/components/field-wrapper/FieldWrapper.stories.d.ts +0 -1
- package/dist/esm/components/font-picker/font-manager/constants.d.ts +1 -1
- package/dist/esm/components/h-rule/HRule.d.ts +0 -1
- package/dist/esm/components/h-rule/HRule.stories.d.ts +0 -1
- package/dist/esm/components/header/Header.js +9 -9
- package/dist/esm/components/list-field/ListField.stories.d.ts +0 -1
- package/dist/esm/components/modal/Modal.stories.d.ts +0 -1
- package/dist/esm/components/number-field/NumberField.stories.d.ts +0 -1
- package/dist/esm/components/section/Section.d.ts +0 -1
- package/dist/esm/components/section/Section.stories.d.ts +0 -1
- package/dist/esm/components/select-field/SelectField.stories.d.ts +0 -1
- package/dist/esm/components/slider-field/SliderField.stories.d.ts +0 -1
- package/dist/esm/components/tabs/Tabs.stories.d.ts +1 -3
- package/dist/esm/components/tag/Tag.js.map +1 -1
- package/dist/esm/components/text-area-field/TextAreaField.stories.d.ts +0 -1
- package/dist/esm/components/text-field/TextField.stories.d.ts +0 -1
- package/dist/esm/constants/assets.d.ts +4 -0
- package/dist/esm/constants/assets.js +14 -0
- package/dist/esm/constants/assets.js.map +1 -1
- package/dist/esm/constants/copy.d.ts +4 -1
- package/dist/esm/constants/copy.js +4 -1
- package/dist/esm/constants/copy.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/redux/actions/active-batch.d.ts +1 -1
- package/dist/esm/redux/actions/asset-uploads.d.ts +7 -1
- package/dist/esm/redux/actions/asset-uploads.js +44 -6
- package/dist/esm/redux/actions/asset-uploads.js.map +1 -1
- package/dist/esm/redux/reducers/asset-uploads.js +39 -3
- package/dist/esm/redux/reducers/asset-uploads.js.map +1 -1
- package/dist/styles.css +2 -2
- package/dist/styles.less +2 -2
- package/less/components/assets.less +1 -1
- package/less/components/shortcut-menu.less +1 -1
- package/package.json +1 -1
- package/src/components/assets/AssetsTableTagsPivot.tsx +3 -3
- package/src/components/assets/AssetsUploadMenu.tsx +114 -14
- package/src/components/header/Header.tsx +9 -9
- package/src/components/tag/Tag.tsx +1 -1
- package/src/constants/assets.ts +15 -0
- package/src/constants/copy.ts +4 -1
- package/src/index.ts +2 -2
- package/src/redux/actions/asset-uploads.ts +63 -6
- package/src/redux/reducers/asset-uploads.ts +39 -3
|
@@ -1,15 +1,51 @@
|
|
|
1
1
|
import assetUploadsActions from '../actions/asset-uploads';
|
|
2
2
|
const initialState = {
|
|
3
|
-
|
|
3
|
+
tagByDelimiter: true,
|
|
4
|
+
delimiter: '_',
|
|
5
|
+
tagManually: false,
|
|
6
|
+
manualTags: [],
|
|
7
|
+
tagByFileName: false,
|
|
4
8
|
assignToStory: true,
|
|
5
9
|
uploads: []
|
|
6
10
|
};
|
|
7
11
|
const assetUploads = (state = initialState, action) => {
|
|
8
12
|
switch (action.type) {
|
|
9
|
-
case assetUploadsActions.
|
|
13
|
+
case assetUploadsActions.TOGGLE_TAG_BY_FILENAME:
|
|
10
14
|
return {
|
|
11
15
|
...state,
|
|
12
|
-
|
|
16
|
+
tagByFileName: action.toggle
|
|
17
|
+
};
|
|
18
|
+
case assetUploadsActions.TOGGLE_TAG_BY_DELIMITER:
|
|
19
|
+
return {
|
|
20
|
+
...state,
|
|
21
|
+
tagByDelimiter: action.toggle
|
|
22
|
+
};
|
|
23
|
+
case assetUploadsActions.SET_DELIMITER:
|
|
24
|
+
return {
|
|
25
|
+
...state,
|
|
26
|
+
delimiter: action.delimiter
|
|
27
|
+
};
|
|
28
|
+
case assetUploadsActions.TOGGLE_MANUAL_TAGGING:
|
|
29
|
+
return {
|
|
30
|
+
...state,
|
|
31
|
+
tagManually: action.toggle
|
|
32
|
+
};
|
|
33
|
+
case assetUploadsActions.ADD_MANUAL_TAG:
|
|
34
|
+
const newManualTags = [...state.manualTags];
|
|
35
|
+
newManualTags.push(action.tag);
|
|
36
|
+
return {
|
|
37
|
+
...state,
|
|
38
|
+
manualTags: newManualTags
|
|
39
|
+
};
|
|
40
|
+
case assetUploadsActions.DELETE_MANUAL_TAG:
|
|
41
|
+
return {
|
|
42
|
+
...state,
|
|
43
|
+
manualTags: state.manualTags.filter((t) => t !== action.tag)
|
|
44
|
+
};
|
|
45
|
+
case assetUploadsActions.DELETE_MANUAL_TAGS:
|
|
46
|
+
return {
|
|
47
|
+
...state,
|
|
48
|
+
manualTags: []
|
|
13
49
|
};
|
|
14
50
|
case assetUploadsActions.TOGGLE_ASSIGN_TO_STORY:
|
|
15
51
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-uploads.js","sourceRoot":"","sources":["../../../../src/redux/reducers/asset-uploads.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAE3D,MAAM,YAAY,GAAQ;IACtB,
|
|
1
|
+
{"version":3,"file":"asset-uploads.js","sourceRoot":"","sources":["../../../../src/redux/reducers/asset-uploads.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAE3D,MAAM,YAAY,GAAQ;IACtB,cAAc,EAAE,IAAI;IACpB,SAAS,EAAE,GAAG;IACd,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,EAAE;IACd,aAAa,EAAE,KAAK;IACpB,aAAa,EAAE,IAAI;IACnB,OAAO,EAAE,EAAE;CACd,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAK,GAAG,YAAY,EAAE,MAAM,EAAO,EAAE;IACvD,QAAQ,MAAM,CAAC,IAAI,EAAE;QACjB,KAAK,mBAAmB,CAAC,sBAAsB;YAC3C,OAAO;gBACH,GAAG,KAAK;gBACR,aAAa,EAAE,MAAM,CAAC,MAAM;aAC/B,CAAC;QACN,KAAK,mBAAmB,CAAC,uBAAuB;YAC5C,OAAO;gBACH,GAAG,KAAK;gBACR,cAAc,EAAE,MAAM,CAAC,MAAM;aAChC,CAAC;QACN,KAAK,mBAAmB,CAAC,aAAa;YAClC,OAAO;gBACH,GAAG,KAAK;gBACR,SAAS,EAAE,MAAM,CAAC,SAAS;aAC9B,CAAC;QACN,KAAK,mBAAmB,CAAC,qBAAqB;YAC1C,OAAO;gBACH,GAAG,KAAK;gBACR,WAAW,EAAE,MAAM,CAAC,MAAM;aAC7B,CAAC;QACN,KAAK,mBAAmB,CAAC,cAAc;YACnC,MAAM,aAAa,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;YAC5C,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/B,OAAO;gBACH,GAAG,KAAK;gBACR,UAAU,EAAE,aAAa;aAC5B,CAAC;QACN,KAAK,mBAAmB,CAAC,iBAAiB;YACtC,OAAO;gBACH,GAAG,KAAK;gBACR,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC;aACvE,CAAC;QACN,KAAK,mBAAmB,CAAC,kBAAkB;YACvC,OAAO;gBACH,GAAG,KAAK;gBACR,UAAU,EAAE,EAAE;aACjB,CAAC;QACN,KAAK,mBAAmB,CAAC,sBAAsB;YAC3C,OAAO;gBACH,GAAG,KAAK;gBACR,aAAa,EAAE,MAAM,CAAC,MAAM;aAC/B,CAAC;QACN,KAAK,mBAAmB,CAAC,UAAU;YAC/B,OAAO;gBACH,GAAG,KAAK;gBACR,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC;aACjD,CAAC;QACN,KAAK,mBAAmB,CAAC,uBAAuB;YAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;gBAC5C,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE;oBAChC,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;iBAC5C;gBAED,OAAO,CAAC,CAAC;YACb,CAAC,CAAC,CAAC;YAEH,OAAO;gBACH,GAAG,KAAK;gBACR,OAAO,EAAE,UAAU;aACtB,CAAC;QACN,KAAK,mBAAmB,CAAC,aAAa;YAClC,OAAO;gBACH,GAAG,KAAK;gBACR,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC;aAC5E,CAAC;QACN;YACI,OAAO,KAAK,CAAC;KACpB;AACL,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
package/dist/styles.css
CHANGED
|
@@ -255,7 +255,7 @@ body a {
|
|
|
255
255
|
display: none;
|
|
256
256
|
}
|
|
257
257
|
.uploads-menu {
|
|
258
|
-
width:
|
|
258
|
+
width: 670px;
|
|
259
259
|
height: 175px;
|
|
260
260
|
overflow-y: auto;
|
|
261
261
|
display: flex;
|
|
@@ -2198,7 +2198,7 @@ body a {
|
|
|
2198
2198
|
padding: 5px;
|
|
2199
2199
|
box-sizing: border-box;
|
|
2200
2200
|
background: #272727;
|
|
2201
|
-
width:
|
|
2201
|
+
width: 235px;
|
|
2202
2202
|
}
|
|
2203
2203
|
.shortcuts-menu table tr td {
|
|
2204
2204
|
font-size: 12px;
|
package/dist/styles.less
CHANGED
|
@@ -289,7 +289,7 @@ body{
|
|
|
289
289
|
}
|
|
290
290
|
|
|
291
291
|
.uploads-menu {
|
|
292
|
-
width:
|
|
292
|
+
width: 670px;
|
|
293
293
|
height: 175px;
|
|
294
294
|
overflow-y: auto;
|
|
295
295
|
display: flex;
|
|
@@ -2165,7 +2165,7 @@ body{
|
|
|
2165
2165
|
padding: 5px;
|
|
2166
2166
|
box-sizing: border-box;
|
|
2167
2167
|
background: @background;
|
|
2168
|
-
width:
|
|
2168
|
+
width: 235px;
|
|
2169
2169
|
table {
|
|
2170
2170
|
tr {
|
|
2171
2171
|
td {
|
package/package.json
CHANGED
|
@@ -52,7 +52,7 @@ class AssetsTableTagsPivot extends React.PureComponent<IAssetsTableTagsPivotProp
|
|
|
52
52
|
}
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
-
public render
|
|
55
|
+
public render() {
|
|
56
56
|
const {
|
|
57
57
|
row: {
|
|
58
58
|
original: { id, tags }
|
|
@@ -61,7 +61,7 @@ class AssetsTableTagsPivot extends React.PureComponent<IAssetsTableTagsPivotProp
|
|
|
61
61
|
} = this.props;
|
|
62
62
|
|
|
63
63
|
const tagsArray = [...new Set(tags)];
|
|
64
|
-
const tagsMarkup
|
|
64
|
+
const tagsMarkup = tagsArray.map((tag: string) => (
|
|
65
65
|
<Tag
|
|
66
66
|
key={tag}
|
|
67
67
|
copy={tag}
|
|
@@ -96,7 +96,7 @@ class AssetsTableTagsPivot extends React.PureComponent<IAssetsTableTagsPivotProp
|
|
|
96
96
|
</>
|
|
97
97
|
</div>
|
|
98
98
|
);
|
|
99
|
-
}
|
|
99
|
+
}
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
const mapDispatchToProps = (dispatch): any => {
|
|
@@ -3,20 +3,41 @@ import { assets as copy } from '../../constants/copy';
|
|
|
3
3
|
import CheckboxField from '../checkbox-field/CheckboxField';
|
|
4
4
|
import { DeterminateLoader } from '../determinate-loader/DeterminateLoader';
|
|
5
5
|
import {
|
|
6
|
-
toggleAutoTag,
|
|
7
6
|
toggleAssignToStory,
|
|
8
|
-
cancelAssetUpload
|
|
7
|
+
cancelAssetUpload,
|
|
8
|
+
toggleTagFileName,
|
|
9
|
+
setDelimiter,
|
|
10
|
+
toggleTagDelimiter,
|
|
11
|
+
toggleManualTagging,
|
|
12
|
+
addManualTag,
|
|
13
|
+
deleteManualTag,
|
|
14
|
+
deleteManualTags
|
|
9
15
|
} from '../../redux/actions/asset-uploads';
|
|
10
16
|
import { bindActionCreators } from 'redux';
|
|
11
17
|
import { connect } from 'react-redux';
|
|
12
18
|
import Button from '../button/Button';
|
|
13
19
|
import { IImposiumAPI } from '../../services/API';
|
|
20
|
+
import SelectField from '../select-field/SelectField';
|
|
21
|
+
import { DELIMITER_OPTIONS } from '../../constants/assets';
|
|
22
|
+
import TextField from '../text-field/TextField';
|
|
23
|
+
import AssetsTableTagsPivot from './AssetsTableTagsPivot';
|
|
24
|
+
import Tag from '../tag/Tag';
|
|
25
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
26
|
+
import { faEraser } from '@fortawesome/free-solid-svg-icons';
|
|
14
27
|
|
|
15
28
|
interface IAssetsUploadMenuProps {
|
|
16
29
|
assetUploads: any;
|
|
30
|
+
assetTags: string[];
|
|
17
31
|
api: any;
|
|
18
32
|
toggleAutoTag: (toggle: boolean) => any;
|
|
33
|
+
toggleTagFileName: (toggle: boolean) => any;
|
|
19
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;
|
|
20
41
|
cancelAssetUpload: (fileName: string, api: IImposiumAPI) => any;
|
|
21
42
|
}
|
|
22
43
|
|
|
@@ -30,21 +51,30 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps> {
|
|
|
30
51
|
this.props.cancelAssetUpload(fileName, api);
|
|
31
52
|
}
|
|
32
53
|
|
|
33
|
-
public render
|
|
54
|
+
public render() {
|
|
34
55
|
const {
|
|
35
|
-
assetUploads: {
|
|
56
|
+
assetUploads: {
|
|
57
|
+
uploads,
|
|
58
|
+
assignToStory,
|
|
59
|
+
tagByFileName,
|
|
60
|
+
tagByDelimiter,
|
|
61
|
+
delimiter,
|
|
62
|
+
tagManually,
|
|
63
|
+
manualTags
|
|
64
|
+
},
|
|
65
|
+
assetTags
|
|
36
66
|
} = this.props;
|
|
37
|
-
let uploadsListInner
|
|
67
|
+
let uploadsListInner;
|
|
38
68
|
if (uploads.length > 0) {
|
|
39
69
|
uploadsListInner = uploads.map((u: any) => {
|
|
40
70
|
const { filename, percent } = u;
|
|
41
|
-
const loader
|
|
71
|
+
const loader =
|
|
42
72
|
percent < 100 ? (
|
|
43
73
|
<DeterminateLoader progress={u.percent} />
|
|
44
74
|
) : (
|
|
45
75
|
<span>{copy.uploads.preparePhase}</span>
|
|
46
76
|
);
|
|
47
|
-
const closeButton
|
|
77
|
+
const closeButton = percent < 100 && (
|
|
48
78
|
<Button
|
|
49
79
|
key='btn-cancel'
|
|
50
80
|
onClick={() => this.handleCancelAssetUpload(filename)}
|
|
@@ -70,14 +100,68 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps> {
|
|
|
70
100
|
uploadsListInner = <div className='no-ongoing-uploads'>{copy.uploads.noUploads}</div>;
|
|
71
101
|
}
|
|
72
102
|
|
|
103
|
+
const delimiterSelector = tagByDelimiter && (
|
|
104
|
+
<SelectField
|
|
105
|
+
width='35%'
|
|
106
|
+
options={DELIMITER_OPTIONS}
|
|
107
|
+
value={delimiter}
|
|
108
|
+
onChange={(c) => this.props.setDelimiter(c)}
|
|
109
|
+
/>
|
|
110
|
+
);
|
|
111
|
+
const tagsArray = [...new Set(manualTags)];
|
|
112
|
+
const tagsMarkup = tagsArray.map((tag: string) => (
|
|
113
|
+
<Tag
|
|
114
|
+
key={tag}
|
|
115
|
+
copy={tag}
|
|
116
|
+
colorize={AssetsTableTagsPivot.COLORIZE_TAGS}
|
|
117
|
+
removeHandler={() => this.props.deleteManualTag(tag)}
|
|
118
|
+
/>
|
|
119
|
+
));
|
|
120
|
+
const removeTagsBtn =
|
|
121
|
+
tagsArray.length > 0 ? (
|
|
122
|
+
<Button
|
|
123
|
+
tooltip='Remove All Tags'
|
|
124
|
+
style='sublte'
|
|
125
|
+
onClick={() => this.props.deleteManualTags()}>
|
|
126
|
+
<FontAwesomeIcon icon={faEraser} />
|
|
127
|
+
</Button>
|
|
128
|
+
) : null;
|
|
129
|
+
const tagsColumn = tagManually && (
|
|
130
|
+
<div className='tags-column'>
|
|
131
|
+
<TextField
|
|
132
|
+
submittable
|
|
133
|
+
submittableType='add'
|
|
134
|
+
suggestions={assetTags}
|
|
135
|
+
label={copy.tags.add}
|
|
136
|
+
width={AssetsTableTagsPivot.ADD_TAG_INPUT_WIDTH}
|
|
137
|
+
doSubmit={(t) => this.props.addManualTag(t)}
|
|
138
|
+
/>
|
|
139
|
+
{tagsMarkup}
|
|
140
|
+
{removeTagsBtn}
|
|
141
|
+
</div>
|
|
142
|
+
);
|
|
143
|
+
|
|
73
144
|
return (
|
|
74
145
|
<div className='uploads-menu'>
|
|
75
146
|
<div className='uploads-controls'>
|
|
76
147
|
<CheckboxField
|
|
77
148
|
width='50%'
|
|
78
|
-
label={copy.uploads.
|
|
79
|
-
value={
|
|
80
|
-
onChange={() => this.props.
|
|
149
|
+
label={copy.uploads.autoTagDelimiter}
|
|
150
|
+
value={tagByDelimiter}
|
|
151
|
+
onChange={() => this.props.toggleTagDelimiter(!tagByDelimiter)}
|
|
152
|
+
/>
|
|
153
|
+
{delimiterSelector}
|
|
154
|
+
<CheckboxField
|
|
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)}
|
|
81
165
|
/>
|
|
82
166
|
<CheckboxField
|
|
83
167
|
width='50%'
|
|
@@ -87,19 +171,35 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps> {
|
|
|
87
171
|
onChange={() => this.props.toggleAssignToStory(!assignToStory)}
|
|
88
172
|
/>
|
|
89
173
|
</div>
|
|
90
|
-
|
|
174
|
+
{tagsColumn}
|
|
91
175
|
<div className='uploads-list'>{uploadsListInner}</div>
|
|
92
176
|
</div>
|
|
93
177
|
);
|
|
94
|
-
}
|
|
178
|
+
}
|
|
95
179
|
}
|
|
96
180
|
|
|
97
181
|
const mapDispatchToProps = (dispatch): any => {
|
|
98
|
-
return bindActionCreators(
|
|
182
|
+
return bindActionCreators(
|
|
183
|
+
{
|
|
184
|
+
toggleAssignToStory,
|
|
185
|
+
toggleTagFileName,
|
|
186
|
+
cancelAssetUpload,
|
|
187
|
+
toggleTagDelimiter,
|
|
188
|
+
setDelimiter,
|
|
189
|
+
toggleManualTagging,
|
|
190
|
+
addManualTag,
|
|
191
|
+
deleteManualTag,
|
|
192
|
+
deleteManualTags
|
|
193
|
+
},
|
|
194
|
+
dispatch
|
|
195
|
+
);
|
|
99
196
|
};
|
|
100
197
|
|
|
101
198
|
const mapStateToProps = (state): any => {
|
|
102
|
-
return {
|
|
199
|
+
return {
|
|
200
|
+
assetUploads: state.assetUploads,
|
|
201
|
+
assetTags: state.assetTags
|
|
202
|
+
};
|
|
103
203
|
};
|
|
104
204
|
|
|
105
205
|
export default connect(mapStateToProps, mapDispatchToProps)(AssetsUploadMenu);
|
|
@@ -88,9 +88,9 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
88
88
|
{
|
|
89
89
|
accessor: 'date_modified',
|
|
90
90
|
Header: 'Last Modified',
|
|
91
|
-
width:
|
|
92
|
-
minWidth:
|
|
93
|
-
maxWidth:
|
|
91
|
+
width: 60,
|
|
92
|
+
minWidth: 60,
|
|
93
|
+
maxWidth: 60,
|
|
94
94
|
disableSortBy: false,
|
|
95
95
|
Cell: (cell: any) => (
|
|
96
96
|
<AssetsTableDateCell
|
|
@@ -102,9 +102,9 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
102
102
|
{
|
|
103
103
|
accessor: 'date_created',
|
|
104
104
|
Header: 'Created Date',
|
|
105
|
-
width:
|
|
106
|
-
minWidth:
|
|
107
|
-
maxWidth:
|
|
105
|
+
width: 60,
|
|
106
|
+
minWidth: 60,
|
|
107
|
+
maxWidth: 60,
|
|
108
108
|
disableSortBy: false,
|
|
109
109
|
Cell: (cell: any) => (
|
|
110
110
|
<AssetsTableDateCell
|
|
@@ -116,9 +116,9 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
116
116
|
{
|
|
117
117
|
accessor: 'last_modified_by',
|
|
118
118
|
Header: 'Last Modified By',
|
|
119
|
-
width:
|
|
120
|
-
minWidth:
|
|
121
|
-
maxWidth:
|
|
119
|
+
width: 55,
|
|
120
|
+
minWidth: 55,
|
|
121
|
+
maxWidth: 55,
|
|
122
122
|
disableSortBy: true
|
|
123
123
|
}
|
|
124
124
|
];
|
|
@@ -14,7 +14,7 @@ const Tag: React.FC<ITagProps> = (p: ITagProps) => {
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
const borderLeftColor: string = p.colorize ? `${string2HexCode(p.copy)}` : '';
|
|
17
|
-
const remove
|
|
17
|
+
const remove = typeof p.removeHandler === 'function' && (
|
|
18
18
|
<div
|
|
19
19
|
className='remove-tag'
|
|
20
20
|
onClick={p.removeHandler}>
|
package/src/constants/assets.ts
CHANGED
|
@@ -46,3 +46,18 @@ export const PREVIEW_MAX_WIDTH: number = 400;
|
|
|
46
46
|
export const PREVIEW_MAX_HEIGHT: number = 400;
|
|
47
47
|
|
|
48
48
|
export const HEADER_HEIGHT: number = 30;
|
|
49
|
+
|
|
50
|
+
export const DELIMITER_OPTIONS = [
|
|
51
|
+
{
|
|
52
|
+
label: `Underscore: '_'`,
|
|
53
|
+
value: '_'
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
label: `Dash: '-'`,
|
|
57
|
+
value: '-'
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
label: `Space: ' '`,
|
|
61
|
+
value: ' '
|
|
62
|
+
}
|
|
63
|
+
];
|
package/src/constants/copy.ts
CHANGED
|
@@ -19,7 +19,10 @@ export const assets = {
|
|
|
19
19
|
uploads: {
|
|
20
20
|
noUploads: 'There are currently no assets uploading...',
|
|
21
21
|
preparePhase: 'Preparing asset...',
|
|
22
|
-
|
|
22
|
+
autoTagFilname: 'Tag by file name',
|
|
23
|
+
autoTagDelimiter: 'Tag by Delimiter',
|
|
24
|
+
delimiterOptions: 'Delimiter Options',
|
|
25
|
+
manualTagging: 'Tag Manually',
|
|
23
26
|
assignToProjectInput: 'Assign to Project',
|
|
24
27
|
assignToProjectInfo:
|
|
25
28
|
'If selected, any assets uploaded will only be available to use with the currently selected project.',
|
package/src/index.ts
CHANGED
|
@@ -102,7 +102,7 @@ import {
|
|
|
102
102
|
updateAssetStory
|
|
103
103
|
} from './redux/actions/asset-list';
|
|
104
104
|
import { getAssetTagList, addAssetTagToList } from './redux/actions/asset-tags';
|
|
105
|
-
import { cancelAssetUpload,
|
|
105
|
+
import { cancelAssetUpload, toggleTagFileName, uploadAssets } from './redux/actions/asset-uploads';
|
|
106
106
|
import { selectAsset, deselectAsset, resetSelection } from './redux/actions/selected-assets';
|
|
107
107
|
import assetFilters from './redux/reducers/asset-filters';
|
|
108
108
|
import assetList from './redux/reducers/asset-list';
|
|
@@ -234,7 +234,7 @@ export {
|
|
|
234
234
|
updateAssetName,
|
|
235
235
|
updateAssetData,
|
|
236
236
|
doAssetTableHydration,
|
|
237
|
-
|
|
237
|
+
toggleTagFileName,
|
|
238
238
|
uploadAssets,
|
|
239
239
|
selectAsset,
|
|
240
240
|
deselectAsset,
|
|
@@ -4,6 +4,13 @@ import axios from 'axios';
|
|
|
4
4
|
|
|
5
5
|
const assetUploadsActions: any = {
|
|
6
6
|
TOGGLE_AUTO_TAG: 'assetUploads/TOGGLE_AUTO_TAG',
|
|
7
|
+
TOGGLE_TAG_BY_FILENAME: 'assetUploads/TOGGLE_TAG_BY_FILENAME',
|
|
8
|
+
TOGGLE_TAG_BY_DELIMITER: 'assetUploads/TOGGLE_TAG_BY_DELIMITER',
|
|
9
|
+
SET_DELIMITER: 'assetUploads/SET_DELIMITER',
|
|
10
|
+
TOGGLE_MANUAL_TAGGING: 'assetUploads/TOGGLE_MANUAL_TAGGING',
|
|
11
|
+
ADD_MANUAL_TAG: 'assetUploads/ADD_MANUAL_TAG',
|
|
12
|
+
DELETE_MANUAL_TAG: 'assetUploads/DELETE_MANUAL_TAG',
|
|
13
|
+
DELETE_MANUAL_TAGS: 'assetUploads/DELETE_MANUAL_TAGS',
|
|
7
14
|
TOGGLE_ASSIGN_TO_STORY: 'assetUploads/TOGGLE_ASSIGN_TO_STORY',
|
|
8
15
|
ADD_UPLOAD: 'assetUploads/ADD_UPLOAD',
|
|
9
16
|
UPDATE_PERCENT_UPLOADED: 'assetUploads/UPDATE_PERCENT_UPLOADED',
|
|
@@ -12,8 +19,8 @@ const assetUploadsActions: any = {
|
|
|
12
19
|
|
|
13
20
|
const POLL_INTERVAL: number = 5000;
|
|
14
21
|
|
|
15
|
-
export const
|
|
16
|
-
type: assetUploadsActions.
|
|
22
|
+
export const toggleTagFileName = (toggle: boolean): any => ({
|
|
23
|
+
type: assetUploadsActions.TOGGLE_TAG_BY_FILENAME,
|
|
17
24
|
toggle
|
|
18
25
|
});
|
|
19
26
|
|
|
@@ -22,6 +29,35 @@ export const toggleAssignToStory = (toggle: boolean): any => ({
|
|
|
22
29
|
toggle
|
|
23
30
|
});
|
|
24
31
|
|
|
32
|
+
export const toggleTagDelimiter = (toggle: boolean): any => ({
|
|
33
|
+
type: assetUploadsActions.TOGGLE_TAG_BY_DELIMITER,
|
|
34
|
+
toggle
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
export const setDelimiter = (delimiter: string): any => ({
|
|
38
|
+
type: assetUploadsActions.SET_DELIMITER,
|
|
39
|
+
delimiter
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
export const toggleManualTagging = (toggle: boolean): any => ({
|
|
43
|
+
type: assetUploadsActions.TOGGLE_MANUAL_TAGGING,
|
|
44
|
+
toggle
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
export const addManualTag = (tag: string): any => ({
|
|
48
|
+
type: assetUploadsActions.ADD_MANUAL_TAG,
|
|
49
|
+
tag
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
export const deleteManualTag = (tag: string): any => ({
|
|
53
|
+
type: assetUploadsActions.DELETE_MANUAL_TAG,
|
|
54
|
+
tag
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
export const deleteManualTags = (): any => ({
|
|
58
|
+
type: assetUploadsActions.DELETE_MANUAL_TAGS
|
|
59
|
+
});
|
|
60
|
+
|
|
25
61
|
export const uploadAssets = (
|
|
26
62
|
api: IImposiumAPI,
|
|
27
63
|
files: File[],
|
|
@@ -30,7 +66,15 @@ export const uploadAssets = (
|
|
|
30
66
|
): any => {
|
|
31
67
|
return (dispatch, getStore) => {
|
|
32
68
|
const {
|
|
33
|
-
assetUploads: {
|
|
69
|
+
assetUploads: {
|
|
70
|
+
uploads,
|
|
71
|
+
assignToStory,
|
|
72
|
+
tagByFileName,
|
|
73
|
+
tagByDelimiter,
|
|
74
|
+
delimiter,
|
|
75
|
+
tagManually,
|
|
76
|
+
manualTags
|
|
77
|
+
}
|
|
34
78
|
} = getStore();
|
|
35
79
|
let currentQueue: number = 0;
|
|
36
80
|
let ongoingJobs: any[] = [];
|
|
@@ -44,9 +88,22 @@ export const uploadAssets = (
|
|
|
44
88
|
uploadsWithSameName.length > 0
|
|
45
89
|
? `${file.name} (${uploadsWithSameName.length})`
|
|
46
90
|
: file.name;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
91
|
+
|
|
92
|
+
let tags = [];
|
|
93
|
+
|
|
94
|
+
if (tagByFileName) {
|
|
95
|
+
tags = tags.concat(file.name.substr(0, file.name.lastIndexOf('.')));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (tagByDelimiter) {
|
|
99
|
+
const tag = file.name.substr(0, file.name.lastIndexOf('.')).split(delimiter);
|
|
100
|
+
tags = [...new Set([...tags, ...tag])];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (tagManually) {
|
|
104
|
+
tags = [...new Set([...tags, ...manualTags])];
|
|
105
|
+
}
|
|
106
|
+
|
|
50
107
|
const uploadMeta: any = { filename, percent: 0 };
|
|
51
108
|
|
|
52
109
|
const onUploadProgress = (progress: any): void => {
|
|
@@ -1,17 +1,53 @@
|
|
|
1
1
|
import assetUploadsActions from '../actions/asset-uploads';
|
|
2
2
|
|
|
3
3
|
const initialState: any = {
|
|
4
|
-
|
|
4
|
+
tagByDelimiter: true,
|
|
5
|
+
delimiter: '_',
|
|
6
|
+
tagManually: false,
|
|
7
|
+
manualTags: [],
|
|
8
|
+
tagByFileName: false,
|
|
5
9
|
assignToStory: true,
|
|
6
10
|
uploads: []
|
|
7
11
|
};
|
|
8
12
|
|
|
9
13
|
const assetUploads = (state = initialState, action): any => {
|
|
10
14
|
switch (action.type) {
|
|
11
|
-
case assetUploadsActions.
|
|
15
|
+
case assetUploadsActions.TOGGLE_TAG_BY_FILENAME:
|
|
12
16
|
return {
|
|
13
17
|
...state,
|
|
14
|
-
|
|
18
|
+
tagByFileName: action.toggle
|
|
19
|
+
};
|
|
20
|
+
case assetUploadsActions.TOGGLE_TAG_BY_DELIMITER:
|
|
21
|
+
return {
|
|
22
|
+
...state,
|
|
23
|
+
tagByDelimiter: action.toggle
|
|
24
|
+
};
|
|
25
|
+
case assetUploadsActions.SET_DELIMITER:
|
|
26
|
+
return {
|
|
27
|
+
...state,
|
|
28
|
+
delimiter: action.delimiter
|
|
29
|
+
};
|
|
30
|
+
case assetUploadsActions.TOGGLE_MANUAL_TAGGING:
|
|
31
|
+
return {
|
|
32
|
+
...state,
|
|
33
|
+
tagManually: action.toggle
|
|
34
|
+
};
|
|
35
|
+
case assetUploadsActions.ADD_MANUAL_TAG:
|
|
36
|
+
const newManualTags = [...state.manualTags];
|
|
37
|
+
newManualTags.push(action.tag);
|
|
38
|
+
return {
|
|
39
|
+
...state,
|
|
40
|
+
manualTags: newManualTags
|
|
41
|
+
};
|
|
42
|
+
case assetUploadsActions.DELETE_MANUAL_TAG:
|
|
43
|
+
return {
|
|
44
|
+
...state,
|
|
45
|
+
manualTags: state.manualTags.filter((t: string) => t !== action.tag)
|
|
46
|
+
};
|
|
47
|
+
case assetUploadsActions.DELETE_MANUAL_TAGS:
|
|
48
|
+
return {
|
|
49
|
+
...state,
|
|
50
|
+
manualTags: []
|
|
15
51
|
};
|
|
16
52
|
case assetUploadsActions.TOGGLE_ASSIGN_TO_STORY:
|
|
17
53
|
return {
|