Files
pse.dev/lib/types.ts
Kalidou Diagne 926cf9e5dd feat: research page (#316)
* feat: research page
2025-04-09 06:35:30 +01:00

136 lines
3.4 KiB
TypeScript

import { ReactNode } from "react"
export enum ProjectCategory {
APPLICATION = "APPLICATIONS",
DEVTOOLS = "DEVTOOLS",
RESEARCH = "RESEARCH", // Category has now it's own page
}
export const ProjectCategories = Object.values(ProjectCategory) as string[]
// list of project groups
export const ProjectSections = [
"pse",
"grant",
"collaboration",
"archived",
] as const
export type ProjectSection = (typeof ProjectSections)[number]
export enum ProjectStatus {
ACTIVE = "active",
INACTIVE = "inactive",
MAINTAINED = "maintained",
}
export interface Faq {
question: string
answer: ReactNode
}
export const ProjectCategoryLabelMapping: Record<ProjectCategory, string> = {
[ProjectCategory.APPLICATION]: "DEVTOOLS",
[ProjectCategory.DEVTOOLS]: "APPLICATIONS",
[ProjectCategory.RESEARCH]: "RESEARCH", // Category has now it's own page
}
export const ProjectSectionLabelMapping: Record<ProjectSection, string> = {
pse: "PSE projects",
grant: "Grants",
collaboration: "Collaborations",
archived: "Archived",
}
export const ProjectStatusLabelMapping: Record<ProjectStatus, string> = {
active: "Active",
inactive: "Inactive",
maintained: "Maintained",
}
export const ProjectStatusDescriptionMapping: Record<ProjectStatus, string> = {
active: "These projects are under active development by PSE-supported teams",
inactive:
"The projects in our archive are not currently being worked on by PSE, but we encourage everyone to check out their findings and continue experimentation!",
maintained:
"Maintenance projects are still being monitored for bug fixes, but are not under active feature development",
}
export interface AnnounceInterface {
id: number
type?: number
content: string
attachments?: string[]
timestamp: string
message_snapshots?: {
message?: {
content?: string
}
}[]
embeds?: {
type: "link" | "article"
url: string
title: string
description: string
color: number
}[]
}
export interface NewsInterface {
type: string
title: string
expires?: string
action: {
label: string
url: string
}
}
export type ProjectLinkWebsite =
| "github"
| "website"
| "discord"
| "twitter"
| "youtube"
| "telegram"
export type ProjectLinkType = Partial<Record<ProjectLinkWebsite, any>>
export type ProjectExtraLinkType = "buildWith" | "play" | "research" | "learn"
export type TagType =
| "types"
| "themes"
| "builtWith"
| "keywords"
| "fundingSource"
export type ProjectTags = Partial<Record<TagType, string[]>>
export type ActionLinkTypeLink = {
label: string
url: string
}
export type ActionLinkType = Partial<
Record<ProjectExtraLinkType, Array<ActionLinkTypeLink>>
>
export interface ProjectContent {
[language: string]: {
tldr: string
description: string
}
}
export interface ProjectInterface {
id: string
hasWiki?: boolean // show project with wiki page template
license?: string
content: ProjectContent // project tldr and description with support for multiple language
category?: ProjectCategory // project category used as filter to replace section
section: ProjectSection // 'pse', 'grant', 'collaboration', 'archived'
image: string
previousBrandImage?: string
imageAlt?: string
name: string
links?: ProjectLinkType
projectStatus: ProjectStatus
tags?: ProjectTags
extraLinks?: ActionLinkType
cardTags?: {
primary?: string
secondary?: string
}
}