Skip to content

Commit

Permalink
feat: create index, event, faqs, resource, and sponsors schemas
Browse files Browse the repository at this point in the history
  • Loading branch information
waalbert committed Nov 12, 2023
1 parent 38e40fa commit d97b1c6
Show file tree
Hide file tree
Showing 5 changed files with 256 additions and 1 deletion.
63 changes: 63 additions & 0 deletions apps/sanity/schemas/event.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import { defineType, defineField, defineArrayMember } from "sanity";
import { CalendarClock } from "lucide-react";

export default defineType({
name: "event",
title: "Event",
icon: CalendarClock,
type: "document",
fields: [
defineField({
name: "title",
title: "Title",
type: "string",
validation: (Rule) => Rule.required(),
}),
defineField({
name: "location",
title: "Location",
type: "string",
}),
defineField({
name: "virtual",
title: "Virtual Meeting Link",
type: "url",
}),
defineField({
name: "startTime",
title: "Start Time",
type: "datetime",
validation: (Rule) => Rule.required(),
}),
defineField({
name: "endTime",
title: "End Time",
type: "datetime",
validation: (Rule) => Rule.required(),
}),
defineField({
name: "organization",
title: "Organization",
type: "string",
}),
defineField({
name: "hosts",
title: "Hosts",
type: "array",
of: [defineArrayMember({ type: "string" })],
}),
defineField({
name: "description",
title: "Description",
type: "array",
of: [
defineArrayMember({
type: "block",
styles: [{ title: "Normal", value: "normal" }],
lists: [],
}),
],
validation: (Rule) => Rule.required(),
}),
],
});
55 changes: 55 additions & 0 deletions apps/sanity/schemas/faqs.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import { defineType, defineField, defineArrayMember } from "sanity";
import { toPlainText } from "@portabletext/react";
import { FileQuestion } from "lucide-react";

export default defineType({
name: "faqs",
title: "FAQs",
type: "document",
fields: [
defineField({
name: "faqs",
title: "FAQs",
type: "array",
of: [
defineArrayMember({
type: "object",
name: "faq",
fields: [
defineField({
name: "question",
title: "Question",
type: "text",
}),
defineField({
name: "answer",
title: "Answer",
type: "array",
of: [
defineArrayMember({
type: "block",
styles: [{ title: "Normal", value: "normal" }],
lists: [],
}),
],
}),
],

preview: {
select: {
title: "question",
subtitle: "answer",
},
prepare({ title, subtitle }) {
return {
title,
subtitle: subtitle ? toPlainText(subtitle) : undefined,
media: FileQuestion,
};
},
},
}),
],
}),
],
});
7 changes: 6 additions & 1 deletion apps/sanity/schemas/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
export const schemaTypes = []
import faqs from "./faqs";
import event from "./event";
import resource from "./resource";
import sponsors from "./sponsors";

export const schemaTypes = [faqs, event, resource, sponsors];
71 changes: 71 additions & 0 deletions apps/sanity/schemas/resource.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import { defineType, defineField, defineArrayMember } from "sanity";
import { Globe } from "lucide-react";

export default defineType({
name: "resource",
title: "Resources",
type: "document",
icon: Globe,
fields: [
defineField({
name: "title",
title: "Title",
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",
type: "array",
of: [
defineArrayMember({
type: "block",
styles: [{ title: "Normal", value: "normal" }],
lists: [],
}),
],
validation: (Rule) => Rule.required(),
}),
defineField({
name: "link",
title: "Link",
type: "url",
validation: (Rule) => Rule.required(),
}),
defineField({
name: "logo",
title: "Logo",
type: "image",
validation: (Rule) => Rule.required(),
}),
defineField({
name: "stickyNoteColor",
title: "Sticky Note Color",
description:
"Note that the color will be used as a background for black text, so please choose a color with enough contrast.",
type: "color",
validation: (Rule) => Rule.required(),
}),
],
preview: {
select: {
title: "title",
subtitle: "description",
media: "logo",
},
},
});
61 changes: 61 additions & 0 deletions apps/sanity/schemas/sponsors.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { defineType, defineField, defineArrayMember } from "sanity";
import { HeartHandshake } from "lucide-react";

export default defineType({
name: "sponsors",
title: "Sponsors",
icon: HeartHandshake,
type: "document",
fields: [
defineField({
name: "sponsors",
title: "Sponsors",
type: "array",
of: [
defineArrayMember({
type: "object",
name: "sponsor",
fields: [
defineField({
name: "name",
title: "Name",
type: "string",
validation: (Rule) => Rule.required(),
}),
defineField({
name: "url",
title: "URL",
type: "url",
}),
defineField({
name: "tier",
title: "Tier",
type: "string",
options: {
list: [
{
title: "Bronze",
value: "bronze",
},
{
title: "Silver",
value: "silver",
},
],
layout: "radio",
direction: "vertical",
},
validation: (Rule) => Rule.required(),
}),
defineField({
name: "logo",
title: "Logo",
type: "image",
validation: (Rule) => Rule.required(),
}),
],
}),
],
}),
],
});

0 comments on commit d97b1c6

Please sign in to comment.