From 9a2d097ae4c3340833f1c9ebec2c9d3074be0c41 Mon Sep 17 00:00:00 2001 From: Bryon Lewis Date: Mon, 25 Mar 2024 15:20:26 -0400 Subject: [PATCH 1/4] initial cohort sharing --- .../web-girder/api/divemetadata.service.ts | 6 +-- client/platform/web-girder/router.ts | 13 +++++- .../web-girder/views/DIVEMetadataClone.vue | 4 +- .../web-girder/views/DIVEMetadataFilter.vue | 41 +++++++++++++++---- .../views/DIVEMetadataFilterItem.vue | 6 ++- .../web-girder/views/DIVEMetadataSearch.vue | 24 +++++++---- .../platform/web-girder/views/DataBrowser.vue | 18 ++++++++ docker-compose.yml | 4 +- server/dive_server/views_metadata.py | 3 +- server/dive_utils/constants.py | 3 +- 10 files changed, 95 insertions(+), 27 deletions(-) diff --git a/client/platform/web-girder/api/divemetadata.service.ts b/client/platform/web-girder/api/divemetadata.service.ts index bedde42..8baa211 100644 --- a/client/platform/web-girder/api/divemetadata.service.ts +++ b/client/platform/web-girder/api/divemetadata.service.ts @@ -23,7 +23,7 @@ export interface MetadataFilterKeysItem { } -export interface DIVEMetadaFilter { +export interface DIVEMetadataFilter { search?: string; metadataFilters?: Record; } @@ -53,7 +53,7 @@ function getMetadataFilterValues(folderId: string, keys?: string[]) { }); } -function filterDiveMetadata(folderId: string, filters: DIVEMetadaFilter, offset = 0, limit = 50, sort = 'filename', sortdir = -1) { +function filterDiveMetadata(folderId: string, filters: DIVEMetadataFilter, offset = 0, limit = 50, sort = 'filename', sortdir = -1) { return girderRest.get(`dive_metadata/${folderId}/filter`, { params: { filters, offset, limit, sort, sortdir, @@ -61,7 +61,7 @@ function filterDiveMetadata(folderId: string, filters: DIVEMetadaFilter, offset }); } -function createDiveMetadataClone(folder: string, filters: DIVEMetadaFilter, destFolder: string) { +function createDiveMetadataClone(folder: string, filters: DIVEMetadataFilter, destFolder: string) { return girderRest.post(`dive_metadata/${folder}/clone_filter`, null, { params: { baseFolder: folder, filters, destFolder, diff --git a/client/platform/web-girder/router.ts b/client/platform/web-girder/router.ts index a397689..6b4594f 100644 --- a/client/platform/web-girder/router.ts +++ b/client/platform/web-girder/router.ts @@ -75,7 +75,18 @@ const router = new Router({ path: '/metadata/:id/', name: 'metadata', component: DIVEMetadataSearchVue, - props: true, + props: (route) => { + console.log(route); + if (route.query.filter) { + return { + id: route.params.id, // Map route parameter to prop + filter: JSON.parse(route.query.filter as string), // Map query parameter to prop + }; + } + return { + id: route.params.id, + }; + }, beforeEnter, }, { diff --git a/client/platform/web-girder/views/DIVEMetadataClone.vue b/client/platform/web-girder/views/DIVEMetadataClone.vue index 54914c3..4594f8d 100644 --- a/client/platform/web-girder/views/DIVEMetadataClone.vue +++ b/client/platform/web-girder/views/DIVEMetadataClone.vue @@ -7,7 +7,7 @@ import useRequest from 'dive-common/use/useRequest'; import { RootlessLocationType } from 'platform/web-girder/store/types'; import { useGirderRest } from 'platform/web-girder/plugins/girder'; import { useRouter } from 'vue-router/composables'; -import { DIVEMetadaFilter, createDiveMetadataClone } from 'platform/web-girder/api/divemetadata.service'; +import { DIVEMetadataFilter, createDiveMetadataClone } from 'platform/web-girder/api/divemetadata.service'; export default defineComponent({ components: { GirderFileManager }, @@ -19,7 +19,7 @@ export default defineComponent({ }, filter: { // Filter to apply to the dataset - type: Object as PropType, + type: Object as PropType, required: true, }, }, diff --git a/client/platform/web-girder/views/DIVEMetadataFilter.vue b/client/platform/web-girder/views/DIVEMetadataFilter.vue index 3f53b7c..83895a7 100644 --- a/client/platform/web-girder/views/DIVEMetadataFilter.vue +++ b/client/platform/web-girder/views/DIVEMetadataFilter.vue @@ -1,6 +1,6 @@