diff --git a/client/src/components/Grid/GridList.vue b/client/src/components/Grid/GridList.vue index 5669e46481c3..0e278b99d203 100644 --- a/client/src/components/Grid/GridList.vue +++ b/client/src/components/Grid/GridList.vue @@ -169,8 +169,9 @@ async function onOperation(operation: Operation, rowData: RowData) { /** * Handle router push request emitted by grid module */ -function onRouterPush(route: string) { - router.push(route); +function onRouterPush(route: string, options = {}) { + // @ts-ignore + router.push(route, options); } /** diff --git a/client/src/components/Grid/configs/visualizations.ts b/client/src/components/Grid/configs/visualizations.ts index 27ad0a4ffc76..08d657b89dbd 100644 --- a/client/src/components/Grid/configs/visualizations.ts +++ b/client/src/components/Grid/configs/visualizations.ts @@ -69,11 +69,9 @@ const fields: FieldArray = [ icon: faEye, condition: (data: VisualizationEntry) => !data.deleted, handler: (data: VisualizationEntry) => { - if (data.type === "trackster") { - window.location.href = withPrefix(`/visualization/${data.type}?id=${data.id}`); - } else { - window.location.href = withPrefix(`/plugins/visualizations/${data.type}/saved?id=${data.id}`); - } + emit(`/visualizations/display?visualization=${data.type}&visualization_id=${data.id}`, { + title: data.title, + }); }, }, { diff --git a/client/src/components/Panels/VisualizationPanel.vue b/client/src/components/Panels/VisualizationPanel.vue index e20a115ddad5..1769df410dbf 100644 --- a/client/src/components/Panels/VisualizationPanel.vue +++ b/client/src/components/Panels/VisualizationPanel.vue @@ -2,6 +2,7 @@ import { faEye } from "@fortawesome/free-solid-svg-icons"; import { storeToRefs } from "pinia"; import { computed, onMounted, type Ref, ref } from "vue"; +import { useRouter } from "vue-router/composables"; import { useHistoryStore } from "@/stores/historyStore"; import { absPath } from "@/utils/redirect"; @@ -22,6 +23,7 @@ interface Plugin { } const { currentHistoryId } = storeToRefs(useHistoryStore()); +const router = useRouter(); const plugins: Ref> = ref([]); const query = ref(""); @@ -42,15 +44,10 @@ const filteredPlugins = computed(() => { function createVisualization(dataset: any) { showDataDialog.value = false; if (currentPlugin.value) { - const href = `${currentPlugin.value.href}?dataset_id=${dataset.id}`; - if (currentPlugin.value.target == "_top") { - window.location.href = href; - } else { - const galaxyMainElement = document.getElementById("galaxy_main"); - if (galaxyMainElement) { - galaxyMainElement.setAttribute("src", href); - } - } + router.push(`/visualizations/display?visualization=${currentPlugin.value.name}&dataset_id=${dataset.id}`, { + // @ts-ignore + title: dataset.name, + }); } } diff --git a/client/src/components/Visualizations/PluginList.vue b/client/src/components/Visualizations/PluginList.vue index 8a64c16c52c1..987858f06fa5 100644 --- a/client/src/components/Visualizations/PluginList.vue +++ b/client/src/components/Visualizations/PluginList.vue @@ -136,13 +136,9 @@ export default { } }, create(plugin) { - const href = `${plugin.href}?dataset_id=${this.selected}`; - if (plugin.target == "_top") { - window.location.href = href; - } else { - const galaxyMainElement = document.getElementById("galaxy_main"); - galaxyMainElement.setAttribute("src", href); - } + this.$router.push(`/visualizations/display?visualization=${plugin.name}&dataset_id=${this.selected}`, { + title: plugin.name, + }); }, match(plugin) { const query = this.search.toLowerCase(); diff --git a/client/src/components/Visualizations/VisualizationFrame.vue b/client/src/components/Visualizations/VisualizationFrame.vue new file mode 100644 index 000000000000..f547daa52267 --- /dev/null +++ b/client/src/components/Visualizations/VisualizationFrame.vue @@ -0,0 +1,42 @@ + + +