From 08b5629756c97b3b6af92d9f0ea887d817f74e9b Mon Sep 17 00:00:00 2001 From: majkshkurti Date: Fri, 6 Sep 2024 14:18:46 +0200 Subject: [PATCH] add: external layer option inside project --- apps/web/app/[lng]/(dashboard)/datasets/page.tsx | 2 +- apps/web/components/map/panels/layer/Layer.tsx | 9 +++++++++ apps/web/components/modals/DatasetExternal.tsx | 16 ++++++++++------ apps/web/lib/api/projects.ts | 13 ++++++++----- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/apps/web/app/[lng]/(dashboard)/datasets/page.tsx b/apps/web/app/[lng]/(dashboard)/datasets/page.tsx index 17f799d3..0c8d865a 100644 --- a/apps/web/app/[lng]/(dashboard)/datasets/page.tsx +++ b/apps/web/app/[lng]/(dashboard)/datasets/page.tsx @@ -86,7 +86,7 @@ const Datasets = () => { }, { sourceType: AddLayerSourceType.DataSourceExternal, - iconName: ICON_NAME.GLOBE, + iconName: ICON_NAME.LINK, label: t("dataset_external"), }, ]; diff --git a/apps/web/components/map/panels/layer/Layer.tsx b/apps/web/components/map/panels/layer/Layer.tsx index 91a1d87e..448119d8 100644 --- a/apps/web/components/map/panels/layer/Layer.tsx +++ b/apps/web/components/map/panels/layer/Layer.tsx @@ -66,6 +66,7 @@ import Container from "@/components/map/panels/Container"; import CatalogExplorerModal from "@/components/modals/CatalogExplorer"; import ContentDialogWrapper from "@/components/modals/ContentDialogWrapper"; import DatasetExplorerModal from "@/components/modals/DatasetExplorer"; +import DatasetExternalModal from "@/components/modals/DatasetExternal"; import DatasetUploadModal from "@/components/modals/DatasetUpload"; import MapLayerChartModal from "@/components/modals/MapLayerChart"; @@ -183,6 +184,11 @@ const AddLayerSection = ({ projectId }: { projectId: string }) => { iconName: ICON_NAME.UPLOAD, label: t("dataset_upload"), }, + { + sourceType: AddLayerSourceType.DataSourceExternal, + iconName: ICON_NAME.LINK, + label: t("dataset_external"), + }, { sourceType: AddLayerSourceType.CatalogExplorer, iconName: ICON_NAME.GLOBE, @@ -245,6 +251,9 @@ const AddLayerSection = ({ projectId }: { projectId: string }) => { {addLayerSourceOpen === AddLayerSourceType.DatasourceUpload && ( )} + {addLayerSourceOpen === AddLayerSourceType.DataSourceExternal && ( + + )} {addLayerSourceOpen === AddLayerSourceType.CatalogExplorer && ( )} diff --git a/apps/web/components/modals/DatasetExternal.tsx b/apps/web/components/modals/DatasetExternal.tsx index 725ef4e9..99636750 100644 --- a/apps/web/components/modals/DatasetExternal.tsx +++ b/apps/web/components/modals/DatasetExternal.tsx @@ -40,6 +40,7 @@ import { useTranslation } from "@/i18n/client"; import { useFolders } from "@/lib/api/folders"; import { useJobs } from "@/lib/api/jobs"; import { createFeatureLayer, createRasterLayer, layerFeatureUrlUpload } from "@/lib/api/layers"; +import { addProjectLayers, useProject, useProjectLayers } from "@/lib/api/projects"; import { setRunningJobIds } from "@/lib/store/jobs/slice"; import { generateLayerGetLegendGraphicUrl, generateWmsUrl } from "@/lib/transformers/wms"; import { convertWmtsToXYZUrl, getWmtsFlatLayers } from "@/lib/transformers/wmts"; @@ -238,7 +239,6 @@ const getNestedLayerMultiSelectionTableBody = ( type ) => { if (depth > 4) return null; - console.log(layers); return ( {layers.map((layer) => ( @@ -300,8 +300,6 @@ const getFlatLayerSingleSelectionTableBody = ( const DatasetsSelectTable = ({ options, type, selectedDatasets, setSelectedDatasets }) => { const { t } = useTranslation("common"); - console.log(selectedDatasets); - const handleSelectDataset = (dataset) => { setSelectedDatasets((prevSelectedDatasets) => { if (type === vectorDataType.Enum.wfs || type === imageryDataType.Enum.wmts) { @@ -386,6 +384,8 @@ const DatasetExternal: React.FC = ({ open, onClose, projec const { mutate } = useJobs({ read: false, }); + const { mutate: mutateProjectLayers } = useProjectLayers(projectId); + const { mutate: mutateProject } = useProject(projectId); // Step 0: Enter URL const steps = [t("enter_url"), t("select_dataset"), t("destination_and_metadata"), t("confirmation")]; @@ -448,6 +448,7 @@ const DatasetExternal: React.FC = ({ open, onClose, projec // eslint-disable-next-line @typescript-eslint/no-explicit-any const handleNext = () => { + console.log(selectedDatasets); // STEP 0: Parse URL. if (activeStep === 0) { if (!externalUrl) return; @@ -496,7 +497,6 @@ const DatasetExternal: React.FC = ({ open, onClose, projec } const capabilities = parser.read(text); - console.log(capabilities); setCapabilities({ type, capabilities }); setActiveStep((prevActiveStep) => prevActiveStep + 1); }) @@ -618,9 +618,13 @@ const DatasetExternal: React.FC = ({ open, onClose, projec ...(legendUrls.length && { legend_urls: legendUrls }), }, }); - await createRasterLayer(payload); + const response = await createRasterLayer(payload, projectId); + if (projectId) { + await addProjectLayers(projectId, [response.id]); + mutateProjectLayers(); + mutateProject(); + } } - toast.success(t("success_adding_external_dataset")); } catch (_error) { toast.error(t("error_adding_external_dataset")); diff --git a/apps/web/lib/api/projects.ts b/apps/web/lib/api/projects.ts index 789f0505..7d39339c 100644 --- a/apps/web/lib/api/projects.ts +++ b/apps/web/lib/api/projects.ts @@ -33,11 +33,13 @@ export const useProjects = (queryParams?: GetContentQueryParams) => { }; }; -export const useProject = (projectId: string) => { +export const useProject = (projectId?: string) => { + const { data, isLoading, error, mutate, isValidating } = useSWR( - [`${PROJECTS_API_BASE_URL}/${projectId}`], + () => (projectId ? [`${PROJECTS_API_BASE_URL}/${projectId}`] : null), fetcher ); + return { project: data, isLoading: isLoading, @@ -47,11 +49,13 @@ export const useProject = (projectId: string) => { }; }; -export const useProjectLayers = (projectId: string) => { +export const useProjectLayers = (projectId?: string) => { + const { data, isLoading, error, mutate, isValidating } = useSWR( - [`${PROJECTS_API_BASE_URL}/${projectId}/layer`], + () => (projectId ? [`${PROJECTS_API_BASE_URL}/${projectId}/layer`] : null), fetcher ); + return { layers: data, isLoading: isLoading, @@ -78,7 +82,6 @@ export const useProjectScenarios = (projectId: string) => { export const useProjectScenarioFeatures = (projectId: string, scenarioId?: string | null) => { const { data, isLoading, error, mutate, isValidating } = useSWR( () => (scenarioId ? [`${PROJECTS_API_BASE_URL}/${projectId}/scenario/${scenarioId}/features`] : null), - fetcher ); return {