Validate queries

This commit is contained in:
Adria Navarro 2025-01-23 11:03:52 +01:00
parent 1f3c466028
commit 41b65a6b1d
2 changed files with 26 additions and 5 deletions

View File

@ -3,7 +3,8 @@ import { tables } from "./tables"
import { selectedScreen } from "./screens"
import { viewsV2 } from "./viewsV2"
import { findComponentsBySettingsType } from "@/helpers/screen"
import { Screen } from "@budibase/types"
import { DatasourceType, Screen } from "@budibase/types"
import { queries } from "./queries"
function reduceBy<TItem extends {}, TKey extends keyof TItem>(
key: TKey,
@ -19,22 +20,39 @@ function reduceBy<TItem extends {}, TKey extends keyof TItem>(
}
export const screenComponentErrors = derived(
[selectedScreen, tables, viewsV2],
([$selectedScreen, $tables, $viewsV2]): Record<string, string[]> => {
[selectedScreen, tables, viewsV2, queries],
([$selectedScreen, $tables, $viewsV2, $queries]): Record<
string,
string[]
> => {
function getInvalidDatasources(
screen: Screen,
datasources: Record<string, any>
) {
const friendlyNameByType = {
const friendlyNameByType: Partial<Record<DatasourceType, string>> = {
viewV2: "view",
}
const primaryKeyByType: Record<DatasourceType, string> = {
table: "resourceId",
view: "TODO",
viewV2: "resourceId",
query: "_id",
custom: "" as never,
}
const result: Record<string, string[]> = {}
for (const { component, setting } of findComponentsBySettingsType(
screen,
["table", "dataSource"]
)) {
const { resourceId, type, label } = component[setting.key]
const componentSettings = component[setting.key]
const { type, label } = componentSettings
if (type === "custom") {
continue
}
const resourceId =
componentSettings[primaryKeyByType[type as DatasourceType]]
if (!datasources[resourceId]) {
const friendlyTypeName =
friendlyNameByType[type as keyof typeof friendlyNameByType] ?? type
@ -50,6 +68,7 @@ export const screenComponentErrors = derived(
const datasources = {
...reduceBy("_id", $tables.list),
...reduceBy("id", $viewsV2.list),
...reduceBy("_id", $queries.list),
}
return getInvalidDatasources($selectedScreen, datasources)

View File

@ -57,3 +57,5 @@ export interface RestConfig {
}
dynamicVariables?: DynamicVariable[]
}
export type DatasourceType = "table" | "view" | "viewV2" | "query" | "custom"