Skip to content

Commit

Permalink
chore: move sourceCountData instantiation to component
Browse files Browse the repository at this point in the history
  • Loading branch information
IgboPharaoh committed Nov 29, 2024
1 parent 6545875 commit 193eae2
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 62 deletions.
20 changes: 5 additions & 15 deletions contentlayer.config.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import path from "path";
import * as fs from "fs";
import { createSlug, SpeakerData, TopicsData, unsluggify } from "./src/utils";
import { ContentType, createSlug, unsluggify } from "./src/utils";
import { defineDocumentType, defineNestedType, makeSource } from "contentlayer2/source-files";
import { Transcript as ContentTranscriptType, Source as ContentSourceType } from "./.contentlayer/generated/types";

Expand All @@ -20,16 +20,6 @@ export interface CategoryInfo {
excerpt: string;
}

interface TagInfo {
name: string;
slug: string;
count: number;
}

interface ContentTree {
[key: string]: ContentTree | ContentTranscriptType[];
}

/**
* Count the occurrences of all tags across transcripts and write to json file
*/
Expand Down Expand Up @@ -76,7 +66,7 @@ function organizeTags(transcripts: ContentTranscriptType[]) {
const categories: CategoryInfo[] = getCategories();
const { tagCounts } = createTagCount(transcripts);

const tagsByCategory: { [category: string]: TagInfo[] } = {};
const tagsByCategory: { [category: string]: ContentType[] } = {};
const tagsWithoutCategory = new Set<string>();
const categorizedTags = new Set<string>();

Expand Down Expand Up @@ -134,7 +124,7 @@ function organizeTags(transcripts: ContentTranscriptType[]) {

function organizeTopics(transcripts: ContentTranscriptType[]) {
const slugTopics: any = {};
const topicsArray: TopicsData[] = [];
const topicsArray: ContentType[] = [];

transcripts.forEach((transcript) => {
const slugTags = transcript.tags?.map((tag) => ({
Expand Down Expand Up @@ -163,7 +153,7 @@ function organizeTopics(transcripts: ContentTranscriptType[]) {

function createSpeakers(transcripts: ContentTranscriptType[]) {
const slugSpeakers: any = {};
const speakerArray: SpeakerData[] = [];
const speakerArray: ContentType[] = [];

transcripts.forEach((transcript) => {
const slugSpeakersArray = transcript.speakers?.map((speaker) => ({
Expand Down Expand Up @@ -191,7 +181,7 @@ function createSpeakers(transcripts: ContentTranscriptType[]) {
}

function generateSourcesCount(transcripts: ContentTranscriptType[], sources: ContentSourceType[]) {
const sourcesArray: TagInfo[] = [];
const sourcesArray: ContentType[] = [];
const slugSources: Record<string, number> = {};

transcripts.forEach((transcript) => {
Expand Down
7 changes: 3 additions & 4 deletions src/components/explore/GroupedTranscriptContent.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
"use client";
import React, { useEffect } from "react";
import React from "react";
import SingleTranscriptContent from "./SingleTranscriptContent";
import { createSlug, DepreciatedCategories, TopicsData } from "@/utils";
import { ContentType, createSlug, DepreciatedCategories } from "@/utils";
import { useInView } from "react-intersection-observer";
import { root } from "postcss";

interface IGroupedTranscriptContent {
topicsByAlphabet: [string, TopicsData[]];
topicsByAlphabet: [string, ContentType[]];
setCurrentGroup: React.Dispatch<React.SetStateAction<string>>;
linkName: DepreciatedCategories;
type: "alphabet" | "words";
Expand Down
4 changes: 2 additions & 2 deletions src/components/explore/SingleTranscriptContent.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { DepreciatedCategories, getDoubleDigits, TopicsData } from "@/utils";
import { ContentType, DepreciatedCategories, getDoubleDigits } from "@/utils";
import Link from "next/link";
import React from "react";

type SingleContent = {
linkName: DepreciatedCategories;
} & TopicsData;
} & ContentType;
const SingleTranscriptContent = ({ count, slug, name, linkName }: SingleContent) => {
const url = linkName === "sources" ? `/${slug}` : `/${linkName}/${slug}`;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,11 @@ import Link from "next/link";
import { Carousel } from "@bitcoin-dev-project/bdp-ui";
import { ArrowLinkRight } from "@bitcoin-dev-project/bdp-ui/icons";
import { ExploreTranscriptCard } from "../TranscriptCard";
import { countItemsAndSort } from "@/utils";

interface TagInfo {
name: string;
slug: string;
count: number;
}
import { ContentType, countItemsAndSort } from "@/utils";

interface ExploreTranscriptClientProps {
categories: { [category: string]: TagInfo[] };
types: { [category: string]: TagInfo[] };
categories: { [category: string]: ContentType[] };
types: { [category: string]: ContentType[] };
}

const ExploreTranscriptClient = ({ categories, types }: ExploreTranscriptClientProps) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ import { extractTranscripts } from "@/utils";
import { allTranscripts } from "contentlayer/generated";
import Wrapper from "@/components/layout/Wrapper";
import FeaturedTranscriptClient from "./FeaturedTranscriptClient";
import sourceCountData from "@/public/source-count-data.json";

const FeaturedTranscripts = () => {
const { latestTranscripts, featuredTranscripts } = extractTranscripts(allTranscripts);
const { latestTranscripts, featuredTranscripts } = extractTranscripts(allTranscripts, sourceCountData);

return (
<div className='flex items-center justify-center w-full bg-gray-custom-100'>
Expand Down
44 changes: 13 additions & 31 deletions src/utils/index.ts
Original file line number Diff line number Diff line change
@@ -1,41 +1,23 @@
import { Markdown, type Transcript } from "contentlayer/generated";
import { ContentTreeArray } from "./data";
import SourceCountData from "../../public/source-count-data.json";

export interface ContentTree {
[key: string]: ContentTree | Transcript[];
}
export type TopicsData = {
name: string;
slug: string;
count: number;
};

export type SpeakerData = {
name: string;
slug: string;
count: number;
};

export type ContentData = {
export type ContentType = {
name: string;
slug: string;
count: number;
};

interface TagInfo {
name: string;
slug: string;
count: number;
}

type ContentKeys = {
[key: string]: ContentData[];
[key: string]: ContentType[];
};

export type DepreciatedCategories = "tags" | "speakers" | "categories" | "sources" | "types";

export type GroupedData = Record<string, TopicsData[] | SpeakerData[]>;
export type GroupedData = Record<string, ContentType[]>;

export function shuffle(data: Transcript[]) {
let currIndex = data.length;
Expand All @@ -49,10 +31,10 @@ export function shuffle(data: Transcript[]) {
return data;
}

const getSourceFromTranscript = (data: Transcript) =>
const getSourceFromTranscript = (data: Transcript, SourceCountData: ContentType[]) =>
SourceCountData.find((source) => source.slug === data.slugAsParams[0])?.name ?? (data.slugAsParams as Array<string>)[0];

export const extractTranscripts = (allTranscripts: Transcript[]) => {
export const extractTranscripts = (allTranscripts: Transcript[], SourceCountData: ContentType[]) => {
const CURRENT_DAY = Date.now();
const ONE_DAY = 86_400_000; // 1000 * 3600 * 24

Expand All @@ -68,24 +50,24 @@ export const extractTranscripts = (allTranscripts: Transcript[]) => {
const transcriptDate = new Date(transcript.date as string).getTime();
const daysOpened = Math.floor((CURRENT_DAY - transcriptDate) / ONE_DAY);

acc.push({ ...transcript, daysOpened, sourceName: getSourceFromTranscript(transcript) });
acc.push({ ...transcript, daysOpened, sourceName: getSourceFromTranscript(transcript, SourceCountData) });
acc.sort((a, b) => new Date(b.date as string).getTime() - new Date(a.date as string).getTime());

if (acc.length > 3) acc.pop();
return acc;
}, [] as (Transcript & { daysOpened: number; sourceName: string })[]);

const featuredTranscripts = getFeaturedTranscripts(transcripts);
const featuredTranscripts = getFeaturedTranscripts(transcripts, SourceCountData);

return { latestTranscripts, featuredTranscripts };
};

export const getFeaturedTranscripts = (allTranscripts: Transcript[]) => {
export const getFeaturedTranscripts = (allTranscripts: Transcript[], SourceCountData: ContentType[]) => {
let featuredTranscripts: (Transcript & { sourceName: string })[] = [];

for (const transcript of allTranscripts) {
if (transcript.speakers) {
featuredTranscripts.push({ ...transcript, sourceName: getSourceFromTranscript(transcript) });
featuredTranscripts.push({ ...transcript, sourceName: getSourceFromTranscript(transcript, SourceCountData) });
}
}

Expand All @@ -103,7 +85,7 @@ export function createSlug(name: string): string {
.replace(/-+$/, ""); // Trim - from end of text
}

export function groupDataByAlphabet(items: TopicsData[] | SpeakerData[]): Record<string, TopicsData[]> {
export function groupDataByAlphabet(items: ContentType[]): Record<string, ContentType[]> {
return items
.sort((a, b) => a.slug.localeCompare(b.slug))
.reduce((acc, item) => {
Expand All @@ -125,7 +107,7 @@ export function groupDataByAlphabet(items: TopicsData[] | SpeakerData[]): Record
}

return acc;
}, {} as Record<string, TopicsData[]>);
}, {} as Record<string, ContentType[]>);
}

export function getDoubleDigits(count: number) {
Expand Down Expand Up @@ -223,15 +205,15 @@ export const createText = (args: Markdown) => {
return text.length > 300 ? text.slice(0, 300) + "..." : text;
};

export const sortObjectAndArrays = (args: { [category: string]: TagInfo[] }) => {
export const sortObjectAndArrays = (args: { [category: string]: ContentType[] }) => {
return Object.fromEntries(
Object.entries(args)
.sort(([a], [b]) => a.localeCompare(b))
.map(([key, value]) => [key, value.sort((a, b) => a.name.localeCompare(b.name))])
);
};

export const countItemsAndSort = (args: { [category: string]: TagInfo[] }) => {
export const countItemsAndSort = (args: { [category: string]: ContentType[] }) => {
const countObject: { [key: string]: number } = {};

Object.entries(args).map(([key, value]) => {
Expand Down

0 comments on commit 193eae2

Please sign in to comment.