diff --git a/packages/manager/.changeset/pr-12221-tech-stories-1747257942556.md b/packages/manager/.changeset/pr-12221-tech-stories-1747257942556.md new file mode 100644 index 00000000000..601a68e326a --- /dev/null +++ b/packages/manager/.changeset/pr-12221-tech-stories-1747257942556.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Tech Stories +--- + +Move quotas related queries and dependencies to shared `queries` package ([#12221](https://github.com/linode/manager/pull/12221)) diff --git a/packages/manager/src/features/Account/Quotas/QuotasTable.test.tsx b/packages/manager/src/features/Account/Quotas/QuotasTable.test.tsx index d92b9b40e8b..8d87327e4ff 100644 --- a/packages/manager/src/features/Account/Quotas/QuotasTable.test.tsx +++ b/packages/manager/src/features/Account/Quotas/QuotasTable.test.tsx @@ -19,8 +19,8 @@ const queryMocks = vi.hoisted(() => ({ useQuotasQuery: vi.fn().mockReturnValue({}), })); -vi.mock('src/queries/quotas/quotas', () => { - const actual = vi.importActual('src/queries/quotas/quotas'); +vi.mock('@linode/queries', async () => { + const actual = await vi.importActual('@linode/queries'); return { ...actual, quotaQueries: queryMocks.quotaQueries, diff --git a/packages/manager/src/features/Account/Quotas/QuotasTable.tsx b/packages/manager/src/features/Account/Quotas/QuotasTable.tsx index f8d63cd910d..2b11dc11276 100644 --- a/packages/manager/src/features/Account/Quotas/QuotasTable.tsx +++ b/packages/manager/src/features/Account/Quotas/QuotasTable.tsx @@ -1,3 +1,4 @@ +import { quotaQueries, useQuotasQuery } from '@linode/queries'; import { Dialog, ErrorState } from '@linode/ui'; import { useQueries } from '@tanstack/react-query'; import * as React from 'react'; @@ -12,8 +13,6 @@ import { TableRow } from 'src/components/TableRow/TableRow'; import { TableRowEmpty } from 'src/components/TableRowEmpty/TableRowEmpty'; import { TableRowLoading } from 'src/components/TableRowLoading/TableRowLoading'; import { usePagination } from 'src/hooks/usePagination'; -import { useQuotasQuery } from 'src/queries/quotas/quotas'; -import { quotaQueries } from 'src/queries/quotas/quotas'; import { QuotasIncreaseForm } from './QuotasIncreaseForm'; import { QuotasTableRow } from './QuotasTableRow'; diff --git a/packages/queries/.changeset/pr-12221-added-1747257990334.md b/packages/queries/.changeset/pr-12221-added-1747257990334.md new file mode 100644 index 00000000000..8ddde4e28a3 --- /dev/null +++ b/packages/queries/.changeset/pr-12221-added-1747257990334.md @@ -0,0 +1,5 @@ +--- +"@linode/queries": Added +--- + +`quotas/` directory and migrated relevant query keys and hook ([#12221](https://github.com/linode/manager/pull/12221)) diff --git a/packages/queries/src/index.ts b/packages/queries/src/index.ts index 320898c90f9..40b3a4f4cef 100644 --- a/packages/queries/src/index.ts +++ b/packages/queries/src/index.ts @@ -9,6 +9,7 @@ export * from './networking'; export * from './nodebalancers'; export * from './placementGroups'; export * from './profile'; +export * from './quotas'; export * from './regions'; export * from './stackscripts'; export * from './support'; diff --git a/packages/queries/src/quotas/index.ts b/packages/queries/src/quotas/index.ts new file mode 100644 index 00000000000..ba0826b96ed --- /dev/null +++ b/packages/queries/src/quotas/index.ts @@ -0,0 +1,3 @@ +export * from './keys'; +export * from './quotas'; +export * from './requests'; diff --git a/packages/queries/src/quotas/keys.ts b/packages/queries/src/quotas/keys.ts new file mode 100644 index 00000000000..bc77e8e9b6f --- /dev/null +++ b/packages/queries/src/quotas/keys.ts @@ -0,0 +1,30 @@ +import { getQuota, getQuotas, getQuotaUsage } from '@linode/api-v4'; +import { createQueryKeys } from '@lukemorales/query-key-factory'; + +import { getAllQuotas } from './requests'; + +import type { Filter, Params, QuotaType } from '@linode/api-v4'; + +export const quotaQueries = createQueryKeys('quotas', { + service: (type: QuotaType) => ({ + contextQueries: { + all: (params: Params = {}, filter: Filter = {}) => ({ + queryFn: () => getAllQuotas(type, params, filter), + queryKey: [params, filter], + }), + paginated: (params: Params = {}, filter: Filter = {}) => ({ + queryFn: () => getQuotas(type, params, filter), + queryKey: [params, filter], + }), + quota: (id: number) => ({ + queryFn: () => getQuota(type, id), + queryKey: [id], + }), + usage: (id: number) => ({ + queryFn: () => getQuotaUsage(type, id), + queryKey: [id], + }), + }, + queryKey: [type], + }), +}); diff --git a/packages/manager/src/queries/quotas/quotas.ts b/packages/queries/src/quotas/quotas.ts similarity index 53% rename from packages/manager/src/queries/quotas/quotas.ts rename to packages/queries/src/quotas/quotas.ts index 1351dc36f19..8571cf341d2 100644 --- a/packages/manager/src/queries/quotas/quotas.ts +++ b/packages/queries/src/quotas/quotas.ts @@ -1,8 +1,6 @@ -import { getQuota, getQuotas, getQuotaUsage } from '@linode/api-v4'; -import { createQueryKeys } from '@lukemorales/query-key-factory'; import { keepPreviousData, useQuery } from '@tanstack/react-query'; -import { getAllQuotas } from './requests'; +import { quotaQueries } from './keys'; import type { APIError, @@ -14,30 +12,6 @@ import type { ResourcePage, } from '@linode/api-v4'; -export const quotaQueries = createQueryKeys('quotas', { - service: (type: QuotaType) => ({ - contextQueries: { - all: (params: Params = {}, filter: Filter = {}) => ({ - queryFn: () => getAllQuotas(type, params, filter), - queryKey: [params, filter], - }), - paginated: (params: Params = {}, filter: Filter = {}) => ({ - queryFn: () => getQuotas(type, params, filter), - queryKey: [params, filter], - }), - quota: (id: number) => ({ - queryFn: () => getQuota(type, id), - queryKey: [id], - }), - usage: (id: number) => ({ - queryFn: () => getQuotaUsage(type, id), - queryKey: [id], - }), - }, - queryKey: [type], - }), -}); - export const useQuotaQuery = (service: QuotaType, id: number, enabled = true) => useQuery({ ...quotaQueries.service(service)._ctx.quota(id), @@ -48,7 +22,7 @@ export const useQuotasQuery = ( service: QuotaType, params: Params = {}, filter: Filter, - enabled = true + enabled = true, ) => useQuery, APIError[]>({ ...quotaQueries.service(service)._ctx.paginated(params, filter), @@ -60,7 +34,7 @@ export const useAllQuotasQuery = ( service: QuotaType, params: Params = {}, filter: Filter, - enabled = true + enabled = true, ) => useQuery({ ...quotaQueries.service(service)._ctx.all(params, filter), @@ -70,7 +44,7 @@ export const useAllQuotasQuery = ( export const useQuotaUsageQuery = ( service: QuotaType, id: number, - enabled = true + enabled = true, ) => useQuery({ ...quotaQueries.service(service)._ctx.usage(id), diff --git a/packages/manager/src/queries/quotas/requests.ts b/packages/queries/src/quotas/requests.ts similarity index 83% rename from packages/manager/src/queries/quotas/requests.ts rename to packages/queries/src/quotas/requests.ts index 39db01c395f..ae9b029867e 100644 --- a/packages/manager/src/queries/quotas/requests.ts +++ b/packages/queries/src/quotas/requests.ts @@ -6,12 +6,12 @@ import type { Filter, Params, Quota, QuotaType } from '@linode/api-v4'; export const getAllQuotas = ( service: QuotaType, passedParams: Params = {}, - passedFilter: Filter = {} + passedFilter: Filter = {}, ) => getAll((params, filter) => getQuotas( service, { ...params, ...passedParams }, - { ...filter, ...passedFilter } - ) + { ...filter, ...passedFilter }, + ), )().then((data) => data.data);