diff --git a/deploy/datasets/index.js b/deploy/datasets/index.js index 88a71f09e32293f6a3632408028578a3f16885e5..42e1ad1232692e943d1b884ad8d0d78fc6770b97 100644 --- a/deploy/datasets/index.js +++ b/deploy/datasets/index.js @@ -2,7 +2,7 @@ const express = require('express') const path = require('path') const fs = require('fs') const datasetsRouter = express.Router() -const { init, getDatasets, getPreview, getDatasetFromId, getDatasetFileAsZip, getTos } = require('./query') +const { init, getDatasets, getPreview, getDatasetFromId, getDatasetFileAsZip, getTos, hasPreview } = require('./query') const url = require('url') const qs = require('querystring') @@ -148,8 +148,15 @@ const checkKgQuery = (req, res, next) => { else return next() } +datasetsRouter.get('/hasPreview', cacheMaxAge24Hr, async (req, res) => { + const { datasetName } = req.query + if (!datasetName || datasetName === '') return res.status(400).send(`datasetName as query param is required.`) + return res.status(200).json({ + preview: hasPreview({ datasetName }) + }) +}) + datasetsRouter.get('/kgInfo', checkKgQuery, cacheMaxAge24Hr, async (req, res) => { - const { kgId } = req.query const { user } = req const stream = await getDatasetFromId({ user, kgId, returnAsStream: true }) diff --git a/deploy/datasets/query.js b/deploy/datasets/query.js index ee21abfd4ffeca8c35f77cdfba01387e4ad9c08f..d6298437b4d82099c41a650b93961d00d44479e2 100644 --- a/deploy/datasets/query.js +++ b/deploy/datasets/query.js @@ -326,6 +326,7 @@ module.exports = { init, getDatasets, getPreview, + hasPreview, getTos } diff --git a/src/ui/databrowserModule/databrowser.useEffect.ts b/src/ui/databrowserModule/databrowser.useEffect.ts index 44b5ebb5e792c27b72d8ee61f6776a87ad81325e..49b494918e5013d0b3a146e468b7791161f1ea0d 100644 --- a/src/ui/databrowserModule/databrowser.useEffect.ts +++ b/src/ui/databrowserModule/databrowser.useEffect.ts @@ -119,11 +119,27 @@ export class DataBrowserUseEffect implements OnDestroy{ switchMap(arr => merge( ...arr.map(({ id: kgId }) => - from( this.kgSingleDatasetService.getInfoFromKg({ kgId })) - .pipe(catchError(err => { - console.log(`fetchInfoFromKg error`, err) - return of(null) - }))) + from( this.kgSingleDatasetService.getInfoFromKg({ kgId })).pipe( + catchError(err => { + console.log(`fetchInfoFromKg error`, err) + return of(null) + }), + switchMap(dataset => + this.kgSingleDatasetService.datasetHasPreview(dataset).pipe( + catchError(err => { + console.log(`fetching hasPreview error`, err) + return of({}) + }), + map(resp => { + return { + ...dataset, + ...resp + } + }) + ) + ) + ) + ) ).pipe( filter(v => !!v), scan((acc, curr) => acc.concat(curr), []) diff --git a/src/ui/databrowserModule/kgSingleDatasetService.service.ts b/src/ui/databrowserModule/kgSingleDatasetService.service.ts index b8fd02a17c0f5d374ea2451b1b7e170edf159452..62e94d1043906f662a971837b4b7dd461be9c9da 100644 --- a/src/ui/databrowserModule/kgSingleDatasetService.service.ts +++ b/src/ui/databrowserModule/kgSingleDatasetService.service.ts @@ -8,6 +8,7 @@ import { MatDialog } from "@angular/material"; import { FileViewer } from "./fileviewer/fileviewer.component"; import { ADD_NG_LAYER, REMOVE_NG_LAYER } from "src/services/stateStore.service"; import { Subscription, Subject } from "rxjs"; +import { HttpClient } from "@angular/common/http"; @Injectable({ providedIn: 'root' }) export class KgSingleDatasetService implements OnDestroy{ @@ -20,7 +21,8 @@ export class KgSingleDatasetService implements OnDestroy{ constructor( private constantService: AtlasViewerConstantsServices, private store$: Store<any>, - private dialog: MatDialog + private dialog: MatDialog, + private http: HttpClient ) { this.subscriptions.push( @@ -39,6 +41,13 @@ export class KgSingleDatasetService implements OnDestroy{ } } + public datasetHasPreview({ name } : { name: string }){ + const _url = new URL(`${this.constantService.backendUrl}datasets/hasPreview`) + const searchParam = _url.searchParams + searchParam.set('datasetName', name) + return this.http.get(_url.toString()) + } + public getInfoFromKg({ kgId, kgSchema = 'minds/core/dataset/v1.0.0' }: Partial<KgQueryInterface>) { const _url = new URL(`${this.constantService.backendUrl}datasets/kgInfo`) const searchParam = _url.searchParams