Merge pull request #1147 from cptran777/disable-save-and-reverse-owners

On ownership tab, disables save button when no changes have been made…
This commit is contained in:
Charlie Tran 2018-05-08 13:29:42 -07:00 committed by GitHub
commit 1bc19975ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 7 deletions

View File

@ -21,6 +21,8 @@ import {
import { OwnerSource, OwnerType } from 'wherehows-web/utils/api/datasets/owners';
import Notifications, { NotificationEvent } from 'wherehows-web/services/notifications';
type Comparator = -1 | 0 | 1;
/**
* Defines properties for the component that renders a list of owners and provides functionality for
* interacting with the list items or the list as whole
@ -64,6 +66,20 @@ export default class DatasetAuthors extends Component {
*/
userLookup: ComputedProperty<UserLookup> = inject();
/**
* If there are no changes to the ownership tab, we want to keep the save button disabled. Rather than
* try to compare two sets of prev vs new data, we just have a flag here that short stops the validation
* function.
* Note: changedState has 3 states:
* -1 Component hasn't completed initialization yet, and no changes have been made. When
* requiredMinNotConfirmed is run on init/render, this gets incremented to its neutral state at 0
* 0 No changes have been made yet
* 1 At least one change has been made
* @type {number}
* @memberof DatasetAuthors
*/
changedState: Comparator = -1;
/**
* Reference to the userNamesResolver function to asynchronously match userNames
* @type {UserLookup.userNamesResolver}
@ -86,7 +102,14 @@ export default class DatasetAuthors extends Component {
requiredMinNotConfirmed: ComputedProperty<boolean> = computed('confirmedOwners.@each.type', function(
this: DatasetAuthors
) {
return isRequiredMinOwnersNotConfirmed(get(this, 'confirmedOwners'));
const changedState = get(this, 'changedState');
if (changedState < 1) {
set(this, 'changedState', <Comparator>(changedState + 1));
}
// If there have been no changes, then we want to automatically set true in order to disable save button
// when no changes have been made
return changedState === -1 ? true : isRequiredMinOwnersNotConfirmed(get(this, 'confirmedOwners'));
});
/**
@ -94,7 +117,9 @@ export default class DatasetAuthors extends Component {
* @type {ComputedProperty<number>}
* @memberof DatasetAuthors
*/
ownersRequiredCount: ComputedProperty<number> = computed('confirmedOwners.[]', function(this: DatasetAuthors) {
ownersRequiredCount: ComputedProperty<number> = computed('confirmedOwners.@each.type', function(
this: DatasetAuthors
) {
return minRequiredConfirmedOwners - validConfirmedOwners(get(this, 'confirmedOwners')).length;
});
@ -180,7 +205,7 @@ export default class DatasetAuthors extends Component {
}
const { userName } = get(get(this, 'currentUser'), 'currentUser');
const updatedOwners = [newOwner, ...owners];
const updatedOwners = [...owners, newOwner];
confirmOwner(newOwner, userName);
return owners.setObjects(updatedOwners);

View File

@ -233,11 +233,15 @@
<div class="dataset-authors-save-error">
<p>
{{fa-icon "times-circle-o" class="dataset-authors-save-error__icon"}}
{{#unless hasChanged}}
Please make changes to save.
{{else}}
{{#if (eq ownersRequiredCount 2)}}
Add at least 2 DataOwners.
{{else}}
Add at least {{ownersRequiredCount}} more DataOwner(s).
{{/if}}
{{/unless}}
</p>
</div>
{{/if}}