diff --git a/api/src/models/standards-view.ts b/api/src/models/standards-view.ts index b611855b15..1d7f07e78f 100644 --- a/api/src/models/standards-view.ts +++ b/api/src/models/standards-view.ts @@ -1,7 +1,8 @@ import { z } from 'zod'; import { CBQualitativeMeasurementTypeDefinition, - CBQuantitativeMeasurementTypeDefinition + CBQuantitativeMeasurementTypeDefinition, + ICollectionCategory } from '../services/critterbase-service'; const QualitativeMeasurementSchema = z.object({ @@ -50,4 +51,5 @@ export interface ISpeciesStandards { qualitative: CBQualitativeMeasurementTypeDefinition[]; }; markingBodyLocations: { id: string; key: string; value: string }[]; + ecologicalUnits: ICollectionCategory[]; } diff --git a/api/src/paths/standards/taxon/{tsn}/index.ts b/api/src/paths/standards/taxon/{tsn}/index.ts index 17bb1035a7..ec37a5fc2c 100644 --- a/api/src/paths/standards/taxon/{tsn}/index.ts +++ b/api/src/paths/standards/taxon/{tsn}/index.ts @@ -29,7 +29,7 @@ GET.apiDoc = { schema: { type: 'object', additionalProperties: false, - required: ['tsn', 'scientificName', 'measurements', 'markingBodyLocations'], + required: ['tsn', 'scientificName', 'measurements', 'markingBodyLocations', 'ecologicalUnits'], properties: { tsn: { type: 'integer' @@ -141,6 +141,30 @@ GET.apiDoc = { } } }, + ecologicalUnits: { + type: 'array', + items: { + type: 'object', + additionalProperties: false, + required: ['collection_category_id', 'category_name', 'description', 'itis_tsn'], + properties: { + collection_category_id: { + type: 'string', + format: 'uuid' + }, + category_name: { + type: 'string' + }, + description: { + type: 'string', + nullable: true + }, + itis_tsn: { + type: 'integer' + } + } + } + }, markingBodyLocations: { type: 'array', items: { diff --git a/api/src/services/standards-service.ts b/api/src/services/standards-service.ts index eed1217efb..02dfe3dd79 100644 --- a/api/src/services/standards-service.ts +++ b/api/src/services/standards-service.ts @@ -39,14 +39,16 @@ export class StandardsService extends DBService { const response = await Promise.all([ this.platformService.getTaxonomyByTsns([tsn]), this.critterbaseService.getTaxonBodyLocations(String(tsn)), - this.critterbaseService.getTaxonMeasurements(String(tsn)) + this.critterbaseService.getTaxonMeasurements(String(tsn)), + this.critterbaseService.findTaxonCollectionCategories(String(tsn)) ]); return { tsn: tsn, scientificName: response[0][0].scientificName, markingBodyLocations: response[1], - measurements: response[2] + measurements: response[2], + ecologicalUnits: response[3] }; } diff --git a/app/src/features/standards/view/species/SpeciesStandardsResults.tsx b/app/src/features/standards/view/species/SpeciesStandardsResults.tsx index d665721a6f..23873f01fe 100644 --- a/app/src/features/standards/view/species/SpeciesStandardsResults.tsx +++ b/app/src/features/standards/view/species/SpeciesStandardsResults.tsx @@ -1,4 +1,4 @@ -import { mdiRuler, mdiTag } from '@mdi/js'; +import { mdiBook, mdiRuler, mdiTag } from '@mdi/js'; import { Box, Divider, Stack, Typography } from '@mui/material'; import { blueGrey, grey } from '@mui/material/colors'; import ColouredRectangleChip from 'components/chips/ColouredRectangleChip'; @@ -10,7 +10,8 @@ import { useState } from 'react'; enum SpeciesStandardsViewEnum { MEASUREMENTS = 'measurements', - MARKING_BODY_LOCATIONS = 'marking_body_locations' + MARKING_BODY_LOCATIONS = 'marking_body_locations', + ECOLOGICAL_UNIT = 'ecological_unit' } interface ISpeciesStandardsResultsProps { @@ -43,7 +44,8 @@ const SpeciesStandardsResults = (props: ISpeciesStandardsResultsProps) => { { ))} )} + {activeView === SpeciesStandardsViewEnum.ECOLOGICAL_UNIT && ( + <> + {props.data.ecologicalUnits.map((category) => ( + + {/* + {props.data?.ecologicalUnits + .filter((unit) => unit.collection_category_id === category.collection_category_id) + .map((unit) => ( + + ))} + */} + + ))} + + )} ); diff --git a/app/src/interfaces/useStandardsApi.interface.ts b/app/src/interfaces/useStandardsApi.interface.ts index 09069b72c3..b3d6371b84 100644 --- a/app/src/interfaces/useStandardsApi.interface.ts +++ b/app/src/interfaces/useStandardsApi.interface.ts @@ -1,7 +1,7 @@ import { CBQualitativeMeasurementTypeDefinition, CBQuantitativeMeasurementTypeDefinition, - ICollectionUnit + ICollectionCategory } from './useCritterApi.interface'; interface IStandardNameDescription { @@ -35,7 +35,7 @@ export interface ISpeciesStandards { key: string; value: string; }[]; - ecologicalUnits: ICollectionUnit[]; + ecologicalUnits: ICollectionCategory[]; } /**