diff --git a/packages/standard-components/src/DataGrid/Relationship/RelationshipDisplay.svelte b/packages/standard-components/src/DataGrid/Relationship/RelationshipDisplay.svelte new file mode 100644 index 0000000000..d18d6f3be8 --- /dev/null +++ b/packages/standard-components/src/DataGrid/Relationship/RelationshipDisplay.svelte @@ -0,0 +1,58 @@ + + +
+ {#if linkedRows && linkedRows.length && displayColumn} + {#each linkedRows as linkedRow} +
{linkedRow[displayColumn]}
+ {/each} + {/if} +
+ + diff --git a/packages/standard-components/src/DataGrid/Relationship/tableCache.js b/packages/standard-components/src/DataGrid/Relationship/tableCache.js new file mode 100644 index 0000000000..a87f12969c --- /dev/null +++ b/packages/standard-components/src/DataGrid/Relationship/tableCache.js @@ -0,0 +1,21 @@ +import api from "../../api" + +let cache = {} + +async function fetchTable(id) { + const FETCH_TABLE_URL = `/api/tables/${id}` + const response = await api.get(FETCH_TABLE_URL) + return await response.json() +} + +export default async function getTable(tableId) { + if (!tableId) { + return null + } + if (!cache[tableId]) { + console.log("cache miss for " + tableId) + cache[tableId] = fetchTable(tableId) + cache[tableId] = await cache[tableId] + } + return await cache[tableId] +} diff --git a/packages/standard-components/src/DataGrid/customRenderer.js b/packages/standard-components/src/DataGrid/customRenderer.js index e3f07eda47..367841b681 100644 --- a/packages/standard-components/src/DataGrid/customRenderer.js +++ b/packages/standard-components/src/DataGrid/customRenderer.js @@ -4,6 +4,7 @@ import AttachmentCell from "./AttachmentCell/Button.svelte" import Select from "./Select/Wrapper.svelte" import DatePicker from "./DateTime/Wrapper.svelte" +import RelationshipDisplay from "./Relationship/RelationshipDisplay.svelte" const renderers = new Map([ ["boolean", booleanRenderer], @@ -103,14 +104,20 @@ function optionsRenderer({ inclusion }, editable) { } } /* eslint-disable no-unused-vars */ -function linkedRowRenderer(constraints, editable) { +function linkedRowRenderer(constraints, editable, schema) { return params => { let container = document.createElement("div") container.style.display = "grid" container.style.placeItems = "center" container.style.height = "100%" - container.innerText = params.value ? params.value.length : 0 + new RelationshipDisplay({ + target: container, + props: { + row: params.data, + columnName: params.column.colId, + }, + }) return container }