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 { 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" } ] } /> >; } const QuadreInfo_Codis = () => { 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', { ...codiGenerat || [], codi: codiGenerat, ambit: d.get('selAmbit') || "", rol: d.get('selRol'), absCond, absActiu: d.get('absActiu'), condIni: d.get('condIni'), condFi: d.get('condFi') }) .then(() => setAmbitSeleccionat(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('modActivacioAbsolutaCodi', codiSeleccionat); setCodiSeleccionat({ ...codiSeleccionat, absCond: 'abs' }); } else { setConfecCodObj({ ...confecCodObj, absCond: 'abs' }) } }} /> Activació absoluta { if (codiSeleccionat) { Meteor.callAsync('modActivacioAbsolutaCodi', codiSeleccionat); setCodiSeleccionat({ ...codiSeleccionat, absCond: 'cond' }); } else { setConfecCodObj({ ...confecCodObj, absCond: 'cond' }) } }} /> Activació condicionada { (codiSeleccionat && codiSeleccionat?.absCond === 'abs' || confecCodObj?.absCond === 'abs' ) && codiSeleccionat?.absCond !== 'cond' && <> Actiu { ev.preventDefault(); ev.stopPropagation(); if (codiSeleccionat) { Meteor.callAsync('modActivacioAbsolutaCodi', codiSeleccionat); setCodiSeleccionat({ ...codiSeleccionat, absActiu: !codiSeleccionat.absActiu }); } setConfecCodObj({ ...confecCodObj, absActiu: !confecCodObj.absActiu }); }} /> > } { (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 }) }} defaultValue={confecCodObj.condIni} /> Fins a: { // console.log("dataFi: ", v.currentTarget.value); setConfecCodObj({ ...confecCodObj, condFi: v.currentTarget.value }) }} defaultValue={confecCodObj.condFi} /> > } ; }; 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); }} > { ev.preventDefault(); ev.stopPropagation(); Meteor.callAsync('modActivacioAbsolutaCodi', cod); }} /> {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)