tibi-types/schemas/api-config/fieldMeta.json
robin beff5c2fe1 🔨 refactor(fieldMeta.json): remove unnecessary code duplication and reorganize fieldMeta schema
🌟 feat(fieldMeta.json): add new properties for folding configuration, hiding field widget, direction, pathStep, and metaElements
The changes in the fieldMeta.json schema remove unnecessary code duplication by removing a section that was already defined elsewhere. The schema is also reorganized to group related properties together for better readability. New properties for folding configuration, hiding field widget, direction, pathStep, and metaElements are added to enhance the flexibility and customization options of the fieldMeta schema.
2023-08-06 09:35:49 +00:00

732 lines
31 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "JSON Schema tibi-server field meta configuration",
"description": "tibi-server field meta linter",
"type": "object",
"anyOf": [
{
"$ref": "#/definitions/minimum"
},
{
"$ref": "#/definitions/minimum",
"patternProperties": {
"^x-.*|widget|inputProps$": { "$comment": "stub for allOf" }
},
"allOf": [
{
"properties": {
"widget": { "enum": ["text", "checkbox"] }
}
},
{
"properties": {
"inputProps": {
"type": "object",
"properties": {
"multiline": { "type": "boolean" }
}
}
}
}
]
},
{
"$ref": "#/definitions/minimum",
"patternProperties": {
"^x-.*|widget$": { "$comment": "stub for allOf" }
},
"allOf": [
{
"properties": {
"widget": { "enum": ["richtext", "richText"] }
}
}
]
},
{
"$ref": "#/definitions/minimum",
"patternProperties": {
"^x-.*|widget|choices$": { "$comment": "stub for allOf" }
},
"allOf": [
{
"required": ["choices"],
"properties": {
"widget": {
"enum": [
"checkboxArray",
"select",
"selectArray",
"chipArray"
]
},
"choices": {
"oneOf": [
{
"type": "object",
"description": "endpoint configuration",
"additionalProperties": false,
"properties": {
"endpoint": {
"type": "string",
"description": "endpoint URL or path"
},
"params": {
"type": "object",
"description": "query parameters"
},
"mapping": {
"type": "object",
"description": "data mapping",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"description": "name of id field"
},
"name": {
"type": "string",
"description": "name of name/description field"
}
}
}
}
},
{
"type": "array",
"description": "choices to select from",
"items": {
"type": "object",
"properties": {
"id": {
"oneOf": [
{
"type": "null"
},
{
"type": "string"
},
{
"type": "number"
}
]
},
"name": {
"description": "name is human readable value",
"$ref": "definitions.json#/definitions/i18nString"
},
"chipStyle": {
"$ref": "https://raw.githubusercontent.com/rcorp/css-schema/master/schema.json"
}
},
"required": ["id", "name"]
}
}
]
}
}
}
]
},
{
"$ref": "#/definitions/minimum",
"patternProperties": {
"^x-.*|widget$": { "$comment": "stub for allOf" }
},
"allOf": [
{
"properties": {
"widget": {
"enum": ["date", "datetime"]
}
}
}
]
},
{
"$ref": "#/definitions/minimum",
"patternProperties": {
"^x-.*|widget$": { "$comment": "stub for allOf" }
},
"allOf": [
{
"properties": {
"widget": {
"enum": ["file", "image"]
}
}
}
]
},
{
"$ref": "#/definitions/minimum",
"patternProperties": {
"^x-.*|widget$": { "$comment": "stub for allOf" }
},
"allOf": [
{
"properties": {
"widget": {
"enum": ["json"]
}
}
}
]
},
{
"$ref": "#/definitions/minimum",
"patternProperties": {
"^x-.*|widget$": { "$comment": "stub for allOf" }
},
"allOf": [
{
"properties": {
"widget": {
"enum": ["tabs"]
}
}
}
]
},
{
"$ref": "#/definitions/minimum",
"patternProperties": {
"^x-.*|widget|foreign$": { "$comment": "stub for allOf" }
},
"allOf": [
{
"properties": {
"widget": {
"enum": ["foreignKey"]
},
"foreign": {
"additionalProperties": false,
"description": "foreign key configuration",
"type": "object",
"properties": {
"collection": {
"type": "string",
"description": "collection name"
},
"id": {
"type": "string",
"description": "id field name"
},
"projection": {
"type": "string",
"description": "projection name used for fetching initial foreign entries from database"
},
"sort": {
"type": "string",
"description": "sort field name (-field for descending)"
},
"subNavigation": {
"type": "number",
"description": "sub navigation index in foreign collection"
},
"render": {
"description": "field name or eval object which returns string",
"oneOf": [
{ "type": "string" },
{
"$ref": "definitions.json#/definitions/evalObjectWithRaw"
},
{
"type": "object",
"properties": {
"defaultCollectionViews": {
"type": "boolean"
}
},
"required": [
"defaultCollectionViews"
]
}
]
}
}
}
}
}
]
},
{
"$ref": "#/definitions/minimum",
"patternProperties": {
"^x-.*|widget|baseHref|cssHref|imageSelect|fileSelect|videoSelect|customTags|style$": {
"$comment": "stub for allOf"
}
},
"allOf": [
{
"properties": {
"widget": {
"enum": ["contentbuilder"]
},
"baseHref": {
"description": "base href for relative links inside of ContentBuilder",
"oneOf": [
{ "type": "string" },
{
"$ref": "definitions.json#/definitions/evalObject"
}
]
},
"cssHref": {
"description": "href to css file for use with ContentBuilder",
"oneOf": [
{ "type": "string" },
{
"type": "array",
"items": { "type": "string" }
},
{
"$ref": "definitions.json#/definitions/evalObject"
}
]
},
"imageSelect": {
"description": "target for image selection",
"$ref": "#definitions/assetsTarget"
},
"fileSelect": {
"description": "target for file selection",
"$ref": "#definitions/assetsTarget"
},
"videoSelect": {
"description": "target for video selection",
"$ref": "#definitions/assetsTarget"
},
"customTags": {
"description": "custom tags to add to ContentBuilder",
"oneOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["placeholder", "label"],
"properties": {
"placeholder": {
"type": "string",
"description": "placeholder inside html code"
},
"label": {
"$ref": "definitions.json#/definitions/i18nString"
}
}
}
},
{
"$ref": "definitions.json#/definitions/evalObject"
}
]
},
"style": {
"description": "css style to inject into ContentBuilder",
"oneOf": [
{ "type": "string" },
{
"$ref": "definitions.json#/definitions/evalObject"
}
]
}
}
}
]
}
],
"definitions": {
"minimum": {
"additionalProperties": false,
"patternProperties": {
"^x\\-": {
"description": "template property"
}
},
"properties": {
"folding": {
"type": "object",
"description": "folding configuration for array fields",
"additionalProperties": false,
"properties": {
"previewUnfolded": {
"description": "preview for unfolded array element",
"oneOf": [
{ "type": "string" },
{
"$ref": "definitions.json#/definitions/evalObjectWithRaw"
}
]
},
"previewFolded": {
"description": "preview for folded array element",
"oneOf": [
{ "type": "string" },
{
"$ref": "definitions.json#/definitions/evalObjectWithRaw"
}
]
}
}
},
"hide": {
"type": "boolean",
"description": "hide field widget"
},
"direction": {
"type": "string",
"enum": ["horizontal", "vertical"]
},
"pathStep": {
"type": "object",
"properties": {
"title": {
"type": "string",
"const": "Zeile"
},
"icon": {
"type": "string",
"const": "viewSequentialOutline"
}
},
"required": ["title", "icon"]
},
"metaElements": {
"oneOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"source": {
"type": "string"
}
},
"required": ["source"]
},
{
"type": "array",
"items": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"source": {
"type": "string",
"const": "layout"
}
},
"required": ["source"]
}
]
},
{
"type": "object",
"properties": {
"tablist": {
"type": "object",
"properties": {
"tabs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"label": {
"type": "string"
},
"subFields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"source": {
"type": "string"
}
},
"required": [
"source"
]
}
}
},
"required": [
"name",
"label",
"subFields"
]
}
}
},
"required": ["tabs"]
}
}
}
]
},
"openapi": {
"type": "object"
},
"label": {
"$ref": "definitions.json#/definitions/i18nString",
"description": "label for field"
},
"addElementLabel": {
"$ref": "definitions.json#/definitions/i18nString",
"description": "label for adding element to list"
},
"helperText": {
"$ref": "definitions.json#/definitions/i18nString",
"description": "helper text for field"
},
"filter": {
"type": "object",
"description": "filter configuration for list view of this field",
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"description": "filter type",
"enum": [
"default",
"select",
"bool",
"boolean",
"input",
"number",
"foreignKey"
]
}
}
},
"css": {
"description": "css styles for field widgets",
"oneOf": [
{ "$comment": "for include tag", "type": "string" },
{
"type": "object",
"properties": {
"input": {
"description": "css styles for input widget",
"oneOf": [
{
"$comment": "for include tag",
"type": "string"
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"wrapper": {
"description": "css styles for input widget wrapper",
"$ref": "#/definitions/css"
},
"element": {
"description": "css styles for input widget sub elements",
"$ref": "#/definitions/css"
},
"foreignEntry": {
"description": "css styles for input widget linked foreign entries",
"$ref": "#/definitions/css"
}
}
}
]
},
"view": {
"description": "css styles for input widget",
"oneOf": [
{
"$comment": "for include tag",
"type": "string"
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"wrapper": {
"description": "css styles for view widget wrapper",
"$ref": "#/definitions/css"
},
"element": {
"description": "css styles for view widget sub elements",
"$ref": "#/definitions/css"
},
"foreignEntry": {
"description": "css styles for input widget linked foreign entries",
"$ref": "#/definitions/css"
}
}
}
]
}
}
}
]
},
"dependsOn": {
"description": "depends on rule",
"oneOf": [
{ "type": "string" },
{
"type": "object",
"properties": {
"eval": {
"type": "string",
"description": "javascript code which hides field widget if evaluates to false with $, $this, $parent and $stack variables"
}
}
}
]
},
"containerProps": {
"type": "object",
"properties": {
"class": {
"type": "string"
},
"layout": {
"type": "object",
"properties": {
"breakBefore": {
"type": "boolean"
},
"breakAfter": {
"type": "boolean"
},
"size": {
"type": "object",
"properties": {
"default": {
"type": "string"
},
"small": {
"type": "string"
},
"large": {
"type": "string"
}
}
}
}
}
}
},
"inputProps": {
"type": "object",
"additionalProperties": true
},
"defaultValue": {
"description": "default value or code to get the value",
"oneOf": [
{ "type": "array" },
{ "type": "string" },
{ "type": "null" },
{ "type": "boolean" },
{ "type": "number" },
{
"type": "object",
"properties": {
"eval": {
"type": "string",
"description": "js code with $navigation variable"
}
}
}
]
},
"valueMap": {
"type": "object",
"description": "map values to icons",
"patternProperties": {
".*": {
"oneOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"muiIcon": {
"type": "string"
},
"style": {
"$comment": "https://raw.githubusercontent.com/rcorp/css-schema/master/schema.json"
}
}
}
]
}
}
}
}
},
"assetsTarget": {
"oneOf": [
{
"type": "string",
"description": "url for assets view"
},
{
"type": "object",
"properties": {
"collection": {
"type": "string",
"description": "collection name"
},
"subNavigation": {
"type": "number",
"description": "sub navigation index in collections meta.subNavigation"
}
}
},
{
"$ref": "definitions.json#/definitions/evalObject"
}
]
},
"css": {
"anyOf": [
{ "type": "string" },
{
"$ref": "https://raw.githubusercontent.com/rcorp/css-schema/master/schema.json"
},
{
"type": "object",
"properties": {
"eval": {
"type": "string",
"description": "javascript code evaled to string or css object"
}
}
}
]
}
}
}