@imposium-hub/components 2.9.0-1 → 2.9.0-10

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 (195) hide show
  1. package/dist/cjs/components/app-wrapper/AppWrapper.js +10 -1
  2. package/dist/cjs/components/app-wrapper/AppWrapper.js.map +1 -1
  3. package/dist/cjs/components/assets/AssetsTableAssetIdFilter.js +1 -1
  4. package/dist/cjs/components/assets/AssetsTableAssetIdFilter.js.map +1 -1
  5. package/dist/cjs/components/assets/AssetsTableNameFilter.js +1 -1
  6. package/dist/cjs/components/assets/AssetsTableNameFilter.js.map +1 -1
  7. package/dist/cjs/components/assets/AssetsTableTagsFilter.js +1 -1
  8. package/dist/cjs/components/assets/AssetsTableTagsFilter.js.map +1 -1
  9. package/dist/cjs/components/assets/AssetsUploadMenu.js +4 -2
  10. package/dist/cjs/components/assets/AssetsUploadMenu.js.map +1 -1
  11. package/dist/cjs/components/confirm-modal/ConfirmModal.js +3 -2
  12. package/dist/cjs/components/confirm-modal/ConfirmModal.js.map +1 -1
  13. package/dist/cjs/components/edit-guide-modal/EditGuideModal.d.ts +8 -0
  14. package/dist/cjs/components/edit-guide-modal/EditGuideModal.js +122 -0
  15. package/dist/cjs/components/edit-guide-modal/EditGuideModal.js.map +1 -0
  16. package/dist/cjs/components/edit-marker-modal/EditMarkerModal.d.ts +8 -0
  17. package/dist/cjs/components/edit-marker-modal/EditMarkerModal.js +104 -0
  18. package/dist/cjs/components/edit-marker-modal/EditMarkerModal.js.map +1 -0
  19. package/dist/cjs/components/field-wrapper/FieldWrapper.d.ts +1 -0
  20. package/dist/cjs/components/field-wrapper/FieldWrapper.js +10 -8
  21. package/dist/cjs/components/field-wrapper/FieldWrapper.js.map +1 -1
  22. package/dist/cjs/components/header/Header.js +9 -6
  23. package/dist/cjs/components/header/Header.js.map +1 -1
  24. package/dist/cjs/components/number-field/NumberField.d.ts +1 -0
  25. package/dist/cjs/components/number-field/NumberField.js +5 -2
  26. package/dist/cjs/components/number-field/NumberField.js.map +1 -1
  27. package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js +52 -23
  28. package/dist/cjs/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
  29. package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.d.ts +1 -0
  30. package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js +34 -12
  31. package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js.map +1 -1
  32. package/dist/cjs/components/slider-field/SliderField.d.ts +2 -0
  33. package/dist/cjs/components/slider-field/SliderField.js +17 -8
  34. package/dist/cjs/components/slider-field/SliderField.js.map +1 -1
  35. package/dist/cjs/components/story-previewer/StoryPreviewer.js +17 -3
  36. package/dist/cjs/components/story-previewer/StoryPreviewer.js.map +1 -1
  37. package/dist/cjs/components/tabs/Tabs.js +2 -1
  38. package/dist/cjs/components/tabs/Tabs.js.map +1 -1
  39. package/dist/cjs/components/text-field/TextField.d.ts +1 -0
  40. package/dist/cjs/components/text-field/TextField.js +2 -2
  41. package/dist/cjs/components/text-field/TextField.js.map +1 -1
  42. package/dist/cjs/constants/copy.d.ts +5 -1
  43. package/dist/cjs/constants/copy.js +6 -2
  44. package/dist/cjs/constants/copy.js.map +1 -1
  45. package/dist/cjs/constants/icons.d.ts +2 -0
  46. package/dist/cjs/constants/icons.js +3 -1
  47. package/dist/cjs/constants/icons.js.map +1 -1
  48. package/dist/cjs/constants/publish.d.ts +3 -0
  49. package/dist/cjs/constants/publish.js +5 -3
  50. package/dist/cjs/constants/publish.js.map +1 -1
  51. package/dist/cjs/index.d.ts +4 -3
  52. package/dist/cjs/index.js +8 -5
  53. package/dist/cjs/index.js.map +1 -1
  54. package/dist/cjs/redux/actions/asset-uploads.d.ts +1 -1
  55. package/dist/cjs/redux/actions/asset-uploads.js +169 -119
  56. package/dist/cjs/redux/actions/asset-uploads.js.map +1 -1
  57. package/dist/cjs/redux/actions/publish.js +10 -2
  58. package/dist/cjs/redux/actions/publish.js.map +1 -1
  59. package/dist/cjs/redux/reducers/asset-uploads.js +2 -1
  60. package/dist/cjs/redux/reducers/asset-uploads.js.map +1 -1
  61. package/dist/cjs/services/API.d.ts +3 -8
  62. package/dist/cjs/services/API.js +29 -101
  63. package/dist/cjs/services/API.js.map +1 -1
  64. package/dist/cjs/utils/modal.d.ts +4 -0
  65. package/dist/cjs/utils/modal.js +11 -2
  66. package/dist/cjs/utils/modal.js.map +1 -1
  67. package/dist/esm/components/app-wrapper/AppWrapper.js +10 -1
  68. package/dist/esm/components/app-wrapper/AppWrapper.js.map +1 -1
  69. package/dist/esm/components/assets/AssetsTableAssetIdFilter.js +1 -1
  70. package/dist/esm/components/assets/AssetsTableAssetIdFilter.js.map +1 -1
  71. package/dist/esm/components/assets/AssetsTableNameFilter.js +1 -1
  72. package/dist/esm/components/assets/AssetsTableNameFilter.js.map +1 -1
  73. package/dist/esm/components/assets/AssetsTableTagsFilter.js +1 -1
  74. package/dist/esm/components/assets/AssetsTableTagsFilter.js.map +1 -1
  75. package/dist/esm/components/assets/AssetsUploadMenu.js +5 -3
  76. package/dist/esm/components/assets/AssetsUploadMenu.js.map +1 -1
  77. package/dist/esm/components/confirm-modal/ConfirmModal.js +3 -2
  78. package/dist/esm/components/confirm-modal/ConfirmModal.js.map +1 -1
  79. package/dist/esm/components/edit-guide-modal/EditGuideModal.d.ts +8 -0
  80. package/dist/esm/components/edit-guide-modal/EditGuideModal.js +65 -0
  81. package/dist/esm/components/edit-guide-modal/EditGuideModal.js.map +1 -0
  82. package/dist/esm/components/edit-marker-modal/EditMarkerModal.d.ts +8 -0
  83. package/dist/esm/components/edit-marker-modal/EditMarkerModal.js +72 -0
  84. package/dist/esm/components/edit-marker-modal/EditMarkerModal.js.map +1 -0
  85. package/dist/esm/components/field-wrapper/FieldWrapper.d.ts +1 -0
  86. package/dist/esm/components/field-wrapper/FieldWrapper.js +10 -8
  87. package/dist/esm/components/field-wrapper/FieldWrapper.js.map +1 -1
  88. package/dist/esm/components/header/Header.js +7 -4
  89. package/dist/esm/components/header/Header.js.map +1 -1
  90. package/dist/esm/components/number-field/NumberField.d.ts +1 -0
  91. package/dist/esm/components/number-field/NumberField.js +5 -2
  92. package/dist/esm/components/number-field/NumberField.js.map +1 -1
  93. package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js +43 -14
  94. package/dist/esm/components/publish-wizard/publish/EmailWorkflow.js.map +1 -1
  95. package/dist/esm/components/replace-files-modal/ReplaceFilesModal.d.ts +1 -0
  96. package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js +31 -12
  97. package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js.map +1 -1
  98. package/dist/esm/components/slider-field/SliderField.d.ts +2 -0
  99. package/dist/esm/components/slider-field/SliderField.js +17 -8
  100. package/dist/esm/components/slider-field/SliderField.js.map +1 -1
  101. package/dist/esm/components/story-previewer/StoryPreviewer.js +13 -4
  102. package/dist/esm/components/story-previewer/StoryPreviewer.js.map +1 -1
  103. package/dist/esm/components/tabs/Tabs.js +2 -1
  104. package/dist/esm/components/tabs/Tabs.js.map +1 -1
  105. package/dist/esm/components/text-field/TextField.d.ts +1 -0
  106. package/dist/esm/components/text-field/TextField.js +2 -2
  107. package/dist/esm/components/text-field/TextField.js.map +1 -1
  108. package/dist/esm/constants/copy.d.ts +5 -1
  109. package/dist/esm/constants/copy.js +6 -2
  110. package/dist/esm/constants/copy.js.map +1 -1
  111. package/dist/esm/constants/icons.d.ts +2 -0
  112. package/dist/esm/constants/icons.js +3 -1
  113. package/dist/esm/constants/icons.js.map +1 -1
  114. package/dist/esm/constants/publish.d.ts +3 -0
  115. package/dist/esm/constants/publish.js +4 -2
  116. package/dist/esm/constants/publish.js.map +1 -1
  117. package/dist/esm/index.d.ts +4 -3
  118. package/dist/esm/index.js +4 -3
  119. package/dist/esm/index.js.map +1 -1
  120. package/dist/esm/redux/actions/asset-uploads.d.ts +1 -1
  121. package/dist/esm/redux/actions/asset-uploads.js +165 -115
  122. package/dist/esm/redux/actions/asset-uploads.js.map +1 -1
  123. package/dist/esm/redux/actions/publish.js +10 -2
  124. package/dist/esm/redux/actions/publish.js.map +1 -1
  125. package/dist/esm/redux/reducers/asset-uploads.js +2 -1
  126. package/dist/esm/redux/reducers/asset-uploads.js.map +1 -1
  127. package/dist/esm/services/API.d.ts +3 -8
  128. package/dist/esm/services/API.js +9 -46
  129. package/dist/esm/services/API.js.map +1 -1
  130. package/dist/esm/utils/modal.d.ts +4 -0
  131. package/dist/esm/utils/modal.js +9 -1
  132. package/dist/esm/utils/modal.js.map +1 -1
  133. package/dist/styles.css +101 -6
  134. package/dist/styles.less +91 -58
  135. package/less/components/assets.less +5 -39
  136. package/less/components/button-menu.less +1 -0
  137. package/less/components/button.less +57 -19
  138. package/less/components/form-field.less +27 -0
  139. package/less/components/story-previewer.less +1 -1
  140. package/package.json +5 -5
  141. package/src/components/app-wrapper/AppWrapper.tsx +10 -0
  142. package/src/components/assets/AssetsTableAssetIdFilter.tsx +1 -0
  143. package/src/components/assets/AssetsTableNameFilter.tsx +1 -0
  144. package/src/components/assets/AssetsTableTagsFilter.tsx +1 -0
  145. package/src/components/assets/AssetsUploadMenu.tsx +20 -11
  146. package/src/components/confirm-modal/ConfirmModal.tsx +3 -2
  147. package/src/components/edit-guide-modal/EditGuideModal.tsx +110 -0
  148. package/src/components/field-wrapper/FieldWrapper.tsx +16 -12
  149. package/src/components/header/Header.tsx +7 -4
  150. package/src/components/number-field/NumberField.tsx +6 -2
  151. package/src/components/publish-wizard/publish/EmailWorkflow.tsx +66 -24
  152. package/src/components/replace-files-modal/ReplaceFilesModal.tsx +217 -0
  153. package/src/components/slider-field/SliderField.tsx +44 -22
  154. package/src/components/story-previewer/StoryPreviewer.tsx +24 -8
  155. package/src/components/tabs/Tabs.tsx +2 -1
  156. package/src/components/text-field/TextField.tsx +5 -2
  157. package/src/constants/copy.ts +6 -2
  158. package/src/constants/icons.tsx +10 -1
  159. package/src/constants/publish.ts +7 -2
  160. package/src/index.ts +6 -2
  161. package/src/redux/actions/asset-uploads.ts +193 -162
  162. package/src/redux/actions/publish.ts +10 -2
  163. package/src/redux/reducers/asset-uploads.ts +2 -1
  164. package/src/services/API.ts +13 -76
  165. package/src/utils/modal.ts +13 -1
  166. package/dist/cjs/components/auth-gate/AuthGate.d.ts +0 -2
  167. package/dist/cjs/components/auth-gate/AuthGate.js +0 -105
  168. package/dist/cjs/components/auth-gate/AuthGate.js.map +0 -1
  169. package/dist/cjs/redux/actions/auth.d.ts +0 -9
  170. package/dist/cjs/redux/actions/auth.js +0 -30
  171. package/dist/cjs/redux/actions/auth.js.map +0 -1
  172. package/dist/cjs/redux/reducers/auth.d.ts +0 -3
  173. package/dist/cjs/redux/reducers/auth.js +0 -67
  174. package/dist/cjs/redux/reducers/auth.js.map +0 -1
  175. package/dist/cjs/services/Auth0.d.ts +0 -18
  176. package/dist/cjs/services/Auth0.js +0 -102
  177. package/dist/cjs/services/Auth0.js.map +0 -1
  178. package/dist/cjs/services/Session.d.ts +0 -26
  179. package/dist/cjs/services/Session.js +0 -155
  180. package/dist/cjs/services/Session.js.map +0 -1
  181. package/dist/esm/components/auth-gate/AuthGate.d.ts +0 -2
  182. package/dist/esm/components/auth-gate/AuthGate.js +0 -59
  183. package/dist/esm/components/auth-gate/AuthGate.js.map +0 -1
  184. package/dist/esm/redux/actions/auth.d.ts +0 -9
  185. package/dist/esm/redux/actions/auth.js +0 -25
  186. package/dist/esm/redux/actions/auth.js.map +0 -1
  187. package/dist/esm/redux/reducers/auth.d.ts +0 -3
  188. package/dist/esm/redux/reducers/auth.js +0 -27
  189. package/dist/esm/redux/reducers/auth.js.map +0 -1
  190. package/dist/esm/services/Auth0.d.ts +0 -18
  191. package/dist/esm/services/Auth0.js +0 -68
  192. package/dist/esm/services/Auth0.js.map +0 -1
  193. package/dist/esm/services/Session.d.ts +0 -26
  194. package/dist/esm/services/Session.js +0 -107
  195. package/dist/esm/services/Session.js.map +0 -1
@@ -116,44 +116,6 @@
116
116
  }
117
117
  }
118
118
 
119
- // .assetUploads {
120
- // .imposium-dropdown {
121
- // border: unset;
122
-
123
- // .uploads-dropzone{
124
- // position: absolute;
125
- // top: 0;
126
- // height: 100%;
127
- // z-index: 2;
128
- // display: none;
129
-
130
- // &.asset-over {
131
- // .uploads-menu{
132
- // opacity: .3;
133
- // }
134
- // .overlay {
135
- // border-style: dashed;
136
- // border-color: hsl(225, 100%, 50%);
137
- // border-width: medium;
138
- // position: absolute;
139
- // top: 50%;
140
- // left: 50%;
141
- // transform: translate(-50%, -50%);
142
- // -ms-transform: translate(-50%, -50%);
143
- // text-align: center;
144
- // height: 98%;
145
- // width: 99%;
146
- // display: flex;
147
- // z-index: 1;
148
- // p {
149
- // vertical-align: middle;
150
- // margin: auto;
151
- // }
152
- // }
153
- // }
154
- // }
155
- // }
156
- // }
157
119
  .uploads-menu {
158
120
  height: 100%;
159
121
  overflow-y: auto;
@@ -331,7 +293,7 @@
331
293
  width: 173px;
332
294
  z-index: 1001;
333
295
  }
334
- }
296
+ }
335
297
 
336
298
  .asset-details .rta .rta__autocomplete {
337
299
  width: 362px;
@@ -388,6 +350,10 @@
388
350
  flex-direction: row;
389
351
  justify-content: space-between;
390
352
  width: 100%;
353
+ .upload-icon {
354
+ padding-left: 2px;
355
+ padding-right: 2px;
356
+ }
391
357
  .tags-column {
392
358
  width: unset;
393
359
  padding: unset;
@@ -22,6 +22,7 @@
22
22
 
23
23
  &.left{
24
24
  right: 0;
25
+ z-index: 2000;
25
26
  }
26
27
  }
27
28
  }
@@ -166,22 +166,60 @@
166
166
  }
167
167
 
168
168
  .confirm-modal {
169
- position: relative;
170
- align-items: center;
171
- display: flex;
172
- flex-direction: column;
173
- top: calc(50% - 38px);
174
- p{
175
- text-align: center;
176
- padding-bottom: 5px;
177
- }
178
- .confirm-buttons {
179
- .imposium-btn {
180
- width: 76px;
181
-
182
- .btn-bold{
183
- border: 1px solid #2D8CEA;
184
- }
185
- }
186
- }
187
- }
169
+ top: calc(50% - 38px);
170
+ p {
171
+ text-align: center;
172
+ padding-bottom: 5px;
173
+ }
174
+ .confirm-buttons {
175
+ .imposium-btn {
176
+ width: 76px;
177
+
178
+ .btn-bold {
179
+ border: 1px solid #2d8cea;
180
+ }
181
+ }
182
+ }
183
+ }
184
+
185
+ .replace-files-modal,
186
+ .confirm-modal {
187
+ position: relative;
188
+ align-items: center;
189
+ display: flex;
190
+ flex-direction: column;
191
+ .confirm-buttons,
192
+ .replace-files-buttons {
193
+ .imposium-btn {
194
+ width: 76px;
195
+
196
+ .btn-bold {
197
+ border: 1px solid #2d8cea;
198
+ }
199
+ }
200
+ }
201
+ }
202
+ .replace-files-modal {
203
+ text-align: center;
204
+ }
205
+
206
+ .replace-files-buttons {
207
+ width: 100%;
208
+ margin-top: 10px;
209
+ .checkbox {
210
+ float: left;
211
+ padding-left: 10px;
212
+ position: relative;
213
+ top: 6px;
214
+ .label-left {
215
+ width: fit-content;
216
+ }
217
+ .checkbox {
218
+ top: 0px;
219
+ }
220
+ }
221
+ .buttons {
222
+ float: right;
223
+ padding-right: 10px;
224
+ }
225
+ }
@@ -131,6 +131,14 @@
131
131
  }
132
132
  }
133
133
 
134
+ .filterable-cell-wrapper .form-field-buttons{
135
+ position:absolute;
136
+ height: 18px;
137
+ top:4px;
138
+ right:0px;
139
+ background:@inputBackground;
140
+ z-index: 1000;
141
+ }
134
142
 
135
143
  .checkbox-field{
136
144
 
@@ -215,6 +223,10 @@
215
223
  input{
216
224
  width:calc(100% - @sliderValWidth);
217
225
  margin:0px;
226
+
227
+ &.toggle{
228
+ width:calc(100% - @sliderValWidth - 18px);
229
+ }
218
230
  }
219
231
 
220
232
  .val{
@@ -231,6 +243,21 @@
231
243
  box-sizing:border-box;
232
244
  background:lighten(@inputBackground, 4%);
233
245
  }
246
+
247
+ .checkbox{
248
+ .inputMixin;
249
+ line-height: 10px;
250
+ border: 1px solid @backgroundLight;
251
+ border-radius: 2px;
252
+ width:18px;
253
+ height:18px;
254
+ padding:2px;
255
+ cursor: pointer;
256
+
257
+ .fa-check {
258
+ margin-left: 1px;
259
+ }
260
+ }
234
261
  }
235
262
 
236
263
  .color-field{
@@ -222,7 +222,7 @@
222
222
  padding-left:4px;
223
223
  height:@storyViewerHeaderHeight;
224
224
  background:darken(@background, 1%);
225
- z-index: 2000;
225
+ z-index: 1000;
226
226
 
227
227
  .output{
228
228
  margin-top:4px;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@imposium-hub/components",
3
- "version": "2.9.0-1",
3
+ "version": "2.9.0-10",
4
4
  "description": "React & Typescript component / asset library for Imposium front-ends",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -58,7 +58,7 @@
58
58
  "@fortawesome/pro-solid-svg-icons": "^6.1.1",
59
59
  "@fortawesome/react-fontawesome": "^0.1.18",
60
60
  "@imposium-hub/react-textarea-autocomplete": "^4.9.13-6",
61
- "axios": "^0.21.1",
61
+ "axios": "^1.9.0",
62
62
  "hotkeys-js": "^3.6.12",
63
63
  "localforage": "^1.7.3",
64
64
  "react": "^17.0.1",
@@ -68,14 +68,13 @@
68
68
  "react-dropzone": "^10.1.6",
69
69
  "react-redux": "^5.0.7",
70
70
  "react-resize-detector": "^6.7.1",
71
+ "react-router": "^3.2.6",
71
72
  "react-spinners": "^0.6.1",
72
73
  "react-table": "^7.7.0",
73
74
  "react-tooltip": "^5.27.0",
74
- "react-router": "^3.2.6",
75
75
  "smpte-timecode": "^1.2.3"
76
76
  },
77
77
  "devDependencies": {
78
- "react-router": "^3.2.6",
79
78
  "@auth0/auth0-react": "^2.3.0",
80
79
  "@fortawesome/fontawesome-svg-core": "^6.7.1",
81
80
  "@fortawesome/free-brands-svg-icons": "^6.7.1",
@@ -101,7 +100,7 @@
101
100
  "@types/resize-observer-browser": "^0.1.5",
102
101
  "@typescript-eslint/eslint-plugin": "^5.26.0",
103
102
  "@typescript-eslint/parser": "^5.26.0",
104
- "axios": "^0.21.1",
103
+ "axios": "^1.9.0",
105
104
  "concurrently": "^7.1.0",
106
105
  "eslint": "^8.14.0",
107
106
  "eslint-config-prettier": "^8.5.0",
@@ -122,6 +121,7 @@
122
121
  "react-dropzone": "^10.1.6",
123
122
  "react-redux": "^5.0.7",
124
123
  "react-resize-detector": "^6.7.1",
124
+ "react-router": "^3.2.6",
125
125
  "react-spinners": "^0.6.1",
126
126
  "react-table": "^7.7.0",
127
127
  "react-tooltip": "^5.27.1",
@@ -8,6 +8,8 @@ import { replaceRoute } from '../../utils/routing';
8
8
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
9
9
  import { faExclamationTriangle } from '@fortawesome/pro-light-svg-icons';
10
10
  import { initPendo } from '../../utils/pendo';
11
+ import { EditGuideModal } from '../edit-guide-modal/EditGuideModal';
12
+ import { ReplaceFilesModal } from '../replace-files-modal/ReplaceFilesModal';
11
13
 
12
14
  export interface IAppWrapperProps {
13
15
  appLabel: string;
@@ -228,6 +230,12 @@ export const AppWrapper: React.FC<IAppWrapperProps> = (props) => {
228
230
  })
229
231
  .catch((e: Error) => {
230
232
  setErrorState(APP_WRAPPER_ERROR_STATES.UNAUTHORIZED_ORG);
233
+
234
+ // Attempt to get the access data again without the org ID, so we can at least shoe the user the org dropdown
235
+ api.init(baseUrl, getAccessTokenSilently, null);
236
+ api.getAccessData(false).then((freshAccess: any) => {
237
+ props.setAccessData(freshAccess);
238
+ });
231
239
  });
232
240
 
233
241
  // If we're not loading, and we're not authenticated, call login, and cache story + org ID from URL if it's there
@@ -279,6 +287,8 @@ export const AppWrapper: React.FC<IAppWrapperProps> = (props) => {
279
287
  />
280
288
  {innerContent}
281
289
  <ConfirmModal />
290
+ <EditGuideModal />
291
+ <ReplaceFilesModal />
282
292
  </div>
283
293
  );
284
294
  };
@@ -20,6 +20,7 @@ class AssetsTableAssetIdFilter extends React.PureComponent<IAssetsTableAssetIdFi
20
20
  submittableType='search'
21
21
  value={assetFilters.id}
22
22
  doSubmit={(n) => this.props.updateFilters({ id: n })}
23
+ header={true}
23
24
  />
24
25
  );
25
26
  };
@@ -20,6 +20,7 @@ class AssetsTableNameFilter extends React.PureComponent<IAssetsTableNameFilterPr
20
20
  submittableType='search'
21
21
  value={assetFilters.name}
22
22
  doSubmit={(n) => this.props.updateFilters({ name: n })}
23
+ header={true}
23
24
  />
24
25
  );
25
26
  };
@@ -19,6 +19,7 @@ class AssetsTableTagsFilter extends React.PureComponent<IAssetsTableTagsFilterPr
19
19
  submittableType='search'
20
20
  value={assetFilters.tags}
21
21
  doSubmit={(t) => this.props.updateFilters({ tags: t })}
22
+ header={true}
22
23
  />
23
24
  );
24
25
  };
@@ -18,7 +18,7 @@ import AssetsTableTagsPivot from './AssetsTableTagsPivot';
18
18
  import Tag from '../tag/Tag';
19
19
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
20
20
  import { faEraser } from '@fortawesome/free-solid-svg-icons';
21
- import { ICON_TIMES, ICON_UPLOAD } from '../../constants/icons';
21
+ import { ICON_FILE_ADD, ICON_FILE_REPLACE, ICON_TIMES, ICON_UPLOAD } from '../../constants/icons';
22
22
  import AssetsTableDropzone from './AssetsTableDropzone';
23
23
 
24
24
  interface IAssetsUploadMenuProps {
@@ -148,7 +148,7 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps, IAsse
148
148
 
149
149
  public render() {
150
150
  const {
151
- assetUploads: { uploads },
151
+ assetUploads,
152
152
  editor: {
153
153
  fromCrM,
154
154
  showUploadsMenu,
@@ -163,10 +163,13 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps, IAsse
163
163
  },
164
164
  assetTags
165
165
  } = this.props;
166
+
167
+ const uploads = assetUploads?.uploads || [];
166
168
  const disable = uploads.length > 0 ? false : true;
167
169
 
168
170
  let uploadsListInner;
169
171
  const uploading = [];
172
+
170
173
  if (uploads.length > 0) {
171
174
  uploadsListInner = uploads.map((u: any) => {
172
175
  const { filename, percent, tags } = u;
@@ -182,21 +185,27 @@ class AssetsUploadMenu extends React.PureComponent<IAssetsUploadMenuProps, IAsse
182
185
  </Button>
183
186
  );
184
187
 
185
- const fileTags = tags
186
- ? tags.map((tag: string) => (
187
- <Tag
188
- key={tag}
189
- copy={tag}
190
- colorize={AssetsTableTagsPivot.COLORIZE_TAGS}
191
- />
192
- ))
193
- : [];
188
+ const fileTags =
189
+ tags && !u.assetId
190
+ ? tags.map((tag: string) => (
191
+ <Tag
192
+ key={tag}
193
+ copy={tag}
194
+ colorize={AssetsTableTagsPivot.COLORIZE_TAGS}
195
+ />
196
+ ))
197
+ : [];
194
198
 
195
199
  return (
196
200
  <div
197
201
  className='ongoing-upload'
198
202
  key={filename}>
199
203
  <div className='ongoing-upload-inner'>
204
+ {u.assetId ? (
205
+ <div className='upload-icon'>{ICON_FILE_REPLACE}</div>
206
+ ) : (
207
+ <div className='upload-icon'>{ICON_FILE_ADD}</div>
208
+ )}
200
209
  <input
201
210
  className='upload-filename'
202
211
  value={filename}
@@ -4,6 +4,7 @@ import Modal from '../modal/Modal';
4
4
  import Button from '../button/Button';
5
5
  import { confirm as copy } from '../../constants/copy';
6
6
  import Section from '../section/Section';
7
+ import { confirmModalEvent } from '../../utils/modal';
7
8
 
8
9
  export interface IConfirmModalProps {
9
10
  onYes: () => void;
@@ -65,9 +66,9 @@ export const ConfirmModal = () => {
65
66
  );
66
67
 
67
68
  useEffect(() => {
68
- window.addEventListener('openconfirmmodal', onOpen);
69
+ window.addEventListener(confirmModalEvent, onOpen);
69
70
  return () => {
70
- window.removeEventListener('openconfirmmodal', onOpen);
71
+ window.removeEventListener(confirmModalEvent, onOpen);
71
72
  };
72
73
  }, []);
73
74
 
@@ -0,0 +1,110 @@
1
+ import React, { useCallback, useEffect, useState } from 'react';
2
+ import ReactDOM from 'react-dom';
3
+ import Modal from '../modal/Modal';
4
+ import Button from '../button/Button';
5
+ import Section from '../section/Section';
6
+ import NumberField from '../number-field/NumberField';
7
+
8
+ export interface IEditGuideModalProps {
9
+ guide: number;
10
+ onClose: () => any;
11
+ onContinue: (e) => any;
12
+ isHorizontal: boolean;
13
+ }
14
+
15
+ export const EditGuideModal = () => {
16
+ const [props, setProps] = useState<IEditGuideModalProps>(null);
17
+ const [isOpen, setIsOpen] = useState<boolean>(false);
18
+ const [guide, setGuide] = useState<number>(null);
19
+
20
+ const onOpen = (event) => {
21
+ setProps({
22
+ ...event.detail
23
+ });
24
+ setIsOpen(true);
25
+ };
26
+
27
+ const onClose = () => setIsOpen(false);
28
+
29
+ useEffect(() => {
30
+ window.addEventListener('openeditguidemodal', onOpen);
31
+ return () => {
32
+ window.removeEventListener('openeditguidemodal', onOpen);
33
+ };
34
+ }, []);
35
+
36
+ useEffect(() => {
37
+ if (props?.guide) {
38
+ setGuide(props.guide);
39
+ }
40
+ }, [props?.guide]);
41
+
42
+ const onKeyDown = (e) => {
43
+ if (e.key === 'Enter') {
44
+ e.preventDefault();
45
+ onContinue(guide);
46
+ }
47
+ };
48
+
49
+ useEffect(() => {
50
+ if (isOpen) {
51
+ window.addEventListener('keypress', onKeyDown);
52
+ } else {
53
+ window.removeEventListener('keypress', onKeyDown);
54
+ }
55
+ return () => {
56
+ window.removeEventListener('keypress', onKeyDown);
57
+ };
58
+ }, [isOpen, onKeyDown]);
59
+
60
+ const onContinue = useCallback(
61
+ (e) => {
62
+ if (e) {
63
+ props.onContinue(e);
64
+ onClose();
65
+ }
66
+ },
67
+ [isOpen]
68
+ );
69
+
70
+ const modal = isOpen && (
71
+ <Modal
72
+ onRequestClose={onClose}
73
+ style={{
74
+ width: '200px',
75
+ height: '110px',
76
+ top: '25%',
77
+ left: '55%'
78
+ }}
79
+ isOpen={true}>
80
+ <Section
81
+ title={`Edit ${props.isHorizontal ? 'Horizontal Guide' : 'Vertical Guide'}`}
82
+ style={{ padding: '10px' }}>
83
+ <NumberField
84
+ label={'Guide Position'}
85
+ labelPosition='top'
86
+ onChange={(e) => setGuide(Number(e))}
87
+ focusOnMount={true}
88
+ value={guide}
89
+ />
90
+ <Button
91
+ onClick={onClose}
92
+ style='bold'
93
+ color='secondary'>
94
+ Cancel
95
+ </Button>
96
+ <Button
97
+ onClick={() => onContinue(guide)}
98
+ style='bold'
99
+ color='primary'>
100
+ Ok
101
+ </Button>
102
+ </Section>
103
+ </Modal>
104
+ );
105
+
106
+ const PortalContextComponent = () =>
107
+ ReactDOM.createPortal(modal, document.querySelector('#react-root'));
108
+
109
+ return <PortalContextComponent />;
110
+ };
@@ -14,6 +14,7 @@ interface IFieldWrapperProps {
14
14
  width?: string | number;
15
15
  labelPosition?: string;
16
16
  labelWidth?: string | number;
17
+ header?: boolean;
17
18
  }
18
19
 
19
20
  interface IFieldWrapperState {
@@ -87,7 +88,7 @@ class FieldWrapper extends React.PureComponent<IFieldWrapperProps, IFieldWrapper
87
88
  }
88
89
 
89
90
  public render() {
90
- const { label, width, customClass } = this.props;
91
+ const { label, width, customClass, header } = this.props;
91
92
  const labelJSX = this.renderLabel();
92
93
 
93
94
  const style = {};
@@ -100,19 +101,22 @@ class FieldWrapper extends React.PureComponent<IFieldWrapperProps, IFieldWrapper
100
101
  }
101
102
 
102
103
  return (
103
- <div
104
- className={`form-field ${customClass} ${this.getLabelClass()}`}
105
- style={style}>
106
- {labelJSX}
104
+ <>
105
+ {header && this.renderButtons()}
107
106
  <div
108
- className={`form-field-content ${this.getLabelClass()}`}
109
- {...fieldProps}>
110
- {this.props.children}
111
- {this.renderButtons()}
107
+ className={`form-field ${customClass} ${this.getLabelClass()}`}
108
+ style={style}>
109
+ {labelJSX}
110
+ <div
111
+ className={`form-field-content ${this.getLabelClass()}`}
112
+ {...fieldProps}>
113
+ {this.props.children}
114
+ {!header && this.renderButtons()}
115
+ </div>
116
+ {renderTooltip(this.tooltipId, this.props.tooltip)}
117
+ {this.renderInfo()}
112
118
  </div>
113
- {renderTooltip(this.tooltipId, this.props.tooltip)}
114
- {this.renderInfo()}
115
- </div>
119
+ </>
116
120
  );
117
121
  }
118
122
 
@@ -73,7 +73,7 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
73
73
 
74
74
  private static readonly SDK_DOCS_LINK: string = 'https://docs.imposium.com/js-sdk/';
75
75
 
76
- private static readonly DEFAULT_ACCOUNT_TOGGLE_COLOR: string = 'royalblue';
76
+ private static readonly DEFAULT_ACCOUNT_TOGGLE_COLOR: string = '#AF1126';
77
77
 
78
78
  private static readonly NO_STORIES_COPY: string = 'No stories were found';
79
79
 
@@ -144,7 +144,7 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
144
144
  : [];
145
145
 
146
146
  let dropdownToggleColor: string = ImposiumHeader.DEFAULT_ACCOUNT_TOGGLE_COLOR;
147
- let activeFirstChar: string = '';
147
+ let activeFirstChar: string = 'X';
148
148
 
149
149
  if (activeOrganizationBlob && activeOrganizationBlob.hasOwnProperty('name')) {
150
150
  dropdownToggleColor = string2HexCode(activeOrganizationBlob.name);
@@ -164,6 +164,7 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
164
164
  const { activeOrganization, api, activeServiceId, unsavedChanges } = this.props;
165
165
 
166
166
  const changeStory = () => {
167
+ api.cancelAllPendingRequests();
167
168
  pushRoute(`/${activeOrganization}/${story.id}`);
168
169
  api.cacheActiveStory(activeServiceId, activeOrganization, story.id);
169
170
  };
@@ -178,8 +179,8 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
178
179
 
179
180
  openConfirmModal({
180
181
  showCancel: true,
181
- noLabel: header.noSave,
182
182
  showNo: true,
183
+ noLabel: header.noSave,
183
184
  onNo: () => changeStory(),
184
185
  yesLabel: header.onSave,
185
186
  onYes: () => onYes(),
@@ -198,8 +199,9 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
198
199
  this.setState({ showAccountDropdown: false });
199
200
 
200
201
  if (orgId) {
201
- const lastModified = getLastModifiedStoryInOrg(orgId, this.props.access);
202
202
  const changeOrg = () => {
203
+ api.cancelAllPendingRequests();
204
+ const lastModified = getLastModifiedStoryInOrg(orgId, this.props.access);
203
205
  let storyId = lastModified;
204
206
  api.getCachedStoryForOrg(activeServiceId, orgId)
205
207
  .then((res) => {
@@ -226,6 +228,7 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
226
228
 
227
229
  openConfirmModal({
228
230
  showCancel: true,
231
+ showNo: true,
229
232
  noLabel: header.noSave,
230
233
  onNo: () => changeOrg(),
231
234
  yesLabel: header.onSave,
@@ -17,6 +17,7 @@ interface INumberFieldProps {
17
17
  min?: number;
18
18
  max?: number;
19
19
  onBlur?(e): void;
20
+ focusOnMount?: boolean;
20
21
  }
21
22
 
22
23
  interface INumberFieldState {
@@ -37,6 +38,9 @@ class NumberField extends React.PureComponent<INumberFieldProps, INumberFieldSta
37
38
  }
38
39
 
39
40
  public componentDidMount(): void {
41
+ if (this.props.focusOnMount && this.inputRef.current) {
42
+ this.inputRef.current.focus();
43
+ }
40
44
  this.setState({
41
45
  error: false,
42
46
  value: this.props.value
@@ -70,8 +74,8 @@ class NumberField extends React.PureComponent<INumberFieldProps, INumberFieldSta
70
74
 
71
75
  private onChange(e) {
72
76
  let val = e.target.value;
73
- if (val === '') {
74
- val = null;
77
+ if (val === '' || val === null) {
78
+ val = this.props.min;
75
79
  } else {
76
80
  val = parseFloat(val);
77
81
  }