Skip to content

Commit fb4d896

Browse files
committed
Add aliases for dict, object, list, array, keys and properties
1 parent b31da2d commit fb4d896

File tree

3 files changed

+91
-27
lines changed

3 files changed

+91
-27
lines changed

src/data.js

Lines changed: 59 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
export function getBlankObject(schema) {
22
let keys = {};
33

4-
for (let key in schema.keys) {
5-
let value = schema.keys[key];
4+
let schema_keys = schema.keys || schema.properties;
5+
6+
for (let key in schema_keys) {
7+
let value = schema_keys[key];
68
let type = value.type;
79

10+
if (type === 'list')
11+
type = 'array';
12+
else if (type === 'dict')
13+
type = 'object';
14+
815
if (type === 'array')
916
keys[key] = getBlankArray(value);
1017
else if (type === 'object')
@@ -23,6 +30,11 @@ export function getBlankArray(schema) {
2330
let items = [];
2431
let type = schema.items.type;
2532

33+
if (type === 'list')
34+
type = 'array';
35+
else if (type === 'dict')
36+
type = 'object';
37+
2638
if (type === 'array')
2739
items.push(getBlankArray(schema.items))
2840
else if (type === 'object')
@@ -37,14 +49,21 @@ export function getBlankArray(schema) {
3749

3850

3951
export function getBlankData(schema) {
40-
if (schema.type === 'array') {
52+
let type = schema.type;
53+
54+
if (type === 'list')
55+
type = 'array';
56+
else if (type === 'dict')
57+
type = 'object';
58+
59+
if (type === 'array') {
4160
return getBlankArray(schema);
4261
}
43-
else if (schema.type === 'object') {
62+
else if (type === 'object') {
4463
return getBlankObject(schema);
45-
} else if (schema.type === 'string') {
64+
} else if (type === 'string') {
4665
return '';
47-
} else if (schema.type === 'number') {
66+
} else if (type === 'number') {
4867
return '';
4968
}
5069
}
@@ -54,12 +73,19 @@ export function getBlankData(schema) {
5473
function getSyncedArray(data, schema) {
5574
let newData = JSON.parse(JSON.stringify(data));
5675

76+
let type = schema.items.type;
77+
78+
if (type === 'list')
79+
type = 'array';
80+
else if (type === 'dict')
81+
type = 'object';
82+
5783
for (let i = 0; i < data.length; i++) {
5884
let item = data[i];
5985

60-
if (schema.items.type === 'array') {
86+
if (type === 'array') {
6187
newData[i] = getSyncedArray(item, schema.items);
62-
} else if (schema.items.type === 'object') {
88+
} else if (type === 'object') {
6389
newData[i] = getSyncedObject(item, schema.items);
6490
}
6591
}
@@ -71,25 +97,33 @@ function getSyncedArray(data, schema) {
7197
function getSyncedObject(data, schema) {
7298
let newData = JSON.parse(JSON.stringify(data));
7399

74-
let keys = [...Object.keys(schema.keys)];
100+
let schema_keys = schema.keys || schema.properties;
101+
102+
let keys = [...Object.keys(schema_keys)];
75103

76104
for (let i = 0; i < keys.length; i++) {
77105
let key = keys[i];
78-
let schemaValue = schema.keys[key];
106+
let schemaValue = schema_keys[key];
107+
let type = schemaValue.type;
108+
109+
if (type === 'list')
110+
type = 'array';
111+
else if (type === 'dict')
112+
type = 'object';
79113

80114
if (!data.hasOwnProperty(key)) {
81-
if (schemaValue.type === 'string')
115+
if (type === 'string')
82116
newData[key] = '';
83-
else if (schemaValue.type === 'array')
117+
else if (type === 'array')
84118
newData[key] = getSyncedArray([], schemaValue);
85-
else if (schemaValue.type === 'object')
119+
else if (type === 'object')
86120
newData[key] = getSyncedObject({}, schemaValue);
87121
} else {
88-
if (schemaValue.type === 'string')
122+
if (type === 'string')
89123
newData[key] = data[key];
90-
else if (schemaValue.type === 'array')
124+
else if (type === 'array')
91125
newData[key] = getSyncedArray(data[key], schemaValue);
92-
else if (schemaValue.type === 'object')
126+
else if (type === 'object')
93127
newData[key] = getSyncedObject(data[key], schemaValue);
94128
}
95129

@@ -102,9 +136,16 @@ function getSyncedObject(data, schema) {
102136
export function getSyncedData(data, schema) {
103137
// adds those keys to data which are in schema but not in data
104138

105-
if (schema.type === 'array') {
139+
let type = schema.type;
140+
141+
if (type === 'list')
142+
type = 'array';
143+
else if (type === 'dict')
144+
type = 'object';
145+
146+
if (type === 'array') {
106147
return getSyncedArray(data, schema);
107-
} else if (schema.type === 'object') {
148+
} else if (type === 'object') {
108149
return getSyncedObject(data, schema);
109150
}
110151

src/form.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,20 @@ export default class Form extends React.Component {
8181
let formGroups = [];
8282

8383
try {
84-
if (this.schema.type === 'array') {
84+
let type = this.schema.type;
85+
86+
if (type === 'list')
87+
type = 'array';
88+
else if (type === 'dict')
89+
type = 'object';
90+
91+
if (type === 'array') {
8592
return getArrayFormRow(
8693
data, this.schema, 'rjf',
8794
this.handleChange, this.addFieldset, this.removeFieldset,
8895
0
8996
);
90-
} else if (this.schema.type === 'object') {
97+
} else if (type === 'object') {
9198
return getObjectFormRow(
9299
data, this.schema, 'rjf',
93100
this.handleChange, this.addFieldset, this.removeFieldset,

src/ui.js

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -129,13 +129,20 @@ export function getArrayFormRow(data, schema, name, onChange, onAdd, onRemove, l
129129
if (data.length >= max_items)
130130
addable = false;
131131

132+
let type = schema.items.type;
133+
134+
if (type === 'list')
135+
type = 'array';
136+
else if (type === 'dict')
137+
type = 'object';
138+
132139
for (let i = 0; i < data.length; i++) {
133140
let item = data[i];
134141
let childName = name + '-' + i;
135142

136-
if (schema.items.type === 'array') {
143+
if (type === 'array') {
137144
groups.push(getArrayFormRow(item, schema.items, childName, onChange, onAdd, onRemove, level + 1));
138-
} else if (schema.items.type === 'object') {
145+
} else if (type === 'object') {
139146
groups.push(getObjectFormRow(item, schema.items, childName, onChange, onAdd, onRemove, level + 1));
140147
} else {
141148
rows.push(getStringFormRow(item, schema.items, childName, onChange, onRemove, removable));
@@ -199,7 +206,9 @@ export function getArrayFormRow(data, schema, name, onChange, onAdd, onRemove, l
199206
export function getObjectFormRow(data, schema, name, onChange, onAdd, onRemove, level) {
200207
let rows = [];
201208

202-
let keys = [...Object.keys(schema.keys)];
209+
schema_keys = schema.keys || schema.properties;
210+
211+
let keys = [...Object.keys(schema_keys)];
203212

204213
if (schema.additionalProperties)
205214
keys = [...keys, ...Object.keys(data).filter((k) => keys.indexOf(k) === -1)];
@@ -208,18 +217,25 @@ export function getObjectFormRow(data, schema, name, onChange, onAdd, onRemove,
208217
let key = keys[i];
209218
let value = data[key];
210219
let childName = name + '-' + key;
211-
let schemaValue = schema.keys[key] || {type: 'string'};
220+
let schemaValue = schema_keys[key] || {type: 'string'};
221+
222+
let type = schemaValue.type;
223+
224+
if (type === 'list')
225+
type = 'array';
226+
else if (type === 'dict')
227+
type = 'object';
212228

213229
if (!schemaValue.title)
214230
schemaValue.title = getVerboseName(key);
215231

216232
let removable = false;
217-
if (schema.keys[key] === undefined)
233+
if (schema_keys[key] === undefined)
218234
removable = true;
219235

220-
if (schemaValue.type === 'array') {
236+
if (type === 'array') {
221237
rows.push(getArrayFormRow(value, schemaValue, childName, onChange, onAdd, onRemove, level + 1));
222-
} else if (schemaValue.type === 'object') {
238+
} else if (type === 'object') {
223239
rows.push(getObjectFormRow(value, schemaValue, childName, onChange, onAdd, onRemove, level + 1));
224240
} else {
225241
rows.push(getStringFormRow(

0 commit comments

Comments
 (0)