Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/min items #306

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -335,11 +335,11 @@ let yourFormLayout = [
]
```

To set messages for the entire form, add them to the form options, inside the defautWidgetOptions validationMessages object, like this:
To set messages for the entire form, add them to the form options, inside the defaultWidgetOptions validationMessages object, like this:

```javascript
let yourFormOptions = {
defautWidgetOptions: {
defaultWidgetOptions: {
validationMessages: {
// Put your error messages for the entire form here
}
Expand Down
2 changes: 1 addition & 1 deletion src/demo/app/demo.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ <h4 class="default-cursor" (click)="toggleVisible('options')">
(default = only add if no layout is defined)
</div>
<div class="check-row">
<mat-checkbox color="primary" [(ngModel)]="jsonFormOptions.defautWidgetOptions.feedback">
<mat-checkbox color="primary" [(ngModel)]="jsonFormOptions.defaultWidgetOptions.feedback">
Show inline fedback?
</mat-checkbox>
(default = false)
Expand Down
6 changes: 3 additions & 3 deletions src/demo/app/demo.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ export class DemoComponent implements OnInit {
loadExternalAssets: true, // Load external css and JavaScript for frameworks
returnEmptyFields: false, // Don't return values for empty input fields
setSchemaDefaults: true, // Always use schema defaults for empty fields
defautWidgetOptions: { feedback: true }, // Show inline feedback icons
defaultWidgetOptions: { feedback: true }, // Show inline feedback icons
};
liveFormData: any = {};
formValidationErrors: any;
Expand Down Expand Up @@ -245,8 +245,8 @@ export class DemoComponent implements OnInit {

toggleFormOption(option: string) {
if (option === 'feedback') {
this.jsonFormOptions.defautWidgetOptions.feedback =
!this.jsonFormOptions.defautWidgetOptions.feedback;
this.jsonFormOptions.defaultWidgetOptions.feedback =
!this.jsonFormOptions.defaultWidgetOptions.feedback;
} else {
this.jsonFormOptions[option] = !this.jsonFormOptions[option];
}
Expand Down
18 changes: 9 additions & 9 deletions src/lib/src/json-schema-form.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@ export class JsonSchemaFormService {
// false = only validate fields after they are touched by user
// 'auto' = validate fields with values immediately, empty fields after they are touched
widgets: {}, // Any custom widgets to load
defautWidgetOptions: { // Default options for form control widgets
listItems: 1, // Number of list items to initially add to arrays with no default value
defaultWidgetOptions: { // Default options for form control widgets
listItems: 0, // Number of list items to initially add to arrays with no default value
addable: true, // Allow adding items to an array or $ref point?
orderable: true, // Allow reordering items within an array?
removable: true, // Allow removing items from an array or $ref point?
Expand All @@ -127,7 +127,7 @@ export class JsonSchemaFormService {
this.language = language;
const validationMessages = language.slice(0, 2) === 'fr' ?
frValidationMessages : enValidationMessages;
this.defaultFormOptions.defautWidgetOptions.validationMessages =
this.defaultFormOptions.defaultWidgetOptions.validationMessages =
_.cloneDeep(validationMessages);
}

Expand Down Expand Up @@ -244,19 +244,19 @@ export class JsonSchemaFormService {
setOptions(newOptions: any) {
if (isObject(newOptions)) {
const addOptions = _.cloneDeep(newOptions);
// Backward compatibility for 'defaultOptions' (renamed 'defautWidgetOptions')
// Backward compatibility for 'defaultOptions' (renamed 'defaultWidgetOptions')
if (isObject(addOptions.defaultOptions)) {
Object.assign(this.formOptions.defautWidgetOptions, addOptions.defaultOptions);
Object.assign(this.formOptions.defaultWidgetOptions, addOptions.defaultOptions);
delete addOptions.defaultOptions;
}
if (isObject(addOptions.defautWidgetOptions)) {
Object.assign(this.formOptions.defautWidgetOptions, addOptions.defautWidgetOptions);
delete addOptions.defautWidgetOptions;
if (isObject(addOptions.defaultWidgetOptions)) {
Object.assign(this.formOptions.defaultWidgetOptions, addOptions.defaultWidgetOptions);
delete addOptions.defaultWidgetOptions;
}
Object.assign(this.formOptions, addOptions);

// convert disableErrorState / disableSuccessState to enable...
const globalDefaults = this.formOptions.defautWidgetOptions;
const globalDefaults = this.formOptions.defaultWidgetOptions;
['ErrorState', 'SuccessState']
.filter(suffix => hasOwn(globalDefaults, 'disable' + suffix))
.forEach(suffix => {
Expand Down
2 changes: 1 addition & 1 deletion src/lib/src/shared/json-schema.functions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,7 @@ export function updateInputOptions(layoutNode, schema, jsf) {
// Set all option values in layoutNode.options
let newOptions: any = { };
const fixUiKeys = key => key.slice(0, 3).toLowerCase() === 'ui:' ? key.slice(3) : key;
mergeFilteredObject(newOptions, jsf.formOptions.defautWidgetOptions, [], fixUiKeys);
mergeFilteredObject(newOptions, jsf.formOptions.defaultWidgetOptions, [], fixUiKeys);
[ [ JsonPointer.get(schema, '/ui:widget/options'), [] ],
[ JsonPointer.get(schema, '/ui:widget'), [] ],
[ schema, [
Expand Down
15 changes: 4 additions & 11 deletions src/lib/src/shared/layout.functions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -225,11 +225,6 @@ export function buildLayout(jsf, widgetLibrary) {
) {
newNode.options.listItems =
newNode.options.maxItems - newNode.options.tupleItems;
} else if (newNode.options.minItems >
newNode.options.tupleItems + newNode.options.listItems
) {
newNode.options.listItems =
newNode.options.minItems - newNode.options.tupleItems;
}
if (!nodeDataMap.has('maxItems')) {
nodeDataMap.set('maxItems', newNode.options.maxItems);
Expand Down Expand Up @@ -454,7 +449,7 @@ export function buildLayout(jsf, widgetLibrary) {
dataType: 'object',
items: fullLayout,
name: '',
options: _.cloneDeep(jsf.formOptions.defautWidgetOptions),
options: _.cloneDeep(jsf.formOptions.defaultWidgetOptions),
recursiveReference: true,
required: false,
type: 'section',
Expand Down Expand Up @@ -599,7 +594,9 @@ export function buildLayoutFromSchema(
if (!newNode.options.minItems && isInputRequired(jsf.schema, schemaPointer)) {
newNode.options.minItems = 1;
}
if (!hasOwn(newNode.options, 'listItems')) { newNode.options.listItems = 1; }
if (!hasOwn(newNode.options, 'listItems')) {
newNode.options.listItems = jsf.formOptions.defaultWidgetOptions.listItems;
}
newNode.options.tupleItems = isArray(schema.items) ? schema.items.length : 0;
if (newNode.options.maxItems <= newNode.options.tupleItems) {
newNode.options.tupleItems = newNode.options.maxItems;
Expand All @@ -608,10 +605,6 @@ export function buildLayoutFromSchema(
newNode.options.tupleItems + newNode.options.listItems
) {
newNode.options.listItems = newNode.options.maxItems - newNode.options.tupleItems;
} else if (newNode.options.minItems >
newNode.options.tupleItems + newNode.options.listItems
) {
newNode.options.listItems = newNode.options.minItems - newNode.options.tupleItems;
}
if (!nodeDataMap.has('maxItems')) {
nodeDataMap.set('maxItems', newNode.options.maxItems);
Expand Down