From dfa93f039a8191bd88d6f39f75730803e4bfba8d Mon Sep 17 00:00:00 2001 From: Stanisław Zagórowski Date: Wed, 30 Aug 2023 21:58:20 +0200 Subject: front: pull project data from JSON --- front/src/components/project.tsx | 93 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 front/src/components/project.tsx (limited to 'front/src/components/project.tsx') diff --git a/front/src/components/project.tsx b/front/src/components/project.tsx new file mode 100644 index 0000000..cb9496d --- /dev/null +++ b/front/src/components/project.tsx @@ -0,0 +1,93 @@ +import Carousel from "./carousel"; +import './project.css'; + +enum ProjectType { + GAME = "game", + PROJECT = "project", +} + +export enum ProjectTech { + CSHARP = "csharp", + RUST = "rust", + C = "c", + CPP = "cpp", + JAVASCRIPT = "javascript", + TYPESCRIPT = "typescript", + HTML = "html", + CSS = "css", + + PREACT = "preact", + UNITY = "unity", + GODOT = "godot", + MONOGAME = "monogame", +} + +export enum ProjectTarget { + WEB = "html5", + WINDOWS = "windows", + LINUX = "linux", + MACOS = "macos", + ANDROID = "android", + HYPRLAND = "hyprland", +} + +export interface ProjectDescriptor { + name: string; + name_normalized: string; + type: ProjectType; + link: string; + tech: ProjectTech[]; + targets: ProjectTarget[]; + images: string[]; + description: string; +} + +function getProjectImageLink(project: ProjectDescriptor, image: string) { + return `assets/${project.type}s/${project.name_normalized}/${image}`; +} + +function getProjectTechIconLink(tech: ProjectTech) { + return `assets/images/${tech}.png`; +} + +function getProjectTargetIconLink(target: ProjectTarget) { + return `assets/images/${target}.png`; +} + +export function Project(props: ProjectDescriptor) { + return ( +
+ +
+
+
Made using
+
+ {props.tech.map((tech) => ( + + ))} +
+
+
+
Available on
+
+ {props.targets.map((target) => ( + + ))} +
+
+
+
+ { + // use description as html +
+ } +
+
+ + {props.images.map((image) => ( + + ))} + +
+ ); +} -- cgit v1.3.1