mirror of https://github.com/portainer/portainer
73 lines
1.8 KiB
TypeScript
73 lines
1.8 KiB
TypeScript
|
import _ from 'lodash';
|
||
|
import { useQueries } from 'react-query';
|
||
|
|
||
|
import { EnvironmentId } from '@/portainer/environments/types';
|
||
|
import axios, { parseAxiosError } from '@/portainer/services/axios';
|
||
|
import { withError } from '@/react-tools/react-query';
|
||
|
|
||
|
import { azureErrorParser } from '../services/utils';
|
||
|
import { Subscription, ResourceGroup } from '../types';
|
||
|
|
||
|
import { queryKeys } from './query-keys';
|
||
|
import { buildResourceGroupUrl } from './utils';
|
||
|
|
||
|
export function useResourceGroups(
|
||
|
environmentId: EnvironmentId,
|
||
|
subscriptions: Subscription[] = []
|
||
|
) {
|
||
|
const queries = useQueries(
|
||
|
subscriptions.map((subscription) => ({
|
||
|
queryKey: queryKeys.resourceGroups(
|
||
|
environmentId,
|
||
|
subscription.subscriptionId
|
||
|
),
|
||
|
queryFn: async () => {
|
||
|
const groups = await getResourceGroups(
|
||
|
environmentId,
|
||
|
subscription.subscriptionId
|
||
|
);
|
||
|
return [subscription.subscriptionId, groups] as const;
|
||
|
},
|
||
|
...withError('Unable to retrieve Azure resource groups'),
|
||
|
}))
|
||
|
);
|
||
|
|
||
|
return {
|
||
|
resourceGroups: Object.fromEntries(
|
||
|
_.compact(
|
||
|
queries.map((q) => {
|
||
|
if (q.data) {
|
||
|
return q.data;
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
})
|
||
|
)
|
||
|
),
|
||
|
isLoading: queries.some((q) => q.isLoading),
|
||
|
isError: queries.some((q) => q.isError),
|
||
|
};
|
||
|
}
|
||
|
|
||
|
async function getResourceGroups(
|
||
|
environmentId: EnvironmentId,
|
||
|
subscriptionId: string
|
||
|
) {
|
||
|
try {
|
||
|
const {
|
||
|
data: { value },
|
||
|
} = await axios.get<{ value: ResourceGroup[] }>(
|
||
|
buildResourceGroupUrl(environmentId, subscriptionId),
|
||
|
{ params: { 'api-version': '2018-02-01' } }
|
||
|
);
|
||
|
|
||
|
return value;
|
||
|
} catch (err) {
|
||
|
throw parseAxiosError(
|
||
|
err as Error,
|
||
|
'Unable to retrieve resource groups',
|
||
|
azureErrorParser
|
||
|
);
|
||
|
}
|
||
|
}
|