179 lines
4.2 KiB
TypeScript
179 lines
4.2 KiB
TypeScript
import { object } from "./utils"
|
|
import Resource from "./utils/Resource"
|
|
import { CalculationType, SortOrder, SortType } from "@budibase/types"
|
|
import { searchSchema } from "./misc"
|
|
|
|
const view = {
|
|
name: "peopleView",
|
|
tableId: "ta_896a325f7e8147d2a2cda93c5d236511",
|
|
schema: {
|
|
name: {
|
|
visible: true,
|
|
readonly: false,
|
|
order: 1,
|
|
width: 300,
|
|
},
|
|
age: {
|
|
visible: true,
|
|
readonly: true,
|
|
order: 2,
|
|
width: 200,
|
|
},
|
|
salary: {
|
|
visible: false,
|
|
readonly: false,
|
|
},
|
|
},
|
|
primaryDisplay: "name",
|
|
}
|
|
|
|
const baseColumnDef = {
|
|
visible: {
|
|
type: "boolean",
|
|
description:
|
|
"Defines whether the column is visible or not - rows retrieved/updated through this view will not be able to access it.",
|
|
},
|
|
readonly: {
|
|
type: "boolean",
|
|
description:
|
|
"When used in combination with 'visible: true' the column will be visible in row responses but cannot be updated.",
|
|
},
|
|
order: {
|
|
type: "integer",
|
|
description:
|
|
"A number defining where the column shows up in tables, lowest being first.",
|
|
},
|
|
width: {
|
|
type: "integer",
|
|
description:
|
|
"A width for the column, defined in pixels - this affects rendering in tables.",
|
|
},
|
|
column: {
|
|
type: "array",
|
|
description:
|
|
"If this is a relationship column, we can set the columns we wish to include",
|
|
items: {
|
|
type: "object",
|
|
properties: {
|
|
readonly: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
const viewSchema = {
|
|
description: "The view to be created/updated.",
|
|
type: "object",
|
|
required: ["name", "schema"],
|
|
properties: {
|
|
name: {
|
|
description: "The name of the view.",
|
|
type: "string",
|
|
},
|
|
type: {
|
|
description: "The type of view - standard (empty value) or calculation.",
|
|
type: "string",
|
|
enum: ["calculation"],
|
|
},
|
|
primaryDisplay: {
|
|
type: "string",
|
|
description:
|
|
"A column used to display rows from this view - usually used when rendered in tables.",
|
|
},
|
|
query: searchSchema,
|
|
sort: {
|
|
type: "object",
|
|
required: ["field"],
|
|
properties: {
|
|
field: {
|
|
type: "string",
|
|
description: "The field from the table/view schema to sort on.",
|
|
},
|
|
order: {
|
|
type: "string",
|
|
description: "The order in which to sort.",
|
|
enum: Object.values(SortOrder),
|
|
},
|
|
type: {
|
|
type: "string",
|
|
description:
|
|
"The type of sort to perform (by number, or by alphabetically).",
|
|
enum: Object.values(SortType),
|
|
},
|
|
},
|
|
},
|
|
schema: {
|
|
type: "object",
|
|
additionalProperties: {
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: baseColumnDef,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
calculationType: {
|
|
type: "string",
|
|
description:
|
|
"This column should be built from a calculation, specifying a type and field. It is important to note when a calculation is configured all non-calculation columns will be used for grouping.",
|
|
enum: Object.values(CalculationType),
|
|
},
|
|
field: {
|
|
type: "string",
|
|
description:
|
|
"The field from the table to perform the calculation on.",
|
|
},
|
|
distinct: {
|
|
type: "boolean",
|
|
description:
|
|
"Can be used in tandem with the count calculation type, to count unique entries.",
|
|
},
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
const viewOutputSchema = {
|
|
...viewSchema,
|
|
properties: {
|
|
...viewSchema.properties,
|
|
id: {
|
|
description: "The ID of the view.",
|
|
type: "string",
|
|
},
|
|
},
|
|
required: [...viewSchema.required, "id"],
|
|
}
|
|
|
|
export default new Resource()
|
|
.setExamples({
|
|
view: {
|
|
value: {
|
|
data: view,
|
|
},
|
|
},
|
|
views: {
|
|
value: {
|
|
data: [view],
|
|
},
|
|
},
|
|
})
|
|
.setSchemas({
|
|
view: viewSchema,
|
|
viewOutput: object({
|
|
data: viewOutputSchema,
|
|
}),
|
|
viewSearch: object({
|
|
data: {
|
|
type: "array",
|
|
items: viewOutputSchema,
|
|
},
|
|
}),
|
|
})
|