1
0
Fork 0
mirror of synced 2024-08-05 13:21:26 +12:00

First PR comments.

This commit is contained in:
mike12345567 2024-06-24 12:43:26 +01:00
parent 05ea231d20
commit 965725d022
3 changed files with 24 additions and 26 deletions

View file

@ -176,24 +176,13 @@ export class ExternalRequest<T extends Operation> {
const relationshipColumns = sdk.rows.filters.getRelationshipColumns(table) const relationshipColumns = sdk.rows.filters.getRelationshipColumns(table)
filters = sdk.rows.filters.updateFilterKeys( filters = sdk.rows.filters.updateFilterKeys(
filters, filters,
relationshipColumns relationshipColumns.map(({ name, definition }) => {
.map(({ name, definition }) => { const { tableName } = breakExternalTableId(definition.tableId)
const { tableName } = breakExternalTableId(definition.tableId) return {
return { original: name,
original: name, updated: tableName!,
updated: tableName!, }
} })
})
// don't update table names - include this for context incase a column would be replaced
.concat(
tables.map(table => {
const tableName = table.originalName || table.name
return {
original: tableName,
updated: tableName,
}
})
)
) )
const primary = table.primary const primary = table.primary
// if passed in array need to copy for shifting etc // if passed in array need to copy for shifting etc

View file

@ -1954,6 +1954,7 @@ describe.each([
!isLucene && !isLucene &&
// It also can't work for in-memory searching because the related table name // It also can't work for in-memory searching because the related table name
// isn't available. // isn't available.
!isInMemory &&
describe("relations", () => { describe("relations", () => {
let productCategoryTable: Table, productCatRows: Row[] let productCategoryTable: Table, productCatRows: Row[]

View file

@ -4,24 +4,32 @@ import {
SearchFilters, SearchFilters,
Table, Table,
} from "@budibase/types" } from "@budibase/types"
import { isPlainObject } from "lodash"
export function getRelationshipColumns(table: Table): { export function getRelationshipColumns(table: Table): {
name: string name: string
definition: RelationshipFieldMetadata definition: RelationshipFieldMetadata
}[] { }[] {
return Object.entries(table.schema) // performing this with a for loop rather than an array filter improves
.filter(entry => entry[1].type === FieldType.LINK) // type guarding, as no casts are required
.map(entry => ({ const linkEntries: [string, RelationshipFieldMetadata][] = []
name: entry[0], for (let entry of Object.entries(table.schema)) {
definition: entry[1] as RelationshipFieldMetadata, if (entry[1].type === FieldType.LINK) {
})) const linkColumn: RelationshipFieldMetadata = entry[1]
linkEntries.push([entry[0], linkColumn])
}
}
return linkEntries.map(entry => ({
name: entry[0],
definition: entry[1],
}))
} }
export function getTableIDList( export function getTableIDList(
tables: Table[] tables: Table[]
): { name: string; id: string }[] { ): { name: string; id: string }[] {
return tables return tables
.filter(table => table.originalName) .filter(table => table.originalName && table._id)
.map(table => ({ id: table._id!, name: table.originalName! })) .map(table => ({ id: table._id!, name: table.originalName! }))
} }
@ -32,7 +40,7 @@ export function updateFilterKeys(
const makeFilterKeyRegex = (str: string) => const makeFilterKeyRegex = (str: string) =>
new RegExp(`^${str}\\.|:${str}\\.`) new RegExp(`^${str}\\.|:${str}\\.`)
for (let filter of Object.values(filters)) { for (let filter of Object.values(filters)) {
if (typeof filter !== "object") { if (!isPlainObject(filter)) {
continue continue
} }
for (let [key, keyFilter] of Object.entries(filter)) { for (let [key, keyFilter] of Object.entries(filter)) {