diff --git a/app/components/Index/common/indexTransformer.ts b/app/components/Index/common/indexTransformer.ts index 078743d30..eadda09b0 100644 --- a/app/components/Index/common/indexTransformer.ts +++ b/app/components/Index/common/indexTransformer.ts @@ -1,5 +1,4 @@ import { AzulSummaryResponse } from "@databiosphere/findable-ui/lib/apis/azul/common/entities"; -import { Summary } from "@databiosphere/findable-ui/lib/components/Index/components/Hero/components/Summaries/summaries"; import { formatCountSize } from "@databiosphere/findable-ui/lib/utils/formatCountSize"; import { BIND_SUMMARY_RESPONSE, @@ -20,23 +19,19 @@ export function getPluralizedMetadataLabel( } /** - * Maps index summaries from summary API response. + * Maps entity list summaries from summary API response. * @param summaries - Summary list. * @param summaryResponse - Response model return from summary API. - * @returns summary counts. + * @returns summary key-value pairs (count, label). */ -export function getSummaries( +export function mapSummary( summaries: Array, summaryResponse: AzulSummaryResponse -): Summary[] { +): [string, string][] { return summaries.map((summary) => { const summaryBinderFn = BIND_SUMMARY_RESPONSE[summary]; - const count = summaryBinderFn(summaryResponse); - const formattedCount = formatCountSize(count); + const count = formatCountSize(summaryBinderFn(summaryResponse)); const label = SUMMARY_LABEL[summary]; - return { - count: formattedCount, - label, - }; + return [count, label]; }); } diff --git a/app/components/index.tsx b/app/components/index.tsx index 8e9d586dd..e81be5032 100644 --- a/app/components/index.tsx +++ b/app/components/index.tsx @@ -54,7 +54,6 @@ export { ManifestDownloadEntity } from "@databiosphere/findable-ui/lib/component export { ManifestDownloadForm } from "@databiosphere/findable-ui/lib/components/Export/components/ManifestDownload/components/ManifestDownloadForm/manifestDownloadForm"; export { ManifestDownload } from "@databiosphere/findable-ui/lib/components/Export/components/ManifestDownload/manifestDownload"; export { AzulFileDownload } from "@databiosphere/findable-ui/lib/components/Index/components/AzulFileDownload/azulFileDownload"; -export { Summaries } from "@databiosphere/findable-ui/lib/components/Index/components/Hero/components/Summaries/summaries"; export { BackPageContentMainColumn, BackPageContentSideColumn, diff --git a/e2e/anvil/anvil-index-export-button.spec.ts b/e2e/anvil/anvil-index-export-button.spec.ts index d833c8814..fa70eba4f 100644 --- a/e2e/anvil/anvil-index-export-button.spec.ts +++ b/e2e/anvil/anvil-index-export-button.spec.ts @@ -1,28 +1,94 @@ -import test from "@playwright/test"; -import { - testBulkDownloadIndexExportWorkflow, - testIndexExportSummary, -} from "../testFunctions"; +import test, { ElementHandle, Response, Page } from "@playwright/test"; +import { expect } from "@playwright/test"; +import { testBulkDownloadIndexExportWorkflow } from "../testFunctions"; import { ANVIL_TABS } from "./anvil-tabs"; +import { MUI_CLASSES, TEST_IDS } from "../features/common/constants"; -test("Smoke test File Manifest Request index export workflow on the Files tab", async ({ - page, -}) => { - test.setTimeout(120000); - const testResult = await testBulkDownloadIndexExportWorkflow( +test.describe("AnVIL Data Explorer Export", () => { + test("Smoke test File Manifest Request index export workflow on the Files tab", async ({ page, - ANVIL_TABS.FILES - ); - if (!testResult) { - test.fail(); - } -}); + }) => { + test.setTimeout(120000); + const testResult = await testBulkDownloadIndexExportWorkflow( + page, + ANVIL_TABS.FILES + ); + if (!testResult) { + test.fail(); + } + }); + + test("Verifies that the Selected Data Summary on the export page displays the same label and count as the summary on the BioSamples tab", async ({ + page, + }) => { + await page.goto("/biosamples"); + await page.waitForURL(/\/biosamples/); + await Promise.all([waitForTestId(page, TEST_IDS.ENTITY_SUMMARY)]); + + // Export button should be visible. + const button = page.getByTestId(TEST_IDS.EXPORT_BUTTON); + await expect(button).toBeVisible(); + + // Summary should be visible. + const summaryLocator = page.getByTestId(TEST_IDS.ENTITY_SUMMARY); + await expect(summaryLocator).toBeVisible(); + + // Get each summary span's inner text. + const innerTexts = await summaryLocator + .locator(MUI_CLASSES.TYPOGRAPHY) // Retrieves the count and label and omits the dot separator. + .allTextContents(); -test("Check that figures in the Selected Data Summary tab on the index export page matches figures on the index page on the BioSamples tab", async ({ - page, -}) => { - const testResult = await testIndexExportSummary(page, ANVIL_TABS.BIOSAMPLES); - if (!testResult) { - test.fail(); - } + // Pair each summary item's label and count by iterating through the text contents + // two at a time, and store them as [label, count] tuples in the summary array. + const summary: [string, string][] = []; + for (let i = 0; i < innerTexts.length; i += 2) { + summary.push([innerTexts[i + 1], innerTexts[i]]); + } + + // Click the export button and wait for the summary API to be called. + await Promise.all([ + button.click(), + page.waitForURL(/\/export/), + page.waitForResponse(urlOrPredicate), + waitForTestId(page, TEST_IDS.EXPORT_SUMMARY), + ]); + + // Export summary should be visible. + const exportSummaryLocator = page.getByTestId(TEST_IDS.EXPORT_SUMMARY); + await expect(exportSummaryLocator).toBeVisible(); + + // Test that each summary item is present in the export summary + // with corresponding count. + for (const [label, count] of summary) { + const summaryItem = exportSummaryLocator + .locator("> div") + .filter({ hasText: label }); + await expect(summaryItem).toBeVisible(); + await expect(summaryItem).toContainText(count, { timeout: 5000 }); + } + }); }); + +/** + * Checks if the response is the index summary API. + * @param r - Response. + * @returns boolean. + */ +function urlOrPredicate(r: Response): boolean { + return r.url().includes("/index/summary") && r.status() === 200; +} + +/** + * Waits for a locator to be visible. + * @param page - Page. + * @param testId - Test ID. + * @returns Promise. + */ +function waitForTestId( + page: Page, + testId: string +): Promise> { + return page.waitForSelector(`[data-testid="${testId}"]`, { + state: "visible", + }); +} diff --git a/e2e/features/common/constants.ts b/e2e/features/common/constants.ts index 9cfeec164..ee4cc0b06 100644 --- a/e2e/features/common/constants.ts +++ b/e2e/features/common/constants.ts @@ -18,12 +18,15 @@ export const MUI_CLASSES = { TABLE_ROW: ".MuiTableRow-root", TABLE_SORT_LABEL: ".MuiTableSortLabel-root", TABLE_SORT_LABEL_ICON: ".MuiTableSortLabel-icon", + TYPOGRAPHY: ".MuiTypography-root", }; export const TEST_IDS = { CLEAR_ALL_FILTERS: "clear-all-filters", ENTITIES_VIEW: "entities-view", + ENTITY_SUMMARY: "entity-summary", EXPORT_BUTTON: "export-button", + EXPORT_SUMMARY: "export-summary", FILTERS: "filters", FILTER_CONTROLS: "filter-controls", FILTER_COUNT: "filter-count", diff --git a/e2e/testFunctions.ts b/e2e/testFunctions.ts index 8b30353ed..5d04d3658 100644 --- a/e2e/testFunctions.ts +++ b/e2e/testFunctions.ts @@ -940,61 +940,6 @@ export async function testBulkDownloadIndexExportWorkflow( return true; } -/** - * Check that the summary box on the "Choose Export Method" page has numbers that match those on the index page - * @param page - a Playwright page object - * @param tab - the tab to test on - * @returns - true if the test passes, false if it should fail but does not fail an assertion - */ -export async function testIndexExportSummary( - page: Page, - tab: TabDescription -): Promise { - if (tab?.indexExportPage === undefined) { - console.log( - "testIndexExportSummmary Error: indexExportPage not specified for given tab, so test cannot run" - ); - return false; - } - await page.goto(tab.url); - const headers: { header: string; value: string }[] = []; - const indexExportButtonLocator = page.getByRole("link", { - name: tab.indexExportPage.indexExportButtonText, - }); - await expect(indexExportButtonLocator).toBeVisible(); - for (const detail of tab.indexExportPage.detailsToCheck) { - // This Regexp gets a decimal number, some whitespace, then the name of the detail, matching how the detail box appears to Playwright. - const detailBoxRegexp = RegExp(`^(\\d+\\.\\d+k)\\s*${detail}$`); - // This gets the detail's value. The .trim() is necessary since innertext adds extraneous whitespace on Webkit - const headerValueArray = (await page.getByText(detailBoxRegexp).innerText()) - .trim() - .match(detailBoxRegexp); - // Check that the regex matches the expected format - if (headerValueArray === null || headerValueArray.length !== 2) { - console.log( - "testIndexExportSummmary Error: The detail box text does not match the expected format" - ); - return false; - } - // Save the header value and detail for later comparison - headers.push({ - header: detail, - value: headerValueArray[1], - }); - } - await indexExportButtonLocator.click(); - for (const headerValue of headers) { - // Expect the correct value to be below the correct header in the dataset values table - await expect( - page - .locator(`:below(:text('${headerValue.header}'))`) - .getByText(headerValue.value) - .first() - ).toBeVisible(); - } - return true; -} - const PAGE_COUNT_REGEX = /Page \d+ of \d+/; const MAX_PAGINATIONS = 200; diff --git a/next.config.mjs b/next.config.mjs index 9dedfcc76..72cbf8f0a 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -7,6 +7,7 @@ const ESM_PACKAGES = [ "@databiosphere/findable-ui", "@observablehq/plot", "@tanstack/react-table", + "@tanstack/react-virtual", ]; const withMDX = nextMDX({ diff --git a/package-lock.json b/package-lock.json index 2a5730561..59c13b773 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "explorer", "version": "2.19.1", "dependencies": { - "@databiosphere/findable-ui": "^37.1.0", + "@databiosphere/findable-ui": "^38.1.0", "@emotion/react": "^11.13.3", "@emotion/styled": "^11.13.0", "@mdx-js/loader": "^3.0.1", @@ -18,6 +18,7 @@ "@next/mdx": "^14.2.28", "@observablehq/plot": "^0.6.17", "@tanstack/react-table": "^8.19.2", + "@tanstack/react-virtual": "^3.13.12", "@types/fhir": "^0.0.35", "copy-to-clipboard": "3.3.1", "csv-parse": "^5.0.4", @@ -2487,9 +2488,9 @@ } }, "node_modules/@databiosphere/findable-ui": { - "version": "37.1.0", - "resolved": "https://registry.npmjs.org/@databiosphere/findable-ui/-/findable-ui-37.1.0.tgz", - "integrity": "sha512-hDsPhuflQoHhMcOv+a8uD6GyuPuZbD9ZXYDnO3HAOvZMtCiAzWsqgrt7i9Z/Xnj+IzSQQqKSPMhw51im7ylvNQ==", + "version": "38.1.0", + "resolved": "https://registry.npmjs.org/@databiosphere/findable-ui/-/findable-ui-38.1.0.tgz", + "integrity": "sha512-6SY8nJX22euMsa+mmuWohtjsNo44RzdAiguKFAZYMg983E87w3vpMzgMjR8sqsoX+uKDHNuGRpAccDtX0VSnhw==", "engines": { "node": "20.10.0" }, @@ -2501,7 +2502,7 @@ "@observablehq/plot": "^0.6.17", "@tanstack/match-sorter-utils": "^8.19.4", "@tanstack/react-table": "^8.19.2", - "@tanstack/react-virtual": "^3.0.0-beta.59", + "@tanstack/react-virtual": "^3.13.12", "copy-to-clipboard": "3.3.1", "isomorphic-dompurify": "^2.22.0", "ky": "^1.7.2", @@ -5806,20 +5807,19 @@ } }, "node_modules/@tanstack/react-virtual": { - "version": "3.10.8", - "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.10.8.tgz", - "integrity": "sha512-VbzbVGSsZlQktyLrP5nxE+vE1ZR+U0NFAWPbJLoG2+DKPwd2D7dVICTVIIaYlJqX1ZCEnYDbaOpmMwbsyhBoIA==", - "peer": true, + "version": "3.13.12", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.12.tgz", + "integrity": "sha512-Gd13QdxPSukP8ZrkbgS2RwoZseTTbQPLnQEn7HY/rqtM+8Zt95f7xKC7N0EsKs7aoz0WzZ+fditZux+F8EzYxA==", "dependencies": { - "@tanstack/virtual-core": "3.10.8" + "@tanstack/virtual-core": "3.13.12" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/@tanstack/table-core": { @@ -5835,10 +5835,9 @@ } }, "node_modules/@tanstack/virtual-core": { - "version": "3.10.8", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.10.8.tgz", - "integrity": "sha512-PBu00mtt95jbKFi6Llk9aik8bnR3tR/oQP1o3TSi+iG//+Q2RTIzCEgKkHG8BB86kxMNW6O8wku+Lmi+QFR6jA==", - "peer": true, + "version": "3.13.12", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.12.tgz", + "integrity": "sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" @@ -23334,9 +23333,9 @@ "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==" }, "@databiosphere/findable-ui": { - "version": "37.1.0", - "resolved": "https://registry.npmjs.org/@databiosphere/findable-ui/-/findable-ui-37.1.0.tgz", - "integrity": "sha512-hDsPhuflQoHhMcOv+a8uD6GyuPuZbD9ZXYDnO3HAOvZMtCiAzWsqgrt7i9Z/Xnj+IzSQQqKSPMhw51im7ylvNQ==", + "version": "38.1.0", + "resolved": "https://registry.npmjs.org/@databiosphere/findable-ui/-/findable-ui-38.1.0.tgz", + "integrity": "sha512-6SY8nJX22euMsa+mmuWohtjsNo44RzdAiguKFAZYMg983E87w3vpMzgMjR8sqsoX+uKDHNuGRpAccDtX0VSnhw==", "requires": {} }, "@digitak/esrun": { @@ -25425,12 +25424,11 @@ } }, "@tanstack/react-virtual": { - "version": "3.10.8", - "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.10.8.tgz", - "integrity": "sha512-VbzbVGSsZlQktyLrP5nxE+vE1ZR+U0NFAWPbJLoG2+DKPwd2D7dVICTVIIaYlJqX1ZCEnYDbaOpmMwbsyhBoIA==", - "peer": true, + "version": "3.13.12", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.12.tgz", + "integrity": "sha512-Gd13QdxPSukP8ZrkbgS2RwoZseTTbQPLnQEn7HY/rqtM+8Zt95f7xKC7N0EsKs7aoz0WzZ+fditZux+F8EzYxA==", "requires": { - "@tanstack/virtual-core": "3.10.8" + "@tanstack/virtual-core": "3.13.12" } }, "@tanstack/table-core": { @@ -25439,10 +25437,9 @@ "integrity": "sha512-KpRjhgehIhbfH78ARm/GJDXGnpdw4bCg3qas6yjWSi7czJhI/J6pWln7NHtmBkGE9ZbohiiNtLqwGzKmBfixig==" }, "@tanstack/virtual-core": { - "version": "3.10.8", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.10.8.tgz", - "integrity": "sha512-PBu00mtt95jbKFi6Llk9aik8bnR3tR/oQP1o3TSi+iG//+Q2RTIzCEgKkHG8BB86kxMNW6O8wku+Lmi+QFR6jA==", - "peer": true + "version": "3.13.12", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.12.tgz", + "integrity": "sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==" }, "@testing-library/dom": { "version": "10.4.0", diff --git a/package.json b/package.json index 5ebeb2c74..7df3589f3 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "check-system-status:anvil-cmg": "esrun e2e/anvil/anvil-check-system-status.ts" }, "dependencies": { - "@databiosphere/findable-ui": "^37.1.0", + "@databiosphere/findable-ui": "^38.1.0", "@emotion/react": "^11.13.3", "@emotion/styled": "^11.13.0", "@mdx-js/loader": "^3.0.1", @@ -42,6 +42,7 @@ "@next/mdx": "^14.2.28", "@observablehq/plot": "^0.6.17", "@tanstack/react-table": "^8.19.2", + "@tanstack/react-virtual": "^3.13.12", "@types/fhir": "^0.0.35", "copy-to-clipboard": "3.3.1", "csv-parse": "^5.0.4", diff --git a/site-config/anvil-catalog/dev/config.ts b/site-config/anvil-catalog/dev/config.ts index 08437938b..95ebf18e1 100644 --- a/site-config/anvil-catalog/dev/config.ts +++ b/site-config/anvil-catalog/dev/config.ts @@ -86,7 +86,6 @@ export function makeConfig( studiesEntityConfig, workspaceEntityConfig, ], - explorerTitle: APP_TITLE, export: exportConfig, // TODO(cc) export config should be optional, we should add notFound to export pages. gitHubUrl, layout: { diff --git a/site-config/anvil-catalog/dev/index/consortiaEntityConfig.ts b/site-config/anvil-catalog/dev/index/consortiaEntityConfig.ts index dc6ef67e3..2903d61bb 100644 --- a/site-config/anvil-catalog/dev/index/consortiaEntityConfig.ts +++ b/site-config/anvil-catalog/dev/index/consortiaEntityConfig.ts @@ -169,4 +169,5 @@ export const consortiaEntityConfig: EntityConfig = { }, route: "consortia", staticLoadFile: "files/anvil-catalog/out/anvil-consortia.json", + ui: { enableTabs: true }, }; diff --git a/site-config/anvil-catalog/dev/index/studiesEntityConfig.ts b/site-config/anvil-catalog/dev/index/studiesEntityConfig.ts index 41ac70e6f..b89176858 100644 --- a/site-config/anvil-catalog/dev/index/studiesEntityConfig.ts +++ b/site-config/anvil-catalog/dev/index/studiesEntityConfig.ts @@ -159,4 +159,5 @@ export const studiesEntityConfig: EntityConfig = { }, route: "studies", staticLoadFile: "files/anvil-catalog/out/anvil-studies.json", + ui: { enableTabs: true }, }; diff --git a/site-config/anvil-catalog/dev/index/workspaceEntityConfig.ts b/site-config/anvil-catalog/dev/index/workspaceEntityConfig.ts index 553615359..5975b5f10 100644 --- a/site-config/anvil-catalog/dev/index/workspaceEntityConfig.ts +++ b/site-config/anvil-catalog/dev/index/workspaceEntityConfig.ts @@ -142,4 +142,5 @@ export const workspaceEntityConfig: EntityConfig = { }, route: "workspaces", staticLoadFile: "files/anvil-catalog/out/anvil-workspaces.json", + ui: { enableTabs: true }, }; diff --git a/site-config/anvil-cmg/dev/config.ts b/site-config/anvil-cmg/dev/config.ts index f387ce326..b98482403 100644 --- a/site-config/anvil-cmg/dev/config.ts +++ b/site-config/anvil-cmg/dev/config.ts @@ -16,11 +16,11 @@ import { mapAccessibleValue } from "./index/common/utils"; import { datasetsEntityConfig } from "./index/datasetsEntityConfig"; import { donorsEntityConfig } from "./index/donorsEntityConfig"; import { filesEntityConfig } from "./index/filesEntityConfig"; -import { summary } from "./index/summary"; import { floating } from "./layout/floating"; import dataDictionary from "./dataDictionary/data-dictionary.json"; import { TABLE_OPTIONS } from "../../../app/viewModelBuilders/azul/anvil-cmg/common/dataDictionaryMapper/tableOptions"; import { buildDataDictionary } from "../../../app/viewModelBuilders/azul/anvil-cmg/common/dataDictionaryMapper/dataDictionaryMapper"; +import { buildSummaries } from "./index/summaryViewModelBuilder"; // Template constants const APP_TITLE = "AnVIL Data Explorer"; @@ -156,7 +156,6 @@ export function makeConfig( activitiesEntityConfig, filesEntityConfig, ], - explorerTitle: "Explore Data", export: exportConfig, exportToTerraUrl: "https://bvdp-saturn-dev.appspot.com/", gitHubUrl, @@ -217,7 +216,7 @@ export function makeConfig( redirectRootToPath: "/datasets", summaryConfig: { apiPath: "index/summary", - components: summary, + mapResponse: buildSummaries, }, systemStatus: { apiPath: `${dataUrl}${APIEndpoints.INDEX_STATUS}`, diff --git a/site-config/anvil-cmg/dev/index/activitiesEntityConfig.ts b/site-config/anvil-cmg/dev/index/activitiesEntityConfig.ts index 5b2b1a6d9..3f6696efc 100644 --- a/site-config/anvil-cmg/dev/index/activitiesEntityConfig.ts +++ b/site-config/anvil-cmg/dev/index/activitiesEntityConfig.ts @@ -12,8 +12,8 @@ import { ANVIL_CMG_CATEGORY_KEY, ANVIL_CMG_CATEGORY_LABEL, } from "../../category"; -import { listHero } from "../listView/listHero"; -import { subTitleHero } from "../listView/subTitleHero"; +import { entityListSlot } from "../ui/entityList"; +import { entityViewSlot } from "../ui/entityView"; /** * Entity config object responsible for config related to the /activities route. @@ -120,9 +120,14 @@ export const activitiesEntityConfig: EntityConfig = { }, }, } as ListConfig, - listView: { - listHero, - subTitleHero, - }, route: "activities", + ui: { + enableExportButton: true, + enableSummary: true, + enableTabs: true, + slots: { + entityListSlot, + entityViewSlot, + }, + }, }; diff --git a/site-config/anvil-cmg/dev/index/biosamplesEntityConfig.ts b/site-config/anvil-cmg/dev/index/biosamplesEntityConfig.ts index fecfddf47..3da5458b9 100644 --- a/site-config/anvil-cmg/dev/index/biosamplesEntityConfig.ts +++ b/site-config/anvil-cmg/dev/index/biosamplesEntityConfig.ts @@ -12,8 +12,8 @@ import { ANVIL_CMG_CATEGORY_KEY, ANVIL_CMG_CATEGORY_LABEL, } from "../../category"; -import { listHero } from "../listView/listHero"; -import { subTitleHero } from "../listView/subTitleHero"; +import { entityListSlot } from "../ui/entityList"; +import { entityViewSlot } from "../ui/entityView"; /** * Entity config object responsible for config related to the /biosamples route. @@ -119,9 +119,14 @@ export const biosamplesEntityConfig: EntityConfig = { }, }, } as ListConfig, - listView: { - listHero, - subTitleHero, - }, route: "biosamples", + ui: { + enableExportButton: true, + enableSummary: true, + enableTabs: true, + slots: { + entityListSlot, + entityViewSlot, + }, + }, }; diff --git a/site-config/anvil-cmg/dev/index/datasetsEntityConfig.ts b/site-config/anvil-cmg/dev/index/datasetsEntityConfig.ts index 23e71d039..55f7ecd71 100644 --- a/site-config/anvil-cmg/dev/index/datasetsEntityConfig.ts +++ b/site-config/anvil-cmg/dev/index/datasetsEntityConfig.ts @@ -17,8 +17,8 @@ import { import { mainColumn } from "../detail/dataset/overviewMainColumn"; import { sideColumn } from "../detail/dataset/overviewSideColumn"; import { top } from "../detail/dataset/top"; -import { listHero } from "../listView/datasetsListHero"; -import { subTitleHero } from "../listView/subTitleHero"; +import { entityListSlot } from "../ui/datasetsEntityList"; +import { entityViewSlot } from "../ui/entityView"; import { exportConfig } from "../detail/dataset/export/export"; /** @@ -137,9 +137,14 @@ export const datasetsEntityConfig: EntityConfig = { }, }, } as ListConfig, - listView: { - listHero, - subTitleHero, - }, route: "datasets", + ui: { + enableExportButton: true, + enableSummary: true, + enableTabs: true, + slots: { + entityListSlot, + entityViewSlot, + }, + }, }; diff --git a/site-config/anvil-cmg/dev/index/donorsEntityConfig.ts b/site-config/anvil-cmg/dev/index/donorsEntityConfig.ts index 678e50595..80066bf26 100644 --- a/site-config/anvil-cmg/dev/index/donorsEntityConfig.ts +++ b/site-config/anvil-cmg/dev/index/donorsEntityConfig.ts @@ -12,8 +12,8 @@ import { ANVIL_CMG_CATEGORY_KEY, ANVIL_CMG_CATEGORY_LABEL, } from "../../category"; -import { listHero } from "../listView/listHero"; -import { subTitleHero } from "../listView/subTitleHero"; +import { entityListSlot } from "../ui/entityList"; +import { entityViewSlot } from "../ui/entityView"; /** * Entity config object responsible for config related to the /donors route. @@ -97,9 +97,14 @@ export const donorsEntityConfig: EntityConfig = { }, }, } as ListConfig, - listView: { - listHero, - subTitleHero, - }, route: "donors", + ui: { + enableExportButton: true, + enableSummary: true, + enableTabs: true, + slots: { + entityListSlot, + entityViewSlot, + }, + }, }; diff --git a/site-config/anvil-cmg/dev/index/filesEntityConfig.ts b/site-config/anvil-cmg/dev/index/filesEntityConfig.ts index 554cb2d75..20c7af1cf 100644 --- a/site-config/anvil-cmg/dev/index/filesEntityConfig.ts +++ b/site-config/anvil-cmg/dev/index/filesEntityConfig.ts @@ -13,8 +13,8 @@ import { ANVIL_CMG_CATEGORY_KEY, ANVIL_CMG_CATEGORY_LABEL, } from "../../category"; -import { listHero } from "../listView/listHero"; -import { subTitleHero } from "../listView/subTitleHero"; +import { entityListSlot } from "../ui/entityList"; +import { entityViewSlot } from "../ui/entityView"; export const downloadColumn: ColumnConfig = { componentConfig: { @@ -146,9 +146,14 @@ export const filesEntityConfig: EntityConfig = { }, }, } as ListConfig, - listView: { - listHero, - subTitleHero, - }, route: "files", + ui: { + enableExportButton: true, + enableSummary: true, + enableTabs: true, + slots: { + entityListSlot, + entityViewSlot, + }, + }, }; diff --git a/site-config/anvil-cmg/dev/index/summary.ts b/site-config/anvil-cmg/dev/index/summary.ts deleted file mode 100644 index eb911c583..000000000 --- a/site-config/anvil-cmg/dev/index/summary.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { AzulSummaryResponse } from "@databiosphere/findable-ui/lib/apis/azul/common/entities"; -import { ComponentConfig } from "@databiosphere/findable-ui/lib/config/entities"; -import * as C from "../../../../app/components"; -import * as V from "./summaryViewModelBuilder"; - -export const summary = [ - { - component: C.Summaries, - viewBuilder: V.buildSummaries, - } as ComponentConfig, -]; diff --git a/site-config/anvil-cmg/dev/index/summaryViewModelBuilder.ts b/site-config/anvil-cmg/dev/index/summaryViewModelBuilder.ts index 42d5d5014..a78e04128 100644 --- a/site-config/anvil-cmg/dev/index/summaryViewModelBuilder.ts +++ b/site-config/anvil-cmg/dev/index/summaryViewModelBuilder.ts @@ -1,18 +1,9 @@ import { AzulSummaryResponse } from "@databiosphere/findable-ui/lib/apis/azul/common/entities"; -import React from "react"; -import * as C from "../../../../app/components"; -import { getSummaries } from "../../../../app/components/Index/common/indexTransformer"; +import { mapSummary } from "../../../../app/components/Index/common/indexTransformer"; import { SUMMARIES } from "./common/constants"; -/** - * Build props for index Summaries component from the given summary response. - * @param summaryResponse - Response model return from summary API. - * @returns model to be used as props for the Summaries component. - */ export const buildSummaries = ( summaryResponse: AzulSummaryResponse -): React.ComponentProps => { - return { - summaries: getSummaries(SUMMARIES, summaryResponse), - }; +): [string, string][] => { + return mapSummary(SUMMARIES, summaryResponse); }; diff --git a/site-config/anvil-cmg/dev/listView/datasetsListHero.ts b/site-config/anvil-cmg/dev/ui/datasetsEntityList.ts similarity index 94% rename from site-config/anvil-cmg/dev/listView/datasetsListHero.ts rename to site-config/anvil-cmg/dev/ui/datasetsEntityList.ts index cf3036079..94956f208 100644 --- a/site-config/anvil-cmg/dev/listView/datasetsListHero.ts +++ b/site-config/anvil-cmg/dev/ui/datasetsEntityList.ts @@ -8,7 +8,7 @@ import * as C from "../../../../app/components"; import * as MDX from "../../../../app/components/common/MDXContent/anvil-cmg"; import * as V from "../../../../app/viewModelBuilders/azul/anvil-cmg/common/viewModelBuilders"; -export const listHero: ComponentsConfig = [ +export const entityListSlot: ComponentsConfig = [ { children: [ { diff --git a/site-config/anvil-cmg/dev/listView/listHero.ts b/site-config/anvil-cmg/dev/ui/entityList.ts similarity index 89% rename from site-config/anvil-cmg/dev/listView/listHero.ts rename to site-config/anvil-cmg/dev/ui/entityList.ts index 1b830fa18..dd3ec8ec9 100644 --- a/site-config/anvil-cmg/dev/listView/listHero.ts +++ b/site-config/anvil-cmg/dev/ui/entityList.ts @@ -5,7 +5,7 @@ import { import * as MDX from "../../../../app/components/common/MDXContent/anvil-cmg"; import * as V from "../../../../app/viewModelBuilders/azul/anvil-cmg/common/viewModelBuilders"; -export const listHero: ComponentsConfig = [ +export const entityListSlot: ComponentsConfig = [ { component: MDX.AlertEntityListWarning, viewBuilder: V.buildAlertEntityListWarning, diff --git a/site-config/anvil-cmg/dev/listView/subTitleHero.ts b/site-config/anvil-cmg/dev/ui/entityView.ts similarity index 87% rename from site-config/anvil-cmg/dev/listView/subTitleHero.ts rename to site-config/anvil-cmg/dev/ui/entityView.ts index 64c143523..bfb32e0d2 100644 --- a/site-config/anvil-cmg/dev/listView/subTitleHero.ts +++ b/site-config/anvil-cmg/dev/ui/entityView.ts @@ -4,7 +4,7 @@ import { } from "@databiosphere/findable-ui/lib/config/entities"; import * as C from "../../../../app/components"; -export const subTitleHero: ComponentsConfig = [ +export const entityViewSlot: ComponentsConfig = [ { component: C.NIHAccountExpiryWarning, } as ComponentConfig, diff --git a/site-config/anvil/dev/config.ts b/site-config/anvil/dev/config.ts index 1ff2bfb05..4e479fb58 100644 --- a/site-config/anvil/dev/config.ts +++ b/site-config/anvil/dev/config.ts @@ -9,7 +9,6 @@ import { datasetsEntityConfig } from "./index/datasetsEntityConfig"; import { donorsEntityConfig } from "./index/donorsEntityConfig"; import { filesEntityConfig } from "./index/filesEntityConfig"; import { librariesEntityConfig } from "./index/librariesEntityConfig"; -import { summary } from "./index/summary"; import { socialMedia } from "./socialMedia"; // Template constants @@ -82,7 +81,6 @@ const config: SiteConfig = { activitiesEntityConfig, filesEntityConfig, ], - explorerTitle: APP_TITLE, export: exportConfig, exportToTerraUrl: "https://app.terra.bio", layout: { @@ -159,10 +157,6 @@ const config: SiteConfig = { }, }, redirectRootToPath: "/datasets", - summaryConfig: { - apiPath: "index/summary", - components: summary, - }, themeOptions: { palette: { primary: { diff --git a/site-config/anvil/dev/index/common/constants.ts b/site-config/anvil/dev/index/common/constants.ts deleted file mode 100644 index 9629dc648..000000000 --- a/site-config/anvil/dev/index/common/constants.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SUMMARY } from "app/components/Index/common/entities"; - -// Template constants -const { DONORS, FILE_FORMATS, SPECIES } = SUMMARY; - -/** - * Summary display order. - */ -export const SUMMARIES = [SPECIES, DONORS, FILE_FORMATS]; diff --git a/site-config/anvil/dev/index/summary.ts b/site-config/anvil/dev/index/summary.ts deleted file mode 100644 index eb911c583..000000000 --- a/site-config/anvil/dev/index/summary.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { AzulSummaryResponse } from "@databiosphere/findable-ui/lib/apis/azul/common/entities"; -import { ComponentConfig } from "@databiosphere/findable-ui/lib/config/entities"; -import * as C from "../../../../app/components"; -import * as V from "./summaryViewModelBuilder"; - -export const summary = [ - { - component: C.Summaries, - viewBuilder: V.buildSummaries, - } as ComponentConfig, -]; diff --git a/site-config/anvil/dev/index/summaryViewModelBuilder.ts b/site-config/anvil/dev/index/summaryViewModelBuilder.ts deleted file mode 100644 index 42d5d5014..000000000 --- a/site-config/anvil/dev/index/summaryViewModelBuilder.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { AzulSummaryResponse } from "@databiosphere/findable-ui/lib/apis/azul/common/entities"; -import React from "react"; -import * as C from "../../../../app/components"; -import { getSummaries } from "../../../../app/components/Index/common/indexTransformer"; -import { SUMMARIES } from "./common/constants"; - -/** - * Build props for index Summaries component from the given summary response. - * @param summaryResponse - Response model return from summary API. - * @returns model to be used as props for the Summaries component. - */ -export const buildSummaries = ( - summaryResponse: AzulSummaryResponse -): React.ComponentProps => { - return { - summaries: getSummaries(SUMMARIES, summaryResponse), - }; -}; diff --git a/site-config/hca-dcp/cc-ma-dev/index/projectsEntityConfig.ts b/site-config/hca-dcp/cc-ma-dev/index/projectsEntityConfig.ts index d92e84554..534498951 100644 --- a/site-config/hca-dcp/cc-ma-dev/index/projectsEntityConfig.ts +++ b/site-config/hca-dcp/cc-ma-dev/index/projectsEntityConfig.ts @@ -4,7 +4,7 @@ import { } from "@databiosphere/findable-ui/lib/config/entities"; import { getMAProjectDetailTabs } from "../detail/project/mainColumn"; import { getMAProjectDetailTop } from "../detail/project/top"; -import { listHero } from "../listView/projectsListHero"; +import { entityListSlot } from "../ui/projectsEntityList"; import { CATEGORY_GROUPS } from "./common/category"; import { COLUMN } from "./common/column"; import { getMAFilesEntityConfig } from "./filesEntityConfig"; @@ -65,10 +65,13 @@ export function getMAProjectsEntityConfig( cloneColumns.splice(2, 0, COLUMN.DATA_USE_RESTRICTION); // Data use restriction column. cloneList.columns = cloneColumns; cloneEntity.list = cloneList; - // Update list view. - cloneEntity.listView = { - ...cloneEntity.listView, - listHero, + // Update entity ui. + cloneEntity.ui = { + ...cloneEntity.ui, + slots: { + ...cloneEntity.ui?.slots, + entityListSlot, + }, }; // Clone detail. const cloneDetail = { ...cloneEntity.detail }; diff --git a/site-config/hca-dcp/cc-ma-dev/listView/projectsListHero.ts b/site-config/hca-dcp/cc-ma-dev/ui/projectsEntityList.ts similarity index 94% rename from site-config/hca-dcp/cc-ma-dev/listView/projectsListHero.ts rename to site-config/hca-dcp/cc-ma-dev/ui/projectsEntityList.ts index 6ca9065d6..d89f182e1 100644 --- a/site-config/hca-dcp/cc-ma-dev/listView/projectsListHero.ts +++ b/site-config/hca-dcp/cc-ma-dev/ui/projectsEntityList.ts @@ -8,7 +8,7 @@ import * as C from "../../../../app/components"; import * as MDX from "../../../../app/components/common/MDXContent/hca-dcp"; import * as V from "../../../../app/viewModelBuilders/azul/hca-dcp/common/viewModelBuilders"; -export const listHero: ComponentsConfig = [ +export const entityListSlot: ComponentsConfig = [ { children: [ { diff --git a/site-config/hca-dcp/dev/config.ts b/site-config/hca-dcp/dev/config.ts index b8d9841fe..0b56d3ce8 100644 --- a/site-config/hca-dcp/dev/config.ts +++ b/site-config/hca-dcp/dev/config.ts @@ -19,8 +19,8 @@ import { CATEGORY_GROUPS } from "./index/common/category"; import { filesEntityConfig } from "./index/filesEntityConfig"; import { projectsEntityConfig } from "./index/projectsEntityConfig"; import { samplesEntityConfig } from "./index/samplesEntityConfig"; -import { summary } from "./index/summary"; import { floating } from "./layout/floating"; +import { buildSummaries } from "./index/summaryViewModelBuilder"; // Template constants const APP_TITLE = "HCA Data Explorer"; @@ -65,7 +65,6 @@ export function makeConfig( }, enableEntitiesView: true, entities: [projectsEntityConfig, samplesEntityConfig, filesEntityConfig], - explorerTitle: "Explore Data", export: exportConfig, exportToTerraUrl: EXPORT_TO_TERRA_URL, gitHubUrl, @@ -140,7 +139,7 @@ export function makeConfig( redirectRootToPath: HOME_PAGE_PATH, summaryConfig: { apiPath: "index/summary", - components: summary, + mapResponse: buildSummaries, }, systemStatus: { apiPath: `${dataUrl}${APIEndpoints.INDEX_STATUS}`, diff --git a/site-config/hca-dcp/dev/index/filesEntityConfig.ts b/site-config/hca-dcp/dev/index/filesEntityConfig.ts index e8e339e62..33ebfdde5 100644 --- a/site-config/hca-dcp/dev/index/filesEntityConfig.ts +++ b/site-config/hca-dcp/dev/index/filesEntityConfig.ts @@ -9,7 +9,7 @@ import { FilesResponse } from "../../../../app/apis/azul/hca-dcp/common/response import * as C from "../../../../app/components"; import * as V from "../../../../app/viewModelBuilders/azul/hca-dcp/common/viewModelBuilders"; import { HCA_DCP_CATEGORY_KEY, HCA_DCP_CATEGORY_LABEL } from "../../category"; -import { subTitleHero } from "../listView/subTitleHero"; +import { entityViewSlot } from "../ui/entityView"; /** * Entity config object responsible to config anything related to the /files route. @@ -276,8 +276,13 @@ export const filesEntityConfig: EntityConfig = { }, }, } as ListConfig, - listView: { - subTitleHero, - }, route: "files", + ui: { + enableExportButton: true, + enableSummary: true, + enableTabs: true, + slots: { + entityViewSlot, + }, + }, }; diff --git a/site-config/hca-dcp/dev/index/projectsEntityConfig.ts b/site-config/hca-dcp/dev/index/projectsEntityConfig.ts index 12e6790ad..0a5d41f44 100644 --- a/site-config/hca-dcp/dev/index/projectsEntityConfig.ts +++ b/site-config/hca-dcp/dev/index/projectsEntityConfig.ts @@ -24,7 +24,7 @@ import { sideColumn as overviewSideColumn } from "../detail/project/overviewSide import { mainColumn as projectFilesMainColumn } from "../detail/project/projectFilesMainColumn"; import { sideColumn as projectFilesSideColumn } from "../detail/project/projectFilesSideColumn"; import { top } from "../detail/project/top"; -import { subTitleHero } from "../listView/subTitleHero"; +import { entityViewSlot } from "../ui/entityView"; export const PROJECT_ENTITY_ROUTE = { EXPORT_TO_TERRA: "export-to-terra", @@ -277,9 +277,14 @@ export const projectsEntityConfig: EntityConfig = { }, }, } as ListConfig, - listView: { - subTitleHero, - }, overrides: projectEdits, route: "projects", + ui: { + enableExportButton: true, + enableSummary: true, + enableTabs: true, + slots: { + entityViewSlot, + }, + }, }; diff --git a/site-config/hca-dcp/dev/index/samplesEntityConfig.ts b/site-config/hca-dcp/dev/index/samplesEntityConfig.ts index f662e0261..f7ca28ec8 100644 --- a/site-config/hca-dcp/dev/index/samplesEntityConfig.ts +++ b/site-config/hca-dcp/dev/index/samplesEntityConfig.ts @@ -9,7 +9,7 @@ import { SamplesResponse } from "../../../../app/apis/azul/hca-dcp/common/respon import * as C from "../../../../app/components"; import * as V from "../../../../app/viewModelBuilders/azul/hca-dcp/common/viewModelBuilders"; import { HCA_DCP_CATEGORY_KEY, HCA_DCP_CATEGORY_LABEL } from "../../category"; -import { subTitleHero } from "../listView/subTitleHero"; +import { entityViewSlot } from "../ui/entityView"; /** * Entity config object responsible to config anything related to the /samples route. @@ -212,8 +212,13 @@ export const samplesEntityConfig: EntityConfig = { }, }, } as ListConfig, - listView: { - subTitleHero, - }, route: "samples", + ui: { + enableExportButton: true, + enableSummary: true, + enableTabs: true, + slots: { + entityViewSlot, + }, + }, }; diff --git a/site-config/hca-dcp/dev/index/summary.ts b/site-config/hca-dcp/dev/index/summary.ts deleted file mode 100644 index eb911c583..000000000 --- a/site-config/hca-dcp/dev/index/summary.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { AzulSummaryResponse } from "@databiosphere/findable-ui/lib/apis/azul/common/entities"; -import { ComponentConfig } from "@databiosphere/findable-ui/lib/config/entities"; -import * as C from "../../../../app/components"; -import * as V from "./summaryViewModelBuilder"; - -export const summary = [ - { - component: C.Summaries, - viewBuilder: V.buildSummaries, - } as ComponentConfig, -]; diff --git a/site-config/hca-dcp/dev/index/summaryViewModelBuilder.ts b/site-config/hca-dcp/dev/index/summaryViewModelBuilder.ts index 42d5d5014..a78e04128 100644 --- a/site-config/hca-dcp/dev/index/summaryViewModelBuilder.ts +++ b/site-config/hca-dcp/dev/index/summaryViewModelBuilder.ts @@ -1,18 +1,9 @@ import { AzulSummaryResponse } from "@databiosphere/findable-ui/lib/apis/azul/common/entities"; -import React from "react"; -import * as C from "../../../../app/components"; -import { getSummaries } from "../../../../app/components/Index/common/indexTransformer"; +import { mapSummary } from "../../../../app/components/Index/common/indexTransformer"; import { SUMMARIES } from "./common/constants"; -/** - * Build props for index Summaries component from the given summary response. - * @param summaryResponse - Response model return from summary API. - * @returns model to be used as props for the Summaries component. - */ export const buildSummaries = ( summaryResponse: AzulSummaryResponse -): React.ComponentProps => { - return { - summaries: getSummaries(SUMMARIES, summaryResponse), - }; +): [string, string][] => { + return mapSummary(SUMMARIES, summaryResponse); }; diff --git a/site-config/hca-dcp/dev/listView/subTitleHero.ts b/site-config/hca-dcp/dev/ui/entityView.ts similarity index 82% rename from site-config/hca-dcp/dev/listView/subTitleHero.ts rename to site-config/hca-dcp/dev/ui/entityView.ts index 77ab3c85d..04d07d4f3 100644 --- a/site-config/hca-dcp/dev/listView/subTitleHero.ts +++ b/site-config/hca-dcp/dev/ui/entityView.ts @@ -4,7 +4,7 @@ import { } from "@databiosphere/findable-ui/lib/config/entities"; import * as C from "../../../../app/components"; -export const subTitleHero: ComponentsConfig = [ +export const entityViewSlot: ComponentsConfig = [ { component: C.TerraSetUpForm, } as ComponentConfig, diff --git a/site-config/lungmap/dev/config.ts b/site-config/lungmap/dev/config.ts index 308ec85ef..fe8622b7b 100644 --- a/site-config/lungmap/dev/config.ts +++ b/site-config/lungmap/dev/config.ts @@ -10,8 +10,8 @@ import { CATEGORY_GROUPS } from "./index/common/category"; import { filesEntityConfig } from "./index/filesEntityConfig"; import { projectsEntityConfig } from "./index/projectsEntityConfig"; import { samplesEntityConfig } from "./index/samplesEntityConfig"; -import { summary } from "./index/summary"; import { socialMedia } from "./socialMedia"; +import { buildSummaries } from "./index/summaryViewModelBuilder"; // Template constants const APP_TITLE = "LungMAP Data Explorer"; @@ -55,7 +55,6 @@ export function makeConfig( }, enableEntitiesView: true, entities: [projectsEntityConfig, samplesEntityConfig, filesEntityConfig], - explorerTitle: "Explore Data", export: exportConfig, exportToTerraUrl: EXPORT_TO_TERRA_URL, gitHubUrl, @@ -117,7 +116,7 @@ export function makeConfig( redirectRootToPath: HOME_PAGE_PATH, summaryConfig: { apiPath: "index/summary", - components: summary, + mapResponse: buildSummaries, }, }; } diff --git a/site-config/lungmap/dev/index/filesEntityConfig.ts b/site-config/lungmap/dev/index/filesEntityConfig.ts index 3249be2b7..76cb79484 100644 --- a/site-config/lungmap/dev/index/filesEntityConfig.ts +++ b/site-config/lungmap/dev/index/filesEntityConfig.ts @@ -276,4 +276,9 @@ export const filesEntityConfig: EntityConfig = { }, } as ListConfig, route: "files", + ui: { + enableExportButton: true, + enableSummary: true, + enableTabs: true, + }, }; diff --git a/site-config/lungmap/dev/index/projectsEntityConfig.ts b/site-config/lungmap/dev/index/projectsEntityConfig.ts index bc5b67f53..87a2ecbc5 100644 --- a/site-config/lungmap/dev/index/projectsEntityConfig.ts +++ b/site-config/lungmap/dev/index/projectsEntityConfig.ts @@ -264,4 +264,9 @@ export const projectsEntityConfig: EntityConfig = { }, overrides: hcaProjectEdits, route: "projects", + ui: { + enableExportButton: true, + enableSummary: true, + enableTabs: true, + }, }; diff --git a/site-config/lungmap/dev/index/samplesEntityConfig.ts b/site-config/lungmap/dev/index/samplesEntityConfig.ts index 0955c1e6c..dcfa2116e 100644 --- a/site-config/lungmap/dev/index/samplesEntityConfig.ts +++ b/site-config/lungmap/dev/index/samplesEntityConfig.ts @@ -214,4 +214,9 @@ export const samplesEntityConfig: EntityConfig = { }, } as ListConfig, route: "samples", + ui: { + enableExportButton: true, + enableSummary: true, + enableTabs: true, + }, }; diff --git a/site-config/lungmap/dev/index/summary.ts b/site-config/lungmap/dev/index/summary.ts deleted file mode 100644 index eb911c583..000000000 --- a/site-config/lungmap/dev/index/summary.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { AzulSummaryResponse } from "@databiosphere/findable-ui/lib/apis/azul/common/entities"; -import { ComponentConfig } from "@databiosphere/findable-ui/lib/config/entities"; -import * as C from "../../../../app/components"; -import * as V from "./summaryViewModelBuilder"; - -export const summary = [ - { - component: C.Summaries, - viewBuilder: V.buildSummaries, - } as ComponentConfig, -]; diff --git a/site-config/lungmap/dev/index/summaryViewModelBuilder.ts b/site-config/lungmap/dev/index/summaryViewModelBuilder.ts index 42d5d5014..a78e04128 100644 --- a/site-config/lungmap/dev/index/summaryViewModelBuilder.ts +++ b/site-config/lungmap/dev/index/summaryViewModelBuilder.ts @@ -1,18 +1,9 @@ import { AzulSummaryResponse } from "@databiosphere/findable-ui/lib/apis/azul/common/entities"; -import React from "react"; -import * as C from "../../../../app/components"; -import { getSummaries } from "../../../../app/components/Index/common/indexTransformer"; +import { mapSummary } from "../../../../app/components/Index/common/indexTransformer"; import { SUMMARIES } from "./common/constants"; -/** - * Build props for index Summaries component from the given summary response. - * @param summaryResponse - Response model return from summary API. - * @returns model to be used as props for the Summaries component. - */ export const buildSummaries = ( summaryResponse: AzulSummaryResponse -): React.ComponentProps => { - return { - summaries: getSummaries(SUMMARIES, summaryResponse), - }; +): [string, string][] => { + return mapSummary(SUMMARIES, summaryResponse); };