From 261e23e7a065e4fc5c1b7d310dedb120de087512 Mon Sep 17 00:00:00 2001 From: Pasq G Date: Sat, 7 Dec 2024 20:17:53 +0100 Subject: [PATCH] =?UTF-8?q?Abans=20d'actualitzar=20la=20versi=C3=B3=20de?= =?UTF-8?q?=20React=20a=2019?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- imports/ui/App.jsx | 17 +++ imports/ui/BarraNav/BarraNav.jsx | 49 +------- .../PanellSeccions/PanellSeccions.jsx | 48 ++++++++ imports/ui/BarraNav/UserStat.jsx | 18 +-- imports/ui/Pobles.jsx | 3 +- imports/ui/Usuaris.jsx | 110 ++++++++++++++++++ server/main.js | 11 ++ 7 files changed, 202 insertions(+), 54 deletions(-) create mode 100644 imports/ui/BarraNav/PanellSeccions/PanellSeccions.jsx create mode 100644 imports/ui/Usuaris.jsx diff --git a/imports/ui/App.jsx b/imports/ui/App.jsx index e26b67c..e8d2ad0 100644 --- a/imports/ui/App.jsx +++ b/imports/ui/App.jsx @@ -10,13 +10,29 @@ import { Tipus } from './Tipus'; import { BarraNav } from './BarraNav/BarraNav'; import { UserStat } from './BarraNav/UserStat'; +import { Usuaris } from './Usuaris'; const Loguejat = lazy(async () => await import('/imports/ui/Loguejat.jsx')); + + export const App = () => { const user = useTracker("user", async () => await Meteor.userAsync()); + + const [esAdministrador, setEsAdministrador] = useState(false); + + const u = useTracker("user", async () => await Meteor.userAsync()); + const userId = Meteor.userId(); + + + useEffect(() => { + (async () => { + const comprovaAdmin = await Roles.userIsInRoleAsync(userId, ["admin"]); + setEsAdministrador(comprovaAdmin); + })(); +}, []); // const userId = await Meteor.userAsync(); return @@ -26,6 +42,7 @@ export const App = () => { Carregant...}>{user ? : } } /> + } /> } /> } /> } /> diff --git a/imports/ui/BarraNav/BarraNav.jsx b/imports/ui/BarraNav/BarraNav.jsx index dfd76af..223d1fe 100644 --- a/imports/ui/BarraNav/BarraNav.jsx +++ b/imports/ui/BarraNav/BarraNav.jsx @@ -1,50 +1,11 @@ -import React, {useState, useEffect} from "react"; +import React, {useState, useEffect, lazy} from "react"; import { Link } from 'react-router-dom'; import { Roles } from 'meteor/roles'; +import { PanellSeccions } from "./PanellSeccions/PanellSeccions"; -const BotóSecció = ({titol, linkto}) => { - return
- {titol} -
; -}; - -const SeccióPobles = () => ; - -const SeccióNecessitats = () => ; - -const SeccióTipus = () => ; - -const SeccióUsuaris = () => ; - -const PanellSeccions = ({children}) => { - return <>
{children}
-
- ; -}; +const SeccióPobles = lazy(async () => await import('/imports/ui/BarraNav/PanellSeccions/PanellSeccions.jsx')); +const SeccióNecessitats = lazy(async () => await import('/imports/ui/BarraNav/PanellSeccions/PanellSeccions.jsx')); +const SeccióTipus = lazy(async () => await import('/imports/ui/BarraNav/PanellSeccions/PanellSeccions.jsx')); const BarraNav = () => { const [esAdministrador, setEsAdministrador] = useState(false); diff --git a/imports/ui/BarraNav/PanellSeccions/PanellSeccions.jsx b/imports/ui/BarraNav/PanellSeccions/PanellSeccions.jsx new file mode 100644 index 0000000..2a73670 --- /dev/null +++ b/imports/ui/BarraNav/PanellSeccions/PanellSeccions.jsx @@ -0,0 +1,48 @@ +import React from "react"; +import { Link } from "react-router-dom"; + + +export const BotóSecció = ({titol, linkto}) => { + return
+ {titol} +
; +}; + +export const SeccióPobles = () => ; + +export const SeccióNecessitats = () => ; + +export const SeccióTipus = () => ; + +export const SeccióUsuaris = () => ; + +export const PanellSeccions = ({children}) => { + return <>
{children}
+
+ ; +}; + diff --git a/imports/ui/BarraNav/UserStat.jsx b/imports/ui/BarraNav/UserStat.jsx index 3268988..cd4ff2b 100644 --- a/imports/ui/BarraNav/UserStat.jsx +++ b/imports/ui/BarraNav/UserStat.jsx @@ -1,6 +1,6 @@ import { Meteor } from 'meteor/meteor'; -import React, {useState, useEffect} from 'react'; -import { useTracker } from 'meteor/react-meteor-data/suspense'; +import React, {useState, useEffect, Suspense} from 'react'; +import { useTracker, useFind } from 'meteor/react-meteor-data/suspense'; // import { FilesCol } from '/imports/api/files.js'; import { useNavigate, Link } from 'react-router-dom'; @@ -36,11 +36,11 @@ const UserStat = ({setEditaPerfil}) => { useEffect(() => { - (async () => { - const comprovaAdmin = await Roles.userIsInRoleAsync(userId, ["admin"]); + // (async () => { + const comprovaAdmin = Roles.userIsInRole(userId, ["admin"]); setEsAdministrador(comprovaAdmin); - })(); -}, []); + // })()1 + }, []); // const u = useUserContext(); @@ -64,7 +64,7 @@ const UserStat = ({setEditaPerfil}) => { // alert("avLnk: ", u.profile.avatarLink); - return <> + return
{ }} > - { esAdministrador &&
{
}

- ; + ; }; export { UserStat }; \ No newline at end of file diff --git a/imports/ui/Pobles.jsx b/imports/ui/Pobles.jsx index d586df0..3eb370c 100644 --- a/imports/ui/Pobles.jsx +++ b/imports/ui/Pobles.jsx @@ -14,7 +14,8 @@ export const Pobles = () => { const [pobleSeleccionat, setPobleSeleccionat] = useState(null); useSubscribe('pobles'); - const pobles = useTracker("pobles", () => PoblesCollection.find().fetchAsync()); + // const pobles = useTracker("pobles", () => PoblesCollection.find().fetchAsync()); + const pobles = useFind(PoblesCollection, [{}, {sort: {nomPoble: 1}}]); const [esEditor, setEsEditor] = useState(false); const userId = Meteor.userId(); diff --git a/imports/ui/Usuaris.jsx b/imports/ui/Usuaris.jsx new file mode 100644 index 0000000..59eca25 --- /dev/null +++ b/imports/ui/Usuaris.jsx @@ -0,0 +1,110 @@ +import React, { Suspense, useEffect, useState, useRef, lazy } from 'react'; +import { Meteor } from 'meteor/meteor'; +import { PoblesCollection } from '/imports/api/pobles.js'; +import { useSubscribe, useTracker, useFind } from 'meteor/react-meteor-data/suspense'; + +import { Roles } from 'meteor/roles'; +// import { useUserId } from 'meteor/react-meteor-accounts'; +import { BarraNav } from "./BarraNav/BarraNav"; + + + + +export const Usuaris = () => { + + const [usrSeleccionat, setUsrSeleccionat] = useState(null); + useSubscribe('pobles'); + const pobles = useTracker("pobles", () => PoblesCollection.find().fetchAsync()); + + const [esEditor, setEsEditor] = useState(false); + const userId = Meteor.userId(); + + const usuaris = useTracker("usuaris", () => { + Meteor.subscribe('usuaris'); + return Meteor.users.find().fetch().filter(u => u._id !== Meteor.userId()); + }); + // console.log("isAdmin: ", isAdmin) ; + console.log("usuaris: ", usuaris); + // (async () => { + useEffect(() => { + (async () => { + const comprovaAdmin = await Roles.userIsInRoleAsync(userId, ["admin"]); + setEsEditor(comprovaAdmin); + })(); + + }, []); + // })(); + + const QuadreInfo_Usuari = () => { + + return
+ + {usrSeleccionat &&

{usrSeleccionat._id}

} + +
{ + try { + Meteor.callAsync('editaOAfigPoble', + { + ...usrSeleccionat || [], + nomPoble: d.get('nomPoble'), + cp: d.get('cp') || "", + comarca: d.get('comarca') || "", + }).then(() => setUsrSeleccionat(null)) + .catch(err => console.error(err)); + } catch (err) { + alert(err); + console.error(err); + } + }} + > +
+
+
+ + +
+
; + }; + + return Carregant...} > +

Usuaris

+ + { esEditor && } + +
    { + usuaris + .sort((a,b) => a.username?.toLowerCase() > b.username?.toLowerCase()) + .map(usr =>
  • + {usr.username}{esEditor && }
  • ) + }
+
; +}; \ No newline at end of file diff --git a/server/main.js b/server/main.js index 860dcf6..1d38f67 100644 --- a/server/main.js +++ b/server/main.js @@ -192,6 +192,17 @@ Meteor.startup(async () => { return TipusCollection.find(); }); + Meteor.publish('usuaris', async function (uid) { + + const esAdmin = await Roles.userIsInRoleAsync(Meteor.userId(), "admin"); + const userRoles = await Roles.getRolesForUserAsync(Meteor.userId()); + + console.log("userRoles: ", userRoles); + 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}}); + }); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// try {