@inceptiongt/json-schema-editor-visual-new
Version:
jsonschema-draft07 editor
173 lines (147 loc) • 3.64 kB
JavaScript
const JSONPATH_JOIN_CHAR = '.';
exports.JSONPATH_JOIN_CHAR = JSONPATH_JOIN_CHAR;
exports.lang = 'en_US';
exports.format = [
{ name: 'date-time' },
{ name: 'date' },
{ name: 'time' },
{ name: 'email' },
{ name: 'idn-email' },
{ name: 'hostname' },
{ name: 'idn-hostname' },
{ name: 'ipv4' },
{ name: 'ipv6' },
{ name: 'uri' },
{ name: 'uri-reference' },
{ name: 'uri-template' },
{ name: 'iri' },
{ name: 'iri-reference' },
{ name: 'json-pointer' },
{ name: 'relative-json-pointer' },
{ name: 'regex' }
];
const _ = require('underscore');
exports.SCHEMA_TYPE = ['string', 'number', 'array', 'object', 'boolean', 'integer'];
exports.defaultSchema = {
string: {
type: 'string'
},
number: {
type: 'number'
},
array: {
type: 'array',
items: {
type: 'string'
},
default: []
},
object: {
type: 'object',
properties: {},
additionalProperties: false,
default: {}
},
boolean: {
type: 'boolean'
},
integer: {
type: 'integer'
}
};
// 防抖函数,减少高频触发的函数执行的频率
// 请在 constructor 里使用:
// this.func = debounce(this.func, 400);
exports.debounce = (func, wait) => {
let timeout;
return function() {
clearTimeout(timeout);
timeout = setTimeout(func, wait);
};
};
function getData(state, keys) {
let curState = state;
for (let i = 0; i < keys.length; i++) {
curState = curState[keys[i]];
}
return curState;
}
exports.getData = getData;
exports.setData = function(state, keys, value) {
let curState = state;
for (let i = 0; i < keys.length - 1; i++) {
curState = curState[keys[i]];
}
curState[keys[keys.length - 1]] = value;
};
exports.deleteData = function(state, keys) {
let curState = state;
for (let i = 0; i < keys.length - 1; i++) {
curState = curState[keys[i]];
}
delete curState[keys[keys.length - 1]];
};
exports.getParentKeys = function(keys) {
if (keys.length === 1) return [];
let arr = [].concat(keys);
arr.splice(keys.length - 1, 1);
return arr;
};
exports.clearSomeFields = function(keys, data) {
const newData = Object.assign({}, data);
keys.forEach(key => {
delete newData[key];
});
return newData;
};
function getFieldstitle(data) {
const requiredtitle = [];
Object.keys(data).map(title => {
requiredtitle.push(title);
});
return requiredtitle;
}
function handleSchemaRequired(schema, checked) {
// console.log(schema)
if (schema.type === 'object') {
let requiredtitle = getFieldstitle(schema.properties);
// schema.required = checked ? [].concat(requiredtitle) : [];
if (checked) {
schema.required = [].concat(requiredtitle);
} else {
delete schema.required;
}
handleObject(schema.properties, checked);
} else if (schema.type === 'array') {
handleSchemaRequired(schema.items, checked);
} else {
return schema;
}
}
function handleObject(properties, checked) {
for (var key in properties) {
if (properties[key].type === 'array' || properties[key].type === 'object')
handleSchemaRequired(properties[key], checked);
}
}
exports.handleSchemaRequired = handleSchemaRequired;
function cloneObject(obj) {
if (typeof obj === 'object') {
if (Array.isArray(obj)) {
var newArr = [];
obj.forEach(function(item, index) {
newArr[index] = cloneObject(item);
});
return newArr;
} else {
var newObj = {};
for (var key in obj) {
newObj[key] = cloneObject(obj[key]);
}
return newObj;
}
} else {
return obj;
}
}
exports.cloneObject = cloneObject;