Rev 3736 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import { useState } from 'react';
import { useApi, useAlert } from '@shared/hooks';
import { getNotificationSettings, updateNotificationSettings } from '@account-settings/services';
const NOTIFICATION_OPTIONS = {
accept_my_request_connection: {
value: false,
label: 'Cuando acepto una solicitud de conexión',
input_name: 'accept_my_request_connection'
},
accept_my_request_join_group: {
value: false,
label: 'Cuando acepto una solicitud para unirme a un grupo',
input_name: 'accept_my_request_join_group'
},
comment_my_feed: {
value: false,
label: 'Cuando comentan una de mis publicaciones',
input_name: 'comment_my_feed'
},
like_my_feed: {
value: false,
label: 'Cuando le dan me gusta a una de mis publicaciones',
input_name: 'like_my_feed'
},
receive_connection_request: {
value: false,
label: 'Cuando recibo una solicitud de conexión',
input_name: 'receive_connection_request'
},
receive_inmail: {
value: false,
label: 'Cuando recibo un mensaje',
input_name: 'receive_inmail'
},
receive_invitation_company: {
value: false,
label: 'Cuando recibo una invitación para unirme a una empresa',
input_name: 'receive_invitation_company'
},
receive_invitation_group: {
value: false,
label: 'Cuando recibo una invitación para unirme a un grupo',
input_name: 'receive_invitation_group'
},
receive_invitation_meeting: {
value: false,
label: 'Cuando recibo una invitación para una reunión',
input_name: 'receive_invitation_meeting'
},
receive_records_available_meeting: {
value: false,
label: 'Cuando recibo un registro disponible para una reunión',
input_name: 'receive_records_available_meeting'
},
receive_reminder_meeting: {
value: false,
label: 'Cuando recibo un recordatorio de una reunión',
input_name: 'receive_reminder_meeting'
},
receive_request_join_my_group: {
value: false,
label: 'Cuando recibo una solicitud para unirme a un grupo',
input_name: 'receive_request_join_my_group'
},
share_my_feed: {
value: false,
label: 'Cuando comparten una de mis publicaciones',
input_name: 'share_my_feed'
}
};
export function useNotificationSettings() {
const { showSuccess, showError } = useAlert();
const [notifications, setNotifications] = useState(NOTIFICATION_OPTIONS);
const { loading } = useApi(getNotificationSettings, {
autoFetch: true,
onSuccess: (data) => {
const prevNotifications = structuredClone(NOTIFICATION_OPTIONS);
Object.keys(data).forEach((key) => {
prevNotifications[key].value = data[key] === 1;
});
console.log({ prevNotifications });
setNotifications(prevNotifications);
},
onError: (error) => {
showError(error.message || 'Error al cargar las configuraciones');
}
});
const { execute: executeUpdate } = useApi(updateNotificationSettings, {
onSuccess: (data) => {
showSuccess(data);
},
onError: (error) => {
showError(error.message || 'Error al actualizar las notificaciones');
}
});
const handleChecked = (value, inputName) => {
setNotifications((prevNotifications) => ({
...prevNotifications,
[inputName]: Boolean(value)
}));
};
const updateSettings = async () => {
const settingsData = {};
Object.keys(notifications).forEach((key) => {
settingsData[key] = notifications[key] ? 1 : 0;
});
await executeUpdate(settingsData);
};
return {
notifications,
loading,
handleChecked,
updateSettings
};
}