From dec7e70c43db4d64d89d96777ab23887c473bbf2 Mon Sep 17 00:00:00 2001 From: Antoine Phan Date: Thu, 5 Jun 2025 16:45:18 +0100 Subject: [PATCH] CMS fetching, Main page & members page (#12) * CMS fetching on main page * Getting council members * Image loading for council member * Placeholder avatar --- bun.lock | 55 ++++++++++++++++++++++++++--- package.json | 5 ++- src/assets/placeholderAvatar.png | Bin 0 -> 17819 bytes src/components/CouncilCard.svelte | 31 ++++++++++++++++ src/routes/+page.server.js | 10 ++++++ src/routes/+page.svelte | 15 ++------ src/routes/council/+page.server.js | 17 +++++++++ src/routes/council/+page.svelte | 15 +++++++- src/utils/utils.js | 18 ++++++++++ svelte.config.js | 3 +- 10 files changed, 150 insertions(+), 19 deletions(-) create mode 100644 src/assets/placeholderAvatar.png create mode 100644 src/routes/+page.server.js create mode 100644 src/routes/council/+page.server.js create mode 100644 src/utils/utils.js diff --git a/bun.lock b/bun.lock index fcb84d1..2fa3efd 100644 --- a/bun.lock +++ b/bun.lock @@ -3,8 +3,11 @@ "workspaces": { "": { "name": "ecsess-website", + "dependencies": { + "@sanity/client": "^7.2.2", + }, "devDependencies": { - "@skeletonlabs/skeleton": "^3.1.2", + "@skeletonlabs/skeleton": "^3.1.3", "@skeletonlabs/skeleton-svelte": "^1.2.1", "@sveltejs/adapter-auto": "^6.0.0", "@sveltejs/kit": "^2.20.7", @@ -19,7 +22,7 @@ "svelte-check": "^4.1.6", "tailwindcss": "^4.1.4", "typescript": "^5.8.3", - "vite": "^6.3.2", + "vite": "^6.3.3", }, }, }, @@ -134,7 +137,11 @@ "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.40.0", "", { "os": "win32", "cpu": "x64" }, "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ=="], - "@skeletonlabs/skeleton": ["@skeletonlabs/skeleton@3.1.2", "", { "peerDependencies": { "tailwindcss": "^4.0.0" } }, "sha512-ZrBFgSFEa1/ntkbXBKdRRhuDA9iigTTuq4Qph1QbxB+GBeuBQevHP6NXLTRKtED7MQYi43dc0kLPSUS2b1+cSA=="], + "@sanity/client": ["@sanity/client@7.2.2", "", { "dependencies": { "@sanity/eventsource": "^5.0.2", "get-it": "^8.6.9", "nanoid": "^3.3.11", "rxjs": "^7.0.0" } }, "sha512-dqoXuBIdW6m6HvTfdIlMEDedNMilRQKNW6lohDdO0+esr4TV0r5ygI16DL9luCqEYZX6eYKWcU2r5Np2imx6kg=="], + + "@sanity/eventsource": ["@sanity/eventsource@5.0.2", "", { "dependencies": { "@types/event-source-polyfill": "1.0.5", "@types/eventsource": "1.1.15", "event-source-polyfill": "1.0.31", "eventsource": "2.0.2" } }, "sha512-/B9PMkUvAlUrpRq0y+NzXgRv5lYCLxZNsBJD2WXVnqZYOfByL9oQBV7KiTaARuObp5hcQYuPfOAVjgXe3hrixA=="], + + "@skeletonlabs/skeleton": ["@skeletonlabs/skeleton@3.1.3", "", { "peerDependencies": { "tailwindcss": "^4.0.0" } }, "sha512-ZXllVGa5DoDQYeQF2866kKTGllRM11W0gRzvsDx8hiVE2Vj7Z0Z8dcOKOx+gb0myXG1PRAP5Yj7nwTLBDG14lg=="], "@skeletonlabs/skeleton-svelte": ["@skeletonlabs/skeleton-svelte@1.2.1", "", { "dependencies": { "@zag-js/accordion": "^1.7.0", "@zag-js/avatar": "^1.7.0", "@zag-js/combobox": "^1.7.0", "@zag-js/dialog": "^1.7.0", "@zag-js/file-upload": "^1.7.0", "@zag-js/pagination": "^1.7.0", "@zag-js/popover": "^1.7.0", "@zag-js/progress": "^1.7.0", "@zag-js/radio-group": "^1.7.0", "@zag-js/rating-group": "^1.7.0", "@zag-js/slider": "^1.7.0", "@zag-js/svelte": "^1.7.0", "@zag-js/switch": "^1.7.0", "@zag-js/tabs": "^1.7.0", "@zag-js/tags-input": "^1.7.0", "@zag-js/toast": "^1.7.0", "@zag-js/tooltip": "^1.7.0" }, "peerDependencies": { "svelte": "^5.20.0" } }, "sha512-lb0P+qgK1Lgs2EbTHxc2OSkq0Rr9W7Xtm8nyVWHOjM07Mm5OuTmP2ThfUXj8Z76JlrnJPayGrRZz5P+GefF0GQ=="], @@ -184,8 +191,16 @@ "@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + "@types/event-source-polyfill": ["@types/event-source-polyfill@1.0.5", "", {}, "sha512-iaiDuDI2aIFft7XkcwMzDWLqo7LVDixd2sR6B4wxJut9xcp/Ev9bO4EFg4rm6S9QxATLBj5OPxdeocgmhjwKaw=="], + + "@types/eventsource": ["@types/eventsource@1.1.15", "", {}, "sha512-XQmGcbnxUNa06HR3VBVkc9+A2Vpi9ZyLJcdS5dwaQQ/4ZMWFO+5c90FnMUpbtMZwB/FChoYHwuVg8TvkECacTA=="], + + "@types/follow-redirects": ["@types/follow-redirects@1.14.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-GWXfsD0Jc1RWiFmMuMFCpXMzi9L7oPDVwxUnZdg89kDNnqsRfUKXEtUYtA98A6lig1WXH/CYY/fvPW9HuN5fTA=="], + "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], + "@types/node": ["@types/node@22.15.19", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw=="], + "@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], "@zag-js/accordion": ["@zag-js/accordion@1.11.0", "", { "dependencies": { "@zag-js/anatomy": "1.11.0", "@zag-js/core": "1.11.0", "@zag-js/dom-query": "1.11.0", "@zag-js/types": "1.11.0", "@zag-js/utils": "1.11.0" } }, "sha512-s0TBz7ZiKe4y+J1N0sTUchmyIafapQwxVlPRO9VOybxE0QUCcQZ6NPBr3OwdWSBy0vVjPnm+xSMdy96KKTfkDw=="], @@ -276,6 +291,8 @@ "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + "decompress-response": ["decompress-response@7.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-6IvPrADQyyPGLpMnUh6kfKiqy7SrbXbjoUuZ90WMBJKErzv2pCiwlGEXjRX9/54OnTq+XFVnkOnOMzclLI5aEA=="], + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], "detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], @@ -290,16 +307,28 @@ "esrap": ["esrap@1.4.6", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" } }, "sha512-F/D2mADJ9SHY3IwksD4DAXjTt7qt7GWUf3/8RhCNWmC/67tyb55dpimHmy7EplakFaflV0R/PC+fdSPqrRHAQw=="], + "event-source-polyfill": ["event-source-polyfill@1.0.31", "", {}, "sha512-4IJSItgS/41IxN5UVAVuAyczwZF7ZIEsM1XAoUzIHA6A+xzusEZUutdXz2Nr+MQPLxfTiCvqE79/C8HT8fKFvA=="], + + "eventsource": ["eventsource@2.0.2", "", {}, "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA=="], + "fdir": ["fdir@6.4.4", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg=="], + "follow-redirects": ["follow-redirects@1.15.9", "", {}, "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="], + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + "get-it": ["get-it@8.6.9", "", { "dependencies": { "@types/follow-redirects": "^1.14.4", "decompress-response": "^7.0.0", "follow-redirects": "^1.15.9", "is-retry-allowed": "^2.2.0", "through2": "^4.0.2", "tunnel-agent": "^0.6.0" } }, "sha512-CSUbVbfTZZbRrPqiMPaV3mWw+3MDgRPANtqBxLSp94cUUUZVAZfjGDwArvu5z2bx5ABW2MNB5kdT3PTOxe3cTw=="], + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], "import-meta-resolve": ["import-meta-resolve@4.1.0", "", {}, "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw=="], + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + "is-reference": ["is-reference@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.6" } }, "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw=="], + "is-retry-allowed": ["is-retry-allowed@2.2.0", "", {}, "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg=="], + "jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], @@ -338,6 +367,8 @@ "mdsvex": ["mdsvex@0.12.5", "", { "dependencies": { "@types/mdast": "^4.0.4", "@types/unist": "^2.0.3", "prism-svelte": "^0.4.7", "prismjs": "^1.17.1", "unist-util-visit": "^2.0.1", "vfile-message": "^2.0.4" }, "peerDependencies": { "svelte": "^3.56.0 || ^4.0.0 || ^5.0.0-next.120" } }, "sha512-JQy8CBbGF1IvpxZTmGJigRiD1s2BKfLKS9xCLPKngjHToY8WMYLZ8WFGRpuR6x4C4bxipSuLm2LctwL2fVXaEQ=="], + "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], + "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], @@ -366,18 +397,26 @@ "proxy-compare": ["proxy-compare@3.0.1", "", {}, "sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q=="], + "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], "rollup": ["rollup@4.40.0", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.40.0", "@rollup/rollup-android-arm64": "4.40.0", "@rollup/rollup-darwin-arm64": "4.40.0", "@rollup/rollup-darwin-x64": "4.40.0", "@rollup/rollup-freebsd-arm64": "4.40.0", "@rollup/rollup-freebsd-x64": "4.40.0", "@rollup/rollup-linux-arm-gnueabihf": "4.40.0", "@rollup/rollup-linux-arm-musleabihf": "4.40.0", "@rollup/rollup-linux-arm64-gnu": "4.40.0", "@rollup/rollup-linux-arm64-musl": "4.40.0", "@rollup/rollup-linux-loongarch64-gnu": "4.40.0", "@rollup/rollup-linux-powerpc64le-gnu": "4.40.0", "@rollup/rollup-linux-riscv64-gnu": "4.40.0", "@rollup/rollup-linux-riscv64-musl": "4.40.0", "@rollup/rollup-linux-s390x-gnu": "4.40.0", "@rollup/rollup-linux-x64-gnu": "4.40.0", "@rollup/rollup-linux-x64-musl": "4.40.0", "@rollup/rollup-win32-arm64-msvc": "4.40.0", "@rollup/rollup-win32-ia32-msvc": "4.40.0", "@rollup/rollup-win32-x64-msvc": "4.40.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w=="], + "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], + "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="], + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "set-cookie-parser": ["set-cookie-parser@2.7.1", "", {}, "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ=="], "sirv": ["sirv@3.0.1", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + "svelte": ["svelte@5.28.2", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "acorn": "^8.12.1", "aria-query": "^5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "esm-env": "^1.2.1", "esrap": "^1.4.6", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-FbWBxgWOpQfhKvoGJv/TFwzqb4EhJbwCD17dB0tEpQiw1XyUEKZJtgm4nA4xq3LLsMo7hu5UY/BOFmroAxKTMg=="], "svelte-check": ["svelte-check@4.1.6", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "chokidar": "^4.0.1", "fdir": "^6.2.0", "picocolors": "^1.0.0", "sade": "^1.7.4" }, "peerDependencies": { "svelte": "^4.0.0 || ^5.0.0-next.0", "typescript": ">=5.0.0" }, "bin": { "svelte-check": "bin/svelte-check" } }, "sha512-P7w/6tdSfk3zEVvfsgrp3h3DFC75jCdZjTQvgGJtjPORs1n7/v2VMPIoty3PWv7jnfEm3x0G/p9wH4pecTb0Wg=="], @@ -386,12 +425,20 @@ "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="], + "through2": ["through2@4.0.2", "", { "dependencies": { "readable-stream": "3" } }, "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw=="], + "tinyglobby": ["tinyglobby@0.2.13", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw=="], "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="], + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], + "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + "unist-util-is": ["unist-util-is@4.1.0", "", {}, "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg=="], "unist-util-stringify-position": ["unist-util-stringify-position@2.0.3", "", { "dependencies": { "@types/unist": "^2.0.2" } }, "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g=="], @@ -404,7 +451,7 @@ "vfile-message": ["vfile-message@2.0.4", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" } }, "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ=="], - "vite": ["vite@6.3.2", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.3", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.12" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-ZSvGOXKGceizRQIZSz7TGJ0pS3QLlVY/9hwxVh17W3re67je1RKYzFHivZ/t0tubU78Vkyb9WnHPENSBCzbckg=="], + "vite": ["vite@6.3.5", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ=="], "vitefu": ["vitefu@1.0.6", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" }, "optionalPeers": ["vite"] }, "sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA=="], diff --git a/package.json b/package.json index c615128..ffda084 100644 --- a/package.json +++ b/package.json @@ -30,5 +30,8 @@ "format": "prettier --write .", "lint": "prettier --check ." }, - "type": "module" + "type": "module", + "dependencies": { + "@sanity/client": "^7.2.2" + } } diff --git a/src/assets/placeholderAvatar.png b/src/assets/placeholderAvatar.png new file mode 100644 index 0000000000000000000000000000000000000000..ded0599b6a75a43369a3acbb0037f441f7cc0f05 GIT binary patch literal 17819 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 literal 0 HcmV?d00001 diff --git a/src/components/CouncilCard.svelte b/src/components/CouncilCard.svelte index e69de29..343ddb8 100644 --- a/src/components/CouncilCard.svelte +++ b/src/components/CouncilCard.svelte @@ -0,0 +1,31 @@ + + +
+ + + {#if image} + + {:else} + + {/if} +

{name} - {yearProgram}

+
+

~ {position} ~

+

{email}

+

{positionDescription}

+
diff --git a/src/routes/+page.server.js b/src/routes/+page.server.js new file mode 100644 index 0000000..f005270 --- /dev/null +++ b/src/routes/+page.server.js @@ -0,0 +1,10 @@ +import { getFromCMS } from 'utils/utils.js'; + +// needs to concat and format this text +const query = `*[_type == "homepage"].description[].children[].text`; + +export const load = async () => { + return { + description: await getFromCMS(query) + }; +}; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 1c5657a..cedb97e 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,15 +1,7 @@ McGill ECSESS @@ -18,8 +10,7 @@

What is ECSESS?

- -

{description}

+

{data.description}

diff --git a/src/routes/council/+page.server.js b/src/routes/council/+page.server.js new file mode 100644 index 0000000..1138bdf --- /dev/null +++ b/src/routes/council/+page.server.js @@ -0,0 +1,17 @@ +import { getFromCMS } from 'utils/utils.js'; + +// needs to concat and format this text +const query = `*[_type == "members"]{ + name, + email, + position, + positionDescription, + "image": image.asset->url, + yearProgram +}`; + +export const load = async () => { + return { + members: await getFromCMS(query) + }; +}; diff --git a/src/routes/council/+page.svelte b/src/routes/council/+page.svelte index f97b941..9b1d1fc 100644 --- a/src/routes/council/+page.svelte +++ b/src/routes/council/+page.svelte @@ -1,13 +1,26 @@ ECSESS council -

Meet the council!

Group picture!

+
+ {#each data.members as councilMember} + + {/each} +

Here are the members of the ECSESS council!

diff --git a/src/utils/utils.js b/src/utils/utils.js new file mode 100644 index 0000000..c084d3a --- /dev/null +++ b/src/utils/utils.js @@ -0,0 +1,18 @@ +import { createClient } from '@sanity/client'; +import { SANITY_ID } from '$env/static/private'; + +const client = createClient({ + projectId: SANITY_ID, + dataset: 'production', + useCdn: true, + apiVersion: '2025-02-06' +}); + +/** + * + * @param {String} query the GROQ query from Sanity CMS + */ +export async function getFromCMS(query) { + return await client.fetch(query); +} + diff --git a/svelte.config.js b/svelte.config.js index d1738e4..ca38f78 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -8,7 +8,8 @@ const config = { alias: { // So you can import with `from 'components/...'` 'components': 'src/components/', - 'assets': 'src/assets' + 'assets': 'src/assets', + 'utils': 'src/utils' } },