Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3373 | Rev 3432 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React, { createContext, useCallback } from "react";

import { useFetch } from "@hooks";

export const ParadigmsContext = createContext();

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

  const addParadigm = useCallback(
    (newParadigm) => {
      const newParadigms = [newParadigm, ...paradigms];
      mutate({ ...data, items: newParadigms });
    },
    [paradigms, mutate]
  );

  const removeParadigm = useCallback(
    (paradigmId) => {
      const newParadigms = paradigms.filter(
        (paradigm) => paradigm.id !== paradigmId
      );
      mutate({ ...data, items: newParadigms });
    },
    [paradigms, mutate]
  );

  const updateParadigm = useCallback(
    (updatedParadigm) => {
      const newParadigms = paradigms.map((paradigm) =>
        paradigm.id === updatedParadigm.id ? updatedParadigm : paradigm
      );
      mutate({ ...data, items: newParadigms });
    },
    [paradigms, mutate]
  );

  const getParadigmById = useCallback(
    (paradigmId) => paradigms.find((paradigm) => paradigm.id === paradigmId),
    [paradigms]
  );

  return (
    <ParadigmsContext.Provider
      value={{
        loading,
        paradigms,
        addUrl: link_add,
        total,
        addParadigm,
        removeParadigm,
        updateParadigm,
        getParadigmById,
      }}
    >
      {children}
    </ParadigmsContext.Provider>
  );
}