66 lines
1.9 KiB
TypeScript
66 lines
1.9 KiB
TypeScript
import { useQuery, useMutation } from "@tanstack/react-query";
|
|
import { CAMBASE } from "../../../utils/config";
|
|
import type { CustomFieldConfig } from "../../../types/types";
|
|
|
|
const fetchCustomFields = async () => {
|
|
const response = await fetch(`${CAMBASE}/api/fetch-config?id=SightingAmmend0-custom-fields`);
|
|
if (!response.ok) {
|
|
throw new Error("Network response was not ok");
|
|
}
|
|
return response.json();
|
|
};
|
|
|
|
const postCustomFields = async (customFieldConfig: CustomFieldConfig[]) => {
|
|
const fields = [];
|
|
|
|
for (const customField of customFieldConfig) {
|
|
if (customField.value)
|
|
if (customFieldConfig.indexOf(customField) > 2) {
|
|
fields.push({
|
|
property: `propStringName${customFieldConfig.indexOf(customField) + 1}`,
|
|
value: customField.label,
|
|
});
|
|
fields.push({
|
|
property: `propStringValue${customFieldConfig.indexOf(customField) + 1}`,
|
|
value: customField.value,
|
|
});
|
|
} else {
|
|
fields.push(
|
|
{
|
|
property: `propCustomFieldName${customFieldConfig.indexOf(customField) + 1}`,
|
|
value: customField.label,
|
|
},
|
|
{
|
|
property: `propCustomFieldValue${customFieldConfig.indexOf(customField) + 1}`,
|
|
value: customField.value,
|
|
},
|
|
);
|
|
}
|
|
}
|
|
const customFieldConfigPayload = {
|
|
id: "SightingAmmend0-custom-fields",
|
|
fields,
|
|
};
|
|
|
|
const response = await fetch(`${CAMBASE}/api/update-config`, {
|
|
method: "POST",
|
|
body: JSON.stringify(customFieldConfigPayload),
|
|
});
|
|
if (!response.ok) throw new Error("Network response was not ok");
|
|
return response.json();
|
|
};
|
|
|
|
export const useCustomFields = () => {
|
|
const customFieldsQuery = useQuery({
|
|
queryKey: ["customFields"],
|
|
queryFn: fetchCustomFields,
|
|
});
|
|
|
|
const customFieldsMutation = useMutation({
|
|
mutationKey: ["customFieldsMutation"],
|
|
mutationFn: postCustomFields,
|
|
});
|
|
|
|
return { customFieldsQuery, customFieldsMutation };
|
|
};
|