Skip to content

Commit

Permalink
feat(Node Authoring): Disable component buttons when none selected (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
geoffreykwan authored Apr 23, 2023
1 parent 7de414f commit f9f8ed1
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 86 deletions.
3 changes: 3 additions & 0 deletions src/assets/wise5/authoringTool/i18n/i18n_en.json
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@
"constraints": "Constraints",
"contentPreview": "Content Preview",
"copy": "Copy",
"copyComponent": "Copy Component",
"copyNodeIdAndComponentIdToMilestone": "Copy Node ID and Component ID to Milestone",
"copyingProject": "Copying Unit",
"copyProjectURLToClipboard": "Copy Unit URL to Clipboard",
Expand All @@ -130,6 +131,7 @@
"creatingProject": "Creating Unit",
"customScoreKey": "Custom Score Key",
"customScoreValues": "Custom Score Values",
"deleteComponent": "Delete Component",
"deleteConstraint": "Delete Constraint",
"deleteCustomScoreValues": "Delete Custom Score Values",
"deleteLocation": "Delete Location",
Expand Down Expand Up @@ -238,6 +240,7 @@
"milestoneName": "Milestone Name",
"milestoneSatisfyCriteria": "Milestone Satisfy Criteria",
"move": "Move",
"moveComponent": "Move Component",
"moveDown": "Move Down",
"moveUp": "Move Up",
"myProjects": "My Units",
Expand Down
67 changes: 37 additions & 30 deletions src/assets/wise5/authoringTool/node/nodeAuthoring.html
Original file line number Diff line number Diff line change
Expand Up @@ -48,42 +48,48 @@
>{{ ::'importComponent' | translate }}</md-tooltip
>
</md-button>
<md-button
id="moveComponentButton"
ng-if="$ctrl.showStepButtons && !$ctrl.isGroupNode"
class="topButton md-raised md-primary"
ng-click="$ctrl.moveButtonClicked()"
ng-disabled="$ctrl.insertComponentMode"
>
<md-icon>redo</md-icon>
<div>
<md-button
id="moveComponentButton"
ng-if="$ctrl.showStepButtons && !$ctrl.isGroupNode"
class="topButton md-raised md-primary"
ng-click="$ctrl.moveButtonClicked()"
ng-disabled="!$ctrl.isAnyComponentSelected || $ctrl.insertComponentMode"
>
<md-icon>redo</md-icon>
</md-button>
<md-tooltip md-direction="top" class="projectButtonTooltip"
>{{ ::'move' | translate }}</md-tooltip
>{{ ::'moveComponent' | translate }}</md-tooltip
>
</md-button>
<md-button
id="copyComponentButton"
ng-if="$ctrl.showStepButtons && !$ctrl.isGroupNode"
class="topButton md-raised md-primary"
ng-click="$ctrl.copyButtonClicked()"
ng-disabled="$ctrl.insertComponentMode"
>
<md-icon>content_copy</md-icon>
</div>
<div>
<md-button
id="copyComponentButton"
ng-if="$ctrl.showStepButtons && !$ctrl.isGroupNode"
class="topButton md-raised md-primary"
ng-click="$ctrl.copyButtonClicked()"
ng-disabled="!$ctrl.isAnyComponentSelected || $ctrl.insertComponentMode"
>
<md-icon>content_copy</md-icon>
</md-button>
<md-tooltip md-direction="top" class="projectButtonTooltip"
>{{ ::'copy' | translate }}</md-tooltip
>{{ ::'copyComponent' | translate }}</md-tooltip
>
</md-button>
<md-button
id="deleteComponentButton"
ng-if="$ctrl.showStepButtons && !$ctrl.isGroupNode"
class="topButton md-raised md-primary"
ng-click="$ctrl.deleteButtonClicked()"
ng-disabled="$ctrl.insertComponentMode"
>
<md-icon>delete</md-icon>
</div>
<div>
<md-button
id="deleteComponentButton"
ng-if="$ctrl.showStepButtons && !$ctrl.isGroupNode"
class="topButton md-raised md-primary"
ng-click="$ctrl.deleteButtonClicked()"
ng-disabled="!$ctrl.isAnyComponentSelected || $ctrl.insertComponentMode"
>
<md-icon>delete</md-icon>
</md-button>
<md-tooltip md-direction="top" class="projectButtonTooltip"
>{{ ::'DELETE' | translate }}</md-tooltip
>{{ ::'deleteComponent' | translate }}</md-tooltip
>
</md-button>
</div>
<md-button
id="editStepRubricButton"
class="topButton md-raised md-primary"
Expand Down Expand Up @@ -212,6 +218,7 @@ <h6 translate="chooseNewLocation"></h6>
<md-checkbox
ng-model="$ctrl.componentsToChecked[component.id]"
ng-disabled="$ctrl.insertComponentMode"
ng-change="$ctrl.componentCheckboxClicked()"
class="md-primary"
>
<span style="font-weight: bold; margin-right: 10px"
Expand Down
104 changes: 48 additions & 56 deletions src/assets/wise5/authoringTool/node/nodeAuthoringComponent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ class NodeAuthoringController {
'tag'
];
insertComponentMode: boolean = false;
isAnyComponentSelected: boolean = false;
isGroupNode: boolean;
items: any[];
moveComponentMode: boolean = false;
Expand Down Expand Up @@ -295,6 +296,7 @@ class NodeAuthoringController {

clearComponentsToChecked() {
this.componentsToChecked = {};
this.isAnyComponentSelected = false;
}

/**
Expand Down Expand Up @@ -327,69 +329,55 @@ class NodeAuthoringController {
}

moveButtonClicked() {
if (this.getSelectedComponentIds().length === 0) {
alert(this.$translate('pleaseSelectAComponentToMoveAndThenClickTheMoveButtonAgain'));
} else {
this.showDefaultComponentsView();
this.turnOnMoveComponentMode();
this.turnOnInsertComponentMode();
this.hideComponentAuthoring();
}
this.showDefaultComponentsView();
this.turnOnMoveComponentMode();
this.turnOnInsertComponentMode();
this.hideComponentAuthoring();
}

copyButtonClicked() {
if (this.getSelectedComponentIds().length === 0) {
alert(this.$translate('pleaseSelectAComponentToCopyAndThenClickTheCopyButtonAgain'));
} else {
this.showDefaultComponentsView();
this.turnOnCopyComponentMode();
this.turnOnInsertComponentMode();
this.hideComponentAuthoring();
}
this.showDefaultComponentsView();
this.turnOnCopyComponentMode();
this.turnOnInsertComponentMode();
this.hideComponentAuthoring();
}

deleteButtonClicked() {
if (this.getSelectedComponentIds().length === 0) {
alert(this.$translate('pleaseSelectAComponentToDeleteAndThenClickTheDeleteButtonAgain'));
} else {
this.scrollToTopOfPage();
this.hideComponentAuthoring();

/*
* Use a timeout to allow the effects of hideComponentAuthoring() to
* take effect. If we don't use a timeout, the user won't see any change
* in the UI.
*/
this.$timeout(() => {
let confirmMessage = '';
const selectedComponentNumbersAndTypes = this.getSelectedComponentNumbersAndTypes();
if (selectedComponentNumbersAndTypes.length == 1) {
confirmMessage = this.$translate('areYouSureYouWantToDeleteThisComponent');
} else if (selectedComponentNumbersAndTypes.length > 1) {
confirmMessage = this.$translate('areYouSureYouWantToDeleteTheseComponents');
}
for (let c = 0; c < selectedComponentNumbersAndTypes.length; c++) {
confirmMessage += '\n' + selectedComponentNumbersAndTypes[c];
}
if (confirm(confirmMessage)) {
const selectedComponents = this.getSelectedComponentIds();
const data = {
componentsDeleted: this.getComponentObjectsForEventData(selectedComponents)
};
for (const componentId of selectedComponents) {
this.ProjectService.deleteComponent(this.nodeId, componentId);
}
this.saveEvent('componentDeleted', 'Authoring', data);
this.checkIfNeedToShowNodeSaveOrNodeSubmitButtons();
this.ProjectService.saveProject();
} else {
this.clearComponentsToChecked();
this.scrollToTopOfPage();
this.hideComponentAuthoring();

/*
* Use a timeout to allow the effects of hideComponentAuthoring() to
* take effect. If we don't use a timeout, the user won't see any change
* in the UI.
*/
this.$timeout(() => {
let confirmMessage = '';
const selectedComponentNumbersAndTypes = this.getSelectedComponentNumbersAndTypes();
if (selectedComponentNumbersAndTypes.length == 1) {
confirmMessage = this.$translate('areYouSureYouWantToDeleteThisComponent');
} else if (selectedComponentNumbersAndTypes.length > 1) {
confirmMessage = this.$translate('areYouSureYouWantToDeleteTheseComponents');
}
for (let c = 0; c < selectedComponentNumbersAndTypes.length; c++) {
confirmMessage += '\n' + selectedComponentNumbersAndTypes[c];
}
if (confirm(confirmMessage)) {
const selectedComponents = this.getSelectedComponentIds();
const data = {
componentsDeleted: this.getComponentObjectsForEventData(selectedComponents)
};
for (const componentId of selectedComponents) {
this.ProjectService.deleteComponent(this.nodeId, componentId);
}
this.turnOffInsertComponentMode();
this.clearComponentsToChecked();
this.showComponentAuthoring();
});
}
this.saveEvent('componentDeleted', 'Authoring', data);
this.checkIfNeedToShowNodeSaveOrNodeSubmitButtons();
this.ProjectService.saveProject();
}
this.turnOffInsertComponentMode();
this.clearComponentsToChecked();
this.showComponentAuthoring();
});
}

cancelInsertClicked() {
Expand Down Expand Up @@ -588,6 +576,10 @@ class NodeAuthoringController {
clickOutsideToClose: true
});
}

componentCheckboxClicked(): void {
this.isAnyComponentSelected = Object.values(this.componentsToChecked).some((value) => value);
}
}

export const NodeAuthoringComponent = {
Expand Down

0 comments on commit f9f8ed1

Please sign in to comment.