aboutsummaryrefslogtreecommitdiffstats
path: root/src/utils/helpers/projects.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/helpers/projects.ts')
-rw-r--r--src/utils/helpers/projects.ts102
1 files changed, 0 insertions, 102 deletions
diff --git a/src/utils/helpers/projects.ts b/src/utils/helpers/projects.ts
deleted file mode 100644
index 0e4de7d..0000000
--- a/src/utils/helpers/projects.ts
+++ /dev/null
@@ -1,102 +0,0 @@
-import { readdirSync } from 'node:fs';
-import path from 'node:path';
-import { ProjectCard, ProjectPreview } from '../../types/app';
-import { MDXProjectMeta } from '../../types/mdx';
-
-/**
- * Retrieve all the projects filename.
- *
- * @returns {string[]} An array of filenames.
- */
-export const getProjectFilenames = (): string[] => {
- const projectsDirectory = path.join(process.cwd(), 'src/content/projects');
- const filenames = readdirSync(projectsDirectory);
-
- return filenames.map((filename) => filename.replace(/\.mdx$/, ''));
-};
-
-/**
- * Retrieve the data of a project by filename.
- *
- * @param {string} filename - The project filename.
- * @returns {Promise<ProjectPreview>}
- */
-export const getProjectData = async (
- filename: string
-): Promise<ProjectPreview> => {
- try {
- const {
- meta,
- }: {
- meta: MDXProjectMeta;
- } = await import(`../../content/projects/${filename}.mdx`);
-
- const { dates, intro, title, ...projectMeta } = meta;
- const { publication, update } = dates;
- const cover = await import(`../../../public/projects/${filename}.jpg`);
-
- return {
- id: filename,
- intro,
- meta: {
- ...projectMeta,
- dates: { publication, update },
- // Dynamic import source does not work so I use it only to get sizes
- cover: {
- ...cover.default,
- alt: `${title} image`,
- src: `/projects/${filename}.jpg`,
- title,
- },
- },
- slug: filename,
- title: title,
- };
- } catch (err) {
- console.error(err);
- throw err;
- }
-};
-
-/**
- * Retrieve all the projects data using filenames.
- *
- * @param {string[]} filenames - The filenames without extension.
- * @returns {Promise<ProjectCard[]>} - An array of projects data.
- */
-export const getProjectsData = async (
- filenames: string[]
-): Promise<ProjectCard[]> => {
- return Promise.all(
- filenames.map(async (filename) => {
- const { id, meta, slug, title } = await getProjectData(filename);
- const { cover, dates, tagline, technologies } = meta;
- return { id, meta: { cover, dates, tagline, technologies }, slug, title };
- })
- );
-};
-
-/**
- * Method to sort an array of projects by publication date.
- *
- * @param {ProjectCard} a - A single project.
- * @param {ProjectCard} b - A single project.
- * @returns The result used by Array.sort() method: 1 || -1 || 0.
- */
-const sortProjectsByPublicationDate = (a: ProjectCard, b: ProjectCard) => {
- if (a.meta.dates.publication < b.meta.dates.publication) return 1;
- if (a.meta.dates.publication > b.meta.dates.publication) return -1;
- return 0;
-};
-
-/**
- * Retrieve all projects in content folder sorted by publication date.
- *
- * @returns {Promise<ProjectCard[]>} An array of projects.
- */
-export const getProjectsCard = async (): Promise<ProjectCard[]> => {
- const filenames = getProjectFilenames();
- const projects = await getProjectsData(filenames);
-
- return [...projects].sort(sortProjectsByPublicationDate);
-};