Skip to content
Open
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export type TWorkflowExecution = {
executedAtTime?: string;
};

export type TRemoteWorkflow = {
export type TRemoteInstanceBackupWorkflow = {
backupName: string;
name: string;
id: string;
Expand All @@ -20,8 +20,8 @@ export type TRemoteWorkflow = {
distantRegion?: string;
};

export const getRegionsWorkflows = async (projectId: string, regionName: string) => {
const { data } = await v6.get<TRemoteWorkflow[]>(
export const getInstanceBackupWorkflows = async (projectId: string, regionName: string) => {
const { data } = await v6.get<TRemoteInstanceBackupWorkflow[]>(
`/cloud/project/${projectId}/region/${regionName}/workflow/backup`,
);
return data;
Expand All @@ -36,13 +36,13 @@ export type TAddWorkflow = {
distRegionName: string | null;
};

export const addWorkflow = async (
export const addInstanceBackupWorkflow = async (
projectId: string,
regionName: string,
instanceId: string,
type: TAddWorkflow,
) => {
const { data } = await v6.post<TRemoteWorkflow[]>(
const { data } = await v6.post<TRemoteInstanceBackupWorkflow[]>(
`/cloud/project/${projectId}/region/${regionName}/instance/${instanceId}/automaticBackup`,
{ ...type },
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { pick } from 'lodash';

import { TProductAvailability, TRegion } from '@ovh-ux/manager-pci-common';

import { TWorkflowSelectedResource } from '@/api/hooks/workflows';
import { isSnapshotConsumption } from '@/pages/new/utils/is-snapshot-consumption';
import { TEFlavor } from '@/types/flavor/entity';
import { TEInstance } from '@/types/instance/entity';
Expand Down Expand Up @@ -118,14 +119,14 @@ export type TInstance = Readonly<{
flavor: TInstanceFlavor;
status: TInstanceStatus;
region: TInstanceRegion;

autoBackup: TInstanceAutoBackup;
}>;

export const buildInstanceId = (id: string, region: string) => ({ id, region }) as TInstance['id'];

export const isSameInstanceId = (a: TInstance['id'], b: TInstance['id']): boolean =>
a.id === b.id && a.region === b.region;
export const buildInstanceSelectedResource = (
id: string,
region: string,
): TWorkflowSelectedResource => ({ id, region, label: id });

export const instancesSelector = (
instances: TEInstance[],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,12 @@ import { useMemo } from 'react';
import { queryOptions, usePrefetchQuery, useQueries, useQuery } from '@tanstack/react-query';

import { Filter, applyFilters } from '@ovh-ux/manager-core-api';
import { getProductAvailabilityQuery } from '@ovh-ux/manager-pci-common';
import { getProjectRegions } from '@ovh-ux/manager-pci-common';
import { getProductAvailabilityQuery, getProjectRegions } from '@ovh-ux/manager-pci-common';
import { ColumnSort, PaginationState } from '@ovh-ux/manager-react-components';

import { getFlavor } from '@/api/data/flavor';
import { getInstances } from '@/api/data/instance';
import {
TInstance,
instancesSelector,
isSameInstanceId,
sortResults,
} from '@/api/hooks/instance/selector/instances.selector';
import { instancesSelector, sortResults } from '@/api/hooks/instance/selector/instances.selector';
import { useRegionTranslation } from '@/api/hooks/region';
import { useMe } from '@/api/hooks/user';
import { paginateResults } from '@/helpers';
Expand Down Expand Up @@ -124,15 +118,3 @@ export const usePaginatedInstances = (
),
};
};

export const useInstance = (projectId: string, instanceId: TInstance['id'] | null) => {
const { instances } = useAllInstances(projectId);

return {
instance: useMemo(
() =>
instanceId ? (instances.find((i) => isSameInstanceId(i.id, instanceId)) ?? null) : null,
[instances, instanceId],
),
};
};
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,24 @@ export type ContinentRegion = Pick<TProductAvailabilityRegion, 'enabled' | 'name
price: number | null;
};

export const useInstanceSnapshotPricing = (projectId: string, instanceId: TInstance['id']) => {
export const useInstanceSnapshotPricing = (
enabled: boolean,
projectId: string,
instanceId: TInstance['id'],
) => {
const { me } = useMe();
const { translateMicroRegion, translateContinent } = useRegionTranslation();
const isDistantBackupAvailable = useIsDistantBackupAvailable();

const [{ data: catalog }, { data: snapshotAvailabilities }] = useQueries({
queries: [
getCatalogQuery(me.ovhSubsidiary),
getProductAvailabilityQuery(projectId, me.ovhSubsidiary, {
addonFamily: 'snapshot',
}),
{ ...getCatalogQuery(me.ovhSubsidiary), enabled },
{
...getProductAvailabilityQuery(projectId, me.ovhSubsidiary, {
addonFamily: 'snapshot',
}),
enabled,
},
],
});

Expand Down
23 changes: 23 additions & 0 deletions packages/manager/apps/pci-workflow/src/api/hooks/resource.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { TInstance } from '@/api/hooks/instance/selector/instances.selector';
import { useInstanceSnapshotPricing } from '@/api/hooks/order/order';
import { TWorkflowResourceId, WorkflowType } from '@/api/hooks/workflows';

export const isSameResource = (a: TWorkflowResourceId, b: TWorkflowResourceId): boolean =>
a.id === b.id && a.region === b.region;

export const useResourcePricing = (
workflowType: WorkflowType,
projectId: string,
resourceId: TWorkflowResourceId,
) => {
const { pricing, isPending } = useInstanceSnapshotPricing(
workflowType === WorkflowType.INSTANCE_BACKUP,
projectId,
{
id: resourceId.id,
region: resourceId.region,
} as TInstance['id'],
);

return { pricing, isPending };
};
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ import { wrapper } from '@/wrapperRenders';

import { useWorkflowExecutions } from './useExecutions';
import * as useWorkflowHook from './workflows';
import { TWorkflow } from './workflows';
import { TInstanceBackupWorkflow } from './workflows';

describe('useExecutions tests', () => {
vi.spyOn(useWorkflowHook, 'useWorkflows').mockReturnValue({
vi.spyOn(useWorkflowHook, 'useInstanceBackupWorkflows').mockReturnValue({
isPending: false,
data: [
{
Expand All @@ -32,7 +32,7 @@ describe('useExecutions tests', () => {
executedAt: '2024-07-17T01:05:24Z',
},
],
} as TWorkflow,
} as TInstanceBackupWorkflow,
],
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { ColumnSort, PaginationState } from '@ovh-ux/manager-react-components';
import { paginateResults } from '@/helpers';

import { TWorkflowExecution } from '../data/region-workflow';
import { useWorkflows } from './workflows';
import { useInstanceBackupWorkflows } from './workflows';

export const defaultCompareFunction =
(key: keyof TWorkflowExecution) => (a: TWorkflowExecution, b: TWorkflowExecution) => {
Expand Down Expand Up @@ -46,7 +46,7 @@ export const useWorkflowExecutions = (
const { i18n } = useTranslation('pci-common');
const userLocale = getDateFnsLocale(i18n.language);

const { data: workflows, isPending: isWorkflowPending } = useWorkflows(projectId);
const { data: workflows, isPending: isWorkflowPending } = useInstanceBackupWorkflows(projectId);

return useMemo(() => {
let mappedExecution: TWorkflowExecution[] = [];
Expand Down
Loading
Loading