mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-26 18:42:49 +00:00
127 lines
3.4 KiB
TypeScript
127 lines
3.4 KiB
TypeScript
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
|
|
import { dropdownSettingsService } from "@/services/dropdownSettings.service";
|
|
import type {
|
|
CreateDropdownOptionDto,
|
|
CreateDropdownSettingDto,
|
|
UpdateDropdownOptionDto,
|
|
UpdateDropdownSettingDto,
|
|
} from "@/types/dropdownSettings";
|
|
|
|
const KEY = ["dropdown-settings"] as const;
|
|
|
|
/* ------------------------------ Queries ------------------------------ */
|
|
|
|
export const useDropdownSettings = () =>
|
|
useQuery({
|
|
queryKey: KEY,
|
|
queryFn: dropdownSettingsService.list,
|
|
});
|
|
|
|
export const useDropdownSetting = (id: string) =>
|
|
useQuery({
|
|
queryKey: [...KEY, "id", id],
|
|
queryFn: () => dropdownSettingsService.getById(id),
|
|
enabled: Boolean(id),
|
|
});
|
|
|
|
export const useDropdownSettingByCode = (code: string) =>
|
|
useQuery({
|
|
queryKey: [...KEY, "code", code],
|
|
queryFn: () => dropdownSettingsService.getByCode(code),
|
|
enabled: Boolean(code),
|
|
});
|
|
|
|
/* ----------------------------- Mutations ----------------------------- */
|
|
|
|
export const useCreateDropdownSetting = () => {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (dto: CreateDropdownSettingDto) =>
|
|
dropdownSettingsService.create(dto),
|
|
onSuccess: () => qc.invalidateQueries({ queryKey: KEY }),
|
|
});
|
|
};
|
|
|
|
export const useUpdateDropdownSetting = () => {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({
|
|
id,
|
|
dto,
|
|
}: {
|
|
id: string;
|
|
dto: UpdateDropdownSettingDto;
|
|
}) => dropdownSettingsService.update(id, dto),
|
|
onSuccess: (_data, { id }) => {
|
|
qc.invalidateQueries({ queryKey: KEY });
|
|
qc.invalidateQueries({ queryKey: [...KEY, "id", id] });
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useDeleteDropdownSetting = () => {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (id: string) => dropdownSettingsService.remove(id),
|
|
onSuccess: () => qc.invalidateQueries({ queryKey: KEY }),
|
|
});
|
|
};
|
|
|
|
export const useReplaceDropdownOptions = () => {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({
|
|
settingId,
|
|
options,
|
|
}: {
|
|
settingId: string;
|
|
options: CreateDropdownOptionDto[];
|
|
}) => dropdownSettingsService.replaceOptions(settingId, options),
|
|
onSuccess: (_data, { settingId }) => {
|
|
qc.invalidateQueries({ queryKey: KEY });
|
|
qc.invalidateQueries({ queryKey: [...KEY, "id", settingId] });
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useAddDropdownOption = () => {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({
|
|
settingId,
|
|
dto,
|
|
}: {
|
|
settingId: string;
|
|
dto: CreateDropdownOptionDto;
|
|
}) => dropdownSettingsService.addOption(settingId, dto),
|
|
onSuccess: (_data, { settingId }) => {
|
|
qc.invalidateQueries({ queryKey: KEY });
|
|
qc.invalidateQueries({ queryKey: [...KEY, "id", settingId] });
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useUpdateDropdownOption = () => {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({
|
|
optionId,
|
|
dto,
|
|
}: {
|
|
optionId: string;
|
|
dto: UpdateDropdownOptionDto;
|
|
}) => dropdownSettingsService.updateOption(optionId, dto),
|
|
onSuccess: () => qc.invalidateQueries({ queryKey: KEY }),
|
|
});
|
|
};
|
|
|
|
export const useRemoveDropdownOption = () => {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (optionId: string) =>
|
|
dropdownSettingsService.removeOption(optionId),
|
|
onSuccess: () => qc.invalidateQueries({ queryKey: KEY }),
|
|
});
|
|
};
|