From 8d90a8afdd0076c2c78950bbd1b0b4e018844265 Mon Sep 17 00:00:00 2001 From: Albert Wang Date: Sat, 28 Oct 2023 12:27:26 -0700 Subject: [PATCH 1/5] created resources sanity type --- apps/site/src/app/page.tsx | 3 +- .../sections/ApiResources/ApiResources.tsx | 6 ++- .../sections/ApiResources/getApiResources.tsx | 38 +++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 apps/site/src/views/Resources/sections/ApiResources/getApiResources.tsx diff --git a/apps/site/src/app/page.tsx b/apps/site/src/app/page.tsx index 1a9f8b98..f4f0352a 100644 --- a/apps/site/src/app/page.tsx +++ b/apps/site/src/app/page.tsx @@ -1,3 +1,4 @@ export const revalidate = 60; -export { Home as default } from "@/views"; +// export { Home as default } from "@/views"; +export { Resources as default } from "@/views"; diff --git a/apps/site/src/views/Resources/sections/ApiResources/ApiResources.tsx b/apps/site/src/views/Resources/sections/ApiResources/ApiResources.tsx index e9966df4..7568dece 100644 --- a/apps/site/src/views/Resources/sections/ApiResources/ApiResources.tsx +++ b/apps/site/src/views/Resources/sections/ApiResources/ApiResources.tsx @@ -1,3 +1,5 @@ +import { getResources } from "./getApiResources"; + import Container from "react-bootstrap/Container"; import Row from "react-bootstrap/Row"; import Col from "react-bootstrap/Col"; @@ -7,7 +9,9 @@ import styles from "./ApiResources.module.scss"; import { ApiGroup, APIGroupProps } from "../../components/ApiGroup/ApiGroup"; import ApiResourcesList from "./config"; -function ApiResources() { +async function ApiResources() { + const resources = await getResources(); + console.log(resources); return ( {/* Card Component */} diff --git a/apps/site/src/views/Resources/sections/ApiResources/getApiResources.tsx b/apps/site/src/views/Resources/sections/ApiResources/getApiResources.tsx new file mode 100644 index 00000000..8f45a475 --- /dev/null +++ b/apps/site/src/views/Resources/sections/ApiResources/getApiResources.tsx @@ -0,0 +1,38 @@ +import { z } from "zod"; +import { cache } from "react"; +import { client } from "@/lib/sanity/client"; +import { SanityDocument } from "@/lib/sanity/types"; + +const Resources = z.array( + SanityDocument.extend({ + description: z.array( + z.object({ + _key: z.string(), + children: z.array( + z.object({ + _key: z.string(), + text: z.string(), + }), + ), + }), + ), + link: z.string(), + logo: z.object({ + _type: z.string(), + asset: z.object({ + _ref: z.string(), + _type: z.literal("reference"), + }), + }), + stickyNoteColor: z.object({ + _type: z.literal("color"), + alpha: z.number(), + hex: z.string(), + }), + title: z.string(), + }), +); + +export const getResources = cache(async () => { + return Resources.parse(await client.fetch("*[_type == 'resource']")); +}); From 547ef785fe7be8987e0c0d1781714529fbf31279 Mon Sep 17 00:00:00 2001 From: Sam Der Date: Sun, 29 Oct 2023 08:56:00 -0700 Subject: [PATCH 2/5] feat: resourceType field --- apps/sanity/schemas/resource.ts | 14 ++++++++++++++ .../site/src/app/resources/{#page.tsx => page.tsx} | 0 .../getApiResources.tsx => getResources.ts} | 0 3 files changed, 14 insertions(+) rename apps/site/src/app/resources/{#page.tsx => page.tsx} (100%) rename apps/site/src/views/Resources/{sections/ApiResources/getApiResources.tsx => getResources.ts} (100%) diff --git a/apps/sanity/schemas/resource.ts b/apps/sanity/schemas/resource.ts index aeb1ae29..5856c2bb 100644 --- a/apps/sanity/schemas/resource.ts +++ b/apps/sanity/schemas/resource.ts @@ -13,6 +13,20 @@ export default defineType({ type: "string", validation: (Rule) => Rule.required(), }), + defineField({ + name: "resourceType", + title: "Resource Type", + type: "string", + options: { + list: [ + { title: "API", value: "api" }, + { title: "Backend", value: "backend" }, + { title: "Frontend", value: "frontend" }, + { title: "Starter Pack", value: "starter-pack" }, + ], + }, + validation: (Rule) => Rule.required(), + }), defineField({ name: "description", title: "Description", diff --git a/apps/site/src/app/resources/#page.tsx b/apps/site/src/app/resources/page.tsx similarity index 100% rename from apps/site/src/app/resources/#page.tsx rename to apps/site/src/app/resources/page.tsx diff --git a/apps/site/src/views/Resources/sections/ApiResources/getApiResources.tsx b/apps/site/src/views/Resources/getResources.ts similarity index 100% rename from apps/site/src/views/Resources/sections/ApiResources/getApiResources.tsx rename to apps/site/src/views/Resources/getResources.ts From cbbf9a5ca15960088b62f296b0e39ef5177d07a2 Mon Sep 17 00:00:00 2001 From: Sam Der Date: Sun, 29 Oct 2023 09:11:01 -0700 Subject: [PATCH 3/5] feat: resource sanity queries --- apps/site/package.json | 1 + apps/site/src/app/page.tsx | 3 +- apps/site/src/views/Resources/Resources.tsx | 2 - .../components/ApiGroup/ApiGroup.tsx | 9 +--- .../components/BackendGroup/BackendGroup.tsx | 24 +++------- apps/site/src/views/Resources/getResources.ts | 22 +++++++-- .../sections/ApiResources/ApiResources.tsx | 48 +++++++++---------- .../BackendResources/BackendResources.tsx | 47 +++++++++--------- pnpm-lock.yaml | 3 ++ 9 files changed, 78 insertions(+), 81 deletions(-) diff --git a/apps/site/package.json b/apps/site/package.json index 29c1cf25..e0dd6f2f 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -12,6 +12,7 @@ }, "dependencies": { "@portabletext/react": "^3.0.7", + "@sanity/image-url": "^1.0.2", "@types/node": "20.4.9", "@types/react": "18.2.20", "@types/react-dom": "^18.2.0", diff --git a/apps/site/src/app/page.tsx b/apps/site/src/app/page.tsx index f4f0352a..1a9f8b98 100644 --- a/apps/site/src/app/page.tsx +++ b/apps/site/src/app/page.tsx @@ -1,4 +1,3 @@ export const revalidate = 60; -// export { Home as default } from "@/views"; -export { Resources as default } from "@/views"; +export { Home as default } from "@/views"; diff --git a/apps/site/src/views/Resources/Resources.tsx b/apps/site/src/views/Resources/Resources.tsx index 0a310812..bda75a6b 100644 --- a/apps/site/src/views/Resources/Resources.tsx +++ b/apps/site/src/views/Resources/Resources.tsx @@ -1,5 +1,3 @@ -"use client"; - import styles from "./Resources.module.scss"; import Landing from "./sections/Landing/Landing"; import ApiResources from "./sections/ApiResources/ApiResources"; diff --git a/apps/site/src/views/Resources/components/ApiGroup/ApiGroup.tsx b/apps/site/src/views/Resources/components/ApiGroup/ApiGroup.tsx index 511aa525..a346e107 100644 --- a/apps/site/src/views/Resources/components/ApiGroup/ApiGroup.tsx +++ b/apps/site/src/views/Resources/components/ApiGroup/ApiGroup.tsx @@ -2,9 +2,8 @@ import styles from "./ApiGroup.module.scss"; export interface APIGroupProps { title: string; - description: string; + description: JSX.Element; stickerSrc: string; - tagSrc: string; tagLink: string; stickyNoteColor: string; } @@ -13,7 +12,6 @@ export function ApiGroup({ title, description, stickerSrc, - tagSrc, tagLink, stickyNoteColor, }: APIGroupProps) { @@ -28,11 +26,8 @@ export function ApiGroup({

{title}

-

{description}

+
{description}
- - - ); } diff --git a/apps/site/src/views/Resources/components/BackendGroup/BackendGroup.tsx b/apps/site/src/views/Resources/components/BackendGroup/BackendGroup.tsx index 96a22fd4..60f246cc 100644 --- a/apps/site/src/views/Resources/components/BackendGroup/BackendGroup.tsx +++ b/apps/site/src/views/Resources/components/BackendGroup/BackendGroup.tsx @@ -6,15 +6,14 @@ import Clear_Tape_Right from "@/assets/images/clear_tape_right.svg"; export interface tag { link: string; - src: string; - alt: string; + text: string; className?: string; } export interface BackendGroupProps { stickyNoteColor: string; title: string; - description: string; + description: JSX.Element; tags: tag[]; tapeOrientation: string; className?: string | undefined; @@ -54,29 +53,20 @@ export function BackendGroup({ {tapePosition}

{title}

-

{description}

+
{description}
- {tags?.map((tag) => ( - - ))} + {tags?.map((tag) => )}
); } -function Resource_Tag({ link, className, src, alt }: tag) { +function Resource_Tag({ link, className, text }: tag) { return ( -
- - {alt} - +
+ {text}
); } diff --git a/apps/site/src/views/Resources/getResources.ts b/apps/site/src/views/Resources/getResources.ts index 8f45a475..c1822e80 100644 --- a/apps/site/src/views/Resources/getResources.ts +++ b/apps/site/src/views/Resources/getResources.ts @@ -8,14 +8,26 @@ const Resources = z.array( description: z.array( z.object({ _key: z.string(), - children: z.array( + markDefs: z.array( z.object({ + _type: z.string(), + href: z.optional(z.string()), _key: z.string(), + }), + ), + children: z.array( + z.object({ text: z.string(), + _key: z.string(), + _type: z.literal("span"), + marks: z.array(z.string()), }), ), + _type: z.literal("block"), + style: z.literal("normal"), }), ), + resourceType: z.string(), link: z.string(), logo: z.object({ _type: z.string(), @@ -33,6 +45,10 @@ const Resources = z.array( }), ); -export const getResources = cache(async () => { - return Resources.parse(await client.fetch("*[_type == 'resource']")); +export const getResources = cache(async (resourceType: string) => { + return Resources.parse( + await client.fetch( + `*[_type == 'resource' && resourceType == '${resourceType}']`, + ), + ); }); diff --git a/apps/site/src/views/Resources/sections/ApiResources/ApiResources.tsx b/apps/site/src/views/Resources/sections/ApiResources/ApiResources.tsx index 7568dece..362e6a47 100644 --- a/apps/site/src/views/Resources/sections/ApiResources/ApiResources.tsx +++ b/apps/site/src/views/Resources/sections/ApiResources/ApiResources.tsx @@ -1,19 +1,16 @@ -import { getResources } from "./getApiResources"; - -import Container from "react-bootstrap/Container"; -import Row from "react-bootstrap/Row"; -import Col from "react-bootstrap/Col"; +import { PortableText } from "@portabletext/react"; +import imageUrlBuilder from "@sanity/image-url"; import styles from "./ApiResources.module.scss"; -import { ApiGroup, APIGroupProps } from "../../components/ApiGroup/ApiGroup"; -import ApiResourcesList from "./config"; +import { ApiGroup } from "../../components/ApiGroup/ApiGroup"; +import { getResources } from "../../getResources"; +import { client } from "@/lib/sanity/client"; async function ApiResources() { - const resources = await getResources(); - console.log(resources); + const resources = await getResources("api"); return ( - +
{/* Card Component */}

API Resources

@@ -25,22 +22,23 @@ async function ApiResources() { retrieve data.

- +
{/* Sticky Notes */} - {ApiResourcesList.map((resource: APIGroupProps) => ( - - - - ))} - - + {resources.map( + ({ _id, title, description, link, logo, stickyNoteColor }) => ( +
+ } + stickerSrc={imageUrlBuilder(client).image(logo).url()} + tagLink={link} + stickyNoteColor={stickyNoteColor.hex} + /> +
+ ), + )} +
+
); } diff --git a/apps/site/src/views/Resources/sections/BackendResources/BackendResources.tsx b/apps/site/src/views/Resources/sections/BackendResources/BackendResources.tsx index b005c740..c677fe80 100644 --- a/apps/site/src/views/Resources/sections/BackendResources/BackendResources.tsx +++ b/apps/site/src/views/Resources/sections/BackendResources/BackendResources.tsx @@ -1,16 +1,12 @@ -import Container from "react-bootstrap/Container"; -import Row from "react-bootstrap/Row"; -import Col from "react-bootstrap/Col"; import styles from "./BackendResources.module.scss"; -import { - BackendGroup, - BackendGroupProps, -} from "../../components/BackendGroup/BackendGroup"; -import BackendResourcesList from "./config"; +import { BackendGroup } from "../../components/BackendGroup/BackendGroup"; +import { getResources } from "../../getResources"; +import { PortableText } from "@portabletext/react"; -function BackendResources() { +async function BackendResources() { + const resources = await getResources("backend"); return ( - +
{/* Card Component */}

Backend Framework Resources

@@ -20,22 +16,23 @@ function BackendResources() { needs.

- +
{/* Sticky Notes */} - {BackendResourcesList.map((resource: BackendGroupProps) => ( - - - - ))} - - + {resources.map( + ({ _id, title, description, link, logo, stickyNoteColor }) => ( +
+ } + tags={[]} + tapeOrientation="left" + /> +
+ ), + )} +
+
); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f62f99e8..99063038 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -78,6 +78,9 @@ importers: '@portabletext/react': specifier: ^3.0.7 version: 3.0.7(react@18.2.0) + '@sanity/image-url': + specifier: ^1.0.2 + version: 1.0.2 '@types/node': specifier: 20.4.9 version: 20.4.9 From f196db717c269b5b2bb66080047684e3ffc9769e Mon Sep 17 00:00:00 2001 From: Sam Der Date: Sun, 29 Oct 2023 09:28:19 -0700 Subject: [PATCH 4/5] fix: resolve map key error --- .../views/Resources/components/BackendGroup/BackendGroup.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/site/src/views/Resources/components/BackendGroup/BackendGroup.tsx b/apps/site/src/views/Resources/components/BackendGroup/BackendGroup.tsx index 60f246cc..7e328cbc 100644 --- a/apps/site/src/views/Resources/components/BackendGroup/BackendGroup.tsx +++ b/apps/site/src/views/Resources/components/BackendGroup/BackendGroup.tsx @@ -56,7 +56,9 @@ export function BackendGroup({
{description}
- {tags?.map((tag) => )} + {tags?.map((tag) => ( + + ))}
From 52a554ae5a617e882644c5354b7a65c9280c5d6c Mon Sep 17 00:00:00 2001 From: Sam Der Date: Mon, 30 Oct 2023 16:39:29 -0700 Subject: [PATCH 5/5] fix: add cache revalidation --- apps/site/src/app/resources/page.tsx | 2 ++ apps/site/src/app/schedule/#page.tsx | 2 ++ 2 files changed, 4 insertions(+) diff --git a/apps/site/src/app/resources/page.tsx b/apps/site/src/app/resources/page.tsx index 8c26a744..7dd46ffc 100644 --- a/apps/site/src/app/resources/page.tsx +++ b/apps/site/src/app/resources/page.tsx @@ -1 +1,3 @@ +export const revalidate = 60; + export { Resources as default } from "@/views"; diff --git a/apps/site/src/app/schedule/#page.tsx b/apps/site/src/app/schedule/#page.tsx index 1729d952..6cf98b82 100644 --- a/apps/site/src/app/schedule/#page.tsx +++ b/apps/site/src/app/schedule/#page.tsx @@ -1 +1,3 @@ +export const revalidate = 60; + export { Schedule as default } from "@/views";