Merge pull request #15354 from Budibase/ts/cient-api-patches

Typing client api patches overrides
This commit is contained in:
Adria Navarro 2025-01-13 13:29:15 +01:00 committed by GitHub
commit 7d3bd3a0a0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 16 additions and 11 deletions

View File

@ -1,19 +1,20 @@
import { Constants } from "@budibase/frontend-core" import { Constants, APIClient } from "@budibase/frontend-core"
import { FieldTypes } from "../constants" import { FieldTypes } from "../constants"
import { Row, Table } from "@budibase/types"
export const patchAPI = API => { export const patchAPI = (API: APIClient) => {
/** /**
* Enriches rows which contain certain field types so that they can * Enriches rows which contain certain field types so that they can
* be properly displayed. * be properly displayed.
* The ability to create these bindings has been removed, but they will still * The ability to create these bindings has been removed, but they will still
* exist in client apps to support backwards compatibility. * exist in client apps to support backwards compatibility.
*/ */
const enrichRows = async (rows, tableId) => { const enrichRows = async (rows: Row[], tableId: string) => {
if (!Array.isArray(rows)) { if (!Array.isArray(rows)) {
return [] return []
} }
if (rows.length) { if (rows.length) {
const tables = {} const tables: Record<string, Table> = {}
for (let row of rows) { for (let row of rows) {
// Fall back to passed in tableId if row doesn't have it specified // Fall back to passed in tableId if row doesn't have it specified
let rowTableId = row.tableId || tableId let rowTableId = row.tableId || tableId
@ -54,7 +55,7 @@ export const patchAPI = API => {
const fetchSelf = API.fetchSelf const fetchSelf = API.fetchSelf
API.fetchSelf = async () => { API.fetchSelf = async () => {
const user = await fetchSelf() const user = await fetchSelf()
if (user && user._id) { if (user && "_id" in user && user._id) {
if (user.roleId === "PUBLIC") { if (user.roleId === "PUBLIC") {
// Don't try to enrich a public user as it will 403 // Don't try to enrich a public user as it will 403
return user return user
@ -90,13 +91,14 @@ export const patchAPI = API => {
return await enrichRows(rows, tableId) return await enrichRows(rows, tableId)
} }
// Wipe any HBS formulae from table definitions, as these interfere with // Wipe any HBS formulas from table definitions, as these interfere with
// handlebars enrichment // handlebars enrichment
const fetchTableDefinition = API.fetchTableDefinition const fetchTableDefinition = API.fetchTableDefinition
API.fetchTableDefinition = async tableId => { API.fetchTableDefinition = async tableId => {
const definition = await fetchTableDefinition(tableId) const definition = await fetchTableDefinition(tableId)
Object.keys(definition?.schema || {}).forEach(field => { Object.keys(definition?.schema || {}).forEach(field => {
if (definition.schema[field]?.type === "formula") { if (definition.schema[field]?.type === "formula") {
// @ts-expect-error TODO check what use case removing that would break
delete definition.schema[field].formula delete definition.schema[field].formula
} }
}) })

View File

@ -1,7 +1,7 @@
<script> <script>
import { getContext, onDestroy, onMount, setContext } from "svelte" import { getContext, onDestroy, onMount, setContext } from "svelte"
import { builderStore } from "stores/builder.js" import { builderStore } from "stores/builder.js"
import { blockStore } from "stores/blocks.js" import { blockStore } from "stores/blocks"
const component = getContext("component") const component = getContext("component")
const { styleable } = getContext("sdk") const { styleable } = getContext("sdk")

View File

@ -3,7 +3,7 @@
import Block from "components/Block.svelte" import Block from "components/Block.svelte"
import BlockComponent from "components/BlockComponent.svelte" import BlockComponent from "components/BlockComponent.svelte"
import { makePropSafe as safe } from "@budibase/string-templates" import { makePropSafe as safe } from "@budibase/string-templates"
import { enrichSearchColumns, enrichFilter } from "utils/blocks.js" import { enrichSearchColumns, enrichFilter } from "utils/blocks"
import { get } from "svelte/store" import { get } from "svelte/store"
export let title export let title

View File

@ -5,7 +5,7 @@
import Block from "components/Block.svelte" import Block from "components/Block.svelte"
import BlockComponent from "components/BlockComponent.svelte" import BlockComponent from "components/BlockComponent.svelte"
import { makePropSafe as safe } from "@budibase/string-templates" import { makePropSafe as safe } from "@budibase/string-templates"
import { enrichSearchColumns, enrichFilter } from "utils/blocks.js" import { enrichSearchColumns, enrichFilter } from "utils/blocks"
import { Utils } from "@budibase/frontend-core" import { Utils } from "@budibase/frontend-core"
export let title export let title

View File

@ -1,5 +1,5 @@
import { makePropSafe as safe } from "@budibase/string-templates" import { makePropSafe as safe } from "@budibase/string-templates"
import { API } from "../api/index.js" import { API } from "../api"
import { UILogicalOperator } from "@budibase/types" import { UILogicalOperator } from "@budibase/types"
import { Constants } from "@budibase/frontend-core" import { Constants } from "@budibase/frontend-core"

View File

@ -46,6 +46,8 @@ import { buildLogsEndpoints } from "./logs"
import { buildMigrationEndpoints } from "./migrations" import { buildMigrationEndpoints } from "./migrations"
import { buildRowActionEndpoints } from "./rowActions" import { buildRowActionEndpoints } from "./rowActions"
export type { APIClient } from "./types"
/** /**
* Random identifier to uniquely identify a session in a tab. This is * Random identifier to uniquely identify a session in a tab. This is
* used to determine the originator of calls to the API, which is in * used to determine the originator of calls to the API, which is in

View File

@ -13,7 +13,7 @@ export interface SelfEndpoints {
generateAPIKey: () => Promise<string | undefined> generateAPIKey: () => Promise<string | undefined>
fetchDeveloperInfo: () => Promise<FetchAPIKeyResponse> fetchDeveloperInfo: () => Promise<FetchAPIKeyResponse>
fetchBuilderSelf: () => Promise<GetGlobalSelfResponse> fetchBuilderSelf: () => Promise<GetGlobalSelfResponse>
fetchSelf: () => Promise<AppSelfResponse> fetchSelf: () => Promise<AppSelfResponse | null>
} }
export const buildSelfEndpoints = (API: BaseAPIClient): SelfEndpoints => ({ export const buildSelfEndpoints = (API: BaseAPIClient): SelfEndpoints => ({

View File

@ -1,4 +1,5 @@
export { createAPIClient } from "./api" export { createAPIClient } from "./api"
export type { APIClient } from "./api"
export { fetchData, DataFetchMap } from "./fetch" export { fetchData, DataFetchMap } from "./fetch"
export type { DataFetchType } from "./fetch" export type { DataFetchType } from "./fetch"
export * as Constants from "./constants" export * as Constants from "./constants"