diff --git a/apps/web/src/common/modules/navigations/gnb/GNBNavigationRail.vue b/apps/web/src/common/modules/navigations/gnb/GNBNavigationRail.vue
index 405a484a6e..4e6b099f33 100644
--- a/apps/web/src/common/modules/navigations/gnb/GNBNavigationRail.vue
+++ b/apps/web/src/common/modules/navigations/gnb/GNBNavigationRail.vue
@@ -12,6 +12,7 @@ import {
} from '@cloudforet/mirinae';
import type { ContextMenuType } from '@cloudforet/mirinae/src/controls/context-menu/type';
+import { useAppContextStore } from '@/store/app-context/app-context-store';
import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import { useDisplayStore } from '@/store/display/display-store';
import type { DisplayMenu } from '@/store/display/type';
@@ -25,9 +26,9 @@ import BetaMark from '@/common/components/marks/BetaMark.vue';
import NewMark from '@/common/components/marks/NewMark.vue';
import UpdateMark from '@/common/components/marks/UpdateMark.vue';
import { useCurrentMenuId } from '@/common/composables/current-menu-id';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { useGnbStore } from '@/common/modules/navigations/stores/gnb-store';
+import { ADMIN_COST_EXPLORER_ROUTE } from '@/services/cost-explorer/routes/admin/route-constant';
import { COST_EXPLORER_ROUTE } from '@/services/cost-explorer/routes/route-constant';
interface GNBMenuType extends DisplayMenu {
@@ -38,7 +39,7 @@ interface GNBMenuType extends DisplayMenu {
const allReferenceStore = useAllReferenceStore();
const allReferenceGetters = allReferenceStore.getters;
-const { getProperRouteLocation } = useProperRouteLocation();
+const appContextStore = useAppContextStore();
const gnbStore = useGnbStore();
const gnbGetters = gnbStore.getters;
const userWorkspaceStore = useUserWorkspaceStore();
@@ -52,6 +53,7 @@ const { width } = useWindowSize();
const { currentMenuId } = useCurrentMenuId();
const storeState = reactive({
+ isAdminMode: computed(() => appContextStore.getters.isAdminMode),
isHideNavRail: computed(() => gnbGetters.isHideNavRail),
isMinimizeNavRail: computed(() => gnbGetters.isMinimizeNavRail),
currentWorkspaceId: computed(() => userWorkspaceGetters.currentWorkspaceId),
@@ -106,9 +108,9 @@ const handleMouseEvent = (value: boolean) => {
const handleMenuDescription = (value?: boolean) => {
state.isMenuDescription = value;
if (value) {
- router.push(getProperRouteLocation({
- name: COST_EXPLORER_ROUTE.LANDING._NAME,
- }));
+ router.push({
+ name: storeState.isAdminMode ? ADMIN_COST_EXPLORER_ROUTE.LANDING._NAME : COST_EXPLORER_ROUTE.LANDING._NAME,
+ }).catch(() => {});
}
};
const handleMinimizedGnbRail = () => {
diff --git a/apps/web/src/common/modules/navigations/top-bar/TopBarMyPage.vue b/apps/web/src/common/modules/navigations/top-bar/TopBarMyPage.vue
index c4f142ab18..2bb5ce1c5c 100644
--- a/apps/web/src/common/modules/navigations/top-bar/TopBarMyPage.vue
+++ b/apps/web/src/common/modules/navigations/top-bar/TopBarMyPage.vue
@@ -41,14 +41,14 @@ const handleBackToWorkspace = () => {
return;
}
if (state.beforeWorkspace === 'landing') {
- router.push({ name: ROOT_ROUTE.WORKSPACE._NAME });
+ router.push({ name: ROOT_ROUTE.WORKSPACE._NAME }).catch(() => {});
return;
}
if (state.beforeWorkspace) {
router.push({ name: ROOT_ROUTE.WORKSPACE._NAME, params: { workspaceId: state.beforeWorkspace } });
return;
}
- router.push({ name: ROOT_ROUTE._NAME });
+ router.push({ name: ROOT_ROUTE._NAME }).catch(() => {});
};
diff --git a/apps/web/src/common/modules/project/ProjectLinkButton.vue b/apps/web/src/common/modules/project/ProjectLinkButton.vue
index e98d1d0944..d867427f15 100644
--- a/apps/web/src/common/modules/project/ProjectLinkButton.vue
+++ b/apps/web/src/common/modules/project/ProjectLinkButton.vue
@@ -1,14 +1,14 @@
diff --git a/apps/web/src/common/modules/widgets/_composables/use-widget-frame.ts b/apps/web/src/common/modules/widgets/_composables/use-widget-frame.ts
index f94e2f788e..c59c0fef64 100644
--- a/apps/web/src/common/modules/widgets/_composables/use-widget-frame.ts
+++ b/apps/web/src/common/modules/widgets/_composables/use-widget-frame.ts
@@ -11,9 +11,12 @@ import type { WidgetConfig } from '@/api-clients/dashboard/_types/widget-type';
import type { PrivateDataTableModel } from '@/api-clients/dashboard/private-data-table/schema/model';
import type { PublicDataTableModel } from '@/api-clients/dashboard/public-data-table/schema/model';
+import { useAppContextStore } from '@/store/app-context/app-context-store';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
+
import { arrayToQueryString, objectToQueryString, primitiveToQueryString } from '@/lib/router-query-string';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
+
import { useWidgetFormQuery } from '@/common/modules/widgets/_composables/use-widget-form-query';
import { DATA_SOURCE_DOMAIN, DATA_TABLE_TYPE } from '@/common/modules/widgets/_constants/data-table-constant';
import { getWidgetConfig } from '@/common/modules/widgets/_helpers/widget-config-helper';
@@ -25,10 +28,12 @@ import type {
} from '@/common/modules/widgets/types/widget-display-type';
import type { FullDataLink, WidgetFrameProps } from '@/common/modules/widgets/types/widget-frame-type';
+import { ADMIN_ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/admin/route-constant';
import { ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/route-constant';
import type { MetricFilter } from '@/services/asset-inventory-v1/types/asset-analysis-type';
import { UNIFIED_COST_KEY } from '@/services/cost-explorer/constants/cost-explorer-constant';
import { DYNAMIC_COST_QUERY_SET_PARAMS } from '@/services/cost-explorer/constants/managed-cost-analysis-query-sets';
+import { ADMIN_COST_EXPLORER_ROUTE } from '@/services/cost-explorer/routes/admin/route-constant';
import { COST_EXPLORER_ROUTE } from '@/services/cost-explorer/routes/route-constant';
@@ -40,7 +45,6 @@ interface OverridableWidgetFrameState {
noData?: ComputedRef;
}
type DataTableModel = PublicDataTableModel | PrivateDataTableModel;
-const { getProperRouteLocation } = useProperRouteLocation();
const convertDashboardVarsToConsoleFilters = (dashboardVars?: DashboardVars): ConsoleFilter[] => {
if (!dashboardVars) return [];
@@ -75,7 +79,14 @@ const getRecursiveDataTableIds = (prevValue: string[] = [], dataTable: DataTable
}
return prevValue.concat(dataTable.data_table_id);
};
-const getFullDataLocation = (dataTable: DataTableModel, widgetOptions?: WidgetProps['widgetOptions'], dateRange?: DateRange, dashboardVars?: DashboardVars): Location|undefined => {
+const getFullDataLocation = (
+ dataTable: DataTableModel,
+ widgetOptions?: WidgetProps['widgetOptions'],
+ dateRange?: DateRange,
+ dashboardVars?: DashboardVars,
+ isAdminMode: boolean,
+ workspaceId?: string,
+): Location|undefined => {
const _granularity = (widgetOptions?.granularity?.value as GranularityValue)?.granularity || 'MONTHLY';
const _groupBy: string[] = dataTable?.options?.group_by?.map((d) => d.key);
const _costFilters = [
@@ -98,35 +109,38 @@ const getFullDataLocation = (dataTable: DataTableModel, widgetOptions?: WidgetPr
};
if (dataTable?.source_type === DATA_SOURCE_DOMAIN.COST) {
const _costDataSourceId = dataTable?.options?.[DATA_SOURCE_DOMAIN.COST]?.data_source_id;
- return getProperRouteLocation({
- name: COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
+ return {
+ name: isAdminMode ? ADMIN_COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME : COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
params: {
+ workspaceId: isAdminMode ? undefined : workspaceId,
dataSourceId: _costDataSourceId ?? '',
costQuerySetId: DYNAMIC_COST_QUERY_SET_PARAMS,
},
query: _query,
- });
+ };
}
if (dataTable?.source_type === DATA_SOURCE_DOMAIN.UNIFIED_COST) {
- return getProperRouteLocation({
- name: COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
+ return {
+ name: isAdminMode ? ADMIN_COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME : COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
params: {
+ workspaceId: isAdminMode ? undefined : workspaceId,
dataSourceId: UNIFIED_COST_KEY,
costQuerySetId: DYNAMIC_COST_QUERY_SET_PARAMS,
},
query: _query,
- });
+ };
}
if (dataTable?.source_type === DATA_SOURCE_DOMAIN.ASSET) {
const _metricId = dataTable?.options?.[DATA_SOURCE_DOMAIN.ASSET]?.metric_id;
if (_metricId) {
- return getProperRouteLocation({
- name: ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME,
+ return {
+ name: isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME : ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME,
params: {
+ workspaceId: isAdminMode ? undefined : workspaceId,
metricId: _metricId,
},
query: _query,
- });
+ };
}
}
return undefined;
@@ -142,9 +156,13 @@ export const useWidgetFrame = (
} = useWidgetFormQuery({
widgetId: computed(() => props.widgetId),
});
+ const appContextStore = useAppContextStore();
+ const userWorkspaceStore = useUserWorkspaceStore();
const _state = reactive({
+ isAdminMode: computed(() => appContextStore.getters.isAdminMode),
+ currentWorkspaceId: computed(() => userWorkspaceStore.getters.currentWorkspaceId),
widgetConfig: computed(() => getWidgetConfig(props.widgetName)),
showWidgetHeader: computed(() => props.widgetOptions?.widgetHeader?.value?.toggleValue || false),
title: computed(() => {
@@ -182,7 +200,7 @@ export const useWidgetFrame = (
const _dataTables = dataTableList.value.filter((d) => _dataTableIds.includes(d.data_table_id));
const _result: FullDataLink[] = [];
_dataTables.forEach((d) => {
- const _location = getFullDataLocation(d, props.widgetOptions, overrides.dateRange?.value, props.dashboardVars);
+ const _location = getFullDataLocation(d, props.widgetOptions, overrides.dateRange?.value, props.dashboardVars, _state.isAdminMode, _state.currentWorkspaceId);
if (_location) {
_result.push({
name: d.options?.data_name,
diff --git a/apps/web/src/lib/reference/referenceRouter.ts b/apps/web/src/lib/reference/referenceRouter.ts
index 46da700733..663c16cd34 100644
--- a/apps/web/src/lib/reference/referenceRouter.ts
+++ b/apps/web/src/lib/reference/referenceRouter.ts
@@ -7,6 +7,7 @@ import { QueryHelper } from '@cloudforet/core-lib/query';
import type { Reference, ResourceType } from '@/lib/reference/type';
+import { ADMIN_ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/admin/route-constant';
import { ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/route-constant';
import { PROJECT_ROUTE } from '@/services/project/routes/route-constant';
@@ -99,7 +100,7 @@ const cloudServiceTypeLinkFormatter: LinkFormatter = (name, data, reference, que
type RouterMap = Record;
-const routerMap: RouterMap = {
+const routerMap = (isAdminMode?: boolean): RouterMap => ({
'inventory.Server':
{
name: ASSET_INVENTORY_ROUTE_V1.SERVER._NAME,
@@ -117,34 +118,34 @@ const routerMap: RouterMap = {
},
'inventory.Collector':
{
- name: ASSET_INVENTORY_ROUTE_V1.COLLECTOR._NAME,
+ name: isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.COLLECTOR._NAME : ASSET_INVENTORY_ROUTE_V1.COLLECTOR._NAME,
formatter: collectorLinkFormatter,
},
'identity.ServiceAccount':
{
- name: ASSET_INVENTORY_ROUTE_V1.SERVICE_ACCOUNT.DETAIL._NAME,
+ name: isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.SERVICE_ACCOUNT.DETAIL._NAME : ASSET_INVENTORY_ROUTE_V1.SERVICE_ACCOUNT.DETAIL._NAME,
formatter: serviceAccountLinkFormatter,
},
'identity.TrustedAccount':
{
- name: ASSET_INVENTORY_ROUTE_V1.SERVICE_ACCOUNT.DETAIL._NAME,
+ name: isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.SERVICE_ACCOUNT.DETAIL._NAME : ASSET_INVENTORY_ROUTE_V1.SERVICE_ACCOUNT.DETAIL._NAME,
formatter: serviceAccountLinkFormatter,
},
'inventory.CloudService':
{
- name: ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.SEARCH._NAME,
+ name: isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.SEARCH._NAME : ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.SEARCH._NAME,
formatter: cloudServiceLinkFormatter,
},
'inventory.CloudServiceType':
{
- name: ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.TYPE_SEARCH._NAME,
+ name: isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.TYPE_SEARCH._NAME : ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.TYPE_SEARCH._NAME,
formatter: cloudServiceTypeLinkFormatter,
},
-};
+});
export const referenceRouter = (data: string, reference: Reference, query?: Location['query']): Location => {
- if (routerMap[reference.resource_type]) {
- const { name, formatter } = routerMap[reference.resource_type];
+ if (routerMap(reference.isAdminMode)[reference.resource_type]) {
+ const { name, formatter } = routerMap(reference.isAdminMode)[reference.resource_type];
const location = formatter(name, data, reference, query);
if (reference.workspace_id) {
location.params = {
diff --git a/apps/web/src/lib/reference/type.ts b/apps/web/src/lib/reference/type.ts
index 058f6505af..8f8c62c4ff 100644
--- a/apps/web/src/lib/reference/type.ts
+++ b/apps/web/src/lib/reference/type.ts
@@ -29,4 +29,5 @@ export interface Reference {
resource_type: ResourceType;
reference_key?: string;
workspace_id?: string;
+ isAdminMode?: boolean;
}
diff --git a/apps/web/src/router/index.ts b/apps/web/src/router/index.ts
index d63d092b56..3029bfdf87 100755
--- a/apps/web/src/router/index.ts
+++ b/apps/web/src/router/index.ts
@@ -1,5 +1,5 @@
import Vue from 'vue';
-import type { RouteConfig } from 'vue-router';
+import type { NavigationGuardNext, Route, RouteConfig } from 'vue-router';
import VueRouter from 'vue-router';
import { clone } from 'lodash';
@@ -93,6 +93,11 @@ export class SpaceRouter {
});
SpaceRouter.router.beforeEach(async (to, from, next) => {
+ /* Redirection to proper route */
+ const currentWorkspaceId = userWorkspaceStore.getters.currentWorkspaceId;
+ const redirected = SpaceRouter.handleWorkspaceRouteRedirection(to, currentWorkspaceId, next);
+ if (redirected) return;
+
const { rol: prevRole, wid: prevWorkspaceId } = getDecodedDataFromAccessToken();
const routeScope = getRouteScope(to);
@@ -169,4 +174,24 @@ export class SpaceRouter {
return SpaceRouter.router;
}
+
+
+ static handleWorkspaceRouteRedirection(to: Route, currentWorkspaceId: string|undefined, next: NavigationGuardNext): boolean {
+ const targetRouteScope = getRouteScope(to);
+ const needsWorkspaceId = targetRouteScope === ROUTE_SCOPE.WORKSPACE && !to.params.workspaceId && currentWorkspaceId;
+
+ if (to.name && needsWorkspaceId) {
+ next({
+ ...to,
+ name: to.name,
+ params: {
+ ...to.params,
+ workspaceId: currentWorkspaceId,
+ },
+ });
+ return true;
+ }
+
+ return false;
+ }
}
diff --git a/apps/web/src/services/alert-manager-v1/components/AlertDetailInfoTable.vue b/apps/web/src/services/alert-manager-v1/components/AlertDetailInfoTable.vue
index 608680f52d..9545e706a0 100644
--- a/apps/web/src/services/alert-manager-v1/components/AlertDetailInfoTable.vue
+++ b/apps/web/src/services/alert-manager-v1/components/AlertDetailInfoTable.vue
@@ -8,18 +8,18 @@ import {
import { ACTION_ICON } from '@cloudforet/mirinae/src/navigation/link/type';
import { iso8601Formatter } from '@cloudforet/utils';
-import type { AlertModel } from '@/schema/monitoring/alert/model';
+import type { AlertModel } from '@/schema/alert-manager/alert/model';
import type { EscalationPolicyGetParameters } from '@/schema/monitoring/escalation-policy/api-verbs/get';
import type { EscalationPolicyModel } from '@/schema/monitoring/escalation-policy/model';
import { i18n } from '@/translations';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type { UserReferenceMap } from '@/store/reference/user-reference-store';
import type { WebhookReferenceMap } from '@/store/reference/webhook-reference-store';
import { useUserStore } from '@/store/user/user-store';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import AlertDetailInfoTableDescription from '@/services/alert-manager-v1/components/AlertDetailInfoTableDescription.vue';
import AlertDetailInfoTableProject from '@/services/alert-manager-v1/components/AlertDetailInfoTableProject.vue';
@@ -36,10 +36,10 @@ const props = defineProps<{
}>();
const allReferenceStore = useAllReferenceStore();
+const userWorkspaceStore = useUserWorkspaceStore();
const alertPageStore = useAlertPageStore();
const alertPageState = alertPageStore.state;
const userStore = useUserStore();
-const { getProperRouteLocation } = useProperRouteLocation();
const state = reactive({
@@ -127,7 +127,7 @@ const getEscalationPolicy = async () => {
{{ state.escalationPolicyName }}
diff --git a/apps/web/src/services/alert-manager-v1/components/AlertDetailInfoTableProject.vue b/apps/web/src/services/alert-manager-v1/components/AlertDetailInfoTableProject.vue
index c507bc5680..afc0ce9227 100644
--- a/apps/web/src/services/alert-manager-v1/components/AlertDetailInfoTableProject.vue
+++ b/apps/web/src/services/alert-manager-v1/components/AlertDetailInfoTableProject.vue
@@ -6,12 +6,12 @@ import {
} from '@cloudforet/mirinae';
import { ACTION_ICON } from '@cloudforet/mirinae/src/navigation/link/type';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type { ProjectReferenceMap } from '@/store/reference/project-reference-store';
import { referenceRouter } from '@/lib/reference/referenceRouter';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import ProjectSelectDropdown from '@/common/modules/project/ProjectSelectDropdown.vue';
import { useAlertInfoItem } from '@/services/alert-manager-v1/composables/alert-info';
@@ -23,7 +23,6 @@ const props = defineProps<{
alertData?: Record;
manageDisabled?: boolean;
}>();
-const { getProperRouteLocation } = useProperRouteLocation();
const {
state: alertDetailItemState,
@@ -37,6 +36,7 @@ const {
});
const allReferenceStore = useAllReferenceStore();
+const userWorkspaceStore = useUserWorkspaceStore();
const state = reactive({
projects: computed(() => allReferenceStore.getters.project),
modalVisible: false,
@@ -60,9 +60,9 @@ const onSelectProject = (selected) => {
{{ state.projects[props.alertData.project_id] ? state.projects[props.alertData.project_id].label : props.alertData.project_id }}
diff --git a/apps/web/src/services/alert-manager-v1/components/AlertListItem.vue b/apps/web/src/services/alert-manager-v1/components/AlertListItem.vue
index 40f573bf5c..9d7b5d93d3 100644
--- a/apps/web/src/services/alert-manager-v1/components/AlertListItem.vue
+++ b/apps/web/src/services/alert-manager-v1/components/AlertListItem.vue
@@ -12,12 +12,12 @@ import { ACTION_ICON } from '@cloudforet/mirinae/src/navigation/link/type';
import { ALERT_STATE } from '@/schema/monitoring/alert/constants';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import type { ReferenceItem } from '@/store/reference/type';
import { useUserStore } from '@/store/user/user-store';
import { referenceRouter } from '@/lib/reference/referenceRouter';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { red } from '@/styles/colors';
@@ -46,11 +46,11 @@ const props = withDefaults(defineProps<{
});
const userStore = useUserStore();
+const userWorkspaceStore = useUserWorkspaceStore();
const state = reactive({
timezone: computed(() => userStore.state.timezone),
alertStateI18n: useAlertStateI18n(),
});
-const { getProperRouteLocation } = useProperRouteLocation();
/* util */
const badgeStyleTypeFormatter = (alertState) => {
@@ -94,7 +94,10 @@ const projectNameFormatter = (projectId) => props.projectReference?.label || pro
class="project-link"
:action-icon="ACTION_ICON.INTERNAL_LINK"
new-tab
- :to="getProperRouteLocation(referenceRouter(props.item.project_id,{ resource_type: 'identity.Project' }))"
+ :to="referenceRouter(props.item.project_id,{
+ resource_type: 'identity.Project',
+ workspace_id: userWorkspaceStore.getters.currentWorkspaceId,
+ })"
hide-icon
>
{{ projectNameFormatter(props.item.project_id) }}
diff --git a/apps/web/src/services/alert-manager-v1/components/AlertMainDataTable.vue b/apps/web/src/services/alert-manager-v1/components/AlertMainDataTable.vue
index 0c3b9ae862..e64b2ba719 100644
--- a/apps/web/src/services/alert-manager-v1/components/AlertMainDataTable.vue
+++ b/apps/web/src/services/alert-manager-v1/components/AlertMainDataTable.vue
@@ -19,10 +19,11 @@ import type { KeyItemSet, ValueHandlerMap } from '@cloudforet/mirinae/types/cont
import type { ToolboxOptions } from '@cloudforet/mirinae/types/controls/toolbox/type';
import { durationFormatter, iso8601Formatter } from '@cloudforet/utils';
+import type { AlertModel } from '@/schema/alert-manager/alert/model';
import type { AlertListParameters, AlertListResponse } from '@/schema/monitoring/alert/api-verbs/list';
import { ALERT_STATE, ALERT_URGENCY } from '@/schema/monitoring/alert/constants';
-import type { AlertModel } from '@/schema/monitoring/alert/model';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type { ProjectReferenceMap } from '@/store/reference/project-reference-store';
import type { UserReferenceMap } from '@/store/reference/user-reference-store';
@@ -37,7 +38,6 @@ import { MENU_ID } from '@/lib/menu/config';
import { referenceRouter } from '@/lib/reference/referenceRouter';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { useQueryTags } from '@/common/composables/query-tags';
import CustomFieldModal from '@/common/modules/custom-table/custom-field-modal/CustomFieldModal.vue';
@@ -86,10 +86,11 @@ const props = withDefaults(defineProps<{
const emit = defineEmits<{(event: 'update', filters: Partial): void;
(event: 'change-list'): void;
}>();
-const { getProperRouteLocation } = useProperRouteLocation();
+
/* Stores */
const allReferenceStore = useAllReferenceStore();
+const userWorkspaceStore = useUserWorkspaceStore();
const userStore = useUserStore();
const storeState = reactive({
timezone: computed(() => userStore.state.timezone || ''),
@@ -487,7 +488,10 @@ initPage();
{{ storeState.projects[value] ? storeState.projects[value].label : value }}
diff --git a/apps/web/src/services/alert-manager-v1/components/AlertMainDataTableTriggeredByField.vue b/apps/web/src/services/alert-manager-v1/components/AlertMainDataTableTriggeredByField.vue
index f99acdf2d0..91acd6e9e1 100644
--- a/apps/web/src/services/alert-manager-v1/components/AlertMainDataTableTriggeredByField.vue
+++ b/apps/web/src/services/alert-manager-v1/components/AlertMainDataTableTriggeredByField.vue
@@ -10,9 +10,9 @@ import { ACTION_ICON } from '@cloudforet/mirinae/src/navigation/link/type';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import type { ReferenceItem } from '@/store/reference/type';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { PROJECT_ROUTE } from '@/services/project/routes/route-constant';
@@ -25,7 +25,7 @@ const props = defineProps<{
}>();
const queryHelper = new QueryHelper();
-const { getProperRouteLocation } = useProperRouteLocation();
+const userWorkspaceStore = useUserWorkspaceStore();
const state = reactive({
webhookLabel: computed(() => props.webhookReference?.label),
@@ -38,6 +38,7 @@ const state = reactive({
name: PROJECT_ROUTE.DETAIL.TAB.ALERT._NAME,
params: {
id: props.projectId ?? '',
+ workspaceId: userWorkspaceStore.getters.currentWorkspaceId,
},
query: {
tab: 'webhook',
@@ -65,7 +66,7 @@ const state = reactive({
{{ state.label }}
diff --git a/apps/web/src/services/alert-manager-v1/components/EscalationPolicyDataTable.vue b/apps/web/src/services/alert-manager-v1/components/EscalationPolicyDataTable.vue
index 52c8a90af0..3a88dfeecf 100644
--- a/apps/web/src/services/alert-manager-v1/components/EscalationPolicyDataTable.vue
+++ b/apps/web/src/services/alert-manager-v1/components/EscalationPolicyDataTable.vue
@@ -15,11 +15,11 @@ import type {
} from '@/schema/monitoring/escalation-policy/type';
import { i18n } from '@/translations';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import { referenceRouter } from '@/lib/reference/referenceRouter';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { useProxyValue } from '@/common/composables/proxy-state';
import { alertStateBadgeStyleTypeFormatter, alertResourceGroupBadgeStyleTypeFormatter } from '@/services/alert-manager-v1/helpers/alert-badge-helper';
@@ -40,9 +40,9 @@ const props = withDefaults(defineProps<{
const emit = defineEmits<{(e: 'update:select-index', value: number[]): void;
(e: 'change', value: { sortBy: string; sortDesc?: boolean }): void;
}>();
-const { getProperRouteLocation } = useProperRouteLocation();
const allReferenceStore = useAllReferenceStore();
+const userWorkspaceStore = useUserWorkspaceStore();
const state = reactive({
projects: computed(() => allReferenceStore.getters.project),
finishConditions: computed>(() => ({
@@ -135,9 +135,12 @@ const onChangeSort = (sortBy: string, sortDesc?: boolean) => {
{{ state.projects[value] ? state.projects[value].label : value }}
diff --git a/apps/web/src/services/alert-manager-v1/components/EscalationPolicyForm.vue b/apps/web/src/services/alert-manager-v1/components/EscalationPolicyForm.vue
index 9ccfa96a1c..c378937ff5 100644
--- a/apps/web/src/services/alert-manager-v1/components/EscalationPolicyForm.vue
+++ b/apps/web/src/services/alert-manager-v1/components/EscalationPolicyForm.vue
@@ -15,13 +15,13 @@ import type { EscalationPolicyModel } from '@/schema/monitoring/escalation-polic
import type { EscalationPolicyFinishCondition } from '@/schema/monitoring/escalation-policy/type';
import { i18n } from '@/translations';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import { useUserStore } from '@/store/user/user-store';
import { referenceRouter } from '@/lib/reference/referenceRouter';
import { useFormValidator } from '@/common/composables/form-validator';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import ProjectSelectDropdown from '@/common/modules/project/ProjectSelectDropdown.vue';
import EscalationPolicyFormRulesInput from '@/services/alert-manager-v1/components/EscalationPolicyFormRulesInput.vue';
@@ -40,9 +40,9 @@ const props = withDefaults(defineProps<{
showResourceGroup: true,
escalationPolicyData: undefined,
});
-const { getProperRouteLocation } = useProperRouteLocation();
const allReferenceStore = useAllReferenceStore();
+const userWorkspaceStore = useUserWorkspaceStore();
const escalationPolicyFormStore = useEscalationPolicyFormStore();
const escalationPolicyFormState = escalationPolicyFormStore.$state;
const userStore = useUserStore();
@@ -165,7 +165,10 @@ watch([() => escalationPolicyFormState.resourceGroup, () => invalidState.name, (
()
@@ -185,7 +188,7 @@ watch([() => escalationPolicyFormState.resourceGroup, () => invalidState.name, (
:action-icon="ACTION_ICON.INTERNAL_LINK"
new-tab
size="sm"
- :to="getProperRouteLocation({ name: PROJECT_ROUTE._NAME })"
+ :to="{ name: PROJECT_ROUTE._NAME, params: { workspaceId: userWorkspaceStore.getters.currentWorkspaceId } }"
:text="$t('MONITORING.ALERT.ESCALATION_POLICY.FORM.GO_CREATE_PROJECT')"
highlight
/>
diff --git a/apps/web/src/services/alert-manager-v1/components/EscalationPolicyFormRulesInput.vue b/apps/web/src/services/alert-manager-v1/components/EscalationPolicyFormRulesInput.vue
index 4ff8ce58d4..27aaf9d94e 100644
--- a/apps/web/src/services/alert-manager-v1/components/EscalationPolicyFormRulesInput.vue
+++ b/apps/web/src/services/alert-manager-v1/components/EscalationPolicyFormRulesInput.vue
@@ -18,9 +18,11 @@ import type { EscalationPolicyRule } from '@/schema/monitoring/escalation-policy
import type { ProjectChannelListParameters } from '@/schema/notification/project-channel/api-verbs/list';
import type { ProjectChannelModel } from '@/schema/notification/project-channel/model';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
+
import ErrorHandler from '@/common/composables/error/errorHandler';
import { useFormValidator } from '@/common/composables/form-validator';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
+
import ProjectChannelList from '@/services/alert-manager-v1/components/ProjectChannelList.vue';
import { useEscalationPolicyFormStore } from '@/services/alert-manager-v1/stores/escalation-policy-form-store';
@@ -44,7 +46,8 @@ const MINIFIED_NOTIFICATION_LEVELS: {name: EscalationPolicyRule['notification_le
{ name: 'LV5', label: '5' },
];
const DEFAULT_NOTIFICATION_LEVEL = 'LV1';
-const { getProperRouteLocation } = useProperRouteLocation();
+
+const userWorkspaceStore = useUserWorkspaceStore();
const escalationPolicyFormStore = useEscalationPolicyFormStore();
const escalationPolicyFormState = escalationPolicyFormStore.$state;
@@ -170,7 +173,10 @@ watch(() => isAllValid.value, (_isAllValid) => {
:action-icon="ACTION_ICON.INTERNAL_LINK"
new-tab
:text="$t('MONITORING.ALERT.ESCALATION_POLICY.FORM.NOTIFICATIONS_SETTINGS')"
- :to="getProperRouteLocation({ name: PROJECT_ROUTE.DETAIL.TAB.NOTIFICATIONS._NAME, params: { id: escalationPolicyFormState.projectId } })"
+ :to="{ name: PROJECT_ROUTE.DETAIL.TAB.NOTIFICATIONS._NAME, params: {
+ id: escalationPolicyFormState.projectId,
+ workspaceId: userWorkspaceStore.getters.currentWorkspaceId
+ } }"
highlight
/>
diff --git a/apps/web/src/services/alert-manager/components/AlertDetailDeleteModal.vue b/apps/web/src/services/alert-manager/components/AlertDetailDeleteModal.vue
index 83fd31dd57..0f0ce18514 100644
--- a/apps/web/src/services/alert-manager/components/AlertDetailDeleteModal.vue
+++ b/apps/web/src/services/alert-manager/components/AlertDetailDeleteModal.vue
@@ -12,7 +12,6 @@ import { i18n } from '@/translations';
import { showSuccessMessage } from '@/lib/helper/notice-alert-helper';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { useProxyValue } from '@/common/composables/proxy-state';
import { ALERT_MANAGER_ROUTE } from '@/services/alert-manager/routes/route-constant';
@@ -35,8 +34,6 @@ const storeState = reactive({
const router = useRouter();
const route = useRoute();
-const { getProperRouteLocation } = useProperRouteLocation();
-
const emit = defineEmits<{(e: 'update:visible'): void; }>();
const state = reactive({
@@ -58,7 +55,7 @@ const handleConfirm = async () => {
if (serviceId) {
await router.go(-1);
} else {
- await router.push(getProperRouteLocation({ name: ALERT_MANAGER_ROUTE.ALERTS._NAME }));
+ await router.push({ name: ALERT_MANAGER_ROUTE.ALERTS._NAME }).catch(() => {});
}
showSuccessMessage(i18n.t('ALERT_MANAGER.ALERTS.ALT_S_DELETE'), '');
} catch (e) {
diff --git a/apps/web/src/services/alert-manager/components/AlertDetailInfoTable.vue b/apps/web/src/services/alert-manager/components/AlertDetailInfoTable.vue
index 5a18953e30..47072271db 100644
--- a/apps/web/src/services/alert-manager/components/AlertDetailInfoTable.vue
+++ b/apps/web/src/services/alert-manager/components/AlertDetailInfoTable.vue
@@ -16,13 +16,13 @@ import type { CloudServiceGetParameters } from '@/schema/inventory/cloud-service
import type { CloudServiceModel } from '@/schema/inventory/cloud-service/model';
import { i18n } from '@/translations';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type { CloudServiceTypeReferenceMap } from '@/store/reference/cloud-service-type-reference-store';
import type { ServiceReferenceMap } from '@/store/reference/service-reference-store';
import type { WebhookReferenceMap } from '@/store/reference/webhook-reference-store';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import AlertDetailInfoTableDescription from '@/services/alert-manager/components/AlertDetailInfoTableDescription.vue';
import { ALERT_MANAGER_ROUTE } from '@/services/alert-manager/routes/route-constant';
@@ -40,10 +40,10 @@ const alertDetailPageState = alertDetailPageStore.state;
const alertDetailPageGetters = alertDetailPageStore.getters;
const allReferenceStore = useAllReferenceStore();
const allReferenceGetters = allReferenceStore.getters;
+const userWorkspaceStore = useUserWorkspaceStore();
const router = useRouter();
-const { getProperRouteLocation } = useProperRouteLocation();
const storeState = reactive({
webhook: computed(() => allReferenceGetters.webhook),
@@ -106,14 +106,15 @@ const handleRouteViewButton = async (id: string) => {
const response = await SpaceConnector.clientV2.inventory.cloudService.get({
cloud_service_id: id,
});
- window.open(router.resolve(getProperRouteLocation({
+ window.open(router.resolve({
name: ASSET_INVENTORY_ROUTE.CLOUD_SERVICE.DETAIL._NAME,
params: {
provider: response.provider,
group: response.cloud_service_group,
name: response.cloud_service_type,
+ workspaceId: userWorkspaceStore.getters.currentWorkspaceId,
},
- })).href, '_blank');
+ }).href, '_blank');
} catch (e: any) {
ErrorHandler.handleError(e, true);
}
diff --git a/apps/web/src/services/alert-manager/components/AlertDetailSummary.vue b/apps/web/src/services/alert-manager/components/AlertDetailSummary.vue
index f2e84ae247..5f32c32c9f 100644
--- a/apps/web/src/services/alert-manager/components/AlertDetailSummary.vue
+++ b/apps/web/src/services/alert-manager/components/AlertDetailSummary.vue
@@ -11,11 +11,11 @@ import type { AlertModel } from '@/schema/alert-manager/alert/model';
import type { AlertStatusType, AlertUrgencyType } from '@/schema/alert-manager/alert/type';
import { i18n } from '@/translations';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type { EscalationPolicyReferenceMap } from '@/store/reference/escalation-policy-reference-store';
import { usePageEditableStatus } from '@/common/composables/page-editable-status';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { gray, red } from '@/styles/colors';
@@ -29,9 +29,9 @@ const alertDetailPageState = alertDetailPageStore.state;
const alertDetailPageGetters = alertDetailPageStore.getters;
const allReferenceStore = useAllReferenceStore();
const allReferenceGetters = allReferenceStore.getters;
+const userWorkspaceStore = useUserWorkspaceStore();
const { hasReadWriteAccess } = usePageEditableStatus();
-const { getProperRouteLocation } = useProperRouteLocation();
const storeState = reactive({
alertInfo: computed(() => alertDetailPageState.alertInfo),
@@ -137,16 +137,17 @@ watch(() => alertDetailPageState.alertInfo, (alertInfo) => {
{
if (serviceId) {
router.go(-1);
} else {
- router.push(getProperRouteLocation({
+ router.push({
name: ALERT_MANAGER_ROUTE.ALERTS._NAME,
query: {
serviceId: storeState.selectedServiceId,
@@ -69,7 +67,7 @@ const handleRouteBackButton = () => {
urgency: storeState.selectedUrgency,
filters: storeState.selectedSearchFilter,
},
- }));
+ }).catch(() => {});
}
};
const handleSelectDropdownMenu = (type: ModalType) => {
diff --git a/apps/web/src/services/alert-manager/components/ServiceCreateStep3.vue b/apps/web/src/services/alert-manager/components/ServiceCreateStep3.vue
index b059ff8df0..9cd11be049 100644
--- a/apps/web/src/services/alert-manager/components/ServiceCreateStep3.vue
+++ b/apps/web/src/services/alert-manager/components/ServiceCreateStep3.vue
@@ -14,7 +14,6 @@ import { i18n } from '@/translations';
import { showSuccessMessage } from '@/lib/helper/notice-alert-helper';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import NotificationsCreateForm from '@/services/alert-manager/components/NotificationsCreateForm.vue';
import NotificationsCreateTypeSelector
@@ -30,7 +29,6 @@ const serviceCreateFormState = serviceCreateFormStore.state;
const router = useRouter();
-const { getProperRouteLocation } = useProperRouteLocation();
const storeState = reactive({
currentSubStep: computed(() => serviceCreateFormState.currentSubStep),
@@ -50,7 +48,7 @@ const state = reactive({
});
const routeDetailSettingPage = () => {
- router.push(getProperRouteLocation({
+ router.push({
name: ALERT_MANAGER_ROUTE.SERVICE.DETAIL._NAME,
params: {
serviceId: storeState.createdServiceId,
@@ -58,7 +56,7 @@ const routeDetailSettingPage = () => {
query: {
tab: SERVICE_DETAIL_TABS.SETTINGS,
},
- }));
+ }).catch(() => {});
};
const handleChangeForm = (form: CreatedNotificationInfoType, formValid: boolean) => {
state.form = form;
diff --git a/apps/web/src/services/alert-manager/components/ServiceCreateStepContainer.vue b/apps/web/src/services/alert-manager/components/ServiceCreateStepContainer.vue
index 5b4bba8376..481cadeec1 100644
--- a/apps/web/src/services/alert-manager/components/ServiceCreateStepContainer.vue
+++ b/apps/web/src/services/alert-manager/components/ServiceCreateStepContainer.vue
@@ -7,7 +7,6 @@ import { PButton } from '@cloudforet/mirinae';
import { i18n } from '@/translations';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { SERVICE_DETAIL_TABS } from '@/services/alert-manager/constants/common-constant';
import { ALERT_MANAGER_ROUTE } from '@/services/alert-manager/routes/route-constant';
@@ -37,7 +36,6 @@ const serviceCreateFormState = serviceCreateFormStore.state;
const router = useRouter();
-const { getProperRouteLocation } = useProperRouteLocation();
const storeState = reactive({
currentStep: computed(() => serviceCreateFormState.currentStep),
@@ -85,7 +83,7 @@ const state = reactive({
});
const handleCancel = () => {
- router.push(getProperRouteLocation({ name: ALERT_MANAGER_ROUTE.SERVICE._NAME }));
+ router.push({ name: ALERT_MANAGER_ROUTE.SERVICE._NAME }).catch(() => {});
};
const handleNavigation = (direction: 'prev' | 'next') => {
if (direction === 'prev') {
@@ -96,13 +94,13 @@ const handleNavigation = (direction: 'prev' | 'next') => {
};
const handlePrevNavigation = () => {
if (storeState.currentStep === 1) {
- router.push(getProperRouteLocation({ name: ALERT_MANAGER_ROUTE.SERVICE._NAME }));
+ router.push({ name: ALERT_MANAGER_ROUTE.SERVICE._NAME }).catch(() => {});
return;
}
if (storeState.currentStep === 2) {
if (props.selectedItemId) {
if (storeState.currentSubStep === 3) {
- router.push(getProperRouteLocation({ name: ALERT_MANAGER_ROUTE.SERVICE._NAME }));
+ router.push({ name: ALERT_MANAGER_ROUTE.SERVICE._NAME }).catch(() => {});
return;
}
serviceCreateFormStore.setCurrentSubStep(state.previousSubStep);
@@ -138,7 +136,7 @@ const handleClickSelectButton = () => {
}
};
const handleClickSkipButton = () => {
- router.push(getProperRouteLocation({
+ router.push({
name: ALERT_MANAGER_ROUTE.SERVICE.DETAIL._NAME,
params: {
serviceId: storeState.createdServiceId,
@@ -146,7 +144,7 @@ const handleClickSkipButton = () => {
query: {
tab: SERVICE_DETAIL_TABS.SETTINGS,
},
- }));
+ }).catch(() => {});
};
diff --git a/apps/web/src/services/alert-manager/components/ServiceDetailDeleteModal.vue b/apps/web/src/services/alert-manager/components/ServiceDetailDeleteModal.vue
index f272649147..074261d798 100644
--- a/apps/web/src/services/alert-manager/components/ServiceDetailDeleteModal.vue
+++ b/apps/web/src/services/alert-manager/components/ServiceDetailDeleteModal.vue
@@ -9,7 +9,6 @@ import { i18n } from '@/translations';
import { showSuccessMessage } from '@/lib/helper/notice-alert-helper';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { useProxyValue } from '@/common/composables/proxy-state';
import { ALERT_MANAGER_ROUTE } from '@/services/alert-manager/routes/route-constant';
@@ -29,7 +28,6 @@ const serviceDetailPageGetters = serviceDetailPageStore.getters;
const router = useRouter();
-const { getProperRouteLocation } = useProperRouteLocation();
const emit = defineEmits<{(e: 'update:visible'): void; }>();
@@ -53,7 +51,7 @@ const handleConfirm = async () => {
state.loading = true;
try {
await serviceDetailPageStore.deleteServiceDetailData();
- await router.push(getProperRouteLocation({ name: ALERT_MANAGER_ROUTE.SERVICE._NAME }));
+ await router.push({ name: ALERT_MANAGER_ROUTE.SERVICE._NAME }).catch(() => {});
showSuccessMessage(i18n.t('ALERT_MANAGER.SERVICE.ALT_S_DELETE_SERVICE'), '');
} finally {
state.loading = false;
diff --git a/apps/web/src/services/alert-manager/components/ServiceDetailHeader.vue b/apps/web/src/services/alert-manager/components/ServiceDetailHeader.vue
index 10b0aa30be..7af48a38f2 100644
--- a/apps/web/src/services/alert-manager/components/ServiceDetailHeader.vue
+++ b/apps/web/src/services/alert-manager/components/ServiceDetailHeader.vue
@@ -14,7 +14,6 @@ import { i18n } from '@/translations';
import { replaceUrlQuery } from '@/lib/router-query-string';
import { usePageEditableStatus } from '@/common/composables/page-editable-status';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { gray } from '@/styles/colors';
@@ -34,7 +33,6 @@ const serviceDetailPageGetters = serviceDetailPageStore.getters;
const router = useRouter();
const route = useRoute();
-const { getProperRouteLocation } = useProperRouteLocation();
const { hasReadWriteAccess } = usePageEditableStatus();
const storeState = reactive({
@@ -77,7 +75,7 @@ const handleActionModal = (type: ModalType) => {
};
const handleGoBackButton = () => {
if (state.isSettingMode) {
- router.push(getProperRouteLocation({ name: ALERT_MANAGER_ROUTE.SERVICE._NAME }));
+ router.push({ name: ALERT_MANAGER_ROUTE.SERVICE._NAME }).catch(() => {});
return;
}
replaceUrlQuery({
diff --git a/apps/web/src/services/alert-manager/components/ServiceDetailTabsNotifications.vue b/apps/web/src/services/alert-manager/components/ServiceDetailTabsNotifications.vue
index d4b0cfdd10..8479e0bc2c 100644
--- a/apps/web/src/services/alert-manager/components/ServiceDetailTabsNotifications.vue
+++ b/apps/web/src/services/alert-manager/components/ServiceDetailTabsNotifications.vue
@@ -38,7 +38,6 @@ import { downloadExcel } from '@/lib/helper/file-download-helper';
import ErrorHandler from '@/common/composables/error/errorHandler';
import { usePageEditableStatus } from '@/common/composables/page-editable-status';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { useQueryTags } from '@/common/composables/query-tags';
import ServiceDetailTabsNotificationsDeleteModal
@@ -74,7 +73,6 @@ const serviceCreateFormStore = useServiceCreateFormStore();
const router = useRouter();
-const { getProperRouteLocation } = useProperRouteLocation();
const { hasReadWriteAccess } = usePageEditableStatus();
const tableState = reactive({
@@ -169,9 +167,9 @@ const handleCloseModal = () => {
const handleClickCreateButton = () => {
if (!hasReadWriteAccess) return;
serviceCreateFormStore.setCreatedService(storeState.service);
- router.push(getProperRouteLocation({
+ router.push({
name: ALERT_MANAGER_ROUTE.SERVICE.DETAIL.NOTIFICATIONS.CREATE._NAME,
- }));
+ }).catch(() => {});
};
const handleSelectDropdownItem = (name: NotificationsModalType) => {
modalState.visible = true;
diff --git a/apps/web/src/services/alert-manager/components/ServiceDetailTabsOverviewStatusTable.vue b/apps/web/src/services/alert-manager/components/ServiceDetailTabsOverviewStatusTable.vue
index bccb9f9b09..a4097f171b 100644
--- a/apps/web/src/services/alert-manager/components/ServiceDetailTabsOverviewStatusTable.vue
+++ b/apps/web/src/services/alert-manager/components/ServiceDetailTabsOverviewStatusTable.vue
@@ -22,7 +22,6 @@ import { i18n } from '@/translations';
import { replaceUrlQuery } from '@/lib/router-query-string';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { gray, red } from '@/styles/colors';
@@ -48,7 +47,6 @@ type AlertStatusInfoType = {
const serviceDetailPageStore = useServiceDetailPageStore();
const serviceDetailPageGetters = serviceDetailPageStore.getters;
-const { getProperRouteLocation } = useProperRouteLocation();
const router = useRouter();
@@ -102,13 +100,13 @@ const alertListApiQueryHelper = new ApiQueryHelper().setSort('created_at', true)
.setPage(1, 15);
const handleRouteAlerts = (id: string) => {
- router.push(getProperRouteLocation({
+ router.push({
name: ALERT_MANAGER_ROUTE.ALERTS.DETAIL._NAME,
params: {
alertId: id,
serviceId: storeState.serviceInfo.service_id,
},
- }));
+ }).catch(() => {});
};
const handleRouteAlertsTab = async () => {
await serviceDetailPageStore.setCurrentTab(SERVICE_DETAIL_TABS.ALERTS);
diff --git a/apps/web/src/services/alert-manager/components/ServiceDetailTabsSettingsEventRuleSidebar.vue b/apps/web/src/services/alert-manager/components/ServiceDetailTabsSettingsEventRuleSidebar.vue
index 8264de8d51..355ae9ef8b 100644
--- a/apps/web/src/services/alert-manager/components/ServiceDetailTabsSettingsEventRuleSidebar.vue
+++ b/apps/web/src/services/alert-manager/components/ServiceDetailTabsSettingsEventRuleSidebar.vue
@@ -23,7 +23,6 @@ import { replaceUrlQuery } from '@/lib/router-query-string';
import ErrorHandler from '@/common/composables/error/errorHandler';
import { usePageEditableStatus } from '@/common/composables/page-editable-status';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { useProxyValue } from '@/common/composables/proxy-state';
import { gray } from '@/styles/colors';
@@ -49,7 +48,6 @@ const serviceDetailPageStore = useServiceDetailPageStore();
const serviceDetailPageState = serviceDetailPageStore.state;
const { width } = useWindowSize();
-const { getProperRouteLocation } = useProperRouteLocation();
const { hasReadWriteAccess } = usePageEditableStatus();
const route = useRoute();
@@ -157,7 +155,7 @@ const handleClickItem = (value: TreeNode, idx?: number) => {
return;
}
if (route.query?.eventRuleId === value.data.to.query?.eventRuleId) return;
- router.push(getProperRouteLocation(value.data.to));
+ router.push(value.data.to).catch(() => {});
state.selectedTreeId = value.id;
};
const fetchAndSetEventRuleInfo = async (eventRuleId: string) => {
diff --git a/apps/web/src/services/alert-manager/components/ServiceDetailTabsWebhook.vue b/apps/web/src/services/alert-manager/components/ServiceDetailTabsWebhook.vue
index e7fbce8ff1..c21649e027 100644
--- a/apps/web/src/services/alert-manager/components/ServiceDetailTabsWebhook.vue
+++ b/apps/web/src/services/alert-manager/components/ServiceDetailTabsWebhook.vue
@@ -32,7 +32,6 @@ import { downloadExcel } from '@/lib/helper/file-download-helper';
import ErrorHandler from '@/common/composables/error/errorHandler';
import { usePageEditableStatus } from '@/common/composables/page-editable-status';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { useQueryTags } from '@/common/composables/query-tags';
import ServiceDetailTabsWebhookDeleteModal
@@ -66,7 +65,6 @@ const serviceDetailPageGetters = serviceDetailPageStore.getters;
const router = useRouter();
-const { getProperRouteLocation } = useProperRouteLocation();
const { hasReadWriteAccess } = usePageEditableStatus();
const tableState = reactive({
@@ -137,9 +135,9 @@ const initSelectedWebhook = () => {
};
const handleClickCreateButton = () => {
if (!hasReadWriteAccess) return;
- router.push(getProperRouteLocation({
+ router.push({
name: ALERT_MANAGER_ROUTE.SERVICE.DETAIL.WEBHOOK.CREATE._NAME,
- }));
+ }).catch(() => {});
};
const handleSelectDropdownItem = (name: WebhookModalType) => {
modalState.visible = true;
diff --git a/apps/web/src/services/alert-manager/components/ServiceList.vue b/apps/web/src/services/alert-manager/components/ServiceList.vue
index ea64b1a73c..4e6b8c76e9 100644
--- a/apps/web/src/services/alert-manager/components/ServiceList.vue
+++ b/apps/web/src/services/alert-manager/components/ServiceList.vue
@@ -18,7 +18,6 @@ import type { ServiceModel } from '@/schema/alert-manager/service/model';
import ErrorHandler from '@/common/composables/error/errorHandler';
import { usePageEditableStatus } from '@/common/composables/page-editable-status';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { useQueryTags } from '@/common/composables/query-tags';
import ServiceListContent from '@/services/alert-manager/components/ServiceListContent.vue';
@@ -27,7 +26,6 @@ import type { AlertManagementTableHandlerType } from '@/services/alert-manager/t
const pageSizeOptions = [15, 30, 45];
-const { getProperRouteLocation } = useProperRouteLocation();
const { hasReadWriteAccess } = usePageEditableStatus();
const router = useRouter();
@@ -64,9 +62,9 @@ const handleChangeToolbox = async (options: ToolboxOptions) => {
await fetchServiceList();
};
const handleClickCreateButton = () => {
- router.push(getProperRouteLocation({
+ router.push({
name: ALERT_MANAGER_ROUTE.SERVICE.CREATE._NAME,
- }));
+ }).catch(() => {});
};
const fetchServiceList = async () => {
diff --git a/apps/web/src/services/alert-manager/components/ServiceListContent.vue b/apps/web/src/services/alert-manager/components/ServiceListContent.vue
index 0c373099e6..6013414d1c 100644
--- a/apps/web/src/services/alert-manager/components/ServiceListContent.vue
+++ b/apps/web/src/services/alert-manager/components/ServiceListContent.vue
@@ -15,7 +15,6 @@ import type { EscalationPolicyReferenceMap } from '@/store/reference/escalation-
import type { PluginReferenceMap } from '@/store/reference/plugin-reference-store';
import type { WebhookReferenceMap } from '@/store/reference/webhook-reference-store';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { gray, green } from '@/styles/colors';
@@ -37,7 +36,6 @@ const allReferenceStore = useAllReferenceStore();
const allReferenceGetters = allReferenceStore.getters;
const serviceDetailPageStore = useServiceDetailPageStore();
-const { getProperRouteLocation } = useProperRouteLocation();
const router = useRouter();
@@ -67,7 +65,7 @@ const handleClickCollapsibleTitle = () => {
state.isCollapsed = !state.isCollapsed;
};
const handleClickServiceItem = (id: string) => {
- router.push(getProperRouteLocation({
+ router.push({
name: ALERT_MANAGER_ROUTE.SERVICE.DETAIL._NAME,
params: {
serviceId: id,
@@ -75,13 +73,13 @@ const handleClickServiceItem = (id: string) => {
query: {
tab: SERVICE_DETAIL_TABS.OVERVIEW,
},
- }));
+ }).catch(() => {});
};
const handleClickWebhookItem = (id: string, webhookId?: string) => {
if (webhookId) {
serviceDetailPageStore.setSelectedWebhookId(webhookId);
}
- router.push(getProperRouteLocation({
+ router.push({
name: ALERT_MANAGER_ROUTE.SERVICE.DETAIL._NAME,
params: {
serviceId: id,
@@ -89,13 +87,13 @@ const handleClickWebhookItem = (id: string, webhookId?: string) => {
query: {
tab: SERVICE_DETAIL_TABS.WEBHOOK,
},
- }));
+ }).catch(() => {});
};
const handleClickEscalationPolicy = (id: string, escalationPolicyId: string) => {
if (id) {
serviceDetailPageStore.setSelectedEscalationPolicyId(escalationPolicyId);
}
- router.push(getProperRouteLocation({
+ router.push({
name: ALERT_MANAGER_ROUTE.SERVICE.DETAIL._NAME,
params: {
serviceId: id,
@@ -103,7 +101,7 @@ const handleClickEscalationPolicy = (id: string, escalationPolicyId: string) =>
query: {
tab: SERVICE_DETAIL_TABS.SETTINGS,
},
- }));
+ }).catch(() => {});
};
diff --git a/apps/web/src/services/alert-manager/pages/AlertsDetailPage.vue b/apps/web/src/services/alert-manager/pages/AlertsDetailPage.vue
index 7d53ea2d39..db15d61586 100644
--- a/apps/web/src/services/alert-manager/pages/AlertsDetailPage.vue
+++ b/apps/web/src/services/alert-manager/pages/AlertsDetailPage.vue
@@ -4,7 +4,6 @@ import {
} from 'vue';
import { useRouter } from 'vue-router/composables';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import AlertDetailInfoTable from '@/services/alert-manager/components/AlertDetailInfoTable.vue';
import AlertDetailNote from '@/services/alert-manager/components/AlertDetailNote.vue';
@@ -26,7 +25,6 @@ const alertDetailPageStore = useAlertDetailPageStore();
const router = useRouter();
-const { getProperRouteLocation } = useProperRouteLocation();
watch(() => props.alertId, async (alertId) => {
if (!alertId) return;
@@ -35,7 +33,7 @@ watch(() => props.alertId, async (alertId) => {
onMounted(() => {
if (!props.alertId) {
- router.push(getProperRouteLocation({ name: ALERT_MANAGER_ROUTE.ALERTS._NAME }));
+ router.push({ name: ALERT_MANAGER_ROUTE.ALERTS._NAME }).catch(() => {});
}
});
onUnmounted(() => {
diff --git a/apps/web/src/services/alert-manager/pages/ServiceCreatePage.vue b/apps/web/src/services/alert-manager/pages/ServiceCreatePage.vue
index ceba4d021a..19f975b6d6 100644
--- a/apps/web/src/services/alert-manager/pages/ServiceCreatePage.vue
+++ b/apps/web/src/services/alert-manager/pages/ServiceCreatePage.vue
@@ -6,7 +6,6 @@ import { PCenteredLayoutHeader } from '@cloudforet/mirinae';
import { i18n } from '@/translations';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import ServiceCreateStep1 from '@/services/alert-manager/components/ServiceCreateStep1.vue';
import ServiceCreateStep2 from '@/services/alert-manager/components/ServiceCreateStep2.vue';
@@ -18,7 +17,6 @@ import type { createHeaderInfoByStep } from '@/services/alert-manager/types/aler
const serviceCreateFormStore = useServiceCreateFormStore();
const serviceCreateFormState = serviceCreateFormStore.state;
-const { getProperRouteLocation } = useProperRouteLocation();
const router = useRouter();
@@ -67,7 +65,7 @@ const state = reactive({
});
const handleClickClose = () => {
- router.push(getProperRouteLocation({ name: ALERT_MANAGER_ROUTE.SERVICE._NAME }));
+ router.push({ name: ALERT_MANAGER_ROUTE.SERVICE._NAME }).catch(() => {});
};
onUnmounted(() => {
diff --git a/apps/web/src/services/alert-manager/pages/ServiceDetailNotificationsCreatePage.vue b/apps/web/src/services/alert-manager/pages/ServiceDetailNotificationsCreatePage.vue
index c85b4274ca..d9c36f1a3b 100644
--- a/apps/web/src/services/alert-manager/pages/ServiceDetailNotificationsCreatePage.vue
+++ b/apps/web/src/services/alert-manager/pages/ServiceDetailNotificationsCreatePage.vue
@@ -17,7 +17,6 @@ import { i18n } from '@/translations';
import { showSuccessMessage } from '@/lib/helper/notice-alert-helper';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import NotificationsCreateForm from '@/services/alert-manager/components/NotificationsCreateForm.vue';
import NotificationsCreateTypeSelector
@@ -39,7 +38,6 @@ const serviceCreateFormState = serviceCreateFormStore.state;
const router = useRouter();
-const { getProperRouteLocation } = useProperRouteLocation();
const storeState = reactive({
selectedProtocolId: computed(() => serviceCreateFormState.selectedProtocol?.protocol_id || ''),
@@ -60,7 +58,7 @@ const handleChangeForm = (form: CreatedNotificationInfoType, formValid: boolean)
state.formValid = formValid;
};
const handleClickCancelButton = () => {
- router.push(getProperRouteLocation({
+ router.push({
name: ALERT_MANAGER_ROUTE.SERVICE.DETAIL._NAME,
params: {
serviceId: props.serviceId,
@@ -68,7 +66,7 @@ const handleClickCancelButton = () => {
query: {
tab: SERVICE_DETAIL_TABS.NOTIFICATIONS,
},
- }));
+ }).catch(() => {});
};
const handlePrevNavigation = () => {
if (state.currentStep === 1) {
diff --git a/apps/web/src/services/alert-manager/pages/ServiceDetailPage.vue b/apps/web/src/services/alert-manager/pages/ServiceDetailPage.vue
index c01c6338d0..8995c7e90f 100644
--- a/apps/web/src/services/alert-manager/pages/ServiceDetailPage.vue
+++ b/apps/web/src/services/alert-manager/pages/ServiceDetailPage.vue
@@ -5,7 +5,6 @@ import {
} from 'vue';
import { useRouter } from 'vue-router/composables';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import type { FavoriteOptions } from '@/common/modules/favorites/favorite-button/type';
import { FAVORITE_TYPE } from '@/common/modules/favorites/favorite-button/type';
import { useGnbStore } from '@/common/modules/navigations/stores/gnb-store';
@@ -28,7 +27,6 @@ const serviceDetailPageStore = useServiceDetailPageStore();
const router = useRouter();
-const { getProperRouteLocation } = useProperRouteLocation();
const state = reactive({
favoriteOptions: computed(() => ({
@@ -48,7 +46,7 @@ watch(() => props.serviceId, async (serviceId) => {
onMounted(() => {
if (!props.serviceId) {
- router.push(getProperRouteLocation({ name: ALERT_MANAGER_ROUTE.SERVICE._NAME }));
+ router.push({ name: ALERT_MANAGER_ROUTE.SERVICE._NAME }).catch(() => {});
}
});
diff --git a/apps/web/src/services/alert-manager/pages/ServiceDetailWebhookCreatePage.vue b/apps/web/src/services/alert-manager/pages/ServiceDetailWebhookCreatePage.vue
index 11314c60de..d8dad82da4 100644
--- a/apps/web/src/services/alert-manager/pages/ServiceDetailWebhookCreatePage.vue
+++ b/apps/web/src/services/alert-manager/pages/ServiceDetailWebhookCreatePage.vue
@@ -15,7 +15,6 @@ import { i18n } from '@/translations';
import { showSuccessMessage } from '@/lib/helper/notice-alert-helper';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import WebhookCreateForm from '@/services/alert-manager/components/WebhookCreateForm.vue';
import WebhookCreateSuccessMode from '@/services/alert-manager/components/WebhookCreateSuccessMode.vue';
@@ -37,7 +36,6 @@ const serviceCreateFormState = serviceCreateFormStore.state;
const router = useRouter();
-const { getProperRouteLocation } = useProperRouteLocation();
const storeState = reactive({
selectedWebhookType: computed(() => serviceCreateFormState.selectedWebhookType),
@@ -72,7 +70,7 @@ const state = reactive({
});
const handleClickCancelButton = () => {
- router.push(getProperRouteLocation({
+ router.push({
name: ALERT_MANAGER_ROUTE.SERVICE.DETAIL._NAME,
params: {
serviceId: props.serviceId,
@@ -80,7 +78,7 @@ const handleClickCancelButton = () => {
query: {
tab: SERVICE_DETAIL_TABS.WEBHOOK,
},
- }));
+ }).catch(() => {});
};
const handlePrevNavigation = () => {
if (state.currentStep === 1) {
diff --git a/apps/web/src/services/alert-manager/pages/ServiceMainPage.vue b/apps/web/src/services/alert-manager/pages/ServiceMainPage.vue
index 4b3eece65d..2e8dd63e0b 100644
--- a/apps/web/src/services/alert-manager/pages/ServiceMainPage.vue
+++ b/apps/web/src/services/alert-manager/pages/ServiceMainPage.vue
@@ -9,7 +9,6 @@ import {
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import { usePageEditableStatus } from '@/common/composables/page-editable-status';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import ServiceList from '@/services/alert-manager/components/ServiceList.vue';
import { ALERT_MANAGER_ROUTE } from '@/services/alert-manager/routes/route-constant';
@@ -18,14 +17,13 @@ const router = useRouter();
const allReferenceStore = useAllReferenceStore();
-const { getProperRouteLocation } = useProperRouteLocation();
const { hasReadWriteAccess } = usePageEditableStatus();
const handleClickCreateButton = () => {
if (!hasReadWriteAccess) return;
- router.push(getProperRouteLocation({
+ router.push({
name: ALERT_MANAGER_ROUTE.SERVICE.CREATE._NAME,
- }));
+ }).catch(() => {});
};
onMounted(() => {
diff --git a/apps/web/src/services/asset-inventory-v1/components/CloudServiceLSB.vue b/apps/web/src/services/asset-inventory-v1/components/CloudServiceLSB.vue
index 423b56ab37..e42e328517 100644
--- a/apps/web/src/services/asset-inventory-v1/components/CloudServiceLSB.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/CloudServiceLSB.vue
@@ -12,11 +12,11 @@ import {
import { i18n } from '@/translations';
+import { useAppContextStore } from '@/store/app-context/app-context-store';
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type { ProviderReferenceMap } from '@/store/reference/provider-reference-store';
import { useUserStore } from '@/store/user/user-store';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import LSB from '@/common/modules/navigations/lsb/LSB.vue';
import type {
LSBItem, LSBMenu,
@@ -40,8 +40,8 @@ const PROVIDER_MENU_ID = 'provider';
const CATEGORY_MENU_ID = 'category';
const REGION_MENU_ID = 'region';
-const { getProperRouteLocation, isAdminMode } = useProperRouteLocation();
+const appContextStore = useAppContextStore();
const cloudServicePageStore = useCloudServicePageStore();
const cloudServicePageState = cloudServicePageStore.$state;
const cloudServiceDetailPageStore = useCloudServiceDetailPageStore();
@@ -53,6 +53,7 @@ const route = useRoute();
const router = useRouter();
const storeState = reactive({
+ isAdminMode: computed(() => appContextStore.getters.isAdminMode),
currentGrantInfo: computed(() => userStore.state.currentGrantInfo),
providers: computed(() => allReferenceStore.getters.provider),
});
@@ -108,7 +109,7 @@ const state = reactive({
label: state.detailPageParams.group,
id: selectedItem?.group,
isBackLink: true,
- to: getProperRouteLocation({ name: ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE._NAME }),
+ to: { name: storeState.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE._NAME : ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE._NAME },
titleIcon: get(selectedItem, ['tags', 'spaceone:icon'], ''),
},
];
@@ -117,7 +118,10 @@ const state = reactive({
type: MENU_ITEM_TYPE.ITEM,
label: d.name,
id: d.cloud_service_type_key,
- to: getProperRouteLocation({ name: ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.DETAIL._NAME, params: { ...state.detailPageParams, name: d.name } }),
+ to: {
+ name: storeState.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.DETAIL._NAME : ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.DETAIL._NAME,
+ params: { ...state.detailPageParams, name: d.name },
+ },
});
});
return results;
@@ -165,15 +169,16 @@ const initCloudServiceDetailLSB = async (params: CloudServiceDetailPageParams) =
};
const routeToFirstCloudServiceType = async (params: CloudServiceDetailPageParams) => {
- await router.replace(getProperRouteLocation({
- name: ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.DETAIL._NAME,
+ await router.replace({
+ name: storeState.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.DETAIL._NAME : ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.DETAIL._NAME,
params: {
provider: params.provider,
group: params.group,
name: cloudServiceDetailPageState.cloudServiceTypeList[0].name,
},
query: route.query,
- }));
+ }).catch(() => {
+ });
await cloudServiceDetailPageStore.setSelectedCloudServiceType();
};
const handleSelectProvider = (selected: string) => {
@@ -193,7 +198,7 @@ watch([() => state.detailPageParams, () => storeState.currentGrantInfo], async (
appContextStore.getters.isAdminMode),
@@ -93,15 +92,15 @@ const getCloudServiceDetailLink = (item: CloudServiceAnalyzeResult, resource?: C
filters: cloudServiceDetailQueryHelper.rawQueryStrings,
period: objectToQueryString(cloudServicePageState.period),
};
- const res: Location = getProperRouteLocation({
- name: ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.DETAIL._NAME,
+ const res: Location = {
+ name: state.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.DETAIL._NAME : ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.DETAIL._NAME,
params: {
provider: item.provider,
group: item.cloud_service_group,
name: targetCloudServiceType.cloud_service_type,
},
query,
- });
+ };
return res;
};
diff --git a/apps/web/src/services/asset-inventory-v1/components/CloudServiceMetricButton.vue b/apps/web/src/services/asset-inventory-v1/components/CloudServiceMetricButton.vue
index f4f3d3817b..9b0cc78c23 100644
--- a/apps/web/src/services/asset-inventory-v1/components/CloudServiceMetricButton.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/CloudServiceMetricButton.vue
@@ -6,11 +6,13 @@ import {
PTextButton,
} from '@cloudforet/mirinae';
+import { useAppContextStore } from '@/store/app-context/app-context-store';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type { MetricReferenceMap, MetricReferenceItem } from '@/store/reference/metric-reference-store';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
+import { ADMIN_ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/admin/route-constant';
import { ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/route-constant';
@@ -29,9 +31,10 @@ const props = withDefaults(defineProps(), {
name: '',
});
const router = useRouter();
-const { getProperRouteLocation } = useProperRouteLocation();
const allReferenceStore = useAllReferenceStore();
+const appContextStore = useAppContextStore();
+const userWorkspaceStore = useUserWorkspaceStore();
const storeState = reactive({
metrics: computed(() => allReferenceStore.getters.metric),
});
@@ -47,12 +50,13 @@ const state = reactive({
});
const handleClickGoToMetric = () => {
- window.open(router.resolve(getProperRouteLocation({
- name: ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME,
+ window.open(router.resolve({
+ name: appContextStore.getters.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.DETAIL._NAME : ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.DETAIL._NAME,
params: {
+ workspaceId: appContextStore.getters.isAdminMode ? undefined : userWorkspaceStore.getters.currentWorkspaceId,
metricId: props.goToMetricServerPage ? METRIC_SERVER_ID : state.targetMetric.key,
},
- })).href, '_blank');
+ }).href, '_blank');
};
diff --git a/apps/web/src/services/asset-inventory-v1/components/CollectorCreateStep4.vue b/apps/web/src/services/asset-inventory-v1/components/CollectorCreateStep4.vue
index d67ec9607a..38c8a146ca 100644
--- a/apps/web/src/services/asset-inventory-v1/components/CollectorCreateStep4.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/CollectorCreateStep4.vue
@@ -52,6 +52,7 @@
diff --git a/apps/web/src/services/asset-inventory-v1/components/CollectorDetailAttachedServiceAccounts.vue b/apps/web/src/services/asset-inventory-v1/components/CollectorDetailAttachedServiceAccounts.vue
index b6628d54eb..4c769aa2cc 100644
--- a/apps/web/src/services/asset-inventory-v1/components/CollectorDetailAttachedServiceAccounts.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/CollectorDetailAttachedServiceAccounts.vue
@@ -19,6 +19,7 @@ import type { SecretListParameters } from '@/schema/secret/secret/api-verbs/list
import type { SecretModel } from '@/schema/secret/secret/model';
import { i18n } from '@/translations';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type { ProjectReferenceMap } from '@/store/reference/project-reference-store';
import type { ProviderReferenceMap } from '@/store/reference/provider-reference-store';
@@ -28,7 +29,6 @@ import { useUserStore } from '@/store/user/user-store';
import { referenceRouter } from '@/lib/reference/referenceRouter';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { useQueryTags } from '@/common/composables/query-tags';
import { COLLECT_DATA_TYPE } from '@/services/asset-inventory-v1/constants/collector-constant';
@@ -44,9 +44,9 @@ const props = defineProps<{
}>();
const emit = defineEmits<{(e: 'update:totalCount', totalCount: number): void;
}>();
-const { getProperRouteLocation } = useProperRouteLocation();
const allReferenceStore = useAllReferenceStore();
+const userWorkspaceStore = useUserWorkspaceStore();
const collectorFormStore = useCollectorFormStore();
const collectorFormState = collectorFormStore.state;
const collectorDataModalStore = useCollectorDataModalStore();
@@ -218,7 +218,10 @@ watch([() => collectorFormState.collectorProvider, () => state.serviceAccountsFi
{{ state.projects[value].label }}
diff --git a/apps/web/src/services/asset-inventory-v1/components/CollectorHistoryJobBasicInformation.vue b/apps/web/src/services/asset-inventory-v1/components/CollectorHistoryJobBasicInformation.vue
index 48927ec335..d5a0ee83af 100644
--- a/apps/web/src/services/asset-inventory-v1/components/CollectorHistoryJobBasicInformation.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/CollectorHistoryJobBasicInformation.vue
@@ -6,7 +6,7 @@
@@ -54,28 +54,32 @@ import { iso8601Formatter } from '@cloudforet/utils';
import type { JobModel } from '@/schema/inventory/job/model';
+import { useAppContextStore } from '@/store/app-context/app-context-store';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type { CollectorReferenceMap } from '@/store/reference/collector-reference-store';
import type { PluginReferenceMap } from '@/store/reference/plugin-reference-store';
import { useUserStore } from '@/store/user/user-store';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
+import { ADMIN_ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/admin/route-constant';
import { ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/route-constant';
+
interface Props {
job: JobModel;
}
const allReferenceStore = useAllReferenceStore();
const userStore = useUserStore();
+const userWorkspaceStore = useUserWorkspaceStore();
+const appContextStore = useAppContextStore();
const props = withDefaults(defineProps(), {
job: undefined,
});
-const { getProperRouteLocation } = useProperRouteLocation();
const storeState = reactive({
collectors: computed(() => allReferenceStore.getters.collector),
@@ -89,8 +93,9 @@ const state = reactive({
id,
label: storeState.collectors[id]?.label || id,
linkLocation: {
- name: ASSET_INVENTORY_ROUTE_V1.COLLECTOR.DETAIL._NAME,
+ name: appContextStore.getters.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.COLLECTOR.DETAIL._NAME : ASSET_INVENTORY_ROUTE_V1.COLLECTOR.DETAIL._NAME,
params: {
+ workspaceId: appContextStore.getters.isAdminMode ? undefined : userWorkspaceStore.getters.currentWorkspaceId,
collectorId: id,
},
},
diff --git a/apps/web/src/services/asset-inventory-v1/components/CollectorHistoryJobTaskTable.vue b/apps/web/src/services/asset-inventory-v1/components/CollectorHistoryJobTaskTable.vue
index c35cd2617b..0ee65b5121 100644
--- a/apps/web/src/services/asset-inventory-v1/components/CollectorHistoryJobTaskTable.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/CollectorHistoryJobTaskTable.vue
@@ -21,6 +21,8 @@ import { i18n } from '@/translations';
import { ROOT_ROUTE } from '@/router/constant';
+import { useAppContextStore } from '@/store/app-context/app-context-store';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type { ProjectReferenceMap } from '@/store/reference/project-reference-store';
import type { ServiceAccountReferenceMap } from '@/store/reference/service-account-reference-store';
@@ -29,7 +31,6 @@ import { useUserStore } from '@/store/user/user-store';
import { referenceRouter } from '@/lib/reference/referenceRouter';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import {
statusIconColorFormatter,
@@ -44,12 +45,9 @@ interface Props {
jobId: string;
}
-const { isAdminMode } = useProperRouteLocation();
-
const props = withDefaults(defineProps(), {
jobId: '',
});
-const { getProperRouteLocation } = useProperRouteLocation();
const adminFields = [
{ label: 'Service Account', name: 'service_account_id', sortable: false },
@@ -79,8 +77,12 @@ const statusList = computed(() => [
const emit = defineEmits<{(e: 'select', array): void}>();
const allReferenceStore = useAllReferenceStore();
+const appContextStore = useAppContextStore();
+const userWorkspaceStore = useUserWorkspaceStore();
const userStore = useUserStore();
const storeState = reactive({
+ isAdminMode: computed(() => appContextStore.getters.isAdminMode),
+ currentWorkspaceId: computed(() => userWorkspaceStore.getters.currentWorkspaceId),
serviceAccounts: computed(() => allReferenceStore.getters.serviceAccount),
projects: computed(() => allReferenceStore.getters.project),
workspaces: computed(() => allReferenceStore.getters.workspace),
@@ -227,7 +229,7 @@ onDeactivated(() => {
sortable
search-type="query"
:loading="state.loading"
- :fields="isAdminMode ? adminFields : fields"
+ :fields="storeState.isAdminMode ? adminFields : fields"
:items="state.items"
:select-index.sync="state.selectIndex"
:sort-by="state.sortBy"
@@ -258,15 +260,19 @@ onDeactivated(() => {
{{ storeState.serviceAccounts[value].label }}
--
-
Global
diff --git a/apps/web/src/services/asset-inventory-v1/components/CollectorMainContents.vue b/apps/web/src/services/asset-inventory-v1/components/CollectorMainContents.vue
index 558ecf3b79..cbff2dc44c 100644
--- a/apps/web/src/services/asset-inventory-v1/components/CollectorMainContents.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/CollectorMainContents.vue
@@ -2,7 +2,7 @@
import {
onMounted, computed, reactive, watch,
} from 'vue';
-import { useRoute } from 'vue-router/composables';
+import { useRoute, useRouter } from 'vue-router/composables';
import { clone } from 'lodash';
@@ -19,8 +19,8 @@ import type {
} from '@cloudforet/mirinae/types/controls/search/query-search/type';
import type { ToolboxOptions } from '@cloudforet/mirinae/types/controls/toolbox/type';
-import { SpaceRouter } from '@/router';
+import { useAppContextStore } from '@/store/app-context/app-context-store';
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type { PluginReferenceMap } from '@/store/reference/plugin-reference-store';
import { useUserStore } from '@/store/user/user-store';
@@ -33,7 +33,6 @@ import type { MenuId } from '@/lib/menu/config';
import { MENU_ID } from '@/lib/menu/config';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import CollectorDataModal
from '@/services/asset-inventory-v1/components/CollectorDataModal.vue';
@@ -41,6 +40,7 @@ import CollectorContentItem from '@/services/asset-inventory-v1/components/Colle
import CollectorListNoData from '@/services/asset-inventory-v1/components/CollectorMainListNoData.vue';
import CollectorScheduleModal
from '@/services/asset-inventory-v1/components/CollectorMainScheduleModal.vue';
+import { ADMIN_ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/admin/route-constant';
import { ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/route-constant';
import { useCollectorPageStore } from '@/services/asset-inventory-v1/stores/collector-page-store';
import type { CollectorItemInfo } from '@/services/asset-inventory-v1/types/collector-main-page-type';
@@ -82,11 +82,12 @@ const collectorPageStore = useCollectorPageStore();
const collectorPageState = collectorPageStore.state;
const allReferenceStore = useAllReferenceStore();
const userStore = useUserStore();
-const { getProperRouteLocation, isAdminMode } = useProperRouteLocation();
-
+const appContextStore = useAppContextStore();
+const router = useRouter();
const route = useRoute();
const storeState = reactive({
+ isAdminMode: computed(() => appContextStore.getters.isAdminMode),
plugins: computed(() => allReferenceStore.getters.plugin),
timezone: computed(() => userStore.state.timezone ?? 'UTC'),
pageAccessPermissionMap: computed(() => userStore.getters.pageAccessPermissionMap),
@@ -106,8 +107,8 @@ const keyItemSets: KeyItemSet[] = [{
}];
const collectorSearchHandler = reactive({
valueHandlerMap: computed(() => ({
- collector_id: makeDistinctValueHandler('inventory.Collector', 'collector_id', undefined, isAdminMode ? [{ k: 'workspace_id', v: '*', o: 'eq' }] : undefined),
- name: makeDistinctValueHandler('inventory.Collector', 'name', undefined, isAdminMode ? [{ k: 'workspace_id', v: '*', o: 'eq' }] : undefined),
+ collector_id: makeDistinctValueHandler('inventory.Collector', 'collector_id', undefined, storeState.isAdminMode ? [{ k: 'workspace_id', v: '*', o: 'eq' }] : undefined),
+ name: makeDistinctValueHandler('inventory.Collector', 'name', undefined, storeState.isAdminMode ? [{ k: 'workspace_id', v: '*', o: 'eq' }] : undefined),
'schedule.state': makeDistinctValueHandler('inventory.Collector', 'schedule.state'),
'plugin_info.plugin_id': makePluginReferenceValueHandler('plugin_info.plugin_id', storeState.plugins),
'plugin_info.version': makeDistinctValueHandler('inventory.Collector', 'plugin_info.version'),
@@ -176,10 +177,10 @@ const state = reactive({
query: {
filters: historyLinkQueryHelper.rawQueryStrings,
},
- name: ASSET_INVENTORY_ROUTE_V1.COLLECTOR.HISTORY._NAME,
+ name: storeState.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.COLLECTOR.HISTORY._NAME : ASSET_INVENTORY_ROUTE_V1.COLLECTOR.HISTORY._NAME,
},
detailLink: {
- name: ASSET_INVENTORY_ROUTE_V1.COLLECTOR.DETAIL._NAME,
+ name: storeState.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.COLLECTOR.DETAIL._NAME : ASSET_INVENTORY_ROUTE_V1.COLLECTOR.DETAIL._NAME,
params: {
collectorId: d.collector_id,
},
@@ -212,7 +213,7 @@ const collectorApiQueryHelper = new ApiQueryHelper()
/* Components */
const routeToCreatePage = () => {
- SpaceRouter.router.push(getProperRouteLocation({ name: ASSET_INVENTORY_ROUTE_V1.COLLECTOR.CREATE._NAME }));
+ router.push({ name: storeState.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.COLLECTOR.CREATE._NAME : ASSET_INVENTORY_ROUTE_V1.COLLECTOR.CREATE._NAME }).catch(() => {});
};
const handleChangeToolbox = (options: ToolboxOptions) => {
if (options.pageStart !== undefined) collectorApiQueryHelper.setPageStart(options.pageStart);
@@ -228,7 +229,7 @@ const handleChangeToolbox = (options: ToolboxOptions) => {
fetchCollectorList();
};
const handleClickListItem = (detailLink) => {
- SpaceRouter.router.push(getProperRouteLocation(detailLink));
+ router.push(detailLink).catch(() => {});
};
const handleClickCollectDataConfirm = () => {
fetchCollectorList();
diff --git a/apps/web/src/services/asset-inventory-v1/components/CollectorMainNoData.vue b/apps/web/src/services/asset-inventory-v1/components/CollectorMainNoData.vue
index 350949dcb4..69e017b88e 100644
--- a/apps/web/src/services/asset-inventory-v1/components/CollectorMainNoData.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/CollectorMainNoData.vue
@@ -3,15 +3,19 @@ import { useRouter } from 'vue-router/composables';
import { PEmpty, PButton } from '@cloudforet/mirinae';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
+import { useAppContextStore } from '@/store/app-context/app-context-store';
+
+import { ADMIN_ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/admin/route-constant';
import { ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/route-constant';
const router = useRouter();
-const { getProperRouteLocation } = useProperRouteLocation();
+const appContextStore = useAppContextStore();
const handleCreate = () => {
- router.push(getProperRouteLocation({ name: ASSET_INVENTORY_ROUTE_V1.COLLECTOR.CREATE._NAME }));
+ router.push({
+ name: appContextStore.getters.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.COLLECTOR.CREATE._NAME : ASSET_INVENTORY_ROUTE_V1.COLLECTOR.CREATE._NAME,
+ }).catch(() => {});
};
diff --git a/apps/web/src/services/asset-inventory-v1/components/CollectorPluginContents.vue b/apps/web/src/services/asset-inventory-v1/components/CollectorPluginContents.vue
index 12d6888608..8af37e5927 100644
--- a/apps/web/src/services/asset-inventory-v1/components/CollectorPluginContents.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/CollectorPluginContents.vue
@@ -37,7 +37,7 @@
{{ state.description }}
(), {
hideLabels: false,
emphasizeName: false,
});
-const { getProperRouteLocation } = useProperRouteLocation();
+
+const userWorkspaceStore = useUserWorkspaceStore();
const router = useRouter();
const state = reactive({
+ currentWorkspaceId: computed(() => userWorkspaceStore.getters.currentWorkspaceId),
icon: computed(() => assetUrlConverter(props.plugin?.tags?.icon ?? '')),
name: computed(() => props.plugin?.name ?? ''),
description: computed(() => props.plugin?.tags?.long_description ?? ''),
@@ -106,7 +109,13 @@ const state = reactive({
const link = props.plugin?.tags?.link ?? '';
if (!link) return undefined;
const resolvedResult = router.resolve(link);
- return resolvedResult.resolved;
+ return {
+ ...resolvedResult.resolved,
+ params: {
+ ...resolvedResult.resolved?.params ?? {},
+ workspaceId: state.currentWorkspaceId,
+ },
+ };
}),
repositoryType: computed(() => props.plugin?.repository_info?.repository_type ?? ''),
repositoryName: computed(() => props.plugin?.repository_info?.name ?? ''),
diff --git a/apps/web/src/services/asset-inventory-v1/components/MetricExplorerDataTable.vue b/apps/web/src/services/asset-inventory-v1/components/MetricExplorerDataTable.vue
index a91fa59437..a1d4de04f7 100644
--- a/apps/web/src/services/asset-inventory-v1/components/MetricExplorerDataTable.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/MetricExplorerDataTable.vue
@@ -22,12 +22,14 @@ import type { AnalyzeResponse } from '@/api-clients/_common/schema/api-verbs/ana
import type { MetricDataAnalyzeParameters } from '@/schema/inventory/metric-data/api-verbs/analyze';
import type { MetricLabelKey } from '@/schema/inventory/metric/type';
+import { useAppContextStore } from '@/store/app-context/app-context-store';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
+
import { FILE_NAME_PREFIX } from '@/lib/excel-export/constant';
import { downloadExcel } from '@/lib/helper/file-download-helper';
import type { ExcelDataField } from '@/lib/helper/file-download-helper/type';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { getReferenceLabel } from '@/common/modules/widgets/_helpers/widget-date-helper';
import { GRANULARITY, SIZE_UNITS } from '@/services/asset-inventory-v1/constants/asset-analysis-constant';
@@ -35,6 +37,7 @@ import {
getAssetAnalysisDataTableDateFields,
getRefinedAssetAnalysisTableData,
} from '@/services/asset-inventory-v1/helpers/asset-analysis-data-table-helper';
+import { ADMIN_ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/admin/route-constant';
import { ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/route-constant';
import { useMetricExplorerPageStore } from '@/services/asset-inventory-v1/stores/metric-explorer-page-store';
import type { MetricDataAnalyzeResult } from '@/services/asset-inventory-v1/types/asset-analysis-type';
@@ -51,6 +54,7 @@ import {
+
const DATE_FORMAT_MAP = {
[GRANULARITY.DAILY]: 'M/D',
[GRANULARITY.MONTHLY]: 'MMM',
@@ -58,12 +62,15 @@ const DATE_FORMAT_MAP = {
const router = useRouter();
const route = useRoute();
-const { getProperRouteLocation } = useProperRouteLocation();
+const appContextStore = useAppContextStore();
+const userWorkspaceStore = useUserWorkspaceStore();
const metricExplorerPageStore = useMetricExplorerPageStore();
const metricExplorerPageState = metricExplorerPageStore.state;
const metricExplorerPageGetters = metricExplorerPageStore.getters;
const allReferenceTypeInfoStore = useAllReferenceTypeInfoStore();
const storeState = reactive({
+ isAdminMode: computed(() => appContextStore.getters.isAdminMode),
+ currentWorkspaceId: computed(() => userWorkspaceStore.getters.currentWorkspaceId),
allReferenceTypeInfo: computed(() => allReferenceTypeInfoStore.getters.allReferenceTypeInfo),
});
const state = reactive({
@@ -225,7 +232,7 @@ const handleClickRow = (item) => {
}
});
- let _routeName = ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE._NAME;
+ let _routeName = storeState.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE._NAME : ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE._NAME;
let _params = {};
const _query: CloudServiceMainPageUrlQuery|CloudServiceDetailPageUrlQuery = {
filters: queryHelper.setFilters(_filters).rawQueryStrings,
@@ -234,18 +241,18 @@ const handleClickRow = (item) => {
if (state.metricResourceType.startsWith('inventory.CloudService:')) {
const [provider, group, name] = state.metricResourceType.replace('inventory.CloudService:', '').split('.');
_params = { provider, group, name };
- _routeName = ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.DETAIL._NAME;
+ _routeName = storeState.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.DETAIL._NAME : ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE.DETAIL._NAME;
if (state.metricAdditionalFilter.length) {
(_query as CloudServiceDetailPageUrlQuery).default_filters = state.metricAdditionalFilter.map((d) => JSON.stringify(d));
}
}
- window.open(router.resolve(getProperRouteLocation({
+ window.open(router.resolve({
name: _routeName,
- params: _params,
+ params: { ..._params, workspaceId: storeState.isAdminMode ? undefined : storeState.currentWorkspaceId },
query: _query,
- })).href, '_blank');
+ }).href, '_blank');
};
watch(
diff --git a/apps/web/src/services/asset-inventory-v1/components/MetricExplorerHeader.vue b/apps/web/src/services/asset-inventory-v1/components/MetricExplorerHeader.vue
index ce292d688f..e8248cfdab 100644
--- a/apps/web/src/services/asset-inventory-v1/components/MetricExplorerHeader.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/MetricExplorerHeader.vue
@@ -33,13 +33,13 @@ import { MENU_ID } from '@/lib/menu/config';
import DeleteModal from '@/common/components/modals/DeleteModal.vue';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { gray } from '@/styles/colors';
import MetricExplorerNameFormModal from '@/services/asset-inventory-v1/components/MetricExplorerNameFormModal.vue';
import MetricExplorerQueryFormSidebar from '@/services/asset-inventory-v1/components/MetricExplorerQueryFormSidebar.vue';
import { NAME_FORM_MODAL_TYPE } from '@/services/asset-inventory-v1/constants/asset-analysis-constant';
+import { ADMIN_ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/admin/route-constant';
import { ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/route-constant';
import { useMetricExplorerPageStore } from '@/services/asset-inventory-v1/stores/metric-explorer-page-store';
import { COST_EXPLORER_ROUTE } from '@/services/cost-explorer/routes/route-constant';
@@ -47,7 +47,6 @@ import { COST_EXPLORER_ROUTE } from '@/services/cost-explorer/routes/route-const
const contextMenuRef = ref(null);
const targetRef = ref(null);
-const { getProperRouteLocation } = useProperRouteLocation();
const metricExplorerPageStore = useMetricExplorerPageStore();
const metricExplorerPageState = metricExplorerPageStore.state;
@@ -175,10 +174,10 @@ const duplicateMetric = async () => {
query_options: metricExplorerPageState.metric.query_options,
});
showSuccessMessage(i18n.t('INVENTORY.METRIC_EXPLORER.ALT_S_DUPLICATE_METRIC'), '');
- await router.replace(getProperRouteLocation({
- name: ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME,
+ await router.replace({
+ name: storeState.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME : ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME,
params: { metricId: duplicatedMetric.metric_id },
- }));
+ }).catch(() => {});
} catch (e) {
ErrorHandler.handleRequestError(e, i18n.t('INVENTORY.METRIC_EXPLORER.ALT_E_DUPLICATE_METRIC'));
} finally {
@@ -194,14 +193,14 @@ const deleteCustomMetric = async () => {
showSuccessMessage(i18n.t('INVENTORY.METRIC_EXPLORER.ALT_S_DELETE_METRIC'), '');
const otherMetricId = metricExplorerPageGetters.metrics[0]?.key;
if (otherMetricId) {
- await router.replace(getProperRouteLocation({
- name: ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME,
+ await router.replace({
+ name: storeState.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME : ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME,
params: { metricId: otherMetricId },
- }));
+ }).catch(() => {});
} else {
- await router.replace(getProperRouteLocation({
- name: ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER._NAME,
- }));
+ await router.replace({
+ name: storeState.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER._NAME : ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER._NAME,
+ }).catch(() => {});
}
} catch (e) {
ErrorHandler.handleRequestError(e, i18n.t('INVENTORY.METRIC_EXPLORER.ALT_E_DELETE_METRIC'));
@@ -214,10 +213,10 @@ const deleteMetricExample = async () => {
});
await metricExplorerPageStore.loadMetricExamples(metricExplorerPageGetters.namespaceId);
showSuccessMessage(i18n.t('INVENTORY.METRIC_EXPLORER.ALT_S_DELETE_METRIC_EXAMPLE'), '');
- await router.replace(getProperRouteLocation({
- name: ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME,
+ await router.replace({
+ name: storeState.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME : ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME,
params: { metricId: state.currentMetricId },
- }));
+ }).catch(() => {});
} catch (e) {
ErrorHandler.handleRequestError(e, i18n.t('INVENTORY.METRIC_EXPLORER.ALT_E_DELETE_METRIC_EXAMPLE'));
}
diff --git a/apps/web/src/services/asset-inventory-v1/components/MetricExplorerLSB.vue b/apps/web/src/services/asset-inventory-v1/components/MetricExplorerLSB.vue
index 236dcd3d47..4d825e965e 100644
--- a/apps/web/src/services/asset-inventory-v1/components/MetricExplorerLSB.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/MetricExplorerLSB.vue
@@ -21,7 +21,6 @@ import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type { MetricReferenceMap, MetricReferenceItem } from '@/store/reference/metric-reference-store';
import type { NamespaceReferenceItem, NamespaceReferenceMap } from '@/store/reference/namespace-reference-store';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { useFavoriteStore } from '@/common/modules/favorites/favorite-button/store/favorite-store';
import type { FavoriteConfig } from '@/common/modules/favorites/favorite-button/type';
import { FAVORITE_TYPE } from '@/common/modules/favorites/favorite-button/type';
@@ -49,7 +48,6 @@ const route = useRoute();
const assetInventorySettingsStore = useAssetInventorySettingsStore();
const allReferenceStore = useAllReferenceStore();
const appContextStore = useAppContextStore();
-const { getProperRouteLocation } = useProperRouteLocation();
const favoriteStore = useFavoriteStore();
const favoriteGetters = favoriteStore.getters;
const gnbStore = useGnbStore();
@@ -99,12 +97,12 @@ const state = reactive({
name: metric.key.startsWith('metric-managed-') ? 'ic_main-filled' : 'ic_sub',
color: gray[500],
},
- to: getProperRouteLocation({
+ to: {
name: ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME,
params: {
metricId: metric.key,
},
- }),
+ },
favoriteOptions: {
type: FAVORITE_TYPE.METRIC,
id: metric.key,
@@ -115,13 +113,13 @@ const state = reactive({
id: example.example_id,
label: example.name,
icon: 'ic_example-filled',
- to: getProperRouteLocation({
+ to: {
name: ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL.EXAMPLE._NAME,
params: {
metricId: example.metric_id,
metricExampleId: example.example_id,
},
- }),
+ },
favoriteOptions: {
type: FAVORITE_TYPE.METRIC_EXAMPLE,
id: example.example_id,
diff --git a/apps/web/src/services/asset-inventory-v1/components/MetricExplorerLSBMetric.vue b/apps/web/src/services/asset-inventory-v1/components/MetricExplorerLSBMetric.vue
index 56694eb7f8..b234f78179 100644
--- a/apps/web/src/services/asset-inventory-v1/components/MetricExplorerLSBMetric.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/MetricExplorerLSBMetric.vue
@@ -11,6 +11,7 @@ import {
} from '@cloudforet/mirinae';
import type { TreeDisplayMap, TreeNode } from '@cloudforet/mirinae/src/data-display/tree/tree-view/type';
+import { useAppContextStore } from '@/store/app-context/app-context-store';
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type {
CloudServiceTypeItem,
@@ -23,11 +24,11 @@ import type { PageAccessMap } from '@/lib/access-control/config';
import type { MenuId } from '@/lib/menu/config';
import { MENU_ID } from '@/lib/menu/config';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { gray } from '@/styles/colors';
import MetricExplorerLSBMetricTree from '@/services/asset-inventory-v1/components/MetricExplorerLSBMetricTree.vue';
+import { ADMIN_ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/admin/route-constant';
import { ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/route-constant';
import { useMetricExplorerPageStore } from '@/services/asset-inventory-v1/stores/metric-explorer-page-store';
import type { NamespaceSubItemType } from '@/services/asset-inventory-v1/types/asset-analysis-type';
@@ -42,13 +43,14 @@ interface Props {
const props = defineProps();
const allReferenceStore = useAllReferenceStore();
+const appContextStore = useAppContextStore();
const metricExplorerPageStore = useMetricExplorerPageStore();
const metricExplorerPageState = metricExplorerPageStore.state;
const userStore = useUserStore();
-const { getProperRouteLocation } = useProperRouteLocation();
const route = useRoute();
const storeState = reactive({
+ isAdminMode: computed(() => appContextStore.getters.isAdminMode),
cloudServiceTypes: computed(() => allReferenceStore.getters.cloudServiceType),
cloudServiceTypeToItemMap: computed(() => {
const res: Record = {};
@@ -72,7 +74,7 @@ const state = reactive({
}),
hasReadWriteAccess: computed(() => storeState.pageAccessPermissionMap[state.selectedMenuId]?.write),
selectedId: computed(() => {
- const routeName = getProperRouteLocation({ name: ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME }).name;
+ const routeName = { name: storeState.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME : ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME }.name;
if (!props.isDetailPage) return undefined;
if (route.name === routeName) return route.params.metricId;
return route.params.metricExampleId;
@@ -91,12 +93,12 @@ const state = reactive({
...metric,
type: 'metric',
is_managed: metric.data.is_managed,
- to: getProperRouteLocation({
- name: ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME,
+ to: {
+ name: storeState.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME : ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME,
params: {
metricId: metric.key,
},
- }),
+ },
},
};
const examples = state.metricExamples.filter((example) => example.metric_id === metric.key);
@@ -109,13 +111,13 @@ const state = reactive({
data: {
...example,
type: 'example',
- to: getProperRouteLocation({
+ to: {
name: ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL.EXAMPLE._NAME,
params: {
metricId: metric.key,
metricExampleId: example.example_id,
},
- }),
+ },
},
})),
};
diff --git a/apps/web/src/services/asset-inventory-v1/components/MetricExplorerNameFormModal.vue b/apps/web/src/services/asset-inventory-v1/components/MetricExplorerNameFormModal.vue
index eec0600cfc..7557faf714 100644
--- a/apps/web/src/services/asset-inventory-v1/components/MetricExplorerNameFormModal.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/MetricExplorerNameFormModal.vue
@@ -22,7 +22,6 @@ import { showSuccessMessage } from '@/lib/helper/notice-alert-helper';
import ErrorHandler from '@/common/composables/error/errorHandler';
import { useFormValidator } from '@/common/composables/form-validator';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { useProxyValue } from '@/common/composables/proxy-state';
import { useGnbStore } from '@/common/modules/navigations/stores/gnb-store';
@@ -45,7 +44,6 @@ const emit = defineEmits<{(e: 'update:visible', visible: boolean): void;
const router = useRouter();
const route = useRoute();
-const { getProperRouteLocation } = useProperRouteLocation();
const gnbStore = useGnbStore();
const metricExplorerPageStore = useMetricExplorerPageStore();
@@ -117,13 +115,13 @@ const createMetricExample = async () => {
state.proxyVisible = false;
await metricExplorerPageStore.loadMetricExamples(metricExplorerPageGetters.namespaceId);
await gnbStore.fetchMetricExample();
- await router.replace(getProperRouteLocation({
+ await router.replace({
name: ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL.EXAMPLE._NAME,
params: {
metricId: metricExample.metric_id,
metricExampleId: metricExample.example_id,
},
- })).catch(() => {});
+ }).catch(() => {});
} catch (e) {
ErrorHandler.handleRequestError(e, i18n.t('INVENTORY.METRIC_EXPLORER.ALT_E_ADD_METRIC_EXAMPLE'));
}
diff --git a/apps/web/src/services/asset-inventory-v1/components/MetricExplorerQueryFormSidebar.vue b/apps/web/src/services/asset-inventory-v1/components/MetricExplorerQueryFormSidebar.vue
index a87c0dd419..51f8bf2090 100644
--- a/apps/web/src/services/asset-inventory-v1/components/MetricExplorerQueryFormSidebar.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/MetricExplorerQueryFormSidebar.vue
@@ -16,24 +16,27 @@ import { METRIC_TYPE } from '@/schema/inventory/metric/constant';
import type { MetricModel } from '@/schema/inventory/metric/model';
import { i18n } from '@/translations';
+import { useAppContextStore } from '@/store/app-context/app-context-store';
+
import { showErrorMessage, showSuccessMessage } from '@/lib/helper/notice-alert-helper';
import DeleteModal from '@/common/components/modals/DeleteModal.vue';
import { useFormValidator } from '@/common/composables/form-validator';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
+import { ADMIN_ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/admin/route-constant';
import { ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/route-constant';
import { useMetricExplorerPageStore } from '@/services/asset-inventory-v1/stores/metric-explorer-page-store';
const router = useRouter();
const route = useRoute();
-const { getProperRouteLocation } = useProperRouteLocation();
+
const metricExplorerPageStore = useMetricExplorerPageStore();
const metricExplorerPageState = metricExplorerPageStore.state;
const metricExplorerPageGetters = metricExplorerPageStore.getters;
-
+const appContextStore = useAppContextStore();
const storeState = reactive({
+ isAdminMode: computed(() => appContextStore.getters.isAdminMode),
metricNameList: computed(() => metricExplorerPageGetters.metrics.map((metric) => metric.name)),
});
@@ -113,12 +116,12 @@ const createCustomMetric = async () => {
showSuccessMessage(i18n.t('INVENTORY.METRIC_EXPLORER.CUSTOM_METRIC.ALT_S_CREATE_METRIC'), '');
metricExplorerPageStore.setShowMetricQueryFormSidebar(false);
await metricExplorerPageStore.loadMetric(state.currentMetricId);
- await router.replace(getProperRouteLocation({
- name: ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME,
+ await router.replace({
+ name: storeState.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME : ASSET_INVENTORY_ROUTE_V1.METRIC_EXPLORER.DETAIL._NAME,
params: {
metricId: createdMetric.metric_id,
},
- })).catch(() => {});
+ }).catch(() => {});
} catch (e) {
showErrorMessage(i18n.t('INVENTORY.METRIC_EXPLORER.CUSTOM_METRIC.ALT_E_CREATE_METRIC'), e);
} finally {
diff --git a/apps/web/src/services/asset-inventory-v1/components/RecentCollectorJobList.vue b/apps/web/src/services/asset-inventory-v1/components/RecentCollectorJobList.vue
index 2faf5898b1..32d033e824 100644
--- a/apps/web/src/services/asset-inventory-v1/components/RecentCollectorJobList.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/RecentCollectorJobList.vue
@@ -10,13 +10,14 @@ import { ACTION_ICON } from '@cloudforet/mirinae/src/navigation/link/type';
import { i18n } from '@/translations';
+import { useAppContextStore } from '@/store/app-context/app-context-store';
import { useUserStore } from '@/store/user/user-store';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import CollectorJobStatusIcon
from '@/services/asset-inventory-v1/components/CollectorJobStatusIcon.vue';
import { JOB_STATE } from '@/services/asset-inventory-v1/constants/collector-constant';
+import { ADMIN_ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/admin/route-constant';
import { ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/route-constant';
import type { CollectorLink } from '@/services/asset-inventory-v1/types/collector-main-page-type';
@@ -32,8 +33,7 @@ interface Props {
fullMode?: boolean;
}
-const { getProperRouteLocation } = useProperRouteLocation();
-
+const appContextStore = useAppContextStore();
const props = withDefaults(defineProps(), {
recentJobs: undefined,
historyLink: undefined,
@@ -41,6 +41,7 @@ const props = withDefaults(defineProps(), {
const userStore = useUserStore();
const state = reactive({
+ isAdminMode: computed(() => appContextStore.getters.isAdminMode),
loading: true,
completedJobs: computed(() => {
if (Array.isArray(props.recentJobs) && props.recentJobs.length > 0) {
@@ -51,6 +52,7 @@ const state = reactive({
}
return undefined;
}),
+ historyJobRouteName: computed(() => (state.isAdminMode ? ADMIN_ASSET_INVENTORY_ROUTE_V1.COLLECTOR.HISTORY.JOB._NAME : ASSET_INVENTORY_ROUTE_V1.COLLECTOR.HISTORY.JOB._NAME)),
});
const handleTooltipContent = (job: MinimalJobInfo) => {
@@ -90,7 +92,7 @@ watch(() => props.recentJobs, () => {
size="sm"
:action-icon="ACTION_ICON.INTERNAL_LINK"
highlight
- :to="getProperRouteLocation(props.historyLink)"
+ :to="props.historyLink"
class="view-all-link"
>
View All
@@ -110,13 +112,16 @@ watch(() => props.recentJobs, () => {
class="collector-job-status-icon-wrapper"
:status="job.status"
:contents="handleTooltipContent(job)"
- :to="getProperRouteLocation({ name: ASSET_INVENTORY_ROUTE_V1.COLLECTOR.HISTORY.JOB._NAME, params: { jobId: job.job_id} })"
+ :to="{
+ name: state.historyJobRouteName,
+ params: { jobId: job.job_id}
+ }"
:style-type="props.fullMode ? 'white' : 'gray'"
/>
diff --git a/apps/web/src/services/asset-inventory-v1/components/SecurityLSB.vue b/apps/web/src/services/asset-inventory-v1/components/SecurityLSB.vue
index f2775be4fd..7c9cd2839f 100644
--- a/apps/web/src/services/asset-inventory-v1/components/SecurityLSB.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/SecurityLSB.vue
@@ -10,7 +10,6 @@ import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import { assetUrlConverter } from '@/lib/helper/asset-helper';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import LSB from '@/common/modules/navigations/lsb/LSB.vue';
import type { LSBItem } from '@/common/modules/navigations/lsb/type';
import { MENU_ITEM_TYPE } from '@/common/modules/navigations/lsb/type';
@@ -23,8 +22,6 @@ import { useCloudServiceDetailPageStore } from '@/services/asset-inventory-v1/st
import { useSecurityPageStore } from '@/services/asset-inventory-v1/stores/security-page-store';
import type { CloudServiceDetailPageParams } from '@/services/asset-inventory-v1/types/cloud-service-detail-page-type';
-const { getProperRouteLocation } = useProperRouteLocation();
-
const allReferenceStore = useAllReferenceStore();
const allReferenceGetters = allReferenceStore.getters;
const gnbStore = useGnbStore();
@@ -57,7 +54,7 @@ const state = reactive({
type: MENU_ITEM_TYPE.ITEM,
label: `[${allReferenceGetters.provider[i.data.provider].label}] ${i.name}`,
id: i.key,
- to: getProperRouteLocation({ name: ASSET_INVENTORY_ROUTE_V1.SECURITY.DETAIL._NAME, params: { group: i.data.group, provider: i.data.provider, name: i.name } }),
+ to: { name: ASSET_INVENTORY_ROUTE_V1.SECURITY.DETAIL._NAME, params: { group: i.data.group, provider: i.data.provider, name: i.name } },
});
});
if (index !== array.length - 1) {
@@ -69,15 +66,15 @@ const state = reactive({
securityNavigation: computed(() => {
if (state.pageParams.name) {
return [
- { name: i18n.t('MENU.ASSET_INVENTORY'), to: getProperRouteLocation({ name: ASSET_INVENTORY_ROUTE_V1._NAME }) },
- { name: i18n.t('MENU.ASSET_INVENTORY_SECURITY'), to: getProperRouteLocation({ name: ASSET_INVENTORY_ROUTE_V1.SECURITY._NAME }) },
+ { name: i18n.t('MENU.ASSET_INVENTORY'), to: { name: ASSET_INVENTORY_ROUTE_V1._NAME } },
+ { name: i18n.t('MENU.ASSET_INVENTORY_SECURITY'), to: { name: ASSET_INVENTORY_ROUTE_V1.SECURITY._NAME } },
{ name: state.pageParams.group || '', data: null },
{ name: `[${allReferenceGetters.provider[state.pageParams.provider || '']?.label}] ${state.pageParams.name || ''}` },
];
}
return [
- { name: i18n.t('MENU.ASSET_INVENTORY'), to: getProperRouteLocation({ name: ASSET_INVENTORY_ROUTE_V1._NAME }) },
- { name: i18n.t('MENU.ASSET_INVENTORY_SECURITY'), to: getProperRouteLocation({ name: ASSET_INVENTORY_ROUTE_V1.SECURITY._NAME }) },
+ { name: i18n.t('MENU.ASSET_INVENTORY'), to: { name: ASSET_INVENTORY_ROUTE_V1._NAME } },
+ { name: i18n.t('MENU.ASSET_INVENTORY_SECURITY'), to: { name: ASSET_INVENTORY_ROUTE_V1.SECURITY._NAME } },
];
}),
});
@@ -85,7 +82,7 @@ const state = reactive({
const routeToFirstCloudServiceType = async () => {
const selectedCloudServiceType = storeState.selectedCloudServiceType;
if (selectedCloudServiceType) {
- await router.replace(getProperRouteLocation({
+ await router.replace({
name: ASSET_INVENTORY_ROUTE_V1.SECURITY.DETAIL._NAME,
params: {
provider: selectedCloudServiceType?.data.provider || '',
@@ -93,7 +90,7 @@ const routeToFirstCloudServiceType = async () => {
name: selectedCloudServiceType?.name || '',
},
query: route.query,
- })).catch(() => {});
+ }).catch(() => {});
}
};
diff --git a/apps/web/src/services/asset-inventory-v1/components/ServiceAccountDeleteModal.vue b/apps/web/src/services/asset-inventory-v1/components/ServiceAccountDeleteModal.vue
index 861f059b09..9e773825f3 100644
--- a/apps/web/src/services/asset-inventory-v1/components/ServiceAccountDeleteModal.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/ServiceAccountDeleteModal.vue
@@ -1,11 +1,11 @@
diff --git a/apps/web/src/services/asset-inventory-v1/components/ServiceAccountProjectDetail.vue b/apps/web/src/services/asset-inventory-v1/components/ServiceAccountProjectDetail.vue
index 281f8ac976..a166eea1fe 100644
--- a/apps/web/src/services/asset-inventory-v1/components/ServiceAccountProjectDetail.vue
+++ b/apps/web/src/services/asset-inventory-v1/components/ServiceAccountProjectDetail.vue
@@ -3,7 +3,7 @@
{{ projectName }}
@@ -26,22 +26,21 @@
diff --git a/apps/web/src/services/cost-explorer/components/BudgetDetailInfo.vue b/apps/web/src/services/cost-explorer/components/BudgetDetailInfo.vue
index 3ace8adf94..49e7805fec 100644
--- a/apps/web/src/services/cost-explorer/components/BudgetDetailInfo.vue
+++ b/apps/web/src/services/cost-explorer/components/BudgetDetailInfo.vue
@@ -11,6 +11,7 @@ import { ACTION_ICON } from '@cloudforet/mirinae/src/navigation/link/type';
import type { BudgetModel } from '@/api-clients/cost-analysis/budget/schema/model';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type { ProjectReferenceMap } from '@/store/reference/project-reference-store';
import type { ProviderReferenceMap } from '@/store/reference/provider-reference-store';
@@ -18,7 +19,6 @@ import type { WorkspaceReferenceMap } from '@/store/reference/workspace-referenc
import { referenceRouter } from '@/lib/reference/referenceRouter';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { gray } from '@/styles/colors';
@@ -29,8 +29,7 @@ import { useBudgetDetailPageStore } from '@/services/cost-explorer/stores/budget
const changeToLabelList = (providerList: string[]): string => providerList.map((provider) => storeState.providers[provider]?.label ?? '').join(', ') || 'All';
const allReferenceStore = useAllReferenceStore();
-const { getProperRouteLocation } = useProperRouteLocation();
-
+const userWorkspaceStore = useUserWorkspaceStore();
const budgetPageStore = useBudgetDetailPageStore();
const budgetPageState = budgetPageStore.$state;
@@ -68,7 +67,10 @@ const state = reactive({
if (state.isProjectTarget) {
return referenceRouter(
state.budgetData?.project_id,
- { resource_type: 'identity.Project' },
+ {
+ resource_type: 'identity.Project',
+ workspace_id: userWorkspaceStore.getters.currentWorkspaceId,
+ },
);
}
// HACK: This is a temporary solution. It should be changed to the proper route.
@@ -142,7 +144,7 @@ watch(() => costTypeRef.value, (costType) => {
:action-icon="ACTION_ICON.INTERNAL_LINK"
new-tab
highlight
- :to="getProperRouteLocation(state.targetLocation)"
+ :to="state.targetLocation"
>
{{ state.targetLabel.name }}
diff --git a/apps/web/src/services/cost-explorer/components/BudgetDetailNotifications.vue b/apps/web/src/services/cost-explorer/components/BudgetDetailNotifications.vue
index e4b861cd3d..7d07b08e39 100644
--- a/apps/web/src/services/cost-explorer/components/BudgetDetailNotifications.vue
+++ b/apps/web/src/services/cost-explorer/components/BudgetDetailNotifications.vue
@@ -8,6 +8,7 @@ import { ACTION_ICON } from '@cloudforet/mirinae/src/navigation/link/type';
import { i18n } from '@/translations';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import { CURRENCY } from '@/store/display/constant';
import type { Currency } from '@/store/display/type';
@@ -16,7 +17,6 @@ import getRandomId from '@/lib/random-id-generator';
import DeleteModal from '@/common/components/modals/DeleteModal.vue';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import BudgetDetailNotificationsChannelTable
from '@/services/cost-explorer/components/BudgetDetailNotificationsChannelTable.vue';
@@ -35,10 +35,10 @@ const props = withDefaults(defineProps(), {
manageDisabled: false,
currency: CURRENCY.USD,
});
-const { getProperRouteLocation } = useProperRouteLocation();
const budgetPageStore = useBudgetDetailPageStore();
const budgetPageState = budgetPageStore.$state;
+const userWorkspaceStore = useUserWorkspaceStore();
const state = reactive({
hasBudgetAlert: computed(() => {
@@ -149,12 +149,13 @@ const handleBudgetNotifications = () => {
new-tab
size="md"
:text="$t('BILLING.COST_MANAGEMENT.BUDGET.DETAIL.SET_NOTIFICATION_CHANNEL')"
- :to="getProperRouteLocation({
+ :to="{
name: PROJECT_ROUTE.DETAIL.TAB.NOTIFICATIONS._NAME,
params: {
+ workspaceId: userWorkspaceStore.getters.currentWorkspaceId,
id: state.budgetTargetId
}
- })"
+ }"
highlight
/>
diff --git a/apps/web/src/services/cost-explorer/components/BudgetDetailSummaryTable.vue b/apps/web/src/services/cost-explorer/components/BudgetDetailSummaryTable.vue
index 5f58ec91de..eb9672d471 100644
--- a/apps/web/src/services/cost-explorer/components/BudgetDetailSummaryTable.vue
+++ b/apps/web/src/services/cost-explorer/components/BudgetDetailSummaryTable.vue
@@ -13,14 +13,16 @@ import type { BudgetModel } from '@/api-clients/cost-analysis/budget/schema/mode
import { i18n } from '@/translations';
+import { useAppContextStore } from '@/store/app-context/app-context-store';
+
import { currencyMoneyFormatter } from '@/lib/helper/currency-helper';
import { arrayToQueryString, objectToQueryString, primitiveToQueryString } from '@/lib/router-query-string';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { GRANULARITY, GROUP_BY } from '@/services/cost-explorer/constants/cost-explorer-constant';
import { DYNAMIC_COST_QUERY_SET_PARAMS } from '@/services/cost-explorer/constants/managed-cost-analysis-query-sets';
import { getStackedChartData } from '@/services/cost-explorer/helpers/cost-explorer-chart-data-helper';
+import { ADMIN_COST_EXPLORER_ROUTE } from '@/services/cost-explorer/routes/admin/route-constant';
import { COST_EXPLORER_ROUTE } from '@/services/cost-explorer/routes/route-constant';
import { useBudgetDetailPageStore } from '@/services/cost-explorer/stores/budget-detail-page-store';
import type { Period } from '@/services/cost-explorer/types/cost-explorer-query-type';
@@ -48,10 +50,9 @@ interface EnrichedBudgetUsageData {
type Providers = BudgetModel['provider_filter']['providers'];
type BudgetTimeUnit = BudgetModel['time_unit'];
-const { getProperRouteLocation } = useProperRouteLocation();
const budgetPageStore = useBudgetDetailPageStore();
const budgetPageState = budgetPageStore.$state;
-
+const appContextStore = useAppContextStore();
const getAccumulatedBudgetUsageData = (budgetUsageData: BudgetUsageModel[], period: Period) => getStackedChartData(budgetUsageData, GRANULARITY.MONTHLY, period);
const getBudgetRatio = (budgetTimeUnit: BudgetTimeUnit, cost: number, totalBudgetLimit: number, monthlyLimit: number) => {
@@ -86,19 +87,19 @@ const getBudgetUsageDataWithRatioAndLink = (accumulatedBudgetData, budgetTimeUni
end: dayjs.utc(d.date).format('YYYY-MM'),
};
const ratio = getBudgetRatio(budgetTimeUnit, d.cost, totalBudgetLimit, d.limit);
- const link = getProperRouteLocation({
- name: COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
+ const link = {
+ name: appContextStore.getters.isAdminMode ? ADMIN_COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME : COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
params: {
dataSourceId: state.budgetData?.data_source_id,
costQuerySetId: DYNAMIC_COST_QUERY_SET_PARAMS,
},
query: {
- granularity: primitiveToQueryString(GRANULARITY.DAILY),
+ granularity: primitiveToQueryString(GRANULARITY.MONTHLY),
group_by: arrayToQueryString([GROUP_BY.PRODUCT]),
period: objectToQueryString(period),
filters: objectToQueryString(getConvertedConsoleFilters({ ...costTypeFilters, ...targetFilters })),
},
- });
+ };
return {
...d, ratio, link,
};
diff --git a/apps/web/src/services/cost-explorer/components/BudgetMainListCard.vue b/apps/web/src/services/cost-explorer/components/BudgetMainListCard.vue
index 35ad0e25ac..d1f6c57854 100644
--- a/apps/web/src/services/cost-explorer/components/BudgetMainListCard.vue
+++ b/apps/web/src/services/cost-explorer/components/BudgetMainListCard.vue
@@ -20,11 +20,11 @@ import type { WorkspaceReferenceMap } from '@/store/reference/workspace-referenc
import { currencyMoneyFormatter } from '@/lib/helper/currency-helper';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { getWorkspaceInfo, workspaceStateFormatter } from '@/services/advanced/composables/refined-table-data';
import { WORKSPACE_STATE } from '@/services/advanced/constants/workspace-constant';
import BudgetMainUsageProgressBar from '@/services/cost-explorer/components/BudgetMainUsageProgressBar.vue';
+import { ADMIN_COST_EXPLORER_ROUTE } from '@/services/cost-explorer/routes/admin/route-constant';
import { COST_EXPLORER_ROUTE } from '@/services/cost-explorer/routes/route-constant';
@@ -37,7 +37,6 @@ const props = withDefaults(defineProps(), {
budgetUsage: () => ({} as BudgetUsageAnalyzeResult),
});
-const { getProperRouteLocation } = useProperRouteLocation();
const allReferenceStore = useAllReferenceStore();
const appContextStore = useAppContextStore();
const userWorkspaceStore = useUserWorkspaceStore();
@@ -51,12 +50,12 @@ const storeState = reactive({
workspaceList: computed(() => workspaceStoreGetters.workspaceList),
});
const state = reactive({
- linkLocation: computed(() => (getProperRouteLocation({
- name: COST_EXPLORER_ROUTE.BUDGET.DETAIL._NAME,
+ linkLocation: computed(() => ({
+ name: storeState.isAdminMode ? ADMIN_COST_EXPLORER_ROUTE.BUDGET.DETAIL._NAME : COST_EXPLORER_ROUTE.BUDGET.DETAIL._NAME,
params: {
budgetId: props.budgetUsage.budget_id,
},
- }))),
+ })),
isProjectTarget: computed(() => props.budgetUsage.resource_group === 'PROJECT'),
targetLabelList: computed(() => {
const targetId = state.isProjectTarget ? props.budgetUsage.project_id : props.budgetUsage.workspace_id;
diff --git a/apps/web/src/services/cost-explorer/components/CostAnalysisDataTable.vue b/apps/web/src/services/cost-explorer/components/CostAnalysisDataTable.vue
index cb35787cd2..2340520352 100644
--- a/apps/web/src/services/cost-explorer/components/CostAnalysisDataTable.vue
+++ b/apps/web/src/services/cost-explorer/components/CostAnalysisDataTable.vue
@@ -30,6 +30,7 @@ import { numberFormatter } from '@cloudforet/utils';
import type { AnalyzeResponse } from '@/api-clients/_common/schema/api-verbs/analyze';
import { useAppContextStore } from '@/store/app-context/app-context-store';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type { ProjectGroupReferenceMap } from '@/store/reference/project-group-reference-store';
import type { ProjectReferenceMap } from '@/store/reference/project-reference-store';
@@ -44,7 +45,7 @@ import type { ExcelDataField } from '@/lib/helper/file-download-helper/type';
import { usageUnitFormatter } from '@/lib/helper/usage-formatter';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
+
import { ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/route-constant';
import {
@@ -78,12 +79,12 @@ type CostAnalyzeRawData = {
};
const appContextStore = useAppContextStore();
+const userWorkspaceStore = useUserWorkspaceStore();
const allReferenceStore = useAllReferenceStore();
const costAnalysisPageStore = useCostAnalysisPageStore();
const costAnalysisPageGetters = costAnalysisPageStore.getters;
const costAnalysisPageState = costAnalysisPageStore.state;
const router = useRouter();
-const { getProperRouteLocation } = useProperRouteLocation();
const getValueSumKey = (dataType: string) => {
@@ -101,6 +102,7 @@ const getValueSumKey = (dataType: string) => {
const storeState = reactive({
isAdminMode: computed(() => appContextStore.getters.isAdminMode),
+ currentWorkspaceId: computed(() => userWorkspaceStore.getters.currentWorkspaceId),
projects: computed(
() => allReferenceStore.getters.project,
),
@@ -405,21 +407,22 @@ const handleClickRowData = (fieldName: string, value: string) => {
let _routeName: string;
let _params = {};
+ if (storeState.isAdminMode) return;
if (fieldName === GROUP_BY.PROJECT) {
_routeName = PROJECT_ROUTE.DETAIL._NAME;
- _params = { id: value };
+ _params = { id: value, workspaceId: storeState.currentWorkspaceId };
}
if (fieldName === GROUP_BY.SERVICE_ACCOUNT) {
_routeName = ASSET_INVENTORY_ROUTE_V1.SERVICE_ACCOUNT.DETAIL._NAME;
- _params = { serviceAccountId: value };
+ _params = { serviceAccountId: value, workspaceId: storeState.currentWorkspaceId };
}
if (!_routeName) return;
- window.open(router.resolve(getProperRouteLocation({
+ window.open(router.resolve({
name: _routeName,
params: _params,
- })).href, '_blank');
+ }).href, '_blank');
};
const handleChange = async (options: any = {}) => {
setApiQueryWithToolboxOptions(analyzeApiQueryHelper, options, {
diff --git a/apps/web/src/services/cost-explorer/components/CostAnalysisHeader.vue b/apps/web/src/services/cost-explorer/components/CostAnalysisHeader.vue
index e5a1e22f5c..9954219439 100644
--- a/apps/web/src/services/cost-explorer/components/CostAnalysisHeader.vue
+++ b/apps/web/src/services/cost-explorer/components/CostAnalysisHeader.vue
@@ -9,7 +9,6 @@ import {
} from '@cloudforet/mirinae';
import type { CostQuerySetDeleteParameters } from '@/api-clients/cost-analysis/cost-query-set/schema/api-verbs/delete';
-import { SpaceRouter } from '@/router';
import { i18n } from '@/translations';
import { useAppContextStore } from '@/store/app-context/app-context-store';
@@ -21,7 +20,6 @@ import { showSuccessMessage } from '@/lib/helper/notice-alert-helper';
import ErrorHandler from '@/common/composables/error/errorHandler';
import { usePageEditableStatus } from '@/common/composables/page-editable-status';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { useFavoriteStore } from '@/common/modules/favorites/favorite-button/store/favorite-store';
import { FAVORITE_TYPE } from '@/common/modules/favorites/favorite-button/type';
import type { FavoriteOptions } from '@/common/modules/favorites/favorite-button/type';
@@ -40,7 +38,6 @@ const CostAnalysisQueryFormModal = () => import('@/services/cost-explorer/compon
const DeleteModal = () => import('@/common/components/modals/DeleteModal.vue');
-const { getProperRouteLocation } = useProperRouteLocation();
const gnbStore = useGnbStore();
const costAnalysisPageStore = useCostAnalysisPageStore();
const costAnalysisPageGetters = costAnalysisPageStore.getters;
@@ -100,13 +97,13 @@ const handleDeleteQueryConfirm = async () => {
await SpaceConnector.clientV2.costAnalysis.costQuerySet.delete({ cost_query_set_id: state.itemIdForDeleteQuery });
await costAnalysisPageStore.listCostQueryList();
showSuccessMessage(i18n.t('BILLING.COST_MANAGEMENT.COST_ANALYSIS.ALT_S_DELETE_QUERY'), '');
- await SpaceRouter.router.push(getProperRouteLocation({
- name: COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
+ await router.push({
+ name: storeState.isAdminMode ? ADMIN_COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME : COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
params: {
dataSourceId: costAnalysisPageGetters.selectedDataSourceId as string,
costQuerySetId: costAnalysisPageGetters.managedCostQuerySetList[0].cost_query_set_id,
},
- }));
+ }).catch(() => {});
const isFavoriteItem = favoriteGetters.costAnalysisItems.find((item) => item.itemId === state.itemIdForDeleteQuery);
if (isFavoriteItem) {
await favoriteStore.deleteFavorite({
diff --git a/apps/web/src/services/cost-explorer/components/CostAnalysisLSB.vue b/apps/web/src/services/cost-explorer/components/CostAnalysisLSB.vue
index 8982241cfb..19eb0876b1 100644
--- a/apps/web/src/services/cost-explorer/components/CostAnalysisLSB.vue
+++ b/apps/web/src/services/cost-explorer/components/CostAnalysisLSB.vue
@@ -18,7 +18,6 @@ import { useUserStore } from '@/store/user/user-store';
import { getCompoundKeyWithManagedCostQuerySetFavoriteKey } from '@/lib/helper/config-data-helper';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { useFavoriteStore } from '@/common/modules/favorites/favorite-button/store/favorite-store';
import { FAVORITE_TYPE } from '@/common/modules/favorites/favorite-button/type';
import type { FavoriteConfig } from '@/common/modules/favorites/favorite-button/type';
@@ -36,6 +35,7 @@ import {
DEFAULT_UNIFIED_COST_CURRENCY, UNIFIED_COST_KEY,
} from '@/services/cost-explorer/constants/cost-explorer-constant';
import { MANAGED_COST_QUERY_SET_ID_LIST } from '@/services/cost-explorer/constants/managed-cost-analysis-query-sets';
+import { ADMIN_COST_EXPLORER_ROUTE } from '@/services/cost-explorer/routes/admin/route-constant';
import { COST_EXPLORER_ROUTE } from '@/services/cost-explorer/routes/route-constant';
import { useCostQuerySetStore } from '@/services/cost-explorer/stores/cost-query-set-store';
@@ -54,8 +54,6 @@ const domainGetters = domainStore.getters;
const router = useRouter();
const route = useRoute();
-const { getProperRouteLocation } = useProperRouteLocation();
-
const appContextStore = useAppContextStore();
const userStore = useUserStore();
@@ -81,13 +79,13 @@ const state = reactive({
name: 'ic_main-filled',
color: gray[500],
},
- to: getProperRouteLocation({
- name: COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
+ to: {
+ name: storeState.isAdminMode ? ADMIN_COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME : COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
params: {
dataSourceId: storeState.isUnifiedCostOn ? UNIFIED_COST_KEY : (costQuerySetState.selectedDataSourceId ?? ''),
costQuerySetId: d.cost_query_set_id,
},
- }),
+ },
favoriteOptions: {
type: FAVORITE_TYPE.COST_ANALYSIS,
id: getCompoundKeyWithManagedCostQuerySetFavoriteKey(d.data_source_id, d.cost_query_set_id),
@@ -98,13 +96,13 @@ const state = reactive({
type: 'item',
id: d.cost_query_set_id,
label: d.name,
- to: getProperRouteLocation({
- name: COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
+ to: {
+ name: storeState.isAdminMode ? ADMIN_COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME : COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
params: {
dataSourceId: storeState.isUnifiedCostOn ? UNIFIED_COST_KEY : (costQuerySetState.selectedDataSourceId ?? ''),
costQuerySetId: d.cost_query_set_id,
},
- }),
+ },
favoriteOptions: {
type: FAVORITE_TYPE.COST_ANALYSIS,
},
@@ -162,24 +160,24 @@ const filterStarredItems = (menuItems: LSBItem[] = []): LSBItem[] => menuItems.f
const handleSelectDataSource = (selected: string) => {
if (!selected) return;
costQuerySetStore.setSelectedDataSourceId(selected);
- router.push(getProperRouteLocation({
- name: COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
+ router.push({
+ name: storeState.isAdminMode ? ADMIN_COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME : COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
params: {
dataSourceId: selected,
costQuerySetId: costQuerySetGetters.managedCostQuerySets[0].cost_query_set_id,
},
- })).catch(() => {});
+ }).catch(() => {});
};
const handleSelectUnifiedCostToggle = (value: boolean) => {
costQuerySetStore.setUnifiedCostOn(value);
- router.push(getProperRouteLocation({
- name: COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
+ router.push({
+ name: storeState.isAdminMode ? ADMIN_COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME : COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
params: {
dataSourceId: value ? UNIFIED_COST_KEY : (costQuerySetState.selectedDataSourceId ?? UNIFIED_COST_KEY),
costQuerySetId: costQuerySetGetters.managedCostQuerySets[0].cost_query_set_id,
},
- })).catch(() => {});
+ }).catch(() => {});
};
(() => {
diff --git a/apps/web/src/services/cost-explorer/components/CostAnalysisQuerySection.vue b/apps/web/src/services/cost-explorer/components/CostAnalysisQuerySection.vue
index f94431d234..6530ebac1f 100644
--- a/apps/web/src/services/cost-explorer/components/CostAnalysisQuerySection.vue
+++ b/apps/web/src/services/cost-explorer/components/CostAnalysisQuerySection.vue
@@ -5,6 +5,7 @@ import {
import {
computed, onMounted, reactive, ref, watch,
} from 'vue';
+import { useRouter } from 'vue-router/composables';
import { SpaceConnector } from '@cloudforet/core-lib/space-connector';
import {
@@ -14,7 +15,6 @@ import {
import type { MenuItem } from '@cloudforet/mirinae/types/controls/context-menu/type';
import type { CostQuerySetUpdateParameters } from '@/api-clients/cost-analysis/cost-query-set/schema/api-verbs/update';
-import { SpaceRouter } from '@/router';
import { i18n } from '@/translations';
import { useAppContextStore } from '@/store/app-context/app-context-store';
@@ -23,7 +23,6 @@ import { showSuccessMessage } from '@/lib/helper/notice-alert-helper';
import ErrorHandler from '@/common/composables/error/errorHandler';
import { usePageEditableStatus } from '@/common/composables/page-editable-status';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import WorkspaceLogoIcon from '@/common/modules/navigations/top-bar/modules/top-bar-header/WorkspaceLogoIcon.vue';
import { getWorkspaceInfo } from '@/services/advanced/composables/refined-table-data';
@@ -35,6 +34,7 @@ import { GROUP_BY } from '@/services/cost-explorer/constants/cost-explorer-const
import {
DYNAMIC_COST_QUERY_SET_PARAMS, MANAGED_COST_QUERY_SET_ID_LIST,
} from '@/services/cost-explorer/constants/managed-cost-analysis-query-sets';
+import { ADMIN_COST_EXPLORER_ROUTE } from '@/services/cost-explorer/routes/admin/route-constant';
import { COST_EXPLORER_ROUTE } from '@/services/cost-explorer/routes/route-constant';
import { useCostAnalysisPageStore } from '@/services/cost-explorer/stores/cost-analysis-page-store';
import type { Granularity } from '@/services/cost-explorer/types/cost-explorer-query-type';
@@ -51,9 +51,9 @@ const rightPartRef = ref(null);
const contextMenuRef = ref(null);
const targetRef = ref(null);
-const { getProperRouteLocation } = useProperRouteLocation();
const { hasReadWriteAccess } = usePageEditableStatus();
const { height: filtersPopperHeight } = useElementSize(filtersPopperRef);
+const router = useRouter();
const storeState = reactive({
isAdminMode: computed(() => appContextStore.getters.isAdminMode),
@@ -134,13 +134,13 @@ const handleClickSaveAsButton = () => {
const handleUpdateQuery = async (updatedQueryId: string) => {
await costAnalysisPageStore.listCostQueryList();
await costAnalysisPageStore.selectQueryId(updatedQueryId);
- await SpaceRouter.router.push(getProperRouteLocation({
- name: COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
+ await router.push({
+ name: storeState.isAdminMode ? ADMIN_COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME : COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
params: {
dataSourceId: costAnalysisPageGetters.selectedDataSourceId as string,
costQuerySetId: updatedQueryId,
},
- }));
+ }).catch(() => {});
};
const handleClickFilter = () => {
state.filtersPopoverVisible = !state.filtersPopoverVisible;
diff --git a/apps/web/src/services/cost-explorer/components/CostExplorerLSBRelocateDashboardModal.vue b/apps/web/src/services/cost-explorer/components/CostExplorerLSBRelocateDashboardModal.vue
index f64aafbb7e..e1726122e1 100644
--- a/apps/web/src/services/cost-explorer/components/CostExplorerLSBRelocateDashboardModal.vue
+++ b/apps/web/src/services/cost-explorer/components/CostExplorerLSBRelocateDashboardModal.vue
@@ -5,11 +5,13 @@ import { QueryHelper } from '@cloudforet/core-lib/query';
import { PButton, PDivider } from '@cloudforet/mirinae';
+import { useAppContextStore } from '@/store/app-context/app-context-store';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import { useUserStore } from '@/store/user/user-store';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { useCostExplorerSettingsStore } from '@/services/cost-explorer/stores/cost-explorer-settings-store';
+import { ADMIN_DASHBOARDS_ROUTE } from '@/services/dashboards/routes/admin/route-constant';
import { DASHBOARDS_ROUTE } from '@/services/dashboards/routes/route-constant';
interface Props {
@@ -20,7 +22,8 @@ const router = useRouter();
withDefaults(defineProps(), {
visible: false,
});
-const { getProperRouteLocation } = useProperRouteLocation();
+const appContextStore = useAppContextStore();
+const userWorkspaceStore = useUserWorkspaceStore();
const userStore = useUserStore();
const costExplorerSettingsStore = useCostExplorerSettingsStore();
const costExplorerSettingsState = costExplorerSettingsStore.$state;
@@ -44,12 +47,18 @@ const handleRouteToDashboard = () => {
v: ['Cost'],
o: '=',
}]).rawQueryStrings;
- const routeData = router.resolve(getProperRouteLocation({
- name: DASHBOARDS_ROUTE._NAME,
+ const dashboardRouteName = appContextStore.getters.isAdminMode
+ ? ADMIN_DASHBOARDS_ROUTE._NAME
+ : DASHBOARDS_ROUTE._NAME;
+ const routeData = router.resolve({
+ name: dashboardRouteName,
+ params: {
+ workspaceId: userWorkspaceStore.getters.currentWorkspaceId,
+ },
query: {
filters: dashboardQuery,
},
- }));
+ });
window.open(routeData.href, '_blank');
};
diff --git a/apps/web/src/services/dashboards/DashboardsLSB.vue b/apps/web/src/services/dashboards/DashboardsLSB.vue
index 4453617b8d..bff1f8120e 100644
--- a/apps/web/src/services/dashboards/DashboardsLSB.vue
+++ b/apps/web/src/services/dashboards/DashboardsLSB.vue
@@ -19,7 +19,6 @@ import { useUserStore } from '@/store/user/user-store';
import { MENU_ID } from '@/lib/menu/config';
import { usePageEditableStatus } from '@/common/composables/page-editable-status';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { useFavoriteStore } from '@/common/modules/favorites/favorite-button/store/favorite-store';
import { FAVORITE_TYPE } from '@/common/modules/favorites/favorite-button/type';
import type { FavoriteConfig } from '@/common/modules/favorites/favorite-button/type';
@@ -34,6 +33,7 @@ import { gray } from '@/styles/colors';
import DashboardLSBTree from '@/services/dashboards/components/dashboard-main/DashboardLSBTree.vue';
import { useDashboardQuery } from '@/services/dashboards/composables/use-dashboard-query';
+import { ADMIN_DASHBOARDS_ROUTE } from '@/services/dashboards/routes/admin/route-constant';
import { DASHBOARDS_ROUTE } from '@/services/dashboards/routes/route-constant';
const appContextStore = useAppContextStore();
@@ -41,7 +41,6 @@ const favoriteStore = useFavoriteStore();
const favoriteGetters = favoriteStore.getters;
const userStore = useUserStore();
-const { getProperRouteLocation } = useProperRouteLocation();
const { hasReadWriteAccess } = usePageEditableStatus();
const router = useRouter();
@@ -95,25 +94,30 @@ const state = reactive({
const _private = privateDashboardList.value?.filter((d) => d.version === '1.0') || [];
return [..._public, ..._private];
}),
- deprecatedMenuSet: computed(() => state.deprecatedDashboardItems.map((d) => ({
- type: MENU_ITEM_TYPE.ITEM,
- id: d.dashboard_id,
- label: d.name,
- to: getProperRouteLocation({
- name: DASHBOARDS_ROUTE.DETAIL._NAME,
- params: {
- dashboardId: d.dashboard_id,
- },
- }),
- icon: d.dashboard_id.startsWith('private') ? {
- name: 'ic_lock-filled',
- color: gray[500],
- } : undefined,
- favoriteOptions: {
- type: FAVORITE_TYPE.DASHBOARD,
+ deprecatedMenuSet: computed(() => state.deprecatedDashboardItems.map((d) => {
+ const dashboardDetailRouteName = storeState.isAdminMode
+ ? ADMIN_DASHBOARDS_ROUTE.DETAIL._NAME
+ : DASHBOARDS_ROUTE.DETAIL._NAME;
+ return {
+ type: MENU_ITEM_TYPE.ITEM,
id: d.dashboard_id,
- },
- }))),
+ label: d.name,
+ to: {
+ name: dashboardDetailRouteName,
+ params: {
+ dashboardId: d.dashboard_id,
+ },
+ },
+ icon: d.dashboard_id.startsWith('private') ? {
+ name: 'ic_lock-filled',
+ color: gray[500],
+ } : undefined,
+ favoriteOptions: {
+ type: FAVORITE_TYPE.DASHBOARD,
+ id: d.dashboard_id,
+ },
+ };
+ })),
adminMenu: computed(() => ({
type: MENU_ITEM_TYPE.SLOT,
label: i18n.t('DASHBOARDS.ALL_DASHBOARDS.ADMIN'),
@@ -141,7 +145,7 @@ const state = reactive({
type: MENU_ITEM_TYPE.SLOT,
label: i18n.t('DASHBOARDS.ALL_DASHBOARDS.VIEW_ALL'),
id: MENU_ID.DASHBOARDS,
- to: getProperRouteLocation({ name: DASHBOARDS_ROUTE._NAME }),
+ to: { name: storeState.isAdminMode ? ADMIN_DASHBOARDS_ROUTE._NAME : DASHBOARDS_ROUTE._NAME },
hideFavorite: true,
icon: 'ic_dots-4-square',
},
@@ -184,17 +188,22 @@ const state = reactive({
/* Util */
-const getDashboardMenuSet = (dashboardList: (PublicDashboardModel|PrivateDashboardModel)[]) => dashboardList?.map((d) => ({
- type: MENU_ITEM_TYPE.ITEM,
- id: d.dashboard_id,
- label: d.name,
- to: getProperRouteLocation({
- name: DASHBOARDS_ROUTE.DETAIL._NAME,
- params: {
- dashboardId: d.dashboard_id,
+const getDashboardMenuSet = (dashboardList: (PublicDashboardModel|PrivateDashboardModel)[]) => dashboardList?.map((d) => {
+ const dashboardDetailRouteName = storeState.isAdminMode
+ ? ADMIN_DASHBOARDS_ROUTE.DETAIL._NAME
+ : DASHBOARDS_ROUTE.DETAIL._NAME;
+ return {
+ type: MENU_ITEM_TYPE.ITEM,
+ id: d.dashboard_id,
+ label: d.name,
+ to: {
+ name: dashboardDetailRouteName,
+ params: {
+ dashboardId: d.dashboard_id,
+ },
},
- }),
-})) || [];
+ };
+}) || [];
const filterStarredItems = (menuItems: LSBMenu[] = []): LSBMenu[] => {
const result = [] as LSBMenu[];
menuItems.forEach((d) => {
@@ -218,11 +227,12 @@ const filterStarredItems = (menuItems: LSBMenu[] = []): LSBMenu[] => {
/* Event */
const handleClickAddButton = () => {
- router.push(getProperRouteLocation({ name: DASHBOARDS_ROUTE.CREATE._NAME }));
+ const dashboardCreateRouteName = storeState.isAdminMode
+ ? ADMIN_DASHBOARDS_ROUTE.CREATE._NAME
+ : DASHBOARDS_ROUTE.CREATE._NAME;
+ router.push({ name: dashboardCreateRouteName }).catch(() => {});
};
-// const { callApiWithGrantGuard } = useGrantScopeGuard(['WORKSPACE'], loadDashboard);
-// callApiWithGrantGuard();
diff --git a/apps/web/src/services/dashboards/components/DashboardDeleteModal.vue b/apps/web/src/services/dashboards/components/DashboardDeleteModal.vue
index cedc40216c..d91c83573e 100644
--- a/apps/web/src/services/dashboards/components/DashboardDeleteModal.vue
+++ b/apps/web/src/services/dashboards/components/DashboardDeleteModal.vue
@@ -1,18 +1,18 @@
diff --git a/apps/web/src/services/ops-flow/components/BoardLSB.vue b/apps/web/src/services/ops-flow/components/BoardLSB.vue
index 17c4acf687..52b4dcbfd3 100644
--- a/apps/web/src/services/ops-flow/components/BoardLSB.vue
+++ b/apps/web/src/services/ops-flow/components/BoardLSB.vue
@@ -1,7 +1,6 @@
diff --git a/apps/web/src/services/project/components/ProjectDetailTabHeader.vue b/apps/web/src/services/project/components/ProjectDetailTabHeader.vue
index 65dd0222b1..3029aaa538 100644
--- a/apps/web/src/services/project/components/ProjectDetailTabHeader.vue
+++ b/apps/web/src/services/project/components/ProjectDetailTabHeader.vue
@@ -33,6 +33,7 @@ import type { WebhookModel } from '@/schema/monitoring/webhook/model';
import { i18n } from '@/translations';
import { useAppContextStore } from '@/store/app-context/app-context-store';
+import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store';
import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type { CostDataSourceReferenceMap } from '@/store/reference/cost-data-source-reference-store';
import type { UserReferenceMap } from '@/store/reference/user-reference-store';
@@ -42,7 +43,6 @@ import { showSuccessMessage } from '@/lib/helper/notice-alert-helper';
import { arrayToQueryString } from '@/lib/router-query-string';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { useGnbStore } from '@/common/modules/navigations/stores/gnb-store';
import { gray, peacock } from '@/styles/colors';
@@ -77,13 +77,13 @@ interface Props {
const props = defineProps();
// const route = useRoute();
const router = useRouter();
-const { getProperRouteLocation } = useProperRouteLocation();
const projectDetailPageStore = useProjectDetailPageStore();
const projectDetailPageState = projectDetailPageStore.state;
const projectDetailPageGetters = projectDetailPageStore.getters;
const projectTreeStore = useProjectTreeStore();
+const userWorkspaceStore = useUserWorkspaceStore();
const allReferenceStore = useAllReferenceStore();
const appContextStore = useAppContextStore();
const gnbStore = useGnbStore();
@@ -121,29 +121,36 @@ const state = reactive({
viewInItems: computed(() => ([
{
label: i18n.t('PROJECT.DETAIL.CLOUD_SERVICE'),
- to: getProperRouteLocation({
+ to: {
name: ASSET_INVENTORY_ROUTE_V1.CLOUD_SERVICE._NAME,
+ params: {
+ workspaceId: userWorkspaceStore.getters.currentWorkspaceId,
+ },
query: {
project: [props.id],
},
- }),
+ },
},
{
label: i18n.t('PROJECT.DETAIL.SERVICE_ACCOUNT'),
- to: getProperRouteLocation({
+ to: {
name: ASSET_INVENTORY_ROUTE_V1.SERVICE_ACCOUNT._NAME,
+ params: {
+ workspaceId: userWorkspaceStore.getters.currentWorkspaceId,
+ },
query: {
filters: queryHelper.setFilters([
{ k: 'project_id', v: [props.id], o: '' },
]).rawQueryStrings,
},
- }),
+ },
},
{
label: i18n.t('PROJECT.DETAIL.COST_ANALYSIS'),
- to: getProperRouteLocation({
+ to: {
name: COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
params: {
+ workspaceId: userWorkspaceStore.getters.currentWorkspaceId,
dataSourceId: Object.keys(storeState.costDataSource)?.[0],
costQuerySetId: DYNAMIC_COST_QUERY_SET_PARAMS,
},
@@ -152,7 +159,7 @@ const state = reactive({
{ k: 'project_id', v: [props.id], o: 'in' },
]),
},
- }),
+ },
},
])),
currentProject: computed(() => projectDetailPageState.currentProject),
@@ -200,10 +207,10 @@ const handleSelectItem = (selected: MenuItem) => {
const handleClickWebhook = () => {
if (!props.id) return;
if (!webhooksState.alertActivated) {
- router.push(getProperRouteLocation({ name: PROJECT_ROUTE.DETAIL.TAB.ALERT._NAME, params: { id: props.id } }));
+ router.push({ name: PROJECT_ROUTE.DETAIL.TAB.ALERT._NAME, params: { id: props.id } }).catch(() => {});
return;
}
- router.push(getProperRouteLocation({ name: PROJECT_ROUTE.DETAIL.TAB.ALERT._NAME, params: { id: props.id }, query: { tab: 'webhook' } }));
+ router.push({ name: PROJECT_ROUTE.DETAIL.TAB.ALERT._NAME, params: { id: props.id }, query: { tab: 'webhook' } }).catch(() => {});
};
const handleOpenMemberModal = () => {
memberState.memberModalVisible = true;
diff --git a/apps/web/src/services/project/components/ProjectMainProjectCard.vue b/apps/web/src/services/project/components/ProjectMainProjectCard.vue
index 3dc96192ac..1d6b2af091 100644
--- a/apps/web/src/services/project/components/ProjectMainProjectCard.vue
+++ b/apps/web/src/services/project/components/ProjectMainProjectCard.vue
@@ -14,7 +14,6 @@ import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type { ProjectGroupReferenceMap } from '@/store/reference/project-group-reference-store';
import type { ProviderItem, ProviderReferenceMap } from '@/store/reference/provider-reference-store';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import FavoriteButton from '@/common/modules/favorites/favorite-button/FavoriteButton.vue';
import { useFavoriteStore } from '@/common/modules/favorites/favorite-button/store/favorite-store';
import { FAVORITE_TYPE } from '@/common/modules/favorites/favorite-button/type';
@@ -44,7 +43,6 @@ const projectPageStore = useProjectPageStore();
const router = useRouter();
-const { getProperRouteLocation } = useProperRouteLocation();
const storeState = reactive({
providers: computed(() => allReferenceStore.getters.provider),
@@ -85,12 +83,12 @@ const state = reactive({
const getProvider = (name: string): ProviderItem => storeState.providers[name] || {};
const handleSelectProject = () => {
- router.push(getProperRouteLocation({
+ router.push({
name: PROJECT_ROUTE.DETAIL.TAB.SUMMARY._NAME,
params: {
id: props.item.id as string,
},
- }));
+ }).catch(() => {});
};
const handleSelectItem = (selected: MenuItem) => {
diff --git a/apps/web/src/services/project/components/ProjectMainProjectGroupCard.vue b/apps/web/src/services/project/components/ProjectMainProjectGroupCard.vue
index 886ab5c73a..037f465d24 100644
--- a/apps/web/src/services/project/components/ProjectMainProjectGroupCard.vue
+++ b/apps/web/src/services/project/components/ProjectMainProjectGroupCard.vue
@@ -8,7 +8,6 @@ import type { MenuItem } from '@cloudforet/mirinae/types/controls/context-menu/t
import { i18n } from '@/translations';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import FavoriteButton from '@/common/modules/favorites/favorite-button/FavoriteButton.vue';
import { useFavoriteStore } from '@/common/modules/favorites/favorite-button/store/favorite-store';
import { FAVORITE_TYPE } from '@/common/modules/favorites/favorite-button/type';
@@ -26,7 +25,6 @@ interface Props {
const props = defineProps();
const router = useRouter();
-const { getProperRouteLocation } = useProperRouteLocation();
const favoriteStore = useFavoriteStore();
const favoriteGetters = favoriteStore.getters;
@@ -63,12 +61,12 @@ const state = reactive({
});
const handleSelectProjectGroup = () => {
- router.push(getProperRouteLocation({
+ router.push({
name: PROJECT_ROUTE._NAME,
params: {
projectGroupId: props.item.id as string,
},
- }));
+ }).catch(() => {});
};
const handleSelectItem = (selected: MenuItem) => {
diff --git a/apps/web/src/services/project/components/ProjectMainTree.vue b/apps/web/src/services/project/components/ProjectMainTree.vue
index 5dcc668aa6..4c5447465a 100644
--- a/apps/web/src/services/project/components/ProjectMainTree.vue
+++ b/apps/web/src/services/project/components/ProjectMainTree.vue
@@ -15,7 +15,6 @@ import { useAllReferenceStore } from '@/store/reference/all-reference-store';
import type { ProjectGroupReferenceMap } from '@/store/reference/project-group-reference-store';
import type { ProjectReferenceMap } from '@/store/reference/project-reference-store';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import FavoriteButton from '@/common/modules/favorites/favorite-button/FavoriteButton.vue';
import { FAVORITE_TYPE } from '@/common/modules/favorites/favorite-button/type';
import { useGnbStore } from '@/common/modules/navigations/stores/gnb-store';
@@ -38,7 +37,6 @@ const route = useRoute();
const gnbStore = useGnbStore();
const allReferenceStore = useAllReferenceStore();
-const { getProperRouteLocation } = useProperRouteLocation();
const projectTreeStore = useProjectTreeStore();
const projectTreeState = projectTreeStore.state;
@@ -75,12 +73,12 @@ const state = reactive({
type: 'PROJECT_GROUP',
id: key,
parentGroupId: projectGroup.data.parentGroupInfo?.id,
- to: getProperRouteLocation({
+ to: {
name: PROJECT_ROUTE._NAME,
params: {
projectGroupId: key,
},
- }),
+ },
},
children: [],
};
@@ -95,12 +93,12 @@ const state = reactive({
type: 'PROJECT',
id: key,
parentGroupId: project.data.groupInfo?.id,
- to: getProperRouteLocation({
+ to: {
name: PROJECT_ROUTE.DETAIL.TAB.SUMMARY._NAME,
params: {
id: key,
},
- }),
+ },
},
};
});
diff --git a/apps/web/src/services/project/components/ProjectSummaryPersonalHealthDashboardWidget.vue b/apps/web/src/services/project/components/ProjectSummaryPersonalHealthDashboardWidget.vue
index 49e2ef9985..d8f545beca 100644
--- a/apps/web/src/services/project/components/ProjectSummaryPersonalHealthDashboardWidget.vue
+++ b/apps/web/src/services/project/components/ProjectSummaryPersonalHealthDashboardWidget.vue
@@ -28,7 +28,6 @@ import { referenceRouter } from '@/lib/reference/referenceRouter';
import WidgetLayout from '@/common/components/layouts/WidgetLayout.vue';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import { ASSET_INVENTORY_ROUTE_V1 } from '@/services/asset-inventory-v1/routes/route-constant';
@@ -51,7 +50,6 @@ const props = withDefaults(defineProps(), {
});
const allReferenceStore = useAllReferenceStore();
const userStore = useUserStore();
-const { getProperRouteLocation } = useProperRouteLocation();
const getEventsApiQuery = new ApiQueryHelper();
const queryHelper = new QueryHelper();
const userWorkspaceStore = useUserWorkspaceStore();
@@ -175,7 +173,10 @@ const getEvents = async () => {
return {
event: {
name: d.event_title,
- to: getProperRouteLocation(referenceRouter(d.resource_id, { resource_type: 'inventory.CloudService' })),
+ to: referenceRouter(d.resource_id, {
+ resource_type: 'inventory.CloudService',
+ workspace_id: storeState.currentWorkspaceId,
+ }),
},
region_code: d.region_code,
start_time: startTime,
@@ -279,7 +280,10 @@ watch(() => tabState.activeTab, () => {
diff --git a/apps/web/src/services/project/pages/ProjectDashboardPage.vue b/apps/web/src/services/project/pages/ProjectDashboardPage.vue
index 893c18e621..ee64ac09e5 100644
--- a/apps/web/src/services/project/pages/ProjectDashboardPage.vue
+++ b/apps/web/src/services/project/pages/ProjectDashboardPage.vue
@@ -4,14 +4,12 @@ import {
onUnmounted,
ref, watch,
} from 'vue';
-import { useRoute } from 'vue-router/composables';
+import { useRoute, useRouter } from 'vue-router/composables';
import { PSkeleton } from '@cloudforet/mirinae';
-import { SpaceRouter } from '@/router';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import DashboardLabelsButton from '@/services/dashboards/components/dashboard-detail/DashboardLabelsButton.vue';
import DashboardRefreshDropdown from '@/services/dashboards/components/dashboard-detail/DashboardRefreshDropdown.vue';
@@ -32,12 +30,12 @@ interface Props {
dashboardId: string;
}
const props = defineProps();
-const { getProperRouteLocation } = useProperRouteLocation();
const dashboardDetailStore = useDashboardDetailInfoStore();
const dashboardDetailState = dashboardDetailStore.state;
const widgetContainerRef = ref(null);
const route = useRoute();
+const router = useRouter();
/* Query */
const {
@@ -74,7 +72,7 @@ watch(widgetList, (_widgetList) => {
watch(isError, (error) => {
if (error) {
ErrorHandler.handleError(error);
- SpaceRouter.router.push(getProperRouteLocation({ name: PROJECT_ROUTE.DETAIL._NAME }));
+ router.push({ name: PROJECT_ROUTE.DETAIL._NAME });
}
});
diff --git a/apps/web/src/services/project/tree/type.ts b/apps/web/src/services/project/tree/type.ts
index db298847a2..ebfccbb339 100644
--- a/apps/web/src/services/project/tree/type.ts
+++ b/apps/web/src/services/project/tree/type.ts
@@ -1,3 +1,5 @@
+import type { Location } from 'vue-router/types/router';
+
export interface TreeNode {
id: string;
depth: number;
diff --git a/apps/web/src/services/workspace-home/components/CostSummary.vue b/apps/web/src/services/workspace-home/components/CostSummary.vue
index 23f8707456..ff9f0a30b3 100644
--- a/apps/web/src/services/workspace-home/components/CostSummary.vue
+++ b/apps/web/src/services/workspace-home/components/CostSummary.vue
@@ -30,7 +30,6 @@ import { currencyMoneyFormatter } from '@/lib/helper/currency-helper';
import { MENU_ID } from '@/lib/menu/config';
import ErrorHandler from '@/common/composables/error/errorHandler';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import ProjectSelectDropdown from '@/common/modules/project/ProjectSelectDropdown.vue';
import { GRANULARITY } from '@/services/cost-explorer/constants/cost-explorer-constant';
@@ -45,7 +44,6 @@ import { useWorkspaceHomePageStore } from '@/services/workspace-home/store/works
import type { EmptyData } from '@/services/workspace-home/types/workspace-home-type';
-const { getProperRouteLocation } = useProperRouteLocation();
const workspaceHomePageStore = useWorkspaceHomePageStore();
const workspaceHomePageState = workspaceHomePageStore.state;
const allReferenceStore = useAllReferenceStore();
@@ -261,7 +259,7 @@ watch(() => storeState.costReportConfig, async (costReportConfig) => {
diff --git a/apps/web/src/services/workspace-home/components/UserConfigsItem.vue b/apps/web/src/services/workspace-home/components/UserConfigsItem.vue
index b807729394..830ad6bf23 100644
--- a/apps/web/src/services/workspace-home/components/UserConfigsItem.vue
+++ b/apps/web/src/services/workspace-home/components/UserConfigsItem.vue
@@ -10,7 +10,6 @@ import type { MenuInfo } from '@/lib/menu/config';
import { MENU_INFO_MAP } from '@/lib/menu/menu-info';
import { referenceRouter } from '@/lib/reference/referenceRouter';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import FavoriteButton from '@/common/modules/favorites/favorite-button/FavoriteButton.vue';
import { FAVORITE_TYPE } from '@/common/modules/favorites/favorite-button/type';
@@ -32,7 +31,6 @@ const props = withDefaults(defineProps(), {
const workspaceHomePageStore = useWorkspaceHomePageStore();
-const { getProperRouteLocation } = useProperRouteLocation();
const router = useRouter();
@@ -58,12 +56,12 @@ const handleClickItem = () => {
if (!props.item) return;
const itemName = props.item.name as string;
if (props.item.itemType === FAVORITE_TYPE.DASHBOARD) {
- router.push(getProperRouteLocation({
+ router.push({
name: DASHBOARDS_ROUTE.DETAIL._NAME,
params: {
dashboardId: itemName,
},
- }));
+ }).catch(() => {});
return;
}
if (props.item.itemType === FAVORITE_TYPE.PROJECT) {
@@ -76,39 +74,39 @@ const handleClickItem = () => {
}
if (props.item.itemType === FAVORITE_TYPE.COST_ANALYSIS) {
const parsedKeys = getParsedKeysWithManagedCostQueryFavoriteKey(itemName);
- router.push(getProperRouteLocation({
+ router.push({
name: COST_EXPLORER_ROUTE.COST_ANALYSIS.QUERY_SET._NAME,
params: {
dataSourceId: props.item.dataSourceId,
costQuerySetId: parsedKeys ? parsedKeys[1] : itemName,
},
- }));
+ }).catch(() => {});
return;
}
if (props.item.itemType === FAVORITE_TYPE.SECURITY) {
const itemInfo: string[] = itemName.split('.');
- router.push(getProperRouteLocation({
+ router.push({
name: ASSET_INVENTORY_ROUTE_V1.SECURITY.DETAIL._NAME,
params: {
provider: itemInfo[0],
group: itemInfo[1],
name: props.item.label as string,
},
- }));
+ }).catch(() => {});
return;
}
if (props.item.itemType === FAVORITE_TYPE.SERVICE) {
- router.push(getProperRouteLocation({
+ router.push({
name: ALERT_MANAGER_ROUTE.SERVICE.DETAIL._NAME,
params: {
serviceId: props.item.itemId,
},
- }));
+ }).catch(() => {});
return;
}
const menuInfo: MenuInfo = MENU_INFO_MAP[itemName];
if (menuInfo && router.currentRoute.name !== itemName) {
- router.push(getProperRouteLocation({ name: menuInfo.routeName }));
+ router.push({ name: menuInfo.routeName }).catch(() => {});
}
};
diff --git a/apps/web/src/services/workspace-home/components/WorkspaceInfo.vue b/apps/web/src/services/workspace-home/components/WorkspaceInfo.vue
index cc0e5776ae..9004ad094d 100644
--- a/apps/web/src/services/workspace-home/components/WorkspaceInfo.vue
+++ b/apps/web/src/services/workspace-home/components/WorkspaceInfo.vue
@@ -20,7 +20,6 @@ import { useUserStore } from '@/store/user/user-store';
import type { PageAccessMap } from '@/lib/access-control/config';
import { MENU_ID } from '@/lib/menu/config';
-import { useProperRouteLocation } from '@/common/composables/proper-route-location';
import FavoriteButton from '@/common/modules/favorites/favorite-button/FavoriteButton.vue';
import { FAVORITE_TYPE } from '@/common/modules/favorites/favorite-button/type';
import WorkspaceLogoIcon from '@/common/modules/navigations/top-bar/modules/top-bar-header/WorkspaceLogoIcon.vue';
@@ -56,7 +55,6 @@ const userStore = useUserStore();
const router = useRouter();
-const { getProperRouteLocation } = useProperRouteLocation();
const storeState = reactive({
currentWorkspace: computed(() => userWorkspaceGetters.currentWorkspace),
@@ -99,7 +97,7 @@ const actionWorkspace = (type: string, workspaceId: string) => {
});
};
const routerToCreateApp = (isOpenModal: boolean) => {
- router.push(getProperRouteLocation({ name: IAM_ROUTE.APP._NAME }));
+ router.push({ name: IAM_ROUTE.APP._NAME }).catch(() => {});
if (isOpenModal) {
appPageStore.$patch((_state) => {
_state.modal.type = APP_DROPDOWN_MODAL_TYPE.CREATE;
@@ -110,7 +108,7 @@ const routerToCreateApp = (isOpenModal: boolean) => {
}
};
const routerToWorkspaceUser = (isOpenModal: boolean) => {
- router.push(getProperRouteLocation({ name: IAM_ROUTE.USER._NAME }));
+ router.push({ name: IAM_ROUTE.USER._NAME }).catch(() => {});
if (isOpenModal) {
userPageStore.$patch((_state) => {
_state.state.modal.type = USER_MODAL_TYPE.INVITE;