import React, { Suspense, useEffect, useState } from 'react'; import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { NecessitatsCollection } from '/imports/api/necessitats.js'; import { PoblesCollection } from '../api/pobles'; import { CodisCollection } from '../api/codis'; // import { TipusCollection } from '../api/tipus'; import { useSubscribe, useTracker, useFind } from 'meteor/react-meteor-data/suspense'; import { Roles } from 'meteor/roles'; // import { useNavigate } from 'react-router-dom'; // import { useUserId } from 'meteor/react-meteor-accounts'; import Select from 'react-select'; function generaCodi() { return Random.id().slice(0, 5).toUpperCase(); } export const Codis = () => { const [esEditor, setEsEditor] = useState(false); const userId = Meteor.userId(); const [codiSeleccionat, setCodiSeleccionat] = useState(null); useEffect(() => { (async () => { const comprovaAdmin = await Roles.userIsInRoleAsync(userId, ["admin"]); setEsEditor(comprovaAdmin); })(); }, []); const [confecCodObj, setConfecCodObj] = useState({ codi: generaCodi(), ambit: null, rol: null, absCond: "abs", absActiu: false, condIni: null, condFi: null }); useSubscribe('codis'); const codis = useTracker("codis", () => CodisCollection.find().fetchAsync()); useSubscribe('pobles'); const pobles = useTracker("pobles", () => PoblesCollection.find().fetchAsync()); const ambits = pobles?.map(p => p?.ambitAssociat); const codiDoc = useTracker("valsFormDoc", () => CodisCollection.findOneAsync(codiSeleccionat?._id)); const SelectorDeRol = () => { return <> Rol: { // console.log("v: ", v); // console.log("cCO abans: ", confecCodObj); setConfecCodObj({ ...confecCodObj, rol: v }); // console.log("cCO despres: ", confecCodObj); }} options={ (confecCodObj?.ambit?.value === "GENERAL") ? [ { value: "admin", label: "administrador" }, { value: "usuari", label: "usuari" } ] : [ { value: "monitor_de_poble", label: "monitor_de_poble" }, { value: "encarregat_de_tasques", label: "encarregat_de_tasques" }, { value: "voluntari_de_poble", label: "voluntari_de_poble" } ] } /> >; } function handleToggleAbsActiu(ev) { ev.preventDefault(); ev.stopPropagation(); if (codiSeleccionat) { Meteor.callAsync('modCodiDocToggleAbsActiu', codiSeleccionat); setCodiSeleccionat({ ...codiSeleccionat, absActiu: !codiSeleccionat.absActiu }); } else { setConfecCodObj({ ...confecCodObj, absActiu: !confecCodObj.absActiu }); } } function handleSetCondIni(v) { console.log("h") Meteor.callAsync('modCodiDocSetCondIni', { ...codiSeleccionat, condIni: v.currentTarget.value }); if (codiSeleccionat) { setCodiSeleccionat({ ...codiSeleccionat, condIni: v.currentTarget.value }); } else { setConfecCodObj({ ...confecCodObj, condIni: v.currentTarget.value }); } } function handleSetCondFi(v) { Meteor.callAsync('modCodiDocSetCondFi', { ...codiSeleccionat, condFi: v.currentTarget.value }); if (codiSeleccionat) { setCodiSeleccionat({ ...codiSeleccionat, condFi: v.currentTarget.value }); } else { setConfecCodObj({ ...confecCodObj, condFi: v.currentTarget.value }); } } const QuadreInfo_Codis = () => { // const navigate = useNavigate(); const [actCond, setActCond] = useState(true); // const [codiGenerat, setCodiGenerat] = useState(generaCodi()); const [absCond, setAbsCond] = useState('cond'); const codSelAbsActChecked = codiDoc ? {checked: codiDoc.absActiu} : {defaultChecked: confecCodObj.absActiu}; // console.log("cS: ", codiSeleccionat); // console.log("cCO: ", confecCodObj); return Codis {codiSeleccionat ? codiSeleccionat?.codi : confecCodObj.codi} Tria el rol que adquirirà qui utilitze el codi anterior una vegada activat { try { Meteor.callAsync('editaOAfigCodi', { ...confecCodObj || [], codi: confecCodObj.codi, ambit: d.get('selAmbit') || "", rol: d.get('selRol'), absCond: d.get('absCond'), absActiu: d.get('absActiu'), condIni: d.get('condIni'), condFi: d.get('condFi') }) .then(() => setConfecCodObj({ codi: generaCodi(), ambit: null, rol: null, absCond: "abs", absActiu: false, condIni: null, condFi: null })) .catch(err => console.error(err)) ; } catch (err) { alert(err); console.error(err); } }} > Àmbit: ({ value: v, label: v })) .sort((a,b) => a.label.toLowerCase() > b.label.toLowerCase()), { value: "GENERAL", label: "GENERAL" } ] } isSearchable onChange={amb => { setConfecCodObj({ ...confecCodObj, ambit: amb }); }} /> Periode de validesa: {/* TEMPS REAL: */} { if (codiSeleccionat) { Meteor.callAsync('modActivacioAbsCond', codiSeleccionat, 'abs'); setCodiSeleccionat({ ...codiSeleccionat, absCond: 'abs' }); } else { setConfecCodObj({ ...confecCodObj, absCond: 'abs' }) } }} /> Activació absoluta { // console.log("ev: ", ev); if (codiSeleccionat) { Meteor.callAsync('modActivacioAbsCond', codiSeleccionat, 'cond'); setCodiSeleccionat({ ...codiSeleccionat, absCond: 'cond' }); } else { setConfecCodObj({ ...confecCodObj, absCond: 'cond' }) } }} /> Activació condicionada { (codiSeleccionat && codiSeleccionat?.absCond === 'abs' || confecCodObj?.absCond === 'abs' ) && codiSeleccionat?.absCond !== 'cond' && <> Actiu { handleToggleAbsActiu(ev); }} /> > } { (codiSeleccionat && codiSeleccionat.absCond === 'cond' || confecCodObj?.absCond === 'cond' ) && codiSeleccionat?.absCond !== 'abs' && <> ATENCIÓ al format! (mm/dd/aaaa) Des de: { // // console.log("dataIni: ", v.currentTarget.value); // setConfecCodObj({ // ...confecCodObj, // condIni: v.currentTarget.value // }) handleSetCondIni(v); }} defaultValue={codiSeleccionat?.condIni || confecCodObj.condIni} /> Fins a: { // console.log("dataFi: ", v.currentTarget.value); // setConfecCodObj({ // ...confecCodObj, // condFi: v.currentTarget.value // }) handleSetCondFi(v); }} defaultValue={codiSeleccionat?.condFi || confecCodObj.condFi} /> > } {!codiSeleccionat && } ; }; const today = new Date(), lastWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7) ; return Carregant...>} > { codis .map(cod => { ev.preventDefault(); ev.stopPropagation(); setCodiSeleccionat(codiSeleccionat?._id === cod._id ? null : cod); }} > { handleToggleAbsActiu(ev); }} /> {cod.codi} {} ) } ; };
Tria el rol que adquirirà qui utilitze el codi anterior una vegada activat
Periode de validesa:
TEMPS REAL:
ATENCIÓ al format! (mm/dd/aaaa)