Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3432 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React, { createContext, useCallback } from 'react';
import { useFetch } from '@hooks';

export const PurposesContext = createContext();

export default function PurposesProvider({ url, children }) {
  const { data, isLoading: loading, mutate } = useFetch(url, { items: [] });
  const { items: purposes, link_add, total } = data;

  const addPurpose = useCallback(
    (newPurpose) => {
      const newPurposes = [newPurpose, ...purposes];
      mutate({ ...data, items: newPurposes });
    },
    [purposes, mutate]
  );

  const removePurpose = useCallback(
    (purposeId) => {
      const newPurposes = purposes.filter((purpose) => purpose.id !== purposeId);
      mutate({ ...data, items: newPurposes });
    },
    [purposes, mutate]
  );

  const updatePurpose = useCallback(
    (updatedPurpose) => {
      const newPurposes = purposes.map((purpose) =>
        purpose.id === updatedPurpose.id ? updatedPurpose : purpose
      );
      mutate({ ...data, items: newPurposes });
    },
    [purposes, mutate]
  );

  const getPurposeById = useCallback(
    (purposeId) => purposes.find((purpose) => purpose.id === purposeId),
    [purposes]
  );

  return (
    <PurposesContext.Provider
      value={{
        loading,
        purposes,
        addUrl: link_add,
        total,
        addPurpose,
        removePurpose,
        updatePurpose,
        getPurposeById
      }}
    >
      {children}
    </PurposesContext.Provider>
  );
}