Autoría | Ultima modificación | Ver Log |
import { useState, useEffect } from 'react';
import { useApi, useAlert } from '@shared/hooks';
import { getPrivacySettings, updatePrivacySettings } from '@account-settings/services';
const PRIVACY_OPTIONS = [
{
label: 'Mostrar en la búsqueda',
input_name: 'show_in_search',
value: false
}
];
export function usePrivacySettings() {
const { showSuccess, showError } = useAlert();
const [options, setOptions] = useState(PRIVACY_OPTIONS);
const { loading: isLoading, execute: fetchSettings } = useApi(getPrivacySettings, {
autoFetch: true,
onSuccess: (response) => {
if (response.success && response.data) {
Object.entries(response.data).forEach(([key, value]) => {
setOptions((prevOptions) =>
prevOptions.map((option) =>
option.input_name === key ? { ...option, value: Boolean(value) } : option
)
);
});
}
},
onError: (error) => {
showError(error.message || 'Error al cargar las configuraciones de privacidad');
}
});
const { loading: isUpdating, execute: executeUpdate } = useApi(updatePrivacySettings, {
onSuccess: (response) => {
if (response.success) {
showSuccess(response.data);
} else {
showError(response.data || 'Error al actualizar la privacidad');
}
},
onError: (error) => {
showError(error.message || 'Error al actualizar la privacidad');
}
});
const handleChecked = (value, inputName) => {
setOptions((prevOptions) =>
prevOptions.map((option) =>
option.input_name === inputName ? { ...option, value: Boolean(value) } : option
)
);
};
const updateSettings = async () => {
const settingsData = {};
options.forEach(({ input_name, value }) => {
settingsData[input_name] = value;
});
await executeUpdate(settingsData);
};
return {
options,
isLoading,
isUpdating,
handleChecked,
updateSettings
};
}