const isActive = (routeUrl: string) => {
- return isRouteActive(routeUrl);
+ return isTopLevelRouteActive(routeUrl);
};
const getSelectorId = (label: string) => {
diff --git a/frontend/components/modal/ModalSharePage.vue b/frontend/components/modal/ModalSharePage.vue
index cfb7f178e..0fb20e528 100644
--- a/frontend/components/modal/ModalSharePage.vue
+++ b/frontend/components/modal/ModalSharePage.vue
@@ -291,7 +291,7 @@ const getCurrentUrl = () => {
if (props.organization) {
return `${BASE_FRONTEND_URL}/organizations/${props.organization.id}`;
} else if (props.group) {
- return `${BASE_FRONTEND_URL}/organizations/${props.group.organization.id}/groups/${props.group.id}`;
+ return `${BASE_FRONTEND_URL}/organizations/${props.group.orgId}/groups/${props.group.id}`;
} else if (props.event) {
return `${BASE_FRONTEND_URL}/events/${props.event.id}`;
} else if (props.resource) {
diff --git a/frontend/components/page/PageBreadcrumbs.vue b/frontend/components/page/PageBreadcrumbs.vue
index 9dc2c0c4b..5ff5fef03 100644
--- a/frontend/components/page/PageBreadcrumbs.vue
+++ b/frontend/components/page/PageBreadcrumbs.vue
@@ -84,10 +84,10 @@ const { locales } = useI18n();
const localePath = useLocalePath();
const paramsId = useRoute().params.id;
-const paramsIdGroup = useRoute().params.groupId;
+const paramsGroupId = useRoute().params.groupid;
const id = typeof paramsId === "string" ? paramsId : undefined;
-const idGroup = typeof paramsIdGroup === "string" ? paramsIdGroup : undefined;
+const groupId = typeof paramsGroupId === "string" ? paramsGroupId : undefined;
const organizationStore = useOrganizationStore();
const groupStore = useGroupStore();
@@ -96,35 +96,29 @@ const eventStore = useEventStore();
let organization: Organization;
let group: Group;
let event: Event;
+
const organizationRegex =
/^(http:\/\/localhost:\d+|https?:\/\/[\w.-]+)(\/[a-z]{2})?\/organizations\/[0-9a-fA-F-]+(\/about)?$/;
-const groupRegex =
+const groupRegex =
/^(http:\/\/localhost:\d+|https?:\/\/[\w.-]+)(\/[a-z]{2})?\/organizations\/[0-9a-fA-F-]+\/groups\/([0-9a-fA-F-]+)(\/about)?$/;
-const eventRegex =
+const eventRegex =
/^(http:\/\/localhost:\d+|https?:\/\/[\w.-]+)(\/[a-z]{2})?\/events\/([0-9a-fA-F-]+)(\/about)?$/;
if (organizationRegex.test(url)) {
pageType = "organization";
+
await organizationStore.fetchById(id);
organization = organizationStore.organization;
} else if (groupRegex.test(url)) {
pageType = "group";
- const match = url.match(groupRegex);
- const groupId = match ? match[4] : null;
- if (groupId) {
- await groupStore.fetchById(groupId);
- group = groupStore.group;
- }
+ await groupStore.fetchById(groupId);
+ group = groupStore.group;
} else if (eventRegex.test(url)) {
pageType = "event";
- const match = url.match(eventRegex);
- const eventId = match ? match[3] : null;
- if (eventId) {
- await eventStore.fetchById(eventId);
- event = eventStore.event;
- }
+ await eventStore.fetchById(id);
+ event = eventStore.event;
}
const breadcrumbs = ref([]);
diff --git a/frontend/components/sidebar/left/SidebarLeftMainSectionSelectors.vue b/frontend/components/sidebar/left/SidebarLeftMainSectionSelectors.vue
index e66230656..c3998151f 100644
--- a/frontend/components/sidebar/left/SidebarLeftMainSectionSelectors.vue
+++ b/frontend/components/sidebar/left/SidebarLeftMainSectionSelectors.vue
@@ -18,7 +18,7 @@
diff --git a/frontend/pages/organizations/[id]/groups/[id]/resources.vue b/frontend/pages/organizations/[id]/groups/[group-id]/resources.vue
similarity index 100%
rename from frontend/pages/organizations/[id]/groups/[id]/resources.vue
rename to frontend/pages/organizations/[id]/groups/[group-id]/resources.vue
diff --git a/frontend/pages/organizations/[id]/groups/[id]/index.vue b/frontend/pages/organizations/[id]/groups/[id]/index.vue
deleted file mode 100644
index 58898c979..000000000
--- a/frontend/pages/organizations/[id]/groups/[id]/index.vue
+++ /dev/null
@@ -1,18 +0,0 @@
-
diff --git a/frontend/utils/routeUtils.ts b/frontend/utils/routeUtils.ts
index ca9af33fb..e0188d545 100644
--- a/frontend/utils/routeUtils.ts
+++ b/frontend/utils/routeUtils.ts
@@ -47,6 +47,25 @@ export function isRouteActive(routePath: string): boolean {
);
}
+export function isTopLevelRouteActive(routePath: string): boolean {
+ const route = useRoute();
+
+ const currentPath = normalizePath(route.path);
+ const targetPath = normalizePath(routePath);
+
+ let currentSegments = currentPath.split("/");
+ let targetSegments = targetPath.split("/");
+
+ // Remove locale segments from both current and target paths.
+ currentSegments = removeLocaleSegment(currentSegments);
+ targetSegments = removeLocaleSegment(targetSegments);
+
+ console.log(`currentSegments: ${currentSegments}`);
+ console.log(`targetSegments: ${targetSegments}`);
+
+ return currentSegments[0] === targetSegments[0];
+}
+
export function isCurrentRoutePathSubpageOf(path: string, routeName: string) {
// The first split is to remove the localization path.
const segments = routeName.split("___")[0].split(path + "-");