-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfield.schema.json
executable file
·162 lines (162 loc) · 5.99 KB
/
field.schema.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://standards.mnoforms.com/specs/field.schema.json",
"title": "mnoforms : Specification for a Form field",
"description": "The standard form field definition specification for MNO Forms",
"additionalProperties": false,
"type": "object",
"properties": {
"meta": {
"description": "Anything extra should be added here. Let's not compromise the schema",
"type": "object",
"additionalProperties": true,
"properties": {}
},
"name": {
"description": "The field name and key, should be machine friendly without spaces or special characters",
"type": "string"
},
"label": {
"description": "The display label. can contain spaces and special characters",
"type": "string"
},
"type": {
"description": "The field type (datatype) and NOT THE HTML input type. The implementation of the field can be subjected to the form engine, hence this field should not necessarily define the HTML rendering",
"default": "string",
"enum": [
"text",
"number",
"email",
"date",
"time",
"datetime",
"url",
"color",
"range"
]
},
"default": {
"description": "The default value. @todo: how to cover differnet data types in case of default handling",
"type": "string"
},
"attributes": {
"description": "The data attributes other than custom validations",
"type": "object",
"additionalProperties": false,
"properties": {
"is_required": {
"description": "Is the field required",
"type": "boolean"
},
"is_null": {
"description": "Can the field have null values",
"type": "boolean"
}
}
},
"render": {
"description": "The rendering options for the field",
"type": "object",
"additionalProperties": false,
"properties": {
"input": {
"description": "The input type for the field. This is the HTML input type",
"type": "string",
"enum": [
"text",
"number",
"email",
"password",
"textarea",
"select",
"radio",
"checkbox",
"date",
"time",
"datetime",
"file",
"hidden",
"submit",
"reset",
"button",
"range"
]
},
"placeholder": {
"description": "The placeholder text for the field",
"type": "string"
}
}
},
"choices": {
"description": "Available choices for the field",
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"value": {
"description": "The value of the choice",
"type": "string"
},
"label": {
"description": "The display label of the choice",
"type": "string"
}
},
"required": [
"value",
"label"
]
}
]
}
},
"validators": {
"description": "List of validators to apply to this field",
"type": "array",
"items": {
"type": "object",
"properties": {
"function": {
"description": "The validator function / type to be executed. The implementation of the validator can be subjected to the form engine",
"type": "string"
},
"message": {
"description": "The error message to display if the validation fails. The validator implementation can use this message or ignore it and use its own message",
"type": "string"
},
"params": {
"oneOf": [
{
"description": "(Named) Validator parameters required by the validator if any during the initialization",
"type": "object"
},
{
"description": "(Positional) Validator parameters required by the validator if any during the initialization",
"type": "array"
}
]
},
"required": [
"function"
]
}
},
"extras": {
"description": "Extra options for the field, for the form engine to use.",
"type": "object",
"additionalProperties": true,
"properties": {}
}
},
"required": [
"name",
"type"
]
}
}