learningtribes-studio-frontend 1.4.2-alpha.0 → 1.4.2-alpha.2

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 (33) hide show
  1. package/dist/accessibilityPolicy.min.js +2 -2
  2. package/dist/assets.min.css +1 -1
  3. package/dist/assets.min.js +1 -1
  4. package/dist/assets.min.js.map +1 -1
  5. package/dist/common.min.css +2 -2
  6. package/dist/common.min.js +9 -9
  7. package/dist/common.min.js.map +1 -1
  8. package/dist/courseHealthCheck.min.js +1 -1
  9. package/dist/courseOutlineHealthCheck.min.js +1 -1
  10. package/dist/editImageModal.min.css +1 -1
  11. package/dist/editImageModal.min.js +1 -1
  12. package/dist/editImageModal.min.js.map +1 -1
  13. package/dist/i18n/messages/ar.json +0 -3
  14. package/dist/i18n/messages/es_419.json +0 -3
  15. package/dist/i18n/messages/fr.json +0 -3
  16. package/dist/i18n/messages/zh_CN.json +0 -3
  17. package/dist/i18nMessages.min.js +1 -1
  18. package/dist/i18nMessages.min.js.map +1 -1
  19. package/package.json +1 -1
  20. package/src/components/AssetsDropZone/AssetsDropZone.scss +49 -59
  21. package/src/components/AssetsDropZone/AssetsDropZone.test.jsx +1 -1
  22. package/src/components/AssetsDropZone/index.jsx +15 -19
  23. package/src/components/AssetsList/AssetsList.scss +48 -41
  24. package/src/components/AssetsList/index.jsx +9 -4
  25. package/src/components/EditImageModal/EditImageModal.scss +59 -35
  26. package/src/components/EditImageModal/EditImageModal.test.jsx +27 -176
  27. package/src/components/EditImageModal/displayMessages.jsx +6 -16
  28. package/src/components/EditImageModal/index.jsx +40 -88
  29. package/src/data/i18n/default/transifex_input.json +3 -5
  30. package/src/data/i18n/locales/ar.json +0 -3
  31. package/src/data/i18n/locales/es_419.json +0 -3
  32. package/src/data/i18n/locales/fr.json +0 -3
  33. package/src/data/i18n/locales/zh_CN.json +0 -3
@@ -1,4 +1,4 @@
1
- import { Button, CheckBox, Fieldset, Icon, InputText, Modal, StatusAlert, Variant } from '@edx/paragon';
1
+ import { Button, CheckBox, Fieldset, InputText, Modal, StatusAlert, Variant } from '@edx/paragon';
2
2
  import classNames from 'classnames';
3
3
  import { connect } from 'react-redux';
4
4
  import FontAwesomeStyles from 'font-awesome/css/font-awesome.min.css';
@@ -16,7 +16,6 @@ import WrappedAssetsDropZone from '../AssetsDropZone/container';
16
16
  import WrappedAssetsList from '../AssetsList/container';
17
17
  import WrappedAssetsSearch from '../AssetsSearch/container';
18
18
  import WrappedMessage from '../../utils/i18n/formattedMessageWrapper';
19
- import WrappedPagination from '../Pagination/container';
20
19
 
21
20
 
22
21
  // Create an AssetsResultsCount that is not aware of the Images filter.
@@ -51,7 +50,6 @@ const initialEditImageModalState = {
51
50
  imageDimensions: {},
52
51
  imageSource: '',
53
52
  imageStyle: '',
54
- isImageDecorative: false,
55
53
  isImageDescriptionValid: true,
56
54
  isImageLoaded: false,
57
55
  isImageLoading: false,
@@ -59,6 +57,7 @@ const initialEditImageModalState = {
59
57
  isModalOpen: false,
60
58
  isStatusAlertOpen: false,
61
59
  pageNumber: 1,
60
+ editingExisting: false,
62
61
  shouldShowPreviousButton: false,
63
62
  };
64
63
 
@@ -74,7 +73,6 @@ export default class EditImageModal extends React.Component {
74
73
  this.onImageDescriptionBlur = this.onImageDescriptionBlur.bind(this);
75
74
  this.onImageDimensionBlur = this.onImageDimensionBlur.bind(this);
76
75
  this.onInsertImageButtonClick = this.onInsertImageButtonClick.bind(this);
77
- this.onImageIsDecorativeClick = this.onImageIsDecorativeClick.bind(this);
78
76
  this.onImageLoad = this.onImageLoad.bind(this);
79
77
  this.onNextPageButtonClick = this.onNextPageButtonClick.bind(this);
80
78
  this.onPreviousPageButtonClick = this.onPreviousPageButtonClick.bind(this);
@@ -125,12 +123,27 @@ export default class EditImageModal extends React.Component {
125
123
  break;
126
124
  }
127
125
  default: {
128
- if (nextProps.selectedAsset.portable_url) {
126
+ if (nextProps.selectedAsset.portable_url &&
127
+ nextProps.selectedAsset.id !== this.props.selectedAsset.id) {
129
128
  newState.imageSource = nextProps.selectedAsset.portable_url;
130
129
  }
131
130
  break;
132
131
  }
133
132
  }
133
+
134
+ if (nextProps.assetsStatus.type !== assetActions.upload.UPLOAD_ASSET_SUCCESS &&
135
+ !nextProps.selectedAsset.id && this.state.imageSource && nextProps.assetsList.length) {
136
+ const source = this.state.imageSource;
137
+ const match = nextProps.assetsList.find(asset => (
138
+ asset.id && (
139
+ asset.portable_url === source || asset.url === source || asset.external_url === source
140
+ )
141
+ ));
142
+ if (match) {
143
+ nextProps.selectAsset(match);
144
+ }
145
+ }
146
+
134
147
  this.setState(state => ({
135
148
  ...newState,
136
149
  assetsPageType: getPageType(nextProps, state.assetsPageType),
@@ -167,12 +180,6 @@ export default class EditImageModal extends React.Component {
167
180
  ));
168
181
  }
169
182
 
170
- onImageIsDecorativeClick = (checked) => {
171
- this.setState({
172
- isImageDecorative: checked,
173
- });
174
- }
175
-
176
183
  onImageLoad = (event) => {
177
184
  const img = event.target;
178
185
 
@@ -277,6 +284,7 @@ export default class EditImageModal extends React.Component {
277
284
  if (isValidFormContent) {
278
285
  // Use the form ref if available, otherwise dispatch from modal wrapper
279
286
  const targetElement = this.imageFormRef || this.modalWrapperRef;
287
+ const altText = this.state.imageDescription || '';
280
288
  targetElement.dispatchEvent(new CustomEvent('submitForm',
281
289
  {
282
290
  bubbles: true,
@@ -284,7 +292,7 @@ export default class EditImageModal extends React.Component {
284
292
  height: this.getDimensionStateOrNatural('height'),
285
293
  width: this.getDimensionStateOrNatural('width'),
286
294
  src: this.state.imageSource,
287
- alt: this.state.isImageDecorative ? '' : this.state.imageDescription,
295
+ alt: altText,
288
296
  style: this.state.imageStyle,
289
297
  },
290
298
  },
@@ -389,27 +397,9 @@ export default class EditImageModal extends React.Component {
389
397
  id={imageDescriptionID}
390
398
  type="text"
391
399
  value={this.state.imageDescription}
392
- disabled={this.state.isImageDecorative}
393
400
  onBlur={this.onImageDescriptionBlur}
394
401
  inputRef={this.setImageDescriptionInputRef}
395
402
  />
396
- <div className="or-fields">
397
- <WrappedMessage
398
- message={messages.editImageModalImageOrFields}
399
- />
400
- </div>
401
- <CheckBox
402
- id="isDecorative"
403
- name="isDecorative"
404
- label={
405
- <WrappedMessage
406
- message={messages.editImageModalImageIsDecorativeCheckboxLabel}
407
- />
408
- }
409
- description={this.getImageIsDecorativeDescription()}
410
- checked={this.state.isImageDecorative}
411
- onChange={this.onImageIsDecorativeClick}
412
- />
413
403
  </Fieldset>
414
404
  );
415
405
 
@@ -434,14 +424,8 @@ export default class EditImageModal extends React.Component {
434
424
  <WrappedMessage message={messages.editImageModalImageDescriptionDescription} />
435
425
  {' '}
436
426
  {this.getLearnMoreLink()}
437
- </React.Fragment>
438
- );
439
-
440
- getImageIsDecorativeDescription = () => (
441
- <React.Fragment>
442
- <WrappedMessage message={messages.editImageModalImageIsDecorativeCheckboxDescription} />
443
427
  {' '}
444
- {this.getLearnMoreLink()}
428
+ <WrappedMessage message={messages.editImageModalImageDecorativeDescription} />
445
429
  </React.Fragment>
446
430
  );
447
431
 
@@ -456,8 +440,8 @@ export default class EditImageModal extends React.Component {
456
440
  }}
457
441
  variantIconDescription={<WrappedMessage message={messages.editImageModalFormError} />}
458
442
  >
459
- <div className="form-row">
460
- <div className="col">
443
+ <div className={styles['dimensions-row']}>
444
+ <div className={styles['dimension-field']}>
461
445
  <InputText
462
446
  name="imageWidth"
463
447
  label={
@@ -471,10 +455,8 @@ export default class EditImageModal extends React.Component {
471
455
  onBlur={this.onImageDimensionBlur('width')}
472
456
  />
473
457
  </div>
474
- <div className="col-1 my-auto image-dimensions-x">
475
- <Icon className={['fa', 'fa-times']} />
476
- </div>
477
- <div className="col">
458
+ <span className={styles['dimensions-separator']} aria-hidden="true">x</span>
459
+ <div className={styles['dimension-field']}>
478
460
  <InputText
479
461
  name={imageHeightID}
480
462
  label={
@@ -593,16 +575,16 @@ export default class EditImageModal extends React.Component {
593
575
 
594
576
  getModalHeader = () => {
595
577
  let header;
596
- if (this.state.pageNumber === 1) {
578
+ if (this.state.pageNumber === 2 || this.state.editingExisting) {
597
579
  header = (
598
580
  <WrappedMessage
599
- message={messages.editImageModalInsertTitle}
581
+ message={messages.editImageModalEditTitle}
600
582
  />
601
583
  );
602
- } else if (this.state.pageNumber === 2) {
584
+ } else {
603
585
  header = (
604
586
  <WrappedMessage
605
- message={messages.editImageModalEditTitle}
587
+ message={messages.editImageModalInsertTitle}
606
588
  />
607
589
  );
608
590
  }
@@ -628,11 +610,7 @@ export default class EditImageModal extends React.Component {
628
610
  case pageTypes.NORMAL:
629
611
  return (<WrappedAssetsList />);
630
612
  case pageTypes.NO_ASSETS:
631
- return (
632
- <div className="mt-3">
633
- <WrappedMessage message={messages.editImageModalAssetsListNoAssetsMessage} tagName="h3" />
634
- </div>
635
- );
613
+ return null;
636
614
  case pageTypes.NO_RESULTS:
637
615
  return (
638
616
  <React.Fragment>
@@ -683,14 +661,7 @@ export default class EditImageModal extends React.Component {
683
661
  {this.getImageSelectionModalBodyAssetsList(this.state.assetsPageType)}
684
662
  </div>
685
663
  </div>
686
- {this.state.assetsPageType === pageTypes.NORMAL && (
687
- <div className="row mt-2 no-gutters">
688
- <div className="col">
689
- <WrappedPagination />
690
- </div>
691
- </div>
692
- )}
693
- {this.isAssetSelected() && (
664
+ {(this.isAssetSelected() || this.state.imageSource) && (
694
665
  <div className="row mt-3">
695
666
  <div className="col">
696
667
  {/* Hidden image to load dimensions */}
@@ -704,7 +675,7 @@ export default class EditImageModal extends React.Component {
704
675
  style={{ display: 'none' }}
705
676
  />
706
677
  )}
707
- <form ref={this.setImageFormRef}>
678
+ <form className={styles['image-fields']} ref={this.setImageFormRef}>
708
679
  {this.getImageDescriptionInput()}
709
680
  {this.getImageDimensionsInput()}
710
681
  </form>
@@ -725,7 +696,7 @@ export default class EditImageModal extends React.Component {
725
696
  {this.getImagePreview()}
726
697
  </div>
727
698
  <div className="col">
728
- <form ref={this.setImageFormRef}>
699
+ <form className={styles['image-fields']} ref={this.setImageFormRef}>
729
700
  {this.getImageDescriptionInput()}
730
701
  {this.getImageDimensionsInput()}
731
702
  </form>
@@ -737,12 +708,7 @@ export default class EditImageModal extends React.Component {
737
708
  getModalButtons = () => {
738
709
  let buttons;
739
710
  if (this.state.pageNumber === 1) {
740
- // Show Save button if asset is selected, otherwise show Next button
741
- if (this.isAssetSelected()) {
742
- buttons = this.getInsertImageButton();
743
- } else {
744
- buttons = this.getNextPageButton();
745
- }
711
+ buttons = this.getInsertImageButton();
746
712
  } else if (this.state.pageNumber === 2) {
747
713
  buttons = this.getInsertImageButton();
748
714
  }
@@ -783,6 +749,7 @@ export default class EditImageModal extends React.Component {
783
749
  />
784
750
  }
785
751
  buttonType="primary"
752
+ disabled={!this.isAssetSelected() && !this.state.imageSource}
786
753
  onClick={this.onInsertImageButtonClick}
787
754
  />
788
755
  );
@@ -826,34 +793,19 @@ export default class EditImageModal extends React.Component {
826
793
  } : {},
827
794
  imageSource: eventSource || '',
828
795
  imageStyle: event.detail.style || '',
829
- isImageDecorative: event.detail.alt === '',
796
+ editingExisting: !isEventSourceEmpty,
830
797
  // if existing img had a source, assume it could be loaded and show the image preview
831
798
  isImageLoaded: !!eventSource,
832
799
  isModalOpen: true,
833
- pageNumber: isEventSourceEmpty ? 1 : 2,
834
- shouldShowPreviousButton: isEventSourceEmpty,
800
+ pageNumber: 1,
801
+ shouldShowPreviousButton: false,
835
802
  }));
836
803
 
837
- if (this.props.assetsList.length === 0) {
838
- this.props.getAssets({ assetTypes: { Images: true }, pageSize: 4 }, this.props.courseDetails);
839
- }
804
+ this.props.getAssets({ assetTypes: { Images: true }, pageSize: 1000 }, this.props.courseDetails);
840
805
  }
841
806
 
842
807
  validateImageDescription = () => {
843
- let feedback = { isValid: true };
844
- const { imageDescription, isImageDecorative } = this.state;
845
-
846
- if (!imageDescription && !isImageDecorative) {
847
- feedback = {
848
- isValid: false,
849
- validationMessage:
850
- (<WrappedMessage
851
- message={messages.editImageModalFormValidImageDescription}
852
- />),
853
- dangerIconDescription: <WrappedMessage message={messages.editImageModalFormError} />,
854
- };
855
- }
856
- return feedback;
808
+ return { isValid: true };
857
809
  }
858
810
 
859
811
  validateImageDimensions = () => {
@@ -145,21 +145,19 @@
145
145
  "editImageModalFormValidImageDescription": "Add an image description or specify that the image is decorative only.",
146
146
  "editImageModalFormValidImageDimensions": "Image dimensions must be positive numbers.",
147
147
  "editImageModalImageDescriptionDescription": "Alternative text for users who cannot view the image, such as \"The sky with clouds\".",
148
- "editImageModalImageDescriptionLabel": "Image Description (Alt Text)",
148
+ "editImageModalImageDescriptionLabel": "Image Description",
149
+ "editImageModalImageDecorativeDescription": "If this image is purely decorative, it does not require alternative text.",
149
150
  "editImageModalImageDescriptionLegend": "Image Description",
150
151
  "editImageModalDimensionsLegend": "Image Dimensions",
151
152
  "editImageModalImageHeight": "Height",
152
- "editImageModalImageIsDecorativeCheckboxDescription": "This image is a background or other image that does not require alternative text.",
153
- "editImageModalImageIsDecorativeCheckboxLabel": "This image is decorative only",
154
153
  "editImageModalImagePreviewText": "Image Preview",
155
- "editImageModalInsertImageButton": "Insert Image",
154
+ "editImageModalInsertImageButton": "Save",
156
155
  "editImageModalLearnMore": "Learn more.",
157
156
  "editImageModalLockImageProportionsCheckboxLabel": "Lock proportions",
158
157
  "editImageModalImageWidth": "Width",
159
158
  "editImageModalInsertTitle": "Add an Image",
160
159
  "editImageModalInsertHeader": "Select a previously uploaded image",
161
160
  "editImageModalEditTitle": "Edit Image Settings",
162
- "editImageModalImageOrFields": "or",
163
161
  "editImageModalNextPageButton": "Next",
164
162
  "editImageModalPreviousPageButton": "Back",
165
163
  "editImageModalInvalidFileType": "Files must be images, such as .jpg, .png, and .tiff files. No files were uploaded.",
@@ -149,8 +149,6 @@
149
149
  "editImageModalImageDescriptionLegend": "Image Description",
150
150
  "editImageModalDimensionsLegend": "Image Dimensions",
151
151
  "editImageModalImageHeight": "Height",
152
- "editImageModalImageIsDecorativeCheckboxDescription": "This image is a background or other image that does not require alternative text.",
153
- "editImageModalImageIsDecorativeCheckboxLabel": "This image is decorative only",
154
152
  "editImageModalImagePreviewText": "Image Preview",
155
153
  "editImageModalInsertImageButton": "Insert Image",
156
154
  "editImageModalLearnMore": "Learn more.",
@@ -159,7 +157,6 @@
159
157
  "editImageModalInsertTitle": "Add an Image",
160
158
  "editImageModalInsertHeader": "Select a previously uploaded image",
161
159
  "editImageModalEditTitle": "Edit Image Settings",
162
- "editImageModalImageOrFields": "or",
163
160
  "editImageModalNextPageButton": "Next",
164
161
  "editImageModalPreviousPageButton": "Back",
165
162
  "editImageModalInvalidFileType": "Files must be images, such as .jpg, .png, and .tiff files. No files were uploaded.",
@@ -149,8 +149,6 @@
149
149
  "editImageModalImageDescriptionLegend": "Descripción de la imagen",
150
150
  "editImageModalDimensionsLegend": "Dimensiones de la imagen",
151
151
  "editImageModalImageHeight": "Altura",
152
- "editImageModalImageIsDecorativeCheckboxDescription": "Esta imagen es un fondo o otra imagen que no necesita un texto alternativo.",
153
- "editImageModalImageIsDecorativeCheckboxLabel": "Esta es solo una imagen decorativa",
154
152
  "editImageModalImagePreviewText": "Previsualización de Imagen",
155
153
  "editImageModalInsertImageButton": "Insertar imagen",
156
154
  "editImageModalLearnMore": "Saber más.",
@@ -159,7 +157,6 @@
159
157
  "editImageModalInsertTitle": "Añadir una imagen",
160
158
  "editImageModalInsertHeader": "Seleccionar una imagen subida anteriormente",
161
159
  "editImageModalEditTitle": "Editar ajustes de la imagen",
162
- "editImageModalImageOrFields": "o",
163
160
  "editImageModalNextPageButton": "Siguiente",
164
161
  "editImageModalPreviousPageButton": "Volver atrás",
165
162
  "editImageModalInvalidFileType": "Los archivos deben ser imágenes, formatos como .jpg, .png, y .tiff. Ningún archivo fue subido.",
@@ -149,8 +149,6 @@
149
149
  "editImageModalImageDescriptionLegend": "Description de l'Image",
150
150
  "editImageModalDimensionsLegend": "Dimensions de l'image",
151
151
  "editImageModalImageHeight": "Hauteur",
152
- "editImageModalImageIsDecorativeCheckboxDescription": "C'est image de fond ou une autre image ne nécessitant pas de texte alternatif.",
153
- "editImageModalImageIsDecorativeCheckboxLabel": "Cette image est purement décorative",
154
152
  "editImageModalImagePreviewText": "Aperçu de l'image",
155
153
  "editImageModalInsertImageButton": "Insérer l'image",
156
154
  "editImageModalLearnMore": "En savoir plus.",
@@ -159,7 +157,6 @@
159
157
  "editImageModalInsertTitle": "Ajouter une image",
160
158
  "editImageModalInsertHeader": "Sélectionner une image chargée précédemment",
161
159
  "editImageModalEditTitle": "Modifier les paramètres d'images",
162
- "editImageModalImageOrFields": "ou",
163
160
  "editImageModalNextPageButton": "Suivant",
164
161
  "editImageModalPreviousPageButton": "Retour",
165
162
  "editImageModalInvalidFileType": "Les fichiers doivent être des images, du type .jpg, png, et .tiff. Aucun fichier n'a été chargé.",
@@ -148,8 +148,6 @@
148
148
  "editImageModalImageDescriptionLegend": "图片描述",
149
149
  "editImageModalDimensionsLegend": "图片长宽比例",
150
150
  "editImageModalImageHeight": "高度",
151
- "editImageModalImageIsDecorativeCheckboxDescription": "此图像是不需要替代文本的背景或其他图像。",
152
- "editImageModalImageIsDecorativeCheckboxLabel": "此图片仅为装饰",
153
151
  "editImageModalImagePreviewText": "图片预览",
154
152
  "editImageModalInsertImageButton": "插入图片",
155
153
  "editImageModalLearnMore": "了解更多。",
@@ -158,7 +156,6 @@
158
156
  "editImageModalInsertTitle": "添加图片",
159
157
  "editImageModalInsertHeader": "选择一张之前上传的图片",
160
158
  "editImageModalEditTitle": "编辑图片设置",
161
- "editImageModalImageOrFields": "或者",
162
159
  "editImageModalNextPageButton": "下一步",
163
160
  "editImageModalPreviousPageButton": "返回",
164
161
  "editImageModalInvalidFileType": "文件必须是图片,例如 .jpg,.png 和 .tiff 文件。没有文件被上传。",