JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.10/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.10/angular-sanitize.min.js"></script>
<script src="https://textalk.github.io/angular-schema-form/bower_components/tv4/tv4.js"></script>
<script src="https://textalk.github.io/angular-schema-form/bower_components/objectpath/lib/ObjectPath.js"></script>
<script src="https://textalk.github.io/angular-schema-form/dist/schema-form.min.js"></script>
<script src="https://textalk.github.io/angular-schema-form/dist/bootstrap-decorator.min.js"></script>
<body ng-app="test">
<div ng-controller="FormController">
<form name="myForm" sf-schema="schema" sf-form="form" sf-model="model" ng-submit="onSubmit(myForm)" sf-options="{ formDefaults: { ngModelOptions: { allowInvalid: true } }}"></form>
</div>
</body>
CSS
.form-group {
border: 1px solid;
margin-bottom: 10px;
}
.has-error {
border-color: red;
}
.has-success {
border-color: green;
}
JavaScript
var app = angular.module("test", ["schemaForm"]);
app.controller("FormController", function($scope) {
$scope.validateUnique = function(value) {
console.log('running validation');
var sameName = $scope.model.NoDuplicate.filter(function(item) {
return item.key === value;
});
return sameName.length < 2;
}
$scope.schema = {
type: "object",
properties: {
NoDuplicate: {
type: 'array',
items: {
type: 'object',
properties: {
key: {
type: 'string',
}
}
}
}
}
};
$scope.form = [{
type: 'fieldset',
title: 'Items unique',
items: [{
key: 'NoDuplicate',
type: 'array',
add: 'Add item',
items: [{
key: 'NoDuplicate[].key',
placeholder: 'Enter property name',
validationMessage: {
'unique': 'Key must be unique'
},
$validators: {
unique: $scope.validateUnique
}
}]
}]
}, {
type: "submit",
title: "Save"
}];
$scope.model = {};
$scope.onSubmit = function(form) {
console.log('submit');
// First we broadcast an event so all fields validate themselves
$scope.$broadcast('schemaFormValidate');
if (form.$valid) {
console.log('valid');
} else {
console.log('invalid but no other error rendered');
}
}
});