Done: requests
This commit is contained in:
@@ -3,8 +3,6 @@ import { Form, Row, Col, Button } from 'react-bootstrap';
|
|||||||
import { useDataContext } from '../../hooks/useDataContext';
|
import { useDataContext } from '../../hooks/useDataContext';
|
||||||
import { Alert } from 'react-bootstrap';
|
import { Alert } from 'react-bootstrap';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { generateSecurePassword } from '../../util/passwordGenerator';
|
|
||||||
|
|
||||||
|
|
||||||
const NewUserForm = ({ onSubmit, userType, plotNumber, errors = {} }) => {
|
const NewUserForm = ({ onSubmit, userType, plotNumber, errors = {} }) => {
|
||||||
const { getData } = useDataContext();
|
const { getData } = useDataContext();
|
||||||
@@ -12,7 +10,6 @@ const NewUserForm = ({ onSubmit, userType, plotNumber, errors = {} }) => {
|
|||||||
|
|
||||||
const [form, setForm] = useState({
|
const [form, setForm] = useState({
|
||||||
username: '',
|
username: '',
|
||||||
password: generateSecurePassword(8),
|
|
||||||
displayName: '',
|
displayName: '',
|
||||||
dni: '',
|
dni: '',
|
||||||
phone: '',
|
phone: '',
|
||||||
@@ -22,9 +19,7 @@ const NewUserForm = ({ onSubmit, userType, plotNumber, errors = {} }) => {
|
|||||||
city: '',
|
city: '',
|
||||||
memberNumber: '',
|
memberNumber: '',
|
||||||
plotNumber: plotNumber,
|
plotNumber: plotNumber,
|
||||||
type: userType,
|
type: userType
|
||||||
status: 1,
|
|
||||||
role: 0
|
|
||||||
});
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ const renderDescripcionSolicitud = (data, onProfile) => {
|
|||||||
case 1:
|
case 1:
|
||||||
return onProfile
|
return onProfile
|
||||||
? 'Has solicitado darte de baja.'
|
? 'Has solicitado darte de baja.'
|
||||||
: `${m?.displayName ?? 'Alguien'} quiere darse de baja.`;
|
: `${data.name ?? 'Alguien'} quiere darse de baja.`;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
if (onProfile) {
|
if (onProfile) {
|
||||||
@@ -60,19 +60,19 @@ const renderDescripcionSolicitud = (data, onProfile) => {
|
|||||||
][data.status] ?? 'Solicitud de colaborador.';
|
][data.status] ?? 'Solicitud de colaborador.';
|
||||||
}
|
}
|
||||||
return data.status === 0
|
return data.status === 0
|
||||||
? `${m?.displayName ?? 'Alguien'} quiere añadir un colaborador.`
|
? `${data.name ?? 'Alguien'} quiere añadir un colaborador.`
|
||||||
: `La solicitud de colaborador ha sido ${
|
: `La solicitud de colaborador ha sido ${
|
||||||
data.status === 1 ? 'aceptada' : 'rechazada'
|
data.status === 1 ? 'aceptada' : 'rechazada'
|
||||||
}.`;
|
}.`;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
return `${m?.displayName ?? 'Alguien'} quiere quitar su colaborador.`;
|
return `${data.name ?? 'Alguien'} quiere quitar su colaborador.`;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
return `${m?.displayName ?? 'Alguien'} quiere una parcela en el invernadero.`;
|
return `${data.name ?? 'Alguien'} quiere una parcela en el invernadero.`;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
return `${m?.displayName ?? 'Alguien'} quiere dejar su parcela del invernadero.`;
|
return `${data.name ?? 'Alguien'} quiere dejar su parcela del invernadero.`;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 'Tipo de solicitud desconocido.';
|
return 'Tipo de solicitud desconocido.';
|
||||||
@@ -201,7 +201,7 @@ const SolicitudCard = ({
|
|||||||
|
|
||||||
<ListGroup.Item>
|
<ListGroup.Item>
|
||||||
<FontAwesomeIcon icon={faSeedling} className="me-2" />
|
<FontAwesomeIcon icon={faSeedling} className="me-2" />
|
||||||
Tipo: <strong>{['Lista de espera', 'Hortelano', 'Hortelano + Invernadero', 'Colaborador'][m.type]}</strong>
|
Tipo: <strong>{['Lista de espera', 'Hortelano', 'Hortelano + Invernadero', 'Colaborador', 'Subvenciones', 'Desarrollador'][m.type]}</strong>
|
||||||
</ListGroup.Item>
|
</ListGroup.Item>
|
||||||
</ListGroup>
|
</ListGroup>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -62,24 +62,6 @@ export const useData = (config) => {
|
|||||||
return response.data;
|
return response.data;
|
||||||
};
|
};
|
||||||
|
|
||||||
const postDataValidated = async (endpoint, payload) => {
|
|
||||||
try {
|
|
||||||
const response = await axios.post(endpoint, payload, {
|
|
||||||
headers: {
|
|
||||||
Authorization: `Bearer ${localStorage.getItem("token")}`,
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
return { ok: true };
|
|
||||||
} catch (err) {
|
|
||||||
return {
|
|
||||||
ok: false,
|
|
||||||
errors: err.response?.data?.errors || {}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const putData = async (endpoint, payload) => {
|
const putData = async (endpoint, payload) => {
|
||||||
const response = await axios.put(endpoint, payload, {
|
const response = await axios.put(endpoint, payload, {
|
||||||
headers: getAuthHeaders(),
|
headers: getAuthHeaders(),
|
||||||
@@ -111,7 +93,6 @@ export const useData = (config) => {
|
|||||||
dataError,
|
dataError,
|
||||||
getData,
|
getData,
|
||||||
postData,
|
postData,
|
||||||
postDataValidated,
|
|
||||||
putData,
|
putData,
|
||||||
deleteData,
|
deleteData,
|
||||||
deleteDataWithBody,
|
deleteDataWithBody,
|
||||||
|
|||||||
@@ -26,10 +26,7 @@ const Anuncios = () => {
|
|||||||
|
|
||||||
const reqConfig = {
|
const reqConfig = {
|
||||||
baseUrl: `${config.apiConfig.baseUrl}${config.apiConfig.endpoints.announcements.all}`,
|
baseUrl: `${config.apiConfig.baseUrl}${config.apiConfig.endpoints.announcements.all}`,
|
||||||
params: {
|
params: {},
|
||||||
_sort: 'createdAt',
|
|
||||||
_order: 'desc',
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -19,10 +19,7 @@ const Documentacion = () => {
|
|||||||
|
|
||||||
const reqConfig = {
|
const reqConfig = {
|
||||||
baseUrl: config.apiConfig.coreUrl + config.apiConfig.endpoints.files.all,
|
baseUrl: config.apiConfig.coreUrl + config.apiConfig.endpoints.files.all,
|
||||||
params: {
|
params: {}
|
||||||
_sort: 'uploadedAt',
|
|
||||||
_order: 'desc'
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -29,10 +29,7 @@ const Gastos = () => {
|
|||||||
|
|
||||||
const reqConfig = {
|
const reqConfig = {
|
||||||
baseUrl: `${config.apiConfig.baseUrl}${config.apiConfig.endpoints.expenses.all}`,
|
baseUrl: `${config.apiConfig.baseUrl}${config.apiConfig.endpoints.expenses.all}`,
|
||||||
params: {
|
params: {},
|
||||||
_sort: 'createdAt',
|
|
||||||
_order: 'desc',
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -32,10 +32,7 @@ const Ingresos = () => {
|
|||||||
baseUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.incomes.withInfo,
|
baseUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.incomes.withInfo,
|
||||||
rawUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.incomes.all,
|
rawUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.incomes.all,
|
||||||
usersUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.users.all,
|
usersUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.users.all,
|
||||||
params: {
|
params: {}
|
||||||
_sort: 'createdAt',
|
|
||||||
_order: 'desc'
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ const ListaEspera = () => {
|
|||||||
|
|
||||||
const ListaEsperaContent = ({ reqConfig }) => {
|
const ListaEsperaContent = ({ reqConfig }) => {
|
||||||
const { authStatus } = useAuth();
|
const { authStatus } = useAuth();
|
||||||
const { data, dataLoading, dataError, postData, postDataValidated } = useDataContext();
|
const { data, dataLoading, dataError, postData } = useDataContext();
|
||||||
|
|
||||||
const [showWelcomeModal, setShowWelcomeModal] = useState(false);
|
const [showWelcomeModal, setShowWelcomeModal] = useState(false);
|
||||||
const [showNewUserFormModal, setShowNewUserFormModal] = useState(false);
|
const [showNewUserFormModal, setShowNewUserFormModal] = useState(false);
|
||||||
@@ -62,29 +62,34 @@ const ListaEsperaContent = ({ reqConfig }) => {
|
|||||||
const handleRegisterSubmit = async (formData) => {
|
const handleRegisterSubmit = async (formData) => {
|
||||||
setValidationErrors({});
|
setValidationErrors({});
|
||||||
|
|
||||||
const validation = await postDataValidated(
|
|
||||||
reqConfig.preUserValidationUrl,
|
|
||||||
formData
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!validation.ok) {
|
|
||||||
setValidationErrors(validation.errors);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const request = await postData(reqConfig.requestUrl, { type: 0, status: 0 });
|
const request = await postData(
|
||||||
|
reqConfig.requestUrl,
|
||||||
|
{
|
||||||
|
type: 0,
|
||||||
|
status: 0,
|
||||||
|
metadata: {
|
||||||
|
displayName: formData.displayName,
|
||||||
|
username: formData.username,
|
||||||
|
dni: formData.dni,
|
||||||
|
phone: formData.phone,
|
||||||
|
email: formData.email,
|
||||||
|
memberNumber: formData.memberNumber,
|
||||||
|
plotNumber: formData.plotNumber,
|
||||||
|
type: formData.type,
|
||||||
|
address: formData.address,
|
||||||
|
zipCode: formData.zipCode,
|
||||||
|
city: formData.city
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
const requestId = request?.requestId;
|
const requestId = request?.requestId;
|
||||||
if (!requestId) throw new Error("No se pudo registrar la solicitud.");
|
if (!requestId) throw new Error("No se pudo registrar la solicitud.");
|
||||||
|
|
||||||
await postData(reqConfig.preUsersUrl, {
|
|
||||||
...formData,
|
|
||||||
requestId
|
|
||||||
});
|
|
||||||
|
|
||||||
setShowNewUserFormModal(false);
|
setShowNewUserFormModal(false);
|
||||||
setShowConfirmationModal(true);
|
setShowConfirmationModal(true);
|
||||||
} catch (err) {
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
} catch (_err) {
|
||||||
setValidationErrors({ general: "Error inesperado al enviar la solicitud" });
|
setValidationErrors({ general: "Error inesperado al enviar la solicitud" });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ const Perfil = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const PerfilContent = ({ config }) => {
|
const PerfilContent = ({ config }) => {
|
||||||
const { data, dataLoading, dataError, postData, postDataValidated } = useDataContext();
|
const { data, dataLoading, dataError, postData } = useDataContext();
|
||||||
const { logout } = useAuth();
|
const { logout } = useAuth();
|
||||||
|
|
||||||
const identity = JSON.parse(localStorage.getItem("identity"));
|
const identity = JSON.parse(localStorage.getItem("identity"));
|
||||||
@@ -102,6 +102,7 @@ const PerfilContent = ({ config }) => {
|
|||||||
|
|
||||||
const baseMetadata = {
|
const baseMetadata = {
|
||||||
displayName: identity.user.displayName,
|
displayName: identity.user.displayName,
|
||||||
|
username: identity.account.username,
|
||||||
dni: identity.metadata.dni,
|
dni: identity.metadata.dni,
|
||||||
phone: identity.metadata.phone,
|
phone: identity.metadata.phone,
|
||||||
email: identity.account.email,
|
email: identity.account.email,
|
||||||
@@ -120,6 +121,7 @@ const PerfilContent = ({ config }) => {
|
|||||||
type,
|
type,
|
||||||
status: CONSTANTS.REQUEST_PENDING,
|
status: CONSTANTS.REQUEST_PENDING,
|
||||||
userId: identity.user.userId,
|
userId: identity.user.userId,
|
||||||
|
name: identity.user.displayName,
|
||||||
metadata: baseMetadata
|
metadata: baseMetadata
|
||||||
});
|
});
|
||||||
setFeedbackModal({
|
setFeedbackModal({
|
||||||
@@ -419,19 +421,23 @@ const PerfilContent = ({ config }) => {
|
|||||||
plotNumber={identity.metadata.plotNumber}
|
plotNumber={identity.metadata.plotNumber}
|
||||||
errors={validationErrors}
|
errors={validationErrors}
|
||||||
onSubmit={async (formData) => {
|
onSubmit={async (formData) => {
|
||||||
|
console.log("🚀 Enviando al backend...", formData); // Debug
|
||||||
|
try {
|
||||||
|
setValidationErrors({});
|
||||||
|
|
||||||
await postData(config.requestUrl, {
|
await postData(config.requestUrl, {
|
||||||
type: CONSTANTS.REQUEST_TYPE_ADD_COLLABORATOR,
|
type: CONSTANTS.REQUEST_TYPE_ADD_COLLABORATOR,
|
||||||
status: CONSTANTS.REQUEST_PENDING,
|
status: CONSTANTS.REQUEST_PENDING,
|
||||||
userId: identity.user.userId,
|
userId: identity.user.userId,
|
||||||
metadata: {
|
metadata: {
|
||||||
displayName: formData.displayName,
|
displayName: formData.displayName,
|
||||||
|
username: formData.username,
|
||||||
dni: formData.dni,
|
dni: formData.dni,
|
||||||
phone: formData.phone,
|
phone: formData.phone,
|
||||||
email: formData.email,
|
email: formData.email,
|
||||||
memberNumber: formData.memberNumber,
|
memberNumber: formData.memberNumber,
|
||||||
plotNumber: formData.plotNumber,
|
plotNumber: formData.plotNumber,
|
||||||
type: formData.type,
|
type: formData.type
|
||||||
role: formData.role
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -442,6 +448,11 @@ const PerfilContent = ({ config }) => {
|
|||||||
variant: 'success',
|
variant: 'success',
|
||||||
onClick: closeFeedback
|
onClick: closeFeedback
|
||||||
});
|
});
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.error("💥 Error al añadir:", error);
|
||||||
|
setValidationErrors({ general: error.message || "Ha ocurrido un error al procesar la solicitud." });
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</CustomModal>
|
</CustomModal>
|
||||||
|
|||||||
@@ -31,10 +31,7 @@ const Socios = () => {
|
|||||||
baseUrl: `${config.apiConfig.baseUrl}${config.apiConfig.endpoints.users.all}`,
|
baseUrl: `${config.apiConfig.baseUrl}${config.apiConfig.endpoints.users.all}`,
|
||||||
incomesUrl: `${config.apiConfig.baseUrl}${config.apiConfig.endpoints.users.incomesPreview}`,
|
incomesUrl: `${config.apiConfig.baseUrl}${config.apiConfig.endpoints.users.incomesPreview}`,
|
||||||
rawIncomesUrl: `${config.apiConfig.baseUrl}${config.apiConfig.endpoints.incomes.all}`,
|
rawIncomesUrl: `${config.apiConfig.baseUrl}${config.apiConfig.endpoints.incomes.all}`,
|
||||||
params: {
|
params: {}
|
||||||
_sort: "memberNumber",
|
|
||||||
_order: "asc"
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ const SolicitudesContent = ({ reqConfig }) => {
|
|||||||
const url = reqConfig.acceptUrl.replace(":requestId", entry.requestId);
|
const url = reqConfig.acceptUrl.replace(":requestId", entry.requestId);
|
||||||
try {
|
try {
|
||||||
await putData(url, {});
|
await putData(url, {});
|
||||||
|
setSearchTerm("");
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error("❌ Error al aceptar solicitud:", err.message);
|
console.error("❌ Error al aceptar solicitud:", err.message);
|
||||||
}
|
}
|
||||||
@@ -71,11 +72,13 @@ const SolicitudesContent = ({ reqConfig }) => {
|
|||||||
const url = reqConfig.rejectUrl.replace(":requestId", entry.requestId);
|
const url = reqConfig.rejectUrl.replace(":requestId", entry.requestId);
|
||||||
try {
|
try {
|
||||||
await putData(url, {});
|
await putData(url, {});
|
||||||
|
setSearchTerm("");
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error("❌ Error al rechazar solicitud:", err.message);
|
console.error("❌ Error al rechazar solicitud:", err.message);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const handleDelete = async (id) => {
|
const handleDelete = async (id) => {
|
||||||
setDeleteTargetId(id);
|
setDeleteTargetId(id);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import cleanPlugin from 'vite-plugin-clean';
|
|||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [react(), cleanPlugin()],
|
plugins: [react(), cleanPlugin()],
|
||||||
server: {
|
server: {
|
||||||
host: "localhost",
|
host: "0.0.0.0",
|
||||||
port: 3000,
|
port: 3000,
|
||||||
},
|
},
|
||||||
build: {
|
build: {
|
||||||
|
|||||||
Reference in New Issue
Block a user