Merge pull request #13424 from Budibase/fix-viewv2-types
Correct types accepted / returned through the view API.
This commit is contained in:
commit
1e5d4f39bf
|
@ -6,6 +6,7 @@ import {
|
||||||
UIFieldMetadata,
|
UIFieldMetadata,
|
||||||
UpdateViewRequest,
|
UpdateViewRequest,
|
||||||
ViewResponse,
|
ViewResponse,
|
||||||
|
ViewResponseEnriched,
|
||||||
ViewV2,
|
ViewV2,
|
||||||
} from "@budibase/types"
|
} from "@budibase/types"
|
||||||
import { builderSocket, gridSocket } from "../../../websockets"
|
import { builderSocket, gridSocket } from "../../../websockets"
|
||||||
|
@ -39,9 +40,9 @@ async function parseSchema(view: CreateViewRequest) {
|
||||||
return finalViewSchema
|
return finalViewSchema
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function get(ctx: Ctx<void, ViewResponse>) {
|
export async function get(ctx: Ctx<void, ViewResponseEnriched>) {
|
||||||
ctx.body = {
|
ctx.body = {
|
||||||
data: await sdk.views.get(ctx.params.viewId, { enriched: true }),
|
data: await sdk.views.getEnriched(ctx.params.viewId),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -142,7 +142,9 @@ export function enrichViewSchemas(table: Table): TableResponse {
|
||||||
return {
|
return {
|
||||||
...table,
|
...table,
|
||||||
views: Object.values(table.views ?? [])
|
views: Object.values(table.views ?? [])
|
||||||
.map(v => sdk.views.enrichSchema(v, table.schema))
|
.map(v =>
|
||||||
|
sdk.views.isV2(v) ? sdk.views.enrichSchema(v, table.schema) : v
|
||||||
|
)
|
||||||
.reduce((p, v) => {
|
.reduce((p, v) => {
|
||||||
p[v.name!] = v
|
p[v.name!] = v
|
||||||
return p
|
return p
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { ViewV2 } from "@budibase/types"
|
import { ViewV2, ViewV2Enriched } from "@budibase/types"
|
||||||
import { context, HTTPError } from "@budibase/backend-core"
|
import { context, HTTPError } from "@budibase/backend-core"
|
||||||
|
|
||||||
import sdk from "../../../sdk"
|
import sdk from "../../../sdk"
|
||||||
|
@ -6,26 +6,34 @@ import * as utils from "../../../db/utils"
|
||||||
import { enrichSchema, isV2 } from "."
|
import { enrichSchema, isV2 } from "."
|
||||||
import { breakExternalTableId } from "../../../integrations/utils"
|
import { breakExternalTableId } from "../../../integrations/utils"
|
||||||
|
|
||||||
export async function get(
|
export async function get(viewId: string): Promise<ViewV2> {
|
||||||
viewId: string,
|
|
||||||
opts?: { enriched: boolean }
|
|
||||||
): Promise<ViewV2> {
|
|
||||||
const { tableId } = utils.extractViewInfoFromID(viewId)
|
const { tableId } = utils.extractViewInfoFromID(viewId)
|
||||||
|
|
||||||
const { datasourceId, tableName } = breakExternalTableId(tableId)
|
const { datasourceId, tableName } = breakExternalTableId(tableId)
|
||||||
const ds = await sdk.datasources.get(datasourceId!)
|
const ds = await sdk.datasources.get(datasourceId!)
|
||||||
|
|
||||||
const table = ds.entities![tableName!]
|
const table = ds.entities![tableName!]
|
||||||
const views = Object.values(table.views!)
|
const views = Object.values(table.views!).filter(isV2)
|
||||||
const found = views.find(v => isV2(v) && v.id === viewId)
|
const found = views.find(v => v.id === viewId)
|
||||||
if (!found) {
|
if (!found) {
|
||||||
throw new Error("No view found")
|
throw new Error("No view found")
|
||||||
}
|
}
|
||||||
if (opts?.enriched) {
|
return found
|
||||||
return enrichSchema(found, table.schema) as ViewV2
|
|
||||||
} else {
|
|
||||||
return found as ViewV2
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getEnriched(viewId: string): Promise<ViewV2Enriched> {
|
||||||
|
const { tableId } = utils.extractViewInfoFromID(viewId)
|
||||||
|
|
||||||
|
const { datasourceId, tableName } = breakExternalTableId(tableId)
|
||||||
|
const ds = await sdk.datasources.get(datasourceId!)
|
||||||
|
|
||||||
|
const table = ds.entities![tableName!]
|
||||||
|
const views = Object.values(table.views!).filter(isV2)
|
||||||
|
const found = views.find(v => v.id === viewId)
|
||||||
|
if (!found) {
|
||||||
|
throw new Error("No view found")
|
||||||
|
}
|
||||||
|
return enrichSchema(found, table.schema)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function create(
|
export async function create(
|
||||||
|
|
|
@ -1,8 +1,13 @@
|
||||||
import { RenameColumn, TableSchema, View, ViewV2 } from "@budibase/types"
|
import {
|
||||||
|
RenameColumn,
|
||||||
|
TableSchema,
|
||||||
|
View,
|
||||||
|
ViewV2,
|
||||||
|
ViewV2Enriched,
|
||||||
|
} from "@budibase/types"
|
||||||
import { db as dbCore } from "@budibase/backend-core"
|
import { db as dbCore } from "@budibase/backend-core"
|
||||||
import { cloneDeep } from "lodash"
|
import { cloneDeep } from "lodash"
|
||||||
|
|
||||||
import sdk from "../../../sdk"
|
|
||||||
import * as utils from "../../../db/utils"
|
import * as utils from "../../../db/utils"
|
||||||
import { isExternalTableID } from "../../../integrations/utils"
|
import { isExternalTableID } from "../../../integrations/utils"
|
||||||
|
|
||||||
|
@ -16,12 +21,14 @@ function pickApi(tableId: any) {
|
||||||
return internal
|
return internal
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function get(
|
export async function get(viewId: string): Promise<ViewV2> {
|
||||||
viewId: string,
|
|
||||||
opts?: { enriched: boolean }
|
|
||||||
): Promise<ViewV2> {
|
|
||||||
const { tableId } = utils.extractViewInfoFromID(viewId)
|
const { tableId } = utils.extractViewInfoFromID(viewId)
|
||||||
return pickApi(tableId).get(viewId, opts)
|
return pickApi(tableId).get(viewId)
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getEnriched(viewId: string): Promise<ViewV2Enriched> {
|
||||||
|
const { tableId } = utils.extractViewInfoFromID(viewId)
|
||||||
|
return pickApi(tableId).getEnriched(viewId)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function create(
|
export async function create(
|
||||||
|
@ -52,11 +59,10 @@ export function allowedFields(view: View | ViewV2) {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
export function enrichSchema(view: View | ViewV2, tableSchema: TableSchema) {
|
export function enrichSchema(
|
||||||
if (!sdk.views.isV2(view)) {
|
view: ViewV2,
|
||||||
return view
|
tableSchema: TableSchema
|
||||||
}
|
): ViewV2Enriched {
|
||||||
|
|
||||||
let schema = cloneDeep(tableSchema)
|
let schema = cloneDeep(tableSchema)
|
||||||
const anyViewOrder = Object.values(view.schema || {}).some(
|
const anyViewOrder = Object.values(view.schema || {}).some(
|
||||||
ui => ui.order != null
|
ui => ui.order != null
|
||||||
|
|
|
@ -1,26 +1,30 @@
|
||||||
import { ViewV2 } from "@budibase/types"
|
import { ViewV2, ViewV2Enriched } from "@budibase/types"
|
||||||
import { context, HTTPError } from "@budibase/backend-core"
|
import { context, HTTPError } from "@budibase/backend-core"
|
||||||
|
|
||||||
import sdk from "../../../sdk"
|
import sdk from "../../../sdk"
|
||||||
import * as utils from "../../../db/utils"
|
import * as utils from "../../../db/utils"
|
||||||
import { enrichSchema, isV2 } from "."
|
import { enrichSchema, isV2 } from "."
|
||||||
|
|
||||||
export async function get(
|
export async function get(viewId: string): Promise<ViewV2> {
|
||||||
viewId: string,
|
|
||||||
opts?: { enriched: boolean }
|
|
||||||
): Promise<ViewV2> {
|
|
||||||
const { tableId } = utils.extractViewInfoFromID(viewId)
|
const { tableId } = utils.extractViewInfoFromID(viewId)
|
||||||
const table = await sdk.tables.getTable(tableId)
|
const table = await sdk.tables.getTable(tableId)
|
||||||
const views = Object.values(table.views!)
|
const views = Object.values(table.views!).filter(isV2)
|
||||||
const found = views.find(v => isV2(v) && v.id === viewId)
|
const found = views.find(v => v.id === viewId)
|
||||||
if (!found) {
|
if (!found) {
|
||||||
throw new Error("No view found")
|
throw new Error("No view found")
|
||||||
}
|
}
|
||||||
if (opts?.enriched) {
|
return found
|
||||||
return enrichSchema(found, table.schema) as ViewV2
|
|
||||||
} else {
|
|
||||||
return found as ViewV2
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getEnriched(viewId: string): Promise<ViewV2Enriched> {
|
||||||
|
const { tableId } = utils.extractViewInfoFromID(viewId)
|
||||||
|
const table = await sdk.tables.getTable(tableId)
|
||||||
|
const views = Object.values(table.views!).filter(isV2)
|
||||||
|
const found = views.find(v => v.id === viewId)
|
||||||
|
if (!found) {
|
||||||
|
throw new Error("No view found")
|
||||||
|
}
|
||||||
|
return enrichSchema(found, table.schema)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function create(
|
export async function create(
|
||||||
|
|
|
@ -45,7 +45,7 @@ export class ViewV2API extends TestAPI {
|
||||||
}
|
}
|
||||||
|
|
||||||
get = async (viewId: string) => {
|
get = async (viewId: string) => {
|
||||||
return await this.config.doInContext(this.config.appId, () =>
|
return await this.config.doInContext(this.config.getAppId(), () =>
|
||||||
sdk.views.get(viewId)
|
sdk.views.get(viewId)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,16 +3,11 @@ import {
|
||||||
Row,
|
Row,
|
||||||
Table,
|
Table,
|
||||||
TableRequest,
|
TableRequest,
|
||||||
TableSchema,
|
|
||||||
View,
|
View,
|
||||||
ViewV2,
|
ViewV2Enriched,
|
||||||
} from "../../../documents"
|
} from "../../../documents"
|
||||||
|
|
||||||
interface ViewV2Response extends ViewV2 {
|
export type TableViewsResponse = { [key: string]: View | ViewV2Enriched }
|
||||||
schema: TableSchema
|
|
||||||
}
|
|
||||||
|
|
||||||
export type TableViewsResponse = { [key: string]: View | ViewV2Response }
|
|
||||||
|
|
||||||
export interface TableResponse extends Table {
|
export interface TableResponse extends Table {
|
||||||
views?: TableViewsResponse
|
views?: TableViewsResponse
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
import { ViewV2, UIFieldMetadata } from "../../../documents"
|
import { ViewV2, ViewV2Enriched } from "../../../documents"
|
||||||
|
|
||||||
export interface ViewResponse {
|
export interface ViewResponse {
|
||||||
data: ViewV2
|
data: ViewV2
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CreateViewRequest
|
export interface ViewResponseEnriched {
|
||||||
extends Omit<ViewV2, "version" | "id" | "schema"> {
|
data: ViewV2Enriched
|
||||||
schema?: Record<string, UIFieldMetadata>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface UpdateViewRequest extends Omit<ViewV2, "schema"> {
|
export interface CreateViewRequest extends Omit<ViewV2, "version" | "id"> {}
|
||||||
schema?: Record<string, UIFieldMetadata>
|
|
||||||
}
|
export interface UpdateViewRequest extends ViewV2 {}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { SearchFilter, SortOrder, SortType } from "../../api"
|
import { SearchFilter, SortOrder, SortType } from "../../api"
|
||||||
import { UIFieldMetadata } from "./table"
|
import { TableSchema, UIFieldMetadata } from "./table"
|
||||||
import { Document } from "../document"
|
import { Document } from "../document"
|
||||||
import { DBView } from "../../sdk"
|
import { DBView } from "../../sdk"
|
||||||
|
|
||||||
|
@ -48,6 +48,10 @@ export interface ViewV2 {
|
||||||
schema?: Record<string, UIFieldMetadata>
|
schema?: Record<string, UIFieldMetadata>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface ViewV2Enriched extends ViewV2 {
|
||||||
|
schema?: TableSchema
|
||||||
|
}
|
||||||
|
|
||||||
export type ViewSchema = ViewCountOrSumSchema | ViewStatisticsSchema
|
export type ViewSchema = ViewCountOrSumSchema | ViewStatisticsSchema
|
||||||
|
|
||||||
export interface ViewCountOrSumSchema {
|
export interface ViewCountOrSumSchema {
|
||||||
|
|
Loading…
Reference in New Issue