Revised ProjectCards to be MagicCards so they can also be used for other sections of the site

This commit is contained in:
AtHeartEngineer
2022-05-25 09:57:03 -04:00
parent 467692f3e6
commit 7afe41ce93
5 changed files with 33 additions and 18 deletions

View File

@@ -6,6 +6,7 @@ This is the React re-write of the PSE website, formally just a landing page.
## Get Started with Development
`npm install`
`npm run start` serves a development server at [http://localhost:8081](http://localhost:8081)
The components live under `/src/components`.

8
src/Utils.tsx Normal file
View File

@@ -0,0 +1,8 @@
export function shuffleFisherYates(array: []): [] {
let i = array.length;
while (i--) {
const ri = Math.floor(Math.random() * i);
[array[i], array[ri]] = [array[ri], array[i]];
}
return array;
}

View File

@@ -25,7 +25,7 @@
.icon {
height: 1.5rem;
padding-block: 0.125rem;
padding-inline-end: 0.33rem;
padding-inline-end: 0.5rem;
}
.link-title {

View File

@@ -3,14 +3,14 @@ import github from '../images/github.svg';
import discord from '../images/discord.svg';
import twitter from '../images/twitter.svg';
import telegram from '../images/telegram.svg';
import './ProjectCard.css';
import './MagicCard.css';
import ColorHash from 'color-hash'
export interface ProjectProps {
export interface CardProps {
name: string;
short_name?: string;
description: string;
long_description?: string;
description: string | string[];
long_description?: string | string[];
image?: string;
links?: Links[];
}
@@ -45,7 +45,20 @@ function renderImage(name: string): any {
);
}
function ProjectCard(props: ProjectProps) {
function renderDescription(description: string | string[]): any {
if (typeof description === 'string') {
return (
<p className="card-text">{description}</p>
);
}
return description.map((text: string, index: number) => {
return (
<p className="card-text" key={index}>{text}</p>
);
});
}
function MagicCard(props: CardProps) {
let links = props.links
? props.links.map((link) => {
if (link.github) {
@@ -90,4 +103,4 @@ function ProjectCard(props: ProjectProps) {
);
}
export default ProjectCard;
export default MagicCard;

View File

@@ -1,26 +1,19 @@
import React, { useState, useEffect } from 'react';
import ProjectCard, { ProjectProps } from './ProjectCard';
import MagicCard, { CardProps } from './MagicCard';
import { shuffleFisherYates } from '../Utils';
import ProjectData from './Projects.json';
import './Projects.css';
function shuffleFisherYates(array: []): [] {
let i = array.length;
while (i--) {
const ri = Math.floor(Math.random() * i);
[array[i], array[ri]] = [array[ri], array[i]];
}
return array;
}
function Projects() {
let [projects, setProjects] = useState<ProjectProps[]>([]);
let [projects, setProjects] = useState<CardProps[]>([]);
useEffect(() => {
setProjects(ProjectData);
}, []);
let _projects = projects.map((project) => {
return (<ProjectCard key={project.name} {...project} />);
return (<MagicCard key={project.name} {...project} />);
})
_projects = shuffleFisherYates(_projects as []);