diff --git a/client/src/components/ActivityBar/ActivityBar.test.js b/client/src/components/ActivityBar/ActivityBar.test.js
index 7dce1ce3fb29..1fbab6c98cad 100644
--- a/client/src/components/ActivityBar/ActivityBar.test.js
+++ b/client/src/components/ActivityBar/ActivityBar.test.js
@@ -24,6 +24,7 @@ localVue.use(PiniaVuePlugin);
function testActivity(id, newOptions = {}) {
const defaultOptions = {
+ anonymous: true,
id: `test-${id}`,
description: "test-description",
icon: "test-icon",
diff --git a/client/src/components/ActivityBar/ActivityBar.vue b/client/src/components/ActivityBar/ActivityBar.vue
index 9bfea756a65e..9a440d5ddd27 100644
--- a/client/src/components/ActivityBar/ActivityBar.vue
+++ b/client/src/components/ActivityBar/ActivityBar.vue
@@ -1,10 +1,11 @@
@@ -143,7 +154,7 @@ function onToggleSidebar(toggle: string, to: string | null = null) {
@start="isDragging = true"
@end="isDragging = false">
-
+
-
+
(query = q)"
@onResults="onResults" />
-
diff --git a/client/src/components/Upload/UploadButton.vue b/client/src/components/Upload/UploadButton.vue
deleted file mode 100644
index 110335858d57..000000000000
--- a/client/src/components/Upload/UploadButton.vue
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-
-
-
- Upload Data
-
-
-
diff --git a/client/src/composables/usePanels.ts b/client/src/composables/usePanels.ts
index 46f6f334cc68..2b2d97cb020d 100644
--- a/client/src/composables/usePanels.ts
+++ b/client/src/composables/usePanels.ts
@@ -15,7 +15,7 @@ export function usePanels() {
return true;
});
- const showActivityBar = computed(() => showPanels.value && userStore.showActivityBar && !userStore.isAnonymous);
+ const showActivityBar = computed(() => showPanels.value && userStore.showActivityBar);
const showToolbox = computed(() => showPanels.value && !showActivityBar.value);
return {
diff --git a/client/src/entry/analysis/router.js b/client/src/entry/analysis/router.js
index d5d6690122f5..26268196303b 100644
--- a/client/src/entry/analysis/router.js
+++ b/client/src/entry/analysis/router.js
@@ -82,7 +82,7 @@ patchRouterPush(VueRouter);
function redirectAnon() {
const Galaxy = getGalaxyInstance();
if (!Galaxy.user || !Galaxy.user.id) {
- return "/";
+ return "/login/start";
}
}
@@ -451,9 +451,9 @@ export function getRouter(Galaxy) {
path: "user/permissions",
component: UserDatasetPermissions,
redirect: redirectAnon(),
- props: (route) => ({
+ props: {
userId: Galaxy.user.id,
- }),
+ },
},
{
path: "user/:formId",
@@ -520,6 +520,7 @@ export function getRouter(Galaxy) {
{
path: "workflows/invocations",
component: UserInvocations,
+ redirect: redirectAnon(),
},
{
path: "workflows/invocations/report",
diff --git a/client/src/stores/activitySetup.ts b/client/src/stores/activitySetup.ts
index 01293c21c49f..8cc09c127844 100644
--- a/client/src/stores/activitySetup.ts
+++ b/client/src/stores/activitySetup.ts
@@ -6,6 +6,7 @@ import { type EventData } from "@/stores/eventStore";
export const Activities = [
{
+ anonymous: false,
description: "Displays currently active interactive tools (ITs), if these are enabled by the administrator.",
icon: "fa-laptop",
id: "interactivetools",
@@ -17,6 +18,7 @@ export const Activities = [
visible: true,
},
{
+ anonymous: true,
description: "Opens a data dialog, allowing uploads from URL, pasted content or disk.",
icon: "upload",
id: "upload",
@@ -28,6 +30,7 @@ export const Activities = [
visible: true,
},
{
+ anonymous: true,
description: "Displays the tool panel to search and access all available tools.",
icon: "wrench",
id: "tools",
@@ -39,6 +42,7 @@ export const Activities = [
visible: true,
},
{
+ anonymous: false,
description: "Displays a panel to search and access workflows.",
icon: "sitemap",
id: "workflows",
@@ -50,6 +54,7 @@ export const Activities = [
visible: true,
},
{
+ anonymous: false,
description: "Displays all workflow runs.",
icon: "fa-list",
id: "invocation",
@@ -61,6 +66,7 @@ export const Activities = [
visible: true,
},
{
+ anonymous: false,
description: "Displays the list of available visualizations.",
icon: "chart-bar",
id: "visualizations",
@@ -72,6 +78,7 @@ export const Activities = [
visible: true,
},
{
+ anonymous: false,
description: "Displays the list of all histories.",
icon: "fa-hdd",
id: "histories",
@@ -83,6 +90,7 @@ export const Activities = [
visible: true,
},
{
+ anonymous: false,
description: "Displays the history selector panel and opens History Multiview in the center panel.",
icon: "fa-columns",
id: "multiview",
@@ -94,6 +102,7 @@ export const Activities = [
visible: true,
},
{
+ anonymous: false,
description: "Displays all of your datasets across all histories.",
icon: "fa-folder",
id: "datasets",
@@ -109,6 +118,7 @@ export const Activities = [
export function convertDropData(data: EventData): Activity | null {
if (data.history_content_type === "dataset") {
return {
+ anonymous: true,
description: "Displays this dataset.",
icon: "fa-file",
id: `dataset-${data.id}`,
@@ -122,6 +132,7 @@ export function convertDropData(data: EventData): Activity | null {
}
if (data.model_class === "StoredWorkflow") {
return {
+ anonymous: false,
description: data.description as string,
icon: "fa-play",
id: `workflow-${data.id}`,
diff --git a/client/src/stores/activityStore.test.ts b/client/src/stores/activityStore.test.ts
index c66715286dcc..95f71bba9cd2 100644
--- a/client/src/stores/activityStore.test.ts
+++ b/client/src/stores/activityStore.test.ts
@@ -6,6 +6,7 @@ import { useActivityStore } from "@/stores/activityStore";
jest.mock("./activitySetup", () => ({
Activities: [
{
+ anonymous: false,
description: "a-description",
icon: "a-icon",
id: "a-id",
@@ -21,6 +22,7 @@ jest.mock("./activitySetup", () => ({
const newActivities = [
{
+ anonymous: false,
description: "a-description-new",
icon: "a-icon-new",
id: "a-id",
@@ -32,6 +34,7 @@ const newActivities = [
visible: false,
},
{
+ anonymous: false,
description: "b-description-new",
icon: "b-icon-new",
id: "b-id",
diff --git a/client/src/stores/activityStore.ts b/client/src/stores/activityStore.ts
index f69d93ff3947..c7435f2ad10a 100644
--- a/client/src/stores/activityStore.ts
+++ b/client/src/stores/activityStore.ts
@@ -10,14 +10,25 @@ import { useUserLocalStorage } from "@/composables/userLocalStorage";
import { Activities } from "./activitySetup";
export interface Activity {
+ // determine wether an anonymous user can access this activity
+ anonymous: boolean;
+ // description of the activity
description: string;
+ // unique identifier
id: string;
+ // icon to be displayed in activity bar
icon: string;
+ // indicate if this activity can be modified and/or deleted
mutable: boolean;
+ // indicate wether this activity can be disabled by the user
optional: boolean;
+ // title to be displayed in the activity bar
title: string;
+ // route to be executed upon selecting the activity
to: string | null;
+ // tooltip to be displayed when hovering above the icon
tooltip: string;
+ // indicate wether the activity should be visible by default
visible: boolean;
}
diff --git a/client/src/stores/userStore.ts b/client/src/stores/userStore.ts
index e5296255d9ac..68b9820585f8 100644
--- a/client/src/stores/userStore.ts
+++ b/client/src/stores/userStore.ts
@@ -43,7 +43,7 @@ export const useUserStore = defineStore("userStore", () => {
// explicitly pass current User, because userStore might not exist yet
const toggledSideBar = useUserLocalStorage("user-store-toggled-side-bar", "tools", currentUser);
- const showActivityBar = useUserLocalStorage("user-store-show-activity-bar", false, currentUser);
+ const showActivityBar = useUserLocalStorage("user-store-show-activity-bar", true, currentUser);
const preferredListViewMode = useUserLocalStorage("user-store-preferred-list-view-mode", "grid", currentUser);
let loadPromise: Promise | null = null;