Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import { useEffect, useState } from 'react'import { useDispatch } from 'react-redux'import {addExperience,deleteExperience,editExperience} from '@services/profile/profiles'import { addNotification } from '@store/notification/notification.actions'export function useExperiences({ defaultExperiences = [] }) {const [experiences, setExperiences] = useState(defaultExperiences)const [modalState, setModalState] = useState(null)const [currentExperience, setCurrentExperience] = useState(null)const dispatch = useDispatch()const showModal = (type, experience = null) => {setCurrentExperience(experience)setModalState(modalState === type ? null : type)}const onAdd = async (uuid, experience) => {try {const newExperiences = await addExperience(uuid, experience)setExperiences(newExperiences)showModal(null)} catch (error) {dispatch(addNotification({style: 'danger',msg: `Error al agregar la experiencia: ${error.message}`}))}}const onEdit = async (experience) => {try {if (!currentExperience?.link_edit) {throw new Error('Enlace de edición no disponible')}const newExperiences = await editExperience(currentExperience.link_edit,experience)setExperiences(newExperiences)showModal(null)} catch (error) {dispatch(addNotification({ style: 'danger', msg: error.message }))}}const onDelete = async () => {try {if (!currentExperience?.link_delete) {throw new Error('Enlace de eliminación no disponible')}const newExperiences = await deleteExperience(currentExperience.link_delete)setExperiences(newExperiences)showModal(null)} catch (error) {dispatch(addNotification({style: 'danger',msg: `Error al eliminar la experiencia: ${error.message}`}))}}useEffect(() => {setExperiences(defaultExperiences)}, [defaultExperiences])return {showModal,modalState,onAdd,onEdit,onDelete,experiences,currentExperience}}