@imposium-hub/components 2.2.16 → 2.2.18

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.
Files changed (110) hide show
  1. package/dist/cjs/components/assets/AssetsTableTagsPivot.js +13 -12
  2. package/dist/cjs/components/assets/AssetsTableTagsPivot.js.map +1 -1
  3. package/dist/cjs/components/assets/AssetsUploadMenu.js +86 -28
  4. package/dist/cjs/components/assets/AssetsUploadMenu.js.map +1 -1
  5. package/dist/cjs/components/button/Button.stories.d.ts +0 -1
  6. package/dist/cjs/components/button-group-field/ButtonGroupField.stories.d.ts +0 -1
  7. package/dist/cjs/components/button-menu/ButtonMenu.stories.d.ts +0 -1
  8. package/dist/cjs/components/card/Card.stories.d.ts +0 -1
  9. package/dist/cjs/components/checkbox-field/CheckboxField.stories.d.ts +0 -1
  10. package/dist/cjs/components/color-field/ColorFiled.stories.d.ts +0 -1
  11. package/dist/cjs/components/controlled-list/ControlledList.stories.d.ts +0 -1
  12. package/dist/cjs/components/dropdown/Dropdown.js +5 -5
  13. package/dist/cjs/components/field-wrapper/FieldWrapper.stories.d.ts +0 -1
  14. package/dist/cjs/components/font-picker/font-manager/FontManager.js +2 -2
  15. package/dist/cjs/components/font-picker/font-manager/FontManager.js.map +1 -1
  16. package/dist/cjs/components/font-picker/font-manager/constants.d.ts +1 -1
  17. package/dist/cjs/components/h-rule/HRule.d.ts +0 -1
  18. package/dist/cjs/components/h-rule/HRule.stories.d.ts +0 -1
  19. package/dist/cjs/components/header/Header.js +9 -9
  20. package/dist/cjs/components/list-field/ListField.stories.d.ts +0 -1
  21. package/dist/cjs/components/modal/Modal.stories.d.ts +0 -1
  22. package/dist/cjs/components/number-field/NumberField.stories.d.ts +0 -1
  23. package/dist/cjs/components/publish-wizard/PublishWizard.js +2 -2
  24. package/dist/cjs/components/publish-wizard/PublishWizard.js.map +1 -1
  25. package/dist/cjs/components/section/Section.d.ts +0 -1
  26. package/dist/cjs/components/section/Section.stories.d.ts +0 -1
  27. package/dist/cjs/components/select-field/SelectField.stories.d.ts +0 -1
  28. package/dist/cjs/components/slider-field/SliderField.stories.d.ts +0 -1
  29. package/dist/cjs/components/story-previewer/StoryPreviewer.js +2 -2
  30. package/dist/cjs/components/story-previewer/StoryPreviewer.js.map +1 -1
  31. package/dist/cjs/components/tabs/Tabs.d.ts +1 -3
  32. package/dist/cjs/components/tabs/Tabs.stories.d.ts +1 -3
  33. package/dist/cjs/components/tag/Tag.js.map +1 -1
  34. package/dist/cjs/components/text-area-field/TextAreaField.stories.d.ts +0 -1
  35. package/dist/cjs/components/text-field/TextField.stories.d.ts +0 -1
  36. package/dist/cjs/constants/assets.d.ts +4 -0
  37. package/dist/cjs/constants/assets.js +15 -1
  38. package/dist/cjs/constants/assets.js.map +1 -1
  39. package/dist/cjs/constants/copy.d.ts +4 -1
  40. package/dist/cjs/constants/copy.js +4 -1
  41. package/dist/cjs/constants/copy.js.map +1 -1
  42. package/dist/cjs/index.d.ts +2 -2
  43. package/dist/cjs/index.js +2 -2
  44. package/dist/cjs/index.js.map +1 -1
  45. package/dist/cjs/redux/actions/active-batch.d.ts +1 -1
  46. package/dist/cjs/redux/actions/asset-uploads.d.ts +7 -1
  47. package/dist/cjs/redux/actions/asset-uploads.js +77 -8
  48. package/dist/cjs/redux/actions/asset-uploads.js.map +1 -1
  49. package/dist/cjs/redux/actions/publish.d.ts +2 -2
  50. package/dist/cjs/redux/reducers/asset-uploads.js +21 -3
  51. package/dist/cjs/redux/reducers/asset-uploads.js.map +1 -1
  52. package/dist/cjs/services/API.js +1 -1
  53. package/dist/cjs/services/API.js.map +1 -1
  54. package/dist/cjs/services/Storage.d.ts +1 -1
  55. package/dist/esm/components/assets/AssetsTableTagsPivot.js +2 -2
  56. package/dist/esm/components/assets/AssetsTableTagsPivot.js.map +1 -1
  57. package/dist/esm/components/assets/AssetsUploadMenu.js +40 -7
  58. package/dist/esm/components/assets/AssetsUploadMenu.js.map +1 -1
  59. package/dist/esm/components/button/Button.stories.d.ts +0 -1
  60. package/dist/esm/components/button-group-field/ButtonGroupField.stories.d.ts +0 -1
  61. package/dist/esm/components/button-menu/ButtonMenu.stories.d.ts +0 -1
  62. package/dist/esm/components/card/Card.stories.d.ts +0 -1
  63. package/dist/esm/components/checkbox-field/CheckboxField.stories.d.ts +0 -1
  64. package/dist/esm/components/color-field/ColorFiled.stories.d.ts +0 -1
  65. package/dist/esm/components/controlled-list/ControlledList.stories.d.ts +0 -1
  66. package/dist/esm/components/field-wrapper/FieldWrapper.stories.d.ts +0 -1
  67. package/dist/esm/components/h-rule/HRule.d.ts +0 -1
  68. package/dist/esm/components/h-rule/HRule.stories.d.ts +0 -1
  69. package/dist/esm/components/header/Header.js +9 -9
  70. package/dist/esm/components/list-field/ListField.stories.d.ts +0 -1
  71. package/dist/esm/components/modal/Modal.stories.d.ts +0 -1
  72. package/dist/esm/components/number-field/NumberField.stories.d.ts +0 -1
  73. package/dist/esm/components/section/Section.d.ts +0 -1
  74. package/dist/esm/components/section/Section.stories.d.ts +0 -1
  75. package/dist/esm/components/select-field/SelectField.stories.d.ts +0 -1
  76. package/dist/esm/components/slider-field/SliderField.stories.d.ts +0 -1
  77. package/dist/esm/components/tag/Tag.js.map +1 -1
  78. package/dist/esm/components/text-area-field/TextAreaField.stories.d.ts +0 -1
  79. package/dist/esm/components/text-field/TextField.stories.d.ts +0 -1
  80. package/dist/esm/constants/assets.d.ts +4 -0
  81. package/dist/esm/constants/assets.js +14 -0
  82. package/dist/esm/constants/assets.js.map +1 -1
  83. package/dist/esm/constants/copy.d.ts +4 -1
  84. package/dist/esm/constants/copy.js +4 -1
  85. package/dist/esm/constants/copy.js.map +1 -1
  86. package/dist/esm/index.d.ts +2 -2
  87. package/dist/esm/index.js +2 -2
  88. package/dist/esm/index.js.map +1 -1
  89. package/dist/esm/redux/actions/asset-uploads.d.ts +7 -1
  90. package/dist/esm/redux/actions/asset-uploads.js +44 -6
  91. package/dist/esm/redux/actions/asset-uploads.js.map +1 -1
  92. package/dist/esm/redux/reducers/asset-uploads.js +39 -3
  93. package/dist/esm/redux/reducers/asset-uploads.js.map +1 -1
  94. package/dist/esm/services/API.js +1 -1
  95. package/dist/esm/services/API.js.map +1 -1
  96. package/dist/styles.css +2 -2
  97. package/dist/styles.less +2 -2
  98. package/less/components/assets.less +1 -1
  99. package/less/components/shortcut-menu.less +1 -1
  100. package/package.json +1 -1
  101. package/src/components/assets/AssetsTableTagsPivot.tsx +3 -3
  102. package/src/components/assets/AssetsUploadMenu.tsx +114 -14
  103. package/src/components/header/Header.tsx +9 -9
  104. package/src/components/tag/Tag.tsx +1 -1
  105. package/src/constants/assets.ts +15 -0
  106. package/src/constants/copy.ts +4 -1
  107. package/src/index.ts +2 -2
  108. package/src/redux/actions/asset-uploads.ts +63 -6
  109. package/src/redux/reducers/asset-uploads.ts +39 -3
  110. package/src/services/API.ts +1 -1
@@ -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 = (): JSX.Element => {
54
+ public render() {
34
55
  const {
35
- assetUploads: { uploads, autoTag, assignToStory }
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: JSX.Element[] | JSX.Element;
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: JSX.Element =
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: JSX.Element = percent < 100 && (
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.autoTagInput}
79
- value={autoTag}
80
- onChange={() => this.props.toggleAutoTag(!autoTag)}
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({ toggleAutoTag, toggleAssignToStory, cancelAssetUpload }, dispatch);
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 { assetUploads: state.assetUploads };
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: 45,
92
- minWidth: 45,
93
- maxWidth: 45,
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: 45,
106
- minWidth: 45,
107
- maxWidth: 45,
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: 50,
120
- minWidth: 50,
121
- maxWidth: 50,
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: JSX.Element = typeof p.removeHandler === 'function' && (
17
+ const remove = typeof p.removeHandler === 'function' && (
18
18
  <div
19
19
  className='remove-tag'
20
20
  onClick={p.removeHandler}>
@@ -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
+ ];
@@ -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
- autoTagInput: 'Tag by filename',
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, toggleAutoTag, uploadAssets } from './redux/actions/asset-uploads';
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
- toggleAutoTag,
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 toggleAutoTag = (toggle: boolean): any => ({
16
- type: assetUploadsActions.TOGGLE_AUTO_TAG,
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: { autoTag, uploads, assignToStory }
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
- const tags: string = autoTag
48
- ? file.name.substr(0, file.name.lastIndexOf('.')).split('_').join(',')
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
- autoTag: true,
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.TOGGLE_AUTO_TAG:
15
+ case assetUploadsActions.TOGGLE_TAG_BY_FILENAME:
12
16
  return {
13
17
  ...state,
14
- autoTag: action.toggle
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 {
@@ -1114,7 +1114,7 @@ export default class API {
1114
1114
  }
1115
1115
 
1116
1116
  if (fastRender) {
1117
- formData.append('fastRender', 'true');
1117
+ formData.append('fast_render', 'true');
1118
1118
  }
1119
1119
 
1120
1120
  return this.doRequest({