Skip to content

Commit

Permalink
♻️ refactor(graphql/GetTalksForTag): replace lastRelevant_DESC
Browse files Browse the repository at this point in the history
  • Loading branch information
ythecombinator committed Feb 28, 2024
1 parent f819cc8 commit 514723f
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 27 deletions.
11 changes: 6 additions & 5 deletions src/graphql/GetTalksForTag.graphql
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
query GetTalksForTag($tag: String, $limit: Int) {
talkCollection(
where: { contentfulMetadata: { tags: { id_contains_some: [$tag] } } }
order: lastRelevant_DESC
limit: $limit
) {
talkCollection(where: { contentfulMetadata: { tags: { id_contains_some: [$tag] } } }, limit: $limit) {
items {
title
slug
sessionsCollection {
total
items {
event {
endingDate
}
}
}
}
}
Expand Down
8 changes: 6 additions & 2 deletions src/graphql/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2457,7 +2457,7 @@ export type GetTalksForTagQueryVariables = Exact<{
}>;


export type GetTalksForTagQuery = { __typename?: 'Query', talkCollection?: { __typename?: 'TalkCollection', items: Array<{ __typename?: 'Talk', title?: string | null, slug?: string | null, sessionsCollection?: { __typename?: 'TalkSessionsCollection', total: number } | null } | null> } | null };
export type GetTalksForTagQuery = { __typename?: 'Query', talkCollection?: { __typename?: 'TalkCollection', items: Array<{ __typename?: 'Talk', title?: string | null, slug?: string | null, sessionsCollection?: { __typename?: 'TalkSessionsCollection', total: number, items: Array<{ __typename?: 'Session', event?: { __typename?: 'Event', endingDate?: any | null } | null } | null> } | null } | null> } | null };

export type GetTalksStatsQueryVariables = Exact<{ [key: string]: never; }>;

Expand Down Expand Up @@ -2763,14 +2763,18 @@ export const GetTalksForTagDocument = gql`
query GetTalksForTag($tag: String, $limit: Int) {
talkCollection(
where: {contentfulMetadata: {tags: {id_contains_some: [$tag]}}}
order: lastRelevant_DESC
limit: $limit
) {
items {
title
slug
sessionsCollection {
total
items {
event {
endingDate
}
}
}
}
}
Expand Down
46 changes: 26 additions & 20 deletions src/services/content/talks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -160,24 +160,8 @@ export default class TalksContentService {
// ---------------------------------------------------------------------------

const allTransformer = (result: GetAllTalksQuery) => {
const items = [...(result as DeepNonNullable<GetAllTalksQuery>).talkCollection.items];

const sorted = items.sort(function (talkA, talkB) {
const aSessions = [...talkA.sessionsCollection.items];
const bSessions = [...talkB.sessionsCollection.items];

const latestA = aSessions.sort((sessionA, sessionB) => {
const sub = new Date(sessionB.event.endingDate).getTime() - new Date(sessionA.event.endingDate).getTime();
return sub;
})[0];

const latestB = bSessions.sort((sessionA, sessionB) => {
const sub = new Date(sessionB.event.endingDate).getTime() - new Date(sessionA.event.endingDate).getTime();
return sub;
})[0];

return new Date(latestB.event.endingDate).getTime() - new Date(latestA.event.endingDate).getTime();
});
const items = extractTalkCollectionItems(result);
const sorted = items.sort(talksSorter);

return sorted.map((item) => {
const { title, category, abstract, slug, sessionsCollection, contentfulMetadata } = item;
Expand Down Expand Up @@ -218,9 +202,10 @@ const featuredTransformer = (result: GetFeaturedTalksQuery) => {
};

const talksPerTagTransformer = (result: GetTalksForTagQuery) => {
const items = (result as DeepNonNullable<GetTalksForTagQuery>).talkCollection.items;
const items = extractTalkCollectionItems(result);
const sorted = items.sort(talksSorter);

return items.map((item) => ({
return sorted.map((item) => ({
talkTitle: item.title,
talkSlug: `/${Routes.talks}/${item.slug}`,
sessionsCount: item.sessionsCollection.total,
Expand Down Expand Up @@ -281,6 +266,27 @@ const transformers = {
// TRANSFORMERS: UTILS
// ---------------------------------------------------------------------------

function extractTalkCollectionItems(result: GetAllTalksQuery | GetTalksForTagQuery) {
return [...(result as DeepNonNullable<GetAllTalksQuery>).talkCollection.items] as DeepNonNullable<Talk>[];
}

function talksSorter(talkA: DeepNonNullable<Talk>, talkB: DeepNonNullable<Talk>) {
const aSessions = [...talkA.sessionsCollection.items];
const bSessions = [...talkB.sessionsCollection.items];

const latestA = aSessions.sort((sessionA, sessionB) => {
const sub = new Date(sessionB.event.endingDate).getTime() - new Date(sessionA.event.endingDate).getTime();
return sub;
})[0];

const latestB = bSessions.sort((sessionA, sessionB) => {
const sub = new Date(sessionB.event.endingDate).getTime() - new Date(sessionA.event.endingDate).getTime();
return sub;
})[0];

return new Date(latestB.event.endingDate).getTime() - new Date(latestA.event.endingDate).getTime();
}

const locationTransformer = (city: City) => `${city.name}, ${city.country?.name} ${city.country?.flag} `;

const sessionTransformer = (session: DeepNonNullable<Session>) => ({
Expand Down

0 comments on commit 514723f

Please sign in to comment.