Proyectos de Subversion LeadersLinked - SPA

Rev

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

import { useRef, useState, useMemo } from 'react';

import { useFetch } from '@shared/hooks';
import { useDebouncedSearchParam } from '@shared/hooks/useDebouncedSearchParam';

const CAPSULES_ROUTES = {
  pending: {
    link: '/microlearning/capsules-pending',
    params: {
      order_field: 'added_on',
      order_direction: 'desc'
    }
  },
  progress: {
    link: '/microlearning/capsules-in-progress',
    params: {}
  },
  completed: {
    link: '/microlearning/capsules-completed',
    params: {
      order_field: 'last_access_on',
      order_direction: 'desc'
    }
  }
};

const CAPSULES_CATEGORIES = [
  {
    label: 'Pendiente',
    value: 'pending'
  },
  {
    label: 'En curso',
    value: 'progress'
  },
  {
    label: 'Finalizado',
    value: 'completed'
  }
];

export function useMicrolearning() {
  const [category, setCategory] = useState(CAPSULES_CATEGORIES[0].value);
  const {
    inputValue: searchTerm,
    setInputValue: setSearchTerm,
    debouncedValue: debouncedSearchTerm
  } = useDebouncedSearchParam('search', 500);

  const capsulesRoutes = useRef(CAPSULES_ROUTES);
  const capsuleCategories = useRef(CAPSULES_CATEGORIES);

  const { data: rawCapsules, loading: capsulesLoading } = useFetch(
    capsulesRoutes.current[category].link,
    { initialParams: capsulesRoutes.current[category].params }
  );

  const capsules = useMemo(() => {
    if (!rawCapsules) return [];
    if (!debouncedSearchTerm) return rawCapsules;
    return rawCapsules.filter((capsule) =>
      capsule.name?.toLowerCase().includes(debouncedSearchTerm.toLowerCase())
    );
  }, [rawCapsules, debouncedSearchTerm]);

  const { data: currentCapsule, loading: currentCapsuleLoading } = useFetch(
    '/microlearning/last-capsule-in-progress'
  );

  const changeCategory = (value) => {
    setCategory(value);
  };

  return {
    capsules: capsules || [],
    currentCapsule,
    capsulesLoading,
    currentCapsuleLoading,
    category,
    categories: capsuleCategories.current,
    changeCategory,
    searchCapsules: setSearchTerm,
    searchTerm
  };
}