learningtribes-studio-frontend 1.4.2-alpha.1 → 1.4.2-alpha.3

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.
@@ -48,9 +48,14 @@ const messages = defineMessages({
48
48
  },
49
49
  editImageModalImageDescriptionLabel: {
50
50
  id: 'editImageModalImageDescriptionLabel',
51
- defaultMessage: 'Image Description (Alt Text)',
51
+ defaultMessage: 'Image Description',
52
52
  description: 'Label for the text input box for an image\'s description',
53
53
  },
54
+ editImageModalImageDecorativeDescription: {
55
+ id: 'editImageModalImageDecorativeDescription',
56
+ defaultMessage: 'If this image is purely decorative, it does not require alternative text.',
57
+ description: 'Help text shown under the image description when alternative text is optional',
58
+ },
54
59
  editImageModalImageDescriptionLegend: {
55
60
  id: 'editImageModalImageDescriptionLegend',
56
61
  defaultMessage: 'Image Description',
@@ -1,4 +1,4 @@
1
- import { Button, 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';
@@ -57,6 +57,7 @@ const initialEditImageModalState = {
57
57
  isModalOpen: false,
58
58
  isStatusAlertOpen: false,
59
59
  pageNumber: 1,
60
+ editingExisting: false,
60
61
  shouldShowPreviousButton: false,
61
62
  };
62
63
 
@@ -122,12 +123,27 @@ export default class EditImageModal extends React.Component {
122
123
  break;
123
124
  }
124
125
  default: {
125
- if (nextProps.selectedAsset.portable_url) {
126
+ if (nextProps.selectedAsset.portable_url &&
127
+ nextProps.selectedAsset.id !== this.props.selectedAsset.id) {
126
128
  newState.imageSource = nextProps.selectedAsset.portable_url;
127
129
  }
128
130
  break;
129
131
  }
130
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
+
131
147
  this.setState(state => ({
132
148
  ...newState,
133
149
  assetsPageType: getPageType(nextProps, state.assetsPageType),
@@ -408,6 +424,8 @@ export default class EditImageModal extends React.Component {
408
424
  <WrappedMessage message={messages.editImageModalImageDescriptionDescription} />
409
425
  {' '}
410
426
  {this.getLearnMoreLink()}
427
+ {' '}
428
+ <WrappedMessage message={messages.editImageModalImageDecorativeDescription} />
411
429
  </React.Fragment>
412
430
  );
413
431
 
@@ -422,8 +440,8 @@ export default class EditImageModal extends React.Component {
422
440
  }}
423
441
  variantIconDescription={<WrappedMessage message={messages.editImageModalFormError} />}
424
442
  >
425
- <div className="form-row">
426
- <div className="col">
443
+ <div className={styles['dimensions-row']}>
444
+ <div className={styles['dimension-field']}>
427
445
  <InputText
428
446
  name="imageWidth"
429
447
  label={
@@ -437,10 +455,8 @@ export default class EditImageModal extends React.Component {
437
455
  onBlur={this.onImageDimensionBlur('width')}
438
456
  />
439
457
  </div>
440
- <div className="col-1 my-auto image-dimensions-x">
441
- <Icon className={['fa', 'fa-times']} />
442
- </div>
443
- <div className="col">
458
+ <span className={styles['dimensions-separator']} aria-hidden="true">x</span>
459
+ <div className={styles['dimension-field']}>
444
460
  <InputText
445
461
  name={imageHeightID}
446
462
  label={
@@ -559,16 +575,16 @@ export default class EditImageModal extends React.Component {
559
575
 
560
576
  getModalHeader = () => {
561
577
  let header;
562
- if (this.state.pageNumber === 1) {
578
+ if (this.state.pageNumber === 2 || this.state.editingExisting) {
563
579
  header = (
564
580
  <WrappedMessage
565
- message={messages.editImageModalInsertTitle}
581
+ message={messages.editImageModalEditTitle}
566
582
  />
567
583
  );
568
- } else if (this.state.pageNumber === 2) {
584
+ } else {
569
585
  header = (
570
586
  <WrappedMessage
571
- message={messages.editImageModalEditTitle}
587
+ message={messages.editImageModalInsertTitle}
572
588
  />
573
589
  );
574
590
  }
@@ -594,11 +610,7 @@ export default class EditImageModal extends React.Component {
594
610
  case pageTypes.NORMAL:
595
611
  return (<WrappedAssetsList />);
596
612
  case pageTypes.NO_ASSETS:
597
- return (
598
- <div className="mt-3">
599
- <WrappedMessage message={messages.editImageModalAssetsListNoAssetsMessage} tagName="h3" />
600
- </div>
601
- );
613
+ return null;
602
614
  case pageTypes.NO_RESULTS:
603
615
  return (
604
616
  <React.Fragment>
@@ -649,7 +661,7 @@ export default class EditImageModal extends React.Component {
649
661
  {this.getImageSelectionModalBodyAssetsList(this.state.assetsPageType)}
650
662
  </div>
651
663
  </div>
652
- {this.isAssetSelected() && (
664
+ {(this.isAssetSelected() || this.state.imageSource) && (
653
665
  <div className="row mt-3">
654
666
  <div className="col">
655
667
  {/* Hidden image to load dimensions */}
@@ -663,7 +675,7 @@ export default class EditImageModal extends React.Component {
663
675
  style={{ display: 'none' }}
664
676
  />
665
677
  )}
666
- <form ref={this.setImageFormRef}>
678
+ <form className={styles['image-fields']} ref={this.setImageFormRef}>
667
679
  {this.getImageDescriptionInput()}
668
680
  {this.getImageDimensionsInput()}
669
681
  </form>
@@ -684,7 +696,7 @@ export default class EditImageModal extends React.Component {
684
696
  {this.getImagePreview()}
685
697
  </div>
686
698
  <div className="col">
687
- <form ref={this.setImageFormRef}>
699
+ <form className={styles['image-fields']} ref={this.setImageFormRef}>
688
700
  {this.getImageDescriptionInput()}
689
701
  {this.getImageDimensionsInput()}
690
702
  </form>
@@ -696,12 +708,7 @@ export default class EditImageModal extends React.Component {
696
708
  getModalButtons = () => {
697
709
  let buttons;
698
710
  if (this.state.pageNumber === 1) {
699
- // Show Save button if asset is selected, otherwise show Next button
700
- if (this.isAssetSelected()) {
701
- buttons = this.getInsertImageButton();
702
- } else {
703
- buttons = this.getNextPageButton();
704
- }
711
+ buttons = this.getInsertImageButton();
705
712
  } else if (this.state.pageNumber === 2) {
706
713
  buttons = this.getInsertImageButton();
707
714
  }
@@ -742,6 +749,7 @@ export default class EditImageModal extends React.Component {
742
749
  />
743
750
  }
744
751
  buttonType="primary"
752
+ disabled={!this.isAssetSelected() && !this.state.imageSource}
745
753
  onClick={this.onInsertImageButtonClick}
746
754
  />
747
755
  );
@@ -785,16 +793,15 @@ export default class EditImageModal extends React.Component {
785
793
  } : {},
786
794
  imageSource: eventSource || '',
787
795
  imageStyle: event.detail.style || '',
796
+ editingExisting: !isEventSourceEmpty,
788
797
  // if existing img had a source, assume it could be loaded and show the image preview
789
798
  isImageLoaded: !!eventSource,
790
799
  isModalOpen: true,
791
- pageNumber: isEventSourceEmpty ? 1 : 2,
792
- shouldShowPreviousButton: isEventSourceEmpty,
800
+ pageNumber: 1,
801
+ shouldShowPreviousButton: false,
793
802
  }));
794
803
 
795
- if (this.props.assetsList.length === 0) {
796
- this.props.getAssets({ assetTypes: { Images: true }, pageSize: 1000 }, this.props.courseDetails);
797
- }
804
+ this.props.getAssets({ assetTypes: { Images: true }, pageSize: 1000 }, this.props.courseDetails);
798
805
  }
799
806
 
800
807
  validateImageDescription = () => {
@@ -145,12 +145,13 @@
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
153
  "editImageModalImagePreviewText": "Image Preview",
153
- "editImageModalInsertImageButton": "Insert Image",
154
+ "editImageModalInsertImageButton": "Save",
154
155
  "editImageModalLearnMore": "Learn more.",
155
156
  "editImageModalLockImageProportionsCheckboxLabel": "Lock proportions",
156
157
  "editImageModalImageWidth": "Width",