Skip to content

Commit d20c0ef

Browse files
committed
Improve messages explaining why Save button is disabled in sub forms
1 parent 7e279d7 commit d20c0ef

File tree

3 files changed

+38
-22
lines changed

3 files changed

+38
-22
lines changed

src/client/js/services/record-handler.ts

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1092,47 +1092,63 @@ module fng.services {
10921092
$scope.whyDisabled = undefined;
10931093
let pristine = false;
10941094

1095-
if ($scope[$scope.topLevelFormName]) {
1096-
if ($scope[$scope.topLevelFormName].$invalid) {
1097-
$scope.whyDisabled = 'The form data is invalid:';
1098-
$scope[$scope.topLevelFormName].$$controls.forEach(c => {
1099-
if (c.$invalid) {
1100-
$scope.whyDisabled += '<br /><strong>';
1101-
1095+
function generateWhyDisabledMessage(form, subFormName?: string) {
1096+
form.$$controls.forEach(c => {
1097+
if (c.$invalid) {
1098+
if (c.$$controls) {
1099+
// nested form
1100+
generateWhyDisabledMessage(c, c.$name)
1101+
} else {
1102+
$scope.whyDisabled += "<br /><strong>";
1103+
if (subFormName) {
1104+
$scope.whyDisabled += subFormName + ' ';
1105+
}
11021106
if (
1103-
cssFrameworkService.framework() === 'bs2' &&
1107+
cssFrameworkService.framework() === "bs2" &&
11041108
c.$$element &&
11051109
c.$$element.parent() &&
11061110
c.$$element.parent().parent() &&
1107-
c.$$element.parent().parent().find('label') &&
1108-
c.$$element.parent().parent().find('label').text()
1111+
c.$$element.parent().parent().find("label") &&
1112+
c.$$element.parent().parent().find("label").text()
11091113
) {
1110-
$scope.whyDisabled += c.$$element.parent().parent().find('label').text()
1114+
$scope.whyDisabled += c.$$element.parent().parent().find("label").text();
11111115
} else if (
1112-
cssFrameworkService.framework() === 'bs3' &&
1116+
cssFrameworkService.framework() === "bs3" &&
11131117
c.$$element &&
11141118
c.$$element.parent() &&
11151119
c.$$element.parent().parent() &&
11161120
c.$$element.parent().parent().parent() &&
1117-
c.$$element.parent().parent().parent().find('label') &&
1118-
c.$$element.parent().parent().parent().find('label').text()
1121+
c.$$element.parent().parent().parent().find("label") &&
1122+
c.$$element.parent().parent().parent().find("label").text()
11191123
) {
1120-
$scope.whyDisabled += c.$$element.parent().parent().parent().find('label').text()
1124+
$scope.whyDisabled += c.$$element.parent().parent().parent().find("label").text();
11211125
} else {
11221126
$scope.whyDisabled += c.$name;
11231127
}
1124-
$scope.whyDisabled += '</strong>: ';
1128+
$scope.whyDisabled += "</strong>: ";
11251129
if (c.$error) {
11261130
for (let type in c.$error) {
11271131
switch (type) {
1128-
case 'required': $scope.whyDisabled += 'Field missing required value. '; break;
1129-
case 'pattern': $scope.whyDisabled += 'Field does not match required pattern. '; break;
1130-
default: $scope.whyDisabled += type + '. ';
1132+
case "required":
1133+
$scope.whyDisabled += "Field missing required value. ";
1134+
break;
1135+
case "pattern":
1136+
$scope.whyDisabled += "Field does not match required pattern. ";
1137+
break;
1138+
default:
1139+
$scope.whyDisabled += type + ". ";
11311140
}
11321141
}
11331142
}
11341143
}
1135-
})
1144+
}
1145+
});
1146+
}
1147+
1148+
if ($scope[$scope.topLevelFormName]) {
1149+
if ($scope[$scope.topLevelFormName].$invalid) {
1150+
$scope.whyDisabled = 'The form data is invalid:';
1151+
generateWhyDisabledMessage($scope[$scope.topLevelFormName]);
11361152
} else if ($scope[$scope.topLevelFormName].$pristine) {
11371153
// Don't have disabled message - should be obvious from Cancel being disabled,
11381154
// and the message comes up when the Save button is clicked.

website/app/models/f_nested_schema.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

website/app/models/f_nested_schema.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { IFngSchemaDefinition } from "../../../src/fng-schema";
44

55
const ExamsSchemaDef : IFngSchemaDefinition = {
66
subject: {type: String, required: true},
7-
examDate: {type: Date, required: true},
7+
examDate: {type: Date, required: true, default: new Date(), form: {add: " ng-model-options=\"{timezone:'UTC'}\""}},
88
score: Number,
99
result: {type: String, enum: ['distinction', 'merit', 'pass', 'fail']},
1010
scan: {type: [new Schema(jqUploads.FileSchema)], form: {hidden: true, help:'Attach a scan of the paper - maximum size 0.5MB', directive: 'fng-jq-upload-form', fngJqUploadForm:{single:true, autoUpload: true, sizeLimit:524288}}},

0 commit comments

Comments
 (0)