74 lines
1.9 KiB
JavaScript
74 lines
1.9 KiB
JavaScript
import fs from "fs";
|
|
import path from "path";
|
|
import matter from "gray-matter";
|
|
import { unified } from "unified";
|
|
import remarkParse from "remark-parse";
|
|
import remarkHtml from "remark-html";
|
|
|
|
const services = {
|
|
bathrooms: 1,
|
|
tiling: 2,
|
|
};
|
|
|
|
const padNumber = (number) => {
|
|
if (parseInt(number) < 10) {
|
|
return `0${number}`;
|
|
}
|
|
return number;
|
|
};
|
|
|
|
const getSlug = (id) => {
|
|
const [i, t, n] = id.split("");
|
|
if (t === "0") {
|
|
return `case-study-${n}`;
|
|
}
|
|
return `case-study-${t}${n}`;
|
|
};
|
|
|
|
const getService = (id) =>
|
|
Object.keys(services).find((key) => String(services[key]) === id.charAt(0));
|
|
|
|
export function getAllCaseStudyIds({ service }) {
|
|
const serviceKey = services[service];
|
|
return fs
|
|
.readdirSync(path.join(process.cwd(), "case-studies"))
|
|
.filter((file) => !service || file.charAt(0) === String(serviceKey))
|
|
.map((fileName) => {
|
|
const fullPath = path.join(process.cwd(), "case-studies", fileName);
|
|
const fileContents = fs.readFileSync(fullPath, "utf8");
|
|
const matterResult = matter(fileContents);
|
|
const id = fileName.replace(/\.md$/, "");
|
|
return {
|
|
params: {
|
|
id,
|
|
title: matterResult.data.title,
|
|
location: matterResult.data.location,
|
|
image: matterResult.data.image,
|
|
service: getService(id),
|
|
slug: getSlug(id),
|
|
},
|
|
};
|
|
});
|
|
}
|
|
|
|
export function getCaseStudyData({ service, slug }) {
|
|
const studyNumber = padNumber(slug.replace("case-study-", ""));
|
|
const id = `${services[service]}${studyNumber}`;
|
|
const contents = fs.readFileSync(
|
|
path.join(process.cwd(), "case-studies", `${id}.md`),
|
|
"utf8"
|
|
);
|
|
const matterResult = matter(contents);
|
|
const content = unified()
|
|
.use(remarkParse)
|
|
.use(remarkHtml)
|
|
.processSync(matterResult.content).value;
|
|
return {
|
|
id,
|
|
service,
|
|
slug,
|
|
content,
|
|
...matterResult.data,
|
|
};
|
|
}
|