Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
7ec48dc
refactor: refactor global-config codes (#5792)
skdud4659 Apr 22, 2025
1bdd598
chore: add missed api endpoint (#5793)
skdud4659 Apr 22, 2025
63aacfa
refactor: apply merged config to service-api (#5798)
skdud4659 Apr 22, 2025
573b8be
feat(global-store): separate global store concern
piggggggggy Apr 22, 2025
691c036
refactor(user-store): remove authorization concern from user-store
piggggggggy Apr 23, 2025
db213eb
feat(authorization): create authorization store
piggggggggy Apr 23, 2025
fb9b628
refactor(display-store): remove menu concern from display-store
piggggggggy Apr 23, 2025
6e56c63
feat: apply resource link parameter
skdud4659 Apr 23, 2025
b450113
refactor(global-config-schema-store): remove menu concern from gcs-store
piggggggggy Apr 23, 2025
d1baf58
chore: refactor menu-store
piggggggggy Apr 23, 2025
42e7e2e
chore: apply changed store
piggggggggy Apr 23, 2025
878a70a
feat(all-menu): create all menu list composable (from display-store)
piggggggggy Apr 23, 2025
da51df9
chore: apply all menu list composable
piggggggggy Apr 23, 2025
dbeb94a
chore: apply authorization store
piggggggggy Apr 23, 2025
05d3ea2
chore: refactor and apply ui affects composable
piggggggggy Apr 23, 2025
17bf453
fix(router): refactor grant with router
piggggggggy Apr 23, 2025
987397d
refactor(route-helper): refactor and apply route-helper
piggggggggy Apr 23, 2025
65c3713
chore: small fix
piggggggggy Apr 23, 2025
13b2821
chore: refactor @ts-nocheck
piggggggggy Apr 23, 2025
9d8c7c7
chore: small fix
piggggggggy Apr 23, 2025
c0af31a
chore: fix type error
piggggggggy Apr 23, 2025
6034d19
chore: small fix
piggggggggy Apr 23, 2025
2ab31a9
chore: add defensive code
piggggggggy Apr 23, 2025
4b60adf
Merge pull request #5796 from piggggggggy/store-separation
piggggggggy Apr 23, 2025
13ed073
chore: remove unused store and vars
piggggggggy Apr 23, 2025
58b26ce
Merge pull request #5813 from piggggggggy/refactor-store
piggggggggy Apr 23, 2025
e448dec
chore: merge master into develop after 2.0.dev355 version tagging
admin-cloudforet Apr 23, 2025
4053f6c
chore: small fix
piggggggggy Apr 23, 2025
c629deb
chore: small fix
piggggggggy Apr 24, 2025
b5242a0
fix(api-composable): remove deprecated query key
piggggggggy Apr 24, 2025
cedb8c5
fix(opsflow): apply change query key usage
piggggggggy Apr 24, 2025
6f3b8da
feat(console-query): create tanstack query debugger
piggggggggy Apr 24, 2025
e836a0d
fix(global-dashboard-query): create separate dashboard query
piggggggggy Apr 24, 2025
6077ef2
feat(console-query-debugger): create console query debugger (#5817)
piggggggggy Apr 25, 2025
0ffcd05
Revert "feat(console-query): create tanstack query debugger"
piggggggggy Apr 25, 2025
5b9b937
chore: solve lint error
piggggggggy Apr 25, 2025
1f6beba
Merge pull request #5819 from cloudforet-io/feature-console-query-enh…
piggggggggy Apr 25, 2025
22927f1
Merge branch 'develop' into feature-optimizing-console-preset
piggggggggy Apr 25, 2025
df12b6a
feat: add user timezone section
skdud4659 Apr 29, 2025
339604c
Merge remote-tracking branch 'cloudforet-io/develop' into feature/alert
skdud4659 Apr 29, 2025
92fa9be
Merge pull request #5823 from cloudforet-io/feature-optimizing-consol…
skdud4659 Apr 29, 2025
723818f
feat: add col-resource at alert management table
skdud4659 Apr 30, 2025
bf5b3f2
chore: merge master into develop after 2.0.dev356 version tagging
admin-cloudforet Apr 30, 2025
54a940c
chore: merge master into develop after 2.0.dev357 version tagging
admin-cloudforet Apr 30, 2025
f4884a1
fix: disableCopy not working properly in PDefinitionTable (#5829)
yuda110 Apr 30, 2025
7682705
chore: merge master into develop after 2.0.dev358 version tagging
admin-cloudforet Apr 30, 2025
6da005d
feat: retain labels filter
skdud4659 Apr 30, 2025
4075aeb
feat: apply triggered_by converting data
skdud4659 Apr 30, 2025
2c3f811
feat(vue-query-devtools): install custom vue-query devtools sdk (#5832)
piggggggggy May 5, 2025
59d1015
chore(deps-dev): bump vite from 4.5.13 to 4.5.14 (#5831)
dependabot[bot] May 6, 2025
404e424
Merge remote-tracking branch 'cloudforet-io/develop' into feature/alert
skdud4659 May 7, 2025
a0fe41b
chore: refactor lodash import (per-method import) (#5833)
piggggggggy May 8, 2025
4c8b64f
feat: retain period filter
skdud4659 May 8, 2025
b48f4a2
feat: add timezone dropdown at schedule setting form
skdud4659 May 8, 2025
57ec48a
feat: add timezone section at notification detail
skdud4659 May 8, 2025
ba77fd1
Merge remote-tracking branch 'cloudforet-io/develop' into feature/alert
skdud4659 May 8, 2025
9da446c
feat: provide service link for user groups dependent on the service
skdud4659 May 8, 2025
b6aede9
feat: apply service query filter at service main table
skdud4659 May 8, 2025
dcba912
feat: provide notification link for service member dependent on the n…
skdud4659 May 8, 2025
84d7786
Merge branch 'develop' into feature-service-pagination
seungyeoneeee May 8, 2025
312f4bb
feat: update service landing page - pagination as service_healthy (#5…
seungyeoneeee May 8, 2025
af08178
Merge pull request #5837 from cloudforet-io/feature-service-pagination
seungyeoneeee May 9, 2025
c2d68c4
feat: provide escalation policy link for notification dependent on th…
skdud4659 May 9, 2025
7ebe196
Merge remote-tracking branch 'cloudforet-io/develop' into feature/alert
skdud4659 May 9, 2025
b960d59
fix: fixed fetch service channel bug
skdud4659 May 9, 2025
feb7dae
Revert "chore: refactor lodash import (per-method import) (#5833)"
piggggggggy May 9, 2025
3947a8f
Merge remote-tracking branch 'cloudforet-io/develop' into feature/alert
skdud4659 May 9, 2025
0b1aaa0
Merge pull request #5839 from skdud4659/feature/alert
skdud4659 May 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion apps/web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
"@vueuse/core": "^10.7.2",
"@vueuse/integrations": "^11.1.0",
"@vvo/tzdb": "^6.4.1",
"console-vue-query-devtools-sdk": "^0.0.16",
"animated-number-vue": "^1.0.0",
"axios": "^1.8.2",
"axios-auth-refresh": "^3.2.2",
Expand Down Expand Up @@ -112,7 +113,7 @@
"postcss-config-custom": "*",
"rollup-plugin-visualizer": "^5.9.0",
"tsconfig": "*",
"vite": "^4.5.13",
"vite": "^4.5.14",
"vite-plugin-stylelint": "^3.3.3",
"vite-plugin-vue-type-imports": "^0.2.4",
"vitest": "^3.0.8",
Expand Down
17 changes: 16 additions & 1 deletion apps/web/src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ import {
import type { Location } from 'vue-router';
import { useRoute, useRouter } from 'vue-router/composables';

import { useQueryClient } from '@tanstack/vue-query';
import { ConsoleVueQueryDevtools } from 'console-vue-query-devtools-sdk';

import { LocalStorageAccessor } from '@cloudforet/core-lib/local-storage-accessor';
import {
PNoticeAlert, PToastAlert, PIconModal, PSidebar, PDataLoader,
Expand All @@ -15,6 +18,7 @@ import { EXTERNAL_PAGE_ROUTE } from '@/router/constant';
import { getRouteScope } from '@/router/helpers/route-helper';

import { useAppContextStore } from '@/store/app-context/app-context-store';
import { useAuthorizationStore } from '@/store/authorization/authorization-store';
import { SIDEBAR_TYPE } from '@/store/display/constant';
import { useDisplayStore } from '@/store/display/display-store';
import { useErrorStore } from '@/store/error/error-store';
Expand All @@ -37,6 +41,15 @@ import MobileGuideModal from '@/services/auth/components/MobileGuideModal.vue';
import { AUTH_ROUTE } from '@/services/auth/routes/route-constant';
import { LANDING_ROUTE } from '@/services/landing/routes/route-constant';

if (import.meta.env.DEV) {
const queryClient = useQueryClient();
import('@/_dev-tools/vue-query-console-debug').then((mod) => mod.initVueQueryConsoleDebug(queryClient))
.catch((error) => {
console.error('Failed to load vue-query-console-debug module:', error);
console.error('Ensure the module exists and the path is correct.');
});
}

const router = useRouter();
const route = useRoute();

Expand All @@ -56,6 +69,7 @@ const state = reactive({
});

const userStore = useUserStore();
const authorizationStore = useAuthorizationStore();
const appContextStore = useAppContextStore();
const errorStore = useErrorStore();
const globalUIStore = useGlobalUIStore();
Expand All @@ -74,7 +88,7 @@ const goToSignIn = async () => {
name: AUTH_ROUTE.SIGN_OUT._NAME,
query: { previousPath: route.fullPath },
};
userStore.setCurrentGrantInfo(undefined);
authorizationStore.setCurrentGrantInfo(undefined);
errorStore.setVisibleSessionExpiredError(false);

await router.push(to);
Expand Down Expand Up @@ -104,6 +118,7 @@ watch(() => state.userId, (userId) => {
<div v-cloak
id="app"
>
<console-vue-query-devtools />
<template v-if="displayStore.state.isInitialized">
<p-notice-alert group="noticeTopLeft" />
<p-notice-alert group="noticeTopRight" />
Expand Down
166 changes: 166 additions & 0 deletions apps/web/src/_dev-tools/vue-query-console-debug.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
import type { QueryClient, QueryKey, Query } from '@tanstack/vue-query';

type QuerySummary = {
index: number;
queryKey: QueryKey;
gcTime: number;
observers: number;
data: unknown;
query: Query;
isActive: boolean;
};
interface DumpOptions {
appContext?: string;
resourceIdentifier?: string;
activeOnly?: boolean;
// TODO: Add sortBy, limit, showParamsSize, intentLabel support
}


export const initVueQueryConsoleDebug = (client: QueryClient) => {
const _summarizeQueries = (): QuerySummary[] => client.getQueryCache().getAll()
.sort((a, b) => {
const isActiveA = _isActive(a);
const isActiveB = _isActive(b);
return Number(isActiveB) - Number(isActiveA);
})
.map((query, index) => {
const data = query.state.data;
const observers = query.getObserversCount?.() ?? query.observers.length;

return {
index: index + 1,
queryKey: query.queryKey,
gcTime: query.gcTime,
observers,
data,
query,
isActive: _isActive(query),
};
});

const debugObject = {
/**
* Returns a raw summary of all queries in the cache.
*/
getSummary: _summarizeQueries,
/**
* Logs a table summary of all queries.
* Includes appContext, resource path, context keys, and params.
*/
dump: (options?: DumpOptions) => {
let summary = _summarizeQueries().map((q) => ({
index: q.index,
appContext: _extractAppContext(q.queryKey),
resourceIdentifier: _extractResourceIdentifier(q.queryKey),
contextKey: _extractContextKey(q.queryKey),
params: _extractParams(q.queryKey),
observers: q.observers,
isActive: q.isActive,
}));
if (options?.appContext) {
summary = summary.filter((q) => q.appContext.startsWith(options?.appContext ?? ''));
}
if (options?.resourceIdentifier) {
summary = summary.filter((q) => q.resourceIdentifier.startsWith(options?.resourceIdentifier ?? ''));
}
if (options?.activeOnly) {
summary = summary.filter((q) => q.isActive);
}
const result = Object.fromEntries(summary.map((q) => [`${q.index}`, {
appContext: q.appContext,
resourceIdentifier: q.resourceIdentifier,
contextKey: q.contextKey,
params: q.params,
observers: q.observers,
isActive: q.isActive,
}]));

console.table(result);
},
/**
* Logs full details for every query in the cache.
* Grouped and expanded in the browser console.
*/
log: () => {
_summarizeQueries().forEach((q) => {
console.group(`Query #${q.index}`);
console.log('queryKey:', q.queryKey);
console.log('gcTime:', q.gcTime);
console.log('observers:', q.observers);
console.log('data:', q.data);
console.groupEnd();
});
},
/**
* Logs details for a specific query by its index in the cache.
*/
inspect: (index: number) => {
const q = _summarizeQueries().find((query) => query.index === index);
if (!q) {
console.warn('Query index not found');
(window as any).__QUERY_DEBUG__.dump();
return;
}
console.group(`Inspecting Query #${index}`);
console.log('queryKey:', q.queryKey);
console.log('gcTime:', q.gcTime);
console.log('observers:', q.observers);
console.log('data:', q.data);
console.log('query:', q.query);
console.groupEnd();
},
};

(window as any).__QUERY_DEBUG__ = debugObject;
};


const _isActive = (query: Query) => {
const data = query.state.data;
return (data !== undefined && query.state.dataUpdatedAt > 0) || (query.options as { enabled?: boolean })?.enabled === true;
};

/* --------------------- Extractors --------------------- */

const _extractAppContext = (key: QueryKey): string => {
if (!Array.isArray(key) || key.length === 0) return '';
if (key[0] === 'admin') return 'admin';
if (key.length < 2) return '';
if (key[0] === 'workspace') return `${key[1]}`;
return '';
};

const _extractResourceIdentifier = (key: QueryKey): string => {
if (!Array.isArray(key) || key.length < 4) return '';
if (key[0] === 'admin') return `${key[1]}/${key[2]}/${key[3]}`;
if (key.length < 5) return '';
if (key[0] === 'workspace') return `${key[2]}/${key[3]}/${key[4]}`;
return '';
};

const _extractContextKey = (key: QueryKey): string => {
if (!Array.isArray(key) || key.length < 5) return '';
const startIndex = key[0] === 'admin' ? 4 : 5;
const lastIndex = key.length - 1;
const hasParams = typeof key[lastIndex] === 'object' && !Array.isArray(key[lastIndex]) && key[lastIndex] !== null;

const contextPart = hasParams ? key.slice(startIndex, lastIndex) : key.slice(startIndex);
const parts = contextPart.filter((k) => typeof k === 'string' || typeof k === 'number');

return parts.join(', ');
};

const _extractParams = (key: QueryKey): string => {
if (!Array.isArray(key) || key.length < 5) return '';
if (key[0] === 'admin') {
const lastNamespace = key[key.length - 1];
return typeof lastNamespace === 'object' ? JSON.stringify(lastNamespace) : '';
}
if (key.length < 6) return '';
if (key[0] === 'workspace') {
const lastNamespace = key[key.length - 1];
return typeof lastNamespace === 'object' ? JSON.stringify(lastNamespace) : '';
}
return '';
};
54 changes: 0 additions & 54 deletions apps/web/src/api-clients/_common/composables/use-api-query-key.ts

This file was deleted.

9 changes: 0 additions & 9 deletions apps/web/src/api-clients/_common/types/query-key-type.ts

This file was deleted.

61 changes: 0 additions & 61 deletions apps/web/src/api-clients/api-client-manager.ts

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { SpaceConnector } from '@cloudforet/core-lib/space-connector';

import { useAPIQueryKey } from '@/api-clients/_common/composables/use-api-query-key';
import type { ListResponse } from '@/api-clients/_common/schema/api-verbs/list';
import type { DomainConfigCreateParameters } from '@/api-clients/config/domain-config/schema/api-verbs/create';
import type { DomainConfigGetParameters } from '@/api-clients/config/domain-config/schema/api-verbs/get';
Expand All @@ -10,9 +9,6 @@ import type { DomainConfigUpdateParameters } from '@/api-clients/config/domain-c
import type { DomainConfigModel } from '@/api-clients/config/domain-config/schema/model';

export const useDomainConfigApi = () => {
const domainConfigQueryKey = useAPIQueryKey('config', 'domain-config', 'get');
const domainConfigListQueryKey = useAPIQueryKey('config', 'domain-config', 'list');

const actions = {
create: SpaceConnector.clientV2.config.domainConfig.create<DomainConfigCreateParameters, DomainConfigModel>,
update: SpaceConnector.clientV2.config.domainConfig.update<DomainConfigUpdateParameters, DomainConfigModel>,
Expand All @@ -22,8 +18,6 @@ export const useDomainConfigApi = () => {
};

return {
domainConfigQueryKey,
domainConfigListQueryKey,
domainConfigAPI: actions,
};
};
Loading
Loading