import { useConfig } from '../hooks/useConfig';
import { DataProvider } from '../context/DataContext';
import { useDataContext } from '../hooks/useDataContext';
import { usePaginatedList } from '../hooks/usePaginatedList';
import { useState } from 'react';
import CustomContainer from '../components/CustomContainer';
import ContentWrapper from '../components/ContentWrapper';
import LoadingIcon from '../components/LoadingIcon';
import SearchToolbar from '../components/SearchToolbar';
import PaginatedCardGrid from '../components/PaginatedCardGrid';
import SolicitudCard from '../components/Solicitudes/SolicitudCard';
import { Button } from 'react-bootstrap';
import CustomModal from '../components/CustomModal';
const PAGE_SIZE = 10;
const Solicitudes = () => {
const { config, configLoading } = useConfig();
if (configLoading || !config) return
;
const reqConfig = {
baseUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.requests.allWithPreUsers,
rawUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.requests.all,
acceptUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.requests.accept,
rejectUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.requests.reject,
params: {}
};
return (
);
};
const SolicitudesContent = ({ reqConfig }) => {
const { data, dataLoading, dataError, putData, deleteData } = useDataContext();
const [deleteTargetId, setDeleteTargetId] = useState(null);
const {
filtered,
searchTerm,
setSearchTerm
} = usePaginatedList({
data,
pageSize: PAGE_SIZE,
searchFn: (entry, term) => {
const normalized = term.toLowerCase();
return (
entry.preDisplayName?.toLowerCase().includes(normalized) ||
entry.preDni?.toLowerCase().includes(normalized) ||
entry.preEmail?.toLowerCase().includes(normalized) ||
String(entry.prePhone).includes(normalized)
);
},
sortFn: (a, b) => a.status - b.status
});
const handleAccept = async (entry) => {
const url = reqConfig.acceptUrl.replace(":requestId", entry.requestId);
try {
await putData(url, {});
} catch (err) {
console.error("❌ Error al aceptar solicitud:", err.message);
}
};
const handleReject = async (entry) => {
const url = reqConfig.rejectUrl.replace(":requestId", entry.requestId);
try {
await putData(url, {});
} catch (err) {
console.error("❌ Error al rechazar solicitud:", err.message);
}
};
const handleDelete = async (id) => {
setDeleteTargetId(id);
}
if (dataLoading) return
;
if (dataError) return {dataError}
;
return (
Panel de Solicitudes
Es necesario asignarle manualmente una contraseña al socio en caso de
aceptar su solicitud tanto de alta como de nuevo colaborador.
(
handleAccept(entry)}
onReject={() => handleReject(entry)}
onDelete={handleDelete}
/>
)}
/>
setDeleteTargetId(null)}
>
¿Estás seguro de que quieres eliminar la solicitud manualmente?
);
};
export default Solicitudes;