Skip to content

Commit 05150e5

Browse files
committed
Merge branch 'release/21.3.0'
2 parents 89b8d74 + 3c3a35f commit 05150e5

File tree

25 files changed

+818
-459
lines changed

25 files changed

+818
-459
lines changed

CHANGELOG.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
55
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
66

7+
## [21.3.0] - 2021-04-23
8+
### Added
9+
- support for provider-specific (editable/read-only) registration metadata fields
10+
11+
### Changed
12+
- DX: clean-up mirage scenarios
13+
14+
### Fixed
15+
- tablet view of metadata panel on the registry overview page
16+
717
## [21.2.0] - 2021-04-19
818
### Added
919
- field and relationship for custom metadata field and its schema to registration providers
@@ -1709,7 +1719,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
17091719
### Added
17101720
- Quick Files
17111721

1712-
[Unreleased]: https://github.com/CenterForOpenScience/ember-osf-web/compare/21.2.0...develop
1722+
[Unreleased]: https://github.com/CenterForOpenScience/ember-osf-web/compare/21.3.0...develop
1723+
[21.3.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/21.3.0
17131724
[21.2.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/21.2.0
17141725
[21.1.1]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/21.1.1
17151726
[21.1.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/21.1.0
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
import { action } from '@ember/object';
2+
import { and, reads } from '@ember/object/computed';
3+
import { inject as service } from '@ember/service';
4+
import Component from '@glimmer/component';
5+
import { tracked } from '@glimmer/tracking';
6+
import { task } from 'ember-concurrency-decorators';
7+
import DS from 'ember-data';
8+
import Intl from 'ember-intl/services/intl';
9+
import Toast from 'ember-toastr/services/toast';
10+
11+
import Registration, { ProviderMetadata } from 'ember-osf-web/models/registration';
12+
import CurrentUserService from 'ember-osf-web/services/current-user';
13+
import captureException, { getApiErrorMessage } from 'ember-osf-web/utils/capture-exception';
14+
15+
export interface Args {
16+
registration: Registration;
17+
}
18+
19+
export interface ProviderMetadataManager {
20+
save: () => void;
21+
cancel: () => void;
22+
startEditing: () => void;
23+
inEditMode: boolean;
24+
userCanEdit: boolean;
25+
shouldShowField: () => boolean;
26+
currentProviderMetadata: ProviderMetadata[];
27+
providerSpecificMetadata: ProviderMetadata[];
28+
isSaving: () => boolean;
29+
fieldIsEmpty: () => boolean;
30+
emptyFieldText: string;
31+
}
32+
33+
function compareFieldValues(isEmpty: boolean, item: ProviderMetadata) {
34+
return isEmpty && !item.field_value;
35+
}
36+
37+
function deepCopy(providerMetadata: ProviderMetadata[]) {
38+
return JSON.parse(JSON.stringify(providerMetadata));
39+
}
40+
41+
export default class ProviderMetadataManagerComponent extends Component<Args> {
42+
@service currentUser!: CurrentUserService;
43+
@service intl!: Intl;
44+
@service store!: DS.Store;
45+
@service toast!: Toast;
46+
47+
@task({ withTestWaiter: true })
48+
save = task(function *(this: ProviderMetadataManagerComponent) {
49+
if (this.args.registration) {
50+
try {
51+
this.args.registration.providerSpecificMetadata = deepCopy(this.currentProviderMetadata);
52+
yield this.args.registration.save();
53+
} catch (e) {
54+
const errorMessage = this.intl.t('registries.registration_metadata.edit_provider_metadata.error');
55+
captureException(e, { errorMessage });
56+
this.args.registration.rollbackAttributes();
57+
this.toast.error(getApiErrorMessage(e), errorMessage);
58+
throw e;
59+
}
60+
this.requestedEditMode = false;
61+
this.toast.success(this.intl.t('registries.registration_metadata.edit_provider_metadata.success'));
62+
}
63+
});
64+
65+
@tracked currentProviderMetadata: ProviderMetadata[] = [];
66+
@tracked requestedEditMode: boolean = false;
67+
68+
@reads('args.registration.provider.currentUserCanReview') userCanEdit!: boolean;
69+
@and('userCanEdit', 'requestedEditMode') inEditMode!: boolean;
70+
71+
constructor(owner: unknown, args: Args) {
72+
super(owner, args);
73+
this.setCurrentProviderMetadata();
74+
}
75+
76+
get fieldIsEmpty() {
77+
if (this.args.registration && this.args.registration.providerSpecificMetadata) {
78+
return this.args.registration.providerSpecificMetadata.reduce(compareFieldValues, true);
79+
}
80+
return true;
81+
}
82+
83+
get shouldShowField() {
84+
return this.userCanEdit || !this.fieldIsEmpty;
85+
}
86+
87+
@action
88+
startEditing() {
89+
this.requestedEditMode = true;
90+
}
91+
92+
@action
93+
cancel() {
94+
this.setCurrentProviderMetadata();
95+
this.requestedEditMode = false;
96+
}
97+
98+
setCurrentProviderMetadata() {
99+
this.currentProviderMetadata = deepCopy(this.args.registration.providerSpecificMetadata);
100+
}
101+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{{yield (hash
2+
save=(perform this.save)
3+
cancel=this.cancel
4+
startEditing=this.startEditing
5+
inEditMode=this.inEditMode
6+
userCanEdit=this.userCanEdit
7+
shouldShowField=this.shouldShowField
8+
currentProviderMetadata=this.currentProviderMetadata
9+
providerSpecificMetadata=@registration.providerSpecificMetadata
10+
isSaving=this.save.isRunning
11+
fieldIsEmpty=this.fieldIsEmpty
12+
emptyFieldText=(t 'registries.registration_metadata.no_provider_metadata')
13+
)}}

lib/osf-components/addon/components/gutters/styles.scss

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
// Display a box shadow to either side when opened
4141
&[data-gutter-closed='false'] {
4242
box-shadow: ($modifier * -5px) 0 5px -4px $color-shadow-dark;
43-
overflow: visible;
4443
}
4544

4645
// Slide off the page when closed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
.ProviderMetadata__field {
2+
word-break: break-word;
3+
}
4+
5+
.ProviderMetadataWrapper {
6+
position: relative;
7+
8+
h5 {
9+
margin-bottom: 0;
10+
}
11+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<div
2+
data-test-registration-provider-metadata-wrapper={{@field.field_name}}
3+
local-class='ProviderMetadataWrapper ProviderMetadata__field'
4+
...attributes>
5+
6+
<h5
7+
data-test-registration-provider-metadata-field-name={{@field.field_name}}
8+
>
9+
{{@field.field_name}}:
10+
</h5>
11+
<span
12+
data-test-registration-provider-metadata-field-value={{@field.field_name}}
13+
local-class='ProviderMetadataValue'
14+
>
15+
{{@field.field_value}}
16+
</span>
17+
</div>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
.EditProviderMetadata {
2+
input {
3+
background-color: #ecf0f1;
4+
margin-bottom: 20px;
5+
}
6+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<div
2+
local-class='EditProviderMetadata'
3+
data-test-provider-metadata-edit-div={{@field.field_name}}
4+
>
5+
<span
6+
data-test-provider-metadata-edit-label={{@field.field_name}}
7+
local-class='ProviderMetadataLabel'
8+
>
9+
{{@field.field_name}}
10+
</span>
11+
{{input
12+
data-test-provider-metadata-edit-input=@field.field_name
13+
class='form-control'
14+
value=@field.field_value
15+
disabled=@manager.save.isRunning
16+
}}
17+
</div>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default } from 'osf-components/components/editable-field/provider-metadata-manager/component';
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default } from 'osf-components/components/editable-field/provider-metadata-manager/template';

0 commit comments

Comments
 (0)