From c82cd4f54551f77109c1c2fa9ab5631dbe67a060 Mon Sep 17 00:00:00 2001 From: Pasq G Date: Wed, 22 Jan 2025 03:07:27 +0100 Subject: [PATCH] Generem i afegim codis --- imports/ui/Codis.jsx | 145 ++++++++++++++++++++++++++++++++++++------- imports/ui/Info.jsx | 40 ++++++------ server/main.js | 47 ++++++++++++++ 3 files changed, 188 insertions(+), 44 deletions(-) diff --git a/imports/ui/Codis.jsx b/imports/ui/Codis.jsx index 9eb3bfd..5fe280f 100644 --- a/imports/ui/Codis.jsx +++ b/imports/ui/Codis.jsx @@ -1,7 +1,9 @@ import React, { Suspense, useEffect, useState, useRef, lazy } from 'react'; -import { Meteor } from 'meteor/meteor';; +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'; @@ -12,6 +14,12 @@ import CreatableSelect from 'react-select/creatable'; // import AsyncCreatableSelect from 'react-select/async-creatable'; // import { BarraNav } from "./BarraNav/BarraNav"; +// import InfiniteCalendar from 'react-infinite-calendar'; +import 'react-infinite-calendar/styles.css'; + +function generaCodi() { + return Random.id().slice(0, 5); +} export const Codis = () => { @@ -33,6 +41,9 @@ export const Codis = () => { useSubscribe('necessitats'); const necessitats = useTracker("necessitats", () => NecessitatsCollection.find().fetchAsync()); + 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); @@ -60,6 +71,7 @@ export const Codis = () => { return <> "Crear nou tipus..."} // filterOption={filterAmbit} @@ -178,37 +227,75 @@ export const Codis = () => { -
- - - -

- + +
+

TEMPS REAL:

+ + + +
+ + {/* L'activació condicionada desactivada fa que no siguen 'required' les dates d'inici i final */} + + + setActCond(!actCond)} + /> +

ATENCIÓ al format! (mm/dd/aaaa)

+ + Des de: +
+ Fins a: +
+
- {/* { pobles.map((v,i) => ) } */} -
- - - {ambitSeleccionat && esEditor && } + }}>Elimina} */} ; }; + const + today = new Date(), + lastWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7) + ; + + console.log("codis: ", codis); + return Carregant...} > @@ -232,10 +319,11 @@ export const Codis = () => { rowGap: `.3em`, alignContent: `space-around` }}>{ - ambits - .sort((a,b) => a.toLowerCase() > b.toLowerCase()) - .map(amb =>
  • a?.codi?.editedAt < b?.codi?.editedAt) + .map(cod =>
  • { backgroundColor: `${'lightgreen' || 'lightcoral'}` }} > - {amb}{esEditor && } + {cod.codi} + {/* {esEditor && } */}
  • ) } + + {/* */}
    ; }; \ No newline at end of file diff --git a/imports/ui/Info.jsx b/imports/ui/Info.jsx index a9a7a45..5af8d58 100644 --- a/imports/ui/Info.jsx +++ b/imports/ui/Info.jsx @@ -1,23 +1,23 @@ -import React from 'react'; -import { useFind, useSubscribe } from 'meteor/react-meteor-data'; -import { LinksCollection } from '../api/links'; +// import React from 'react'; +// import { useFind, useSubscribe } from 'meteor/react-meteor-data'; +// import { LinksCollection } from '../api/links'; -export const Info = () => { - const isLoading = useSubscribe('links'); - const links = useFind(() => LinksCollection.find()); +// export const Info = () => { +// const isLoading = useSubscribe('links'); +// const links = useFind(() => LinksCollection.find()); - if(isLoading()) { - return
    Loading...
    ; - } +// if(isLoading()) { +// return
    Loading...
    ; +// } - return ( -
    -

    Learn Meteor!

    - -
    - ); -}; +// return ( +//
    +//

    Learn Meteor!

    +// +//
    +// ); +// }; diff --git a/server/main.js b/server/main.js index 98febb9..9b6925e 100644 --- a/server/main.js +++ b/server/main.js @@ -6,6 +6,7 @@ import { Roles } from 'meteor/roles'; import { ROLS_GLOBALS, ROLS_DE_POBLE } from '../imports/roles'; import { NecessitatsCollection } from '../imports/api/necessitats'; import { TipusCollection } from '../imports/api/tipus'; +import { CodisCollection } from '../imports/api/codis'; async function insertPoble({ nomPoble, cp, comarca }) { await PoblesCollection.insertAsync({ nomPoble, cp, comarca, createdAt: new Date() }); @@ -201,6 +202,27 @@ Meteor.startup(async () => { return TipusCollection.find(); }); + Meteor.publish('codis', async function (uid) { + + const esAdmin = await Roles.userIsInRoleAsync(this.userId, "admin", null); + const userRoles = await Roles.getRolesForUserAsync(this.userId); + + // console.log("userRoles: ", userRoles); + // console.log("esAdmin: ", esAdmin); + + if (esAdmin) { + return CodisCollection.find({}); + } + + return false; + + // if (uid) { + // return Meteor.users.find({_id: uid}, {fields: {username: 1, avatarId: 1, avatarLink: 1}}); + // } + + return Meteor.users.find({},{fields: {username: 1, avatarId: 1, avatarLink: 1}}); + }); + Meteor.publish('usuaris', async function (uid) { const esAdmin = await Roles.userIsInRoleAsync(this.userId, "admin", null); @@ -379,6 +401,31 @@ Meteor.methods({ console.error(e); } }, + + 'editaOAfigCodi': async function (codiObj) { + const esAdmin = await Roles.userIsInRoleAsync(Meteor.userId(), "admin"); + try { + console.log(`CREACIÓ DE CODI sol·licitada per a "${codiObj.codi}". Comprovant si ${Meteor.userId()} és Admin: `, esAdmin); + + if (esAdmin && codiObj.codi) { + return await CodisCollection.upsertAsync( + { + _id: codiObj._id + }, { + $set: { + ...codiObj, + usuari: Meteor.userId(), + editedAt: new Date() + } + } + ); + } else { + throw new Error("El valor del codi no és vàlid"); + } + } catch (e) { + console.error(e); + } + }, }); }); \ No newline at end of file