40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import { clientApi } from "@homarr/api/client";
|
|
|
|
import { toScopedStorageVolumeValue } from "./filter-storage-volumes";
|
|
|
|
export const createStorageVolumeMultiSelectOptions = () => ({
|
|
defaultValue: [] as string[],
|
|
withDescription: true,
|
|
useOptions: (integrationIds: string[]) => {
|
|
const queryResults = clientApi.useQueries((queryBuilder) =>
|
|
integrationIds.map((integrationId) =>
|
|
queryBuilder.widget.healthMonitoring.listStorageVolumes({
|
|
integrationId,
|
|
}),
|
|
),
|
|
);
|
|
|
|
const isPending = queryResults.some((queryResult) => queryResult.isPending);
|
|
const isError = queryResults.every((queryResult) => queryResult.isError);
|
|
const options = queryResults.flatMap((queryResult, index) => {
|
|
const integrationId = integrationIds[index];
|
|
if (!integrationId) {
|
|
return [];
|
|
}
|
|
|
|
return (queryResult.data ?? []).map((option) => ({
|
|
label: option.label,
|
|
value: toScopedStorageVolumeValue(integrationId, option.value),
|
|
}));
|
|
});
|
|
|
|
const uniqueOptions = [...new Map(options.map((option) => [option.value, option])).values()];
|
|
|
|
return {
|
|
data: uniqueOptions,
|
|
isPending,
|
|
isError: isError && uniqueOptions.length === 0,
|
|
};
|
|
},
|
|
});
|