mirror of https://github.com/portainer/portainer
71 lines
1.7 KiB
TypeScript
71 lines
1.7 KiB
TypeScript
|
import _ from 'lodash';
|
||
|
import { useQueries, useQuery } from 'react-query';
|
||
|
|
||
|
import { EnvironmentId } from '@/portainer/environments/types';
|
||
|
|
||
|
import { getResourceGroups } from './services/resource-groups.service';
|
||
|
import { getSubscriptions } from './services/subscription.service';
|
||
|
import { Subscription } from './types';
|
||
|
|
||
|
export function useSubscriptions(environmentId: EnvironmentId) {
|
||
|
return useQuery(
|
||
|
'azure.subscriptions',
|
||
|
() => getSubscriptions(environmentId),
|
||
|
{
|
||
|
meta: {
|
||
|
error: {
|
||
|
title: 'Failure',
|
||
|
message: 'Unable to retrieve Azure subscriptions',
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
|
||
|
export function useResourceGroups(
|
||
|
environmentId: EnvironmentId,
|
||
|
subscriptions: Subscription[] = []
|
||
|
) {
|
||
|
const queries = useQueries(
|
||
|
subscriptions.map((subscription) => ({
|
||
|
queryKey: [
|
||
|
'azure',
|
||
|
environmentId,
|
||
|
'subscriptions',
|
||
|
subscription.subscriptionId,
|
||
|
'resourceGroups',
|
||
|
],
|
||
|
queryFn: async () => {
|
||
|
const groups = await getResourceGroups(
|
||
|
environmentId,
|
||
|
subscription.subscriptionId
|
||
|
);
|
||
|
return [subscription.subscriptionId, groups] as const;
|
||
|
},
|
||
|
meta: {
|
||
|
error: {
|
||
|
title: 'Failure',
|
||
|
message: '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),
|
||
|
error: queries.find((q) => q.error)?.error || null,
|
||
|
};
|
||
|
}
|