Merge branch 'main' into node-adapter
This commit is contained in:
BIN
src/assets/placeholderAvatar.png
Normal file
BIN
src/assets/placeholderAvatar.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,31 @@
|
||||
<script>
|
||||
/**
|
||||
* Schemas for Council Members:
|
||||
* {
|
||||
* email,
|
||||
* name,
|
||||
* position,
|
||||
* positionDescription,
|
||||
* yearProgram,
|
||||
* image // CDN URL from Sanity CMS
|
||||
* }
|
||||
*/
|
||||
let { name, position, email, positionDescription, yearProgram, image } = $props();
|
||||
import placeholder from 'assets/placeholderAvatar.png';
|
||||
import { Avatar } from '@skeletonlabs/skeleton-svelte';
|
||||
</script>
|
||||
|
||||
<div class="card h-1/2 max-h-1/2 w-full max-w-1/6 rounded-lg border-4 p-4">
|
||||
<!-- <img class="size-4/5" src={placeholder} alt="Placeholder"> -->
|
||||
<!-- <Avatar src={placeholder} {name} /> -->
|
||||
{#if image}
|
||||
<Avatar src={image} {name} />
|
||||
{:else}
|
||||
<Avatar src={placeholder} {name} />
|
||||
{/if}
|
||||
<p class="pb-2 text-xl font-bold">{name} - <span class="text-sm"> {yearProgram} </span></p>
|
||||
<hr />
|
||||
<p class="py-2 text-base font-bold">~ {position} ~</p>
|
||||
<p class="underline">{email}</p>
|
||||
<p class="text-sm">{positionDescription}</p>
|
||||
</div>
|
||||
|
||||
24
src/routes/+page.server.js
Normal file
24
src/routes/+page.server.js
Normal file
@@ -0,0 +1,24 @@
|
||||
import { getFromCMS } from 'utils/utils.js';
|
||||
|
||||
const homepageQuery = `*[_type == "homepage"]{
|
||||
"description": description[],
|
||||
"councilPhoto": councilPhoto.asset->url
|
||||
}[0]`;
|
||||
|
||||
const ohQuery = `*[_type=="oh"].schedule[]{
|
||||
day,
|
||||
startTime,
|
||||
endTime,
|
||||
"host": member->name
|
||||
}`;
|
||||
|
||||
export const load = async () => {
|
||||
let CMSresponse = await getFromCMS(homepageQuery);
|
||||
|
||||
return {
|
||||
description: CMSresponse.description,
|
||||
councilPhoto: CMSresponse.councilPhoto
|
||||
// ohs: await getFromCMS(ohQuery),
|
||||
// FAQs: "",
|
||||
};
|
||||
};
|
||||
@@ -1,15 +1,8 @@
|
||||
<script>
|
||||
import Section from 'components/Section.svelte';
|
||||
|
||||
// Getting info from ECSESS CMS
|
||||
// let description =
|
||||
// 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.';
|
||||
const query = '_type:homepage';
|
||||
|
||||
let description = $state();
|
||||
description = fetch(
|
||||
`https://${import.meta.env.SANITY_ID}.api.sanity.io/vX/data/query/production?query=${query}&perspective=drafts`
|
||||
).then((res) => res.json).then((json) => json.toString());
|
||||
import { PortableText } from '@portabletext/svelte';
|
||||
/** loading things from the server side */
|
||||
let { data } = $props();
|
||||
</script>
|
||||
|
||||
<title> McGill ECSESS </title>
|
||||
@@ -18,19 +11,18 @@
|
||||
<Section>
|
||||
<div class="flex h-1/2 flex-col items-center justify-center text-center">
|
||||
<p class="page-title">What is ECSESS?</p>
|
||||
|
||||
<p>{description}</p>
|
||||
<div id="test">
|
||||
<PortableText value={data.description} />
|
||||
</div>
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
<!-- Picture, FAQ -->
|
||||
<Section black>
|
||||
<h1>Our student council</h1>
|
||||
<div class="flex justify-around gap-12">
|
||||
<div>
|
||||
<p>PICTURES</p>
|
||||
</div>
|
||||
<div>
|
||||
<p>FAQ</p>
|
||||
<img src={data.councilPhoto} alt="ECSESS Council" />
|
||||
</div>
|
||||
</div>
|
||||
</Section>
|
||||
@@ -38,6 +30,11 @@
|
||||
<!-- Office Hours Calendar -->
|
||||
<Section>
|
||||
<div>
|
||||
<p class="text-2xl">Office Hours</p>
|
||||
<h1>FAQ</h1>
|
||||
<p>Under development</p>
|
||||
</div>
|
||||
<div>
|
||||
<h1 class="text-2xl">Office Hours</h1>
|
||||
<p>Under development</p>
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
16
src/routes/council/+page.server.js
Normal file
16
src/routes/council/+page.server.js
Normal file
@@ -0,0 +1,16 @@
|
||||
import { getFromCMS } from 'utils/utils.js';
|
||||
|
||||
const query = `*[_type == "members"]{
|
||||
name,
|
||||
email,
|
||||
position,
|
||||
positionDescription,
|
||||
"image": image.asset->url,
|
||||
yearProgram
|
||||
}`;
|
||||
|
||||
export const load = async () => {
|
||||
return {
|
||||
members: await getFromCMS(query)
|
||||
};
|
||||
};
|
||||
@@ -1,20 +1,26 @@
|
||||
<script>
|
||||
import CouncilCard from 'components/CouncilCard.svelte';
|
||||
import Section from 'components/Section.svelte';
|
||||
// import CouncilMember from 'utils/schemas.ts';
|
||||
let { data } = $props();
|
||||
</script>
|
||||
|
||||
<title> ECSESS council </title>
|
||||
|
||||
<Section>
|
||||
<p class="page-title">Meet the council!</p>
|
||||
|
||||
<p>Group picture!</p>
|
||||
|
||||
<p>Here are the members of the ECSESS council!</p>
|
||||
<div>
|
||||
<h2>President</h2>
|
||||
<p>Name:</p>
|
||||
<p>Email:</p>
|
||||
<p>Year:</p>
|
||||
<p>Program:</p>
|
||||
|
||||
<div class="flex flex-row flex-wrap items-center align-middle gap-10 p-4">
|
||||
{#each data.members as councilMember}
|
||||
<CouncilCard
|
||||
name={councilMember.name}
|
||||
position={councilMember.position}
|
||||
email={councilMember.email}
|
||||
positionDescription={councilMember.positionDescription}
|
||||
yearProgram={councilMember.yearProgram}
|
||||
image={councilMember.image}
|
||||
></CouncilCard>
|
||||
{/each}
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
17
src/routes/events/+page.server.js
Normal file
17
src/routes/events/+page.server.js
Normal file
@@ -0,0 +1,17 @@
|
||||
import { getFromCMS } from 'utils/utils.js';
|
||||
|
||||
// needs to concat and format this text
|
||||
const eventQuery = `*[_type == "events"]{
|
||||
name,
|
||||
category,
|
||||
date,
|
||||
location,
|
||||
description,
|
||||
"lastUpdated": _updatedAt,
|
||||
}`;
|
||||
|
||||
export const load = async () => {
|
||||
return {
|
||||
events: await getFromCMS(eventQuery),
|
||||
};
|
||||
};
|
||||
@@ -1,9 +1,27 @@
|
||||
<script>
|
||||
import Section from "components/Section.svelte";
|
||||
import { PortableText } from '@portabletext/svelte';
|
||||
import Section from 'components/Section.svelte';
|
||||
let { data } = $props();
|
||||
</script>
|
||||
|
||||
<title> ECSESS Events </title>
|
||||
|
||||
<Section>
|
||||
<p class='page-title'>Events</p>
|
||||
<p class="page-title">Events</p>
|
||||
{#each data.events as event}
|
||||
<div class="rounded-lg border-4 p-4">
|
||||
<p>{event.name}</p>
|
||||
<p>{event.date}</p>
|
||||
<p>{event.location}</p>
|
||||
<PortableText value={event.description} />
|
||||
Category:
|
||||
<div class="list">
|
||||
<ul class="list-inside list-disc space-y-2">
|
||||
{#each event.category as cat}
|
||||
<li>{cat}</li>
|
||||
{/each}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{/each}
|
||||
</Section>
|
||||
|
||||
15
src/routes/resources/+page.server.js
Normal file
15
src/routes/resources/+page.server.js
Normal file
@@ -0,0 +1,15 @@
|
||||
import { getFromCMS } from 'utils/utils.js';
|
||||
|
||||
// needs to concat and format this text
|
||||
const query = `*[_type == "resources"]{
|
||||
title,
|
||||
url,
|
||||
description,
|
||||
"lastUpdated":_updatedAt
|
||||
}`;
|
||||
|
||||
export const load = async () => {
|
||||
return {
|
||||
resources: await getFromCMS(query)
|
||||
};
|
||||
};
|
||||
@@ -1,15 +1,19 @@
|
||||
<script>
|
||||
import Section from 'components/Section.svelte';
|
||||
let { data } = $props();
|
||||
</script>
|
||||
|
||||
<title> Resources </title>
|
||||
|
||||
<Section>
|
||||
<p class='page-title'> Resources </p>
|
||||
|
||||
<h1>Resources for ECSE students at McGill University, presented by ECSESS!</h1>
|
||||
<p class="page-title">Resources</p>
|
||||
|
||||
<h2>Technical</h2>
|
||||
<h1>Resources for ECSE students at McGill University, presented by ECSESS!</h1>
|
||||
|
||||
<h2>Academic</h2>
|
||||
{#each data.resources as re}
|
||||
{re.title} <br>
|
||||
{re.url} <br>
|
||||
{re.description} <br>
|
||||
<p>==============</p>
|
||||
{/each}
|
||||
</Section>
|
||||
|
||||
8
src/utils/schemas.ts
Normal file
8
src/utils/schemas.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
type CouncilMember = {
|
||||
name: string,
|
||||
email: string,
|
||||
position: string,
|
||||
positionDescription: string,
|
||||
image: string, // URL
|
||||
yearProgram: string
|
||||
}
|
||||
18
src/utils/utils.js
Normal file
18
src/utils/utils.js
Normal file
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user