Skip to content

Commit f33521f

Browse files
authored
Merge pull request #427 from api-platform/staging
MEP
2 parents 3ae1f2f + efdf6f6 commit f33521f

File tree

171 files changed

+714
-1570
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

171 files changed

+714
-1570
lines changed

.github/workflows/deploy.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ jobs:
8181
echo "URL=api-platform.com" >> "$GITHUB_ENV"
8282
echo 'CORS=["https://api-platform.com", "http://localhost", "https://localhost", "http://localhost:3000"]' >> "$GITHUB_ENV"
8383
echo "NAMESPACE=prod-website" >> "$GITHUB_ENV"
84+
echo "REPLICA=3" >> "$GITHUB_ENV"
8485
else
8586
CONTEXT=nonprod
8687
if [ "$GITHUB_EVENT_NAME" == "pull_request" ]; then
@@ -91,6 +92,7 @@ jobs:
9192
export RELEASE_NAME=${{ github.ref_name }}
9293
fi
9394
echo "URL=$RELEASE_NAME.apip.preprod-tilleuls.ovh" >> "$GITHUB_ENV"
95+
echo "REPLICA=1" >> "$GITHUB_ENV"
9496
echo "NAMESPACE=nonprod-website" >> "$GITHUB_ENV"
9597
echo 'CORS=["https://${{ env.RELEASE_NAME}}.apip.preprod-tilleuls.ovh", "http://localhost", "https://localhost", "http://localhost:3000"]' >> "$GITHUB_ENV"
9698
fi
@@ -126,6 +128,7 @@ jobs:
126128
--set=pwa.resources.requests.cpu=500m \
127129
--set=pwa.resources.requests.memory=1400Mi \
128130
--set=pwa.resources.limits.memory=1400Mi \
131+
--set=pwa.replicaCount=${{ env.REPLICA }} \
129132
--set=bucket.s3Upstream=storage.googleapis.com \
130133
--set=bucket.s3Name=api-platform-website-v3 \
131134
--set=service.type=NodePort \
@@ -171,6 +174,7 @@ jobs:
171174
--set=pwa.resources.requests.cpu=500m \
172175
--set=pwa.resources.requests.memory=1400Mi \
173176
--set=pwa.resources.limits.memory=1400Mi \
177+
--set=pwa.replicaCount=${{ env.REPLICA }} \
174178
--set=php.corsAllowOrigin="^$(echo "${{ join(fromJSON(env.CORS), '|') }}" | sed 's/\./\\./g')$" \
175179
--set=github.key=${{ secrets.gh-key }} \
176180
--set=next.rootUrl=${{ env.URL }} \

helm/api-platform/templates/pwa-deployment.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ metadata:
66
{{- include "api-platform.labelsPWA" . | nindent 4 }}
77
spec:
88
{{- if not .Values.autoscaling.enabled }}
9-
replicas: {{ .Values.replicaCount }}
9+
replicas: {{ .Values.pwa.replicaCount }}
1010
{{- end }}
1111
selector:
1212
matchLabels:

helm/api-platform/values.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ php:
2020
- "192.168.0.0/16"
2121

2222
pwa:
23+
replicaCount: 1
2324
image:
2425
repository: "chart-example.local/api-platform/pwa"
2526
pullPolicy: IfNotPresent

pwa/api/con/conferences.ts

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
import { unbreakable } from "./../../utils/index";
12
import path from "node:path";
23
import matter from "gray-matter";
34
import { marked } from "marked";
45
import { readFile, readdir } from "node:fs/promises";
56
import { sortByStartDate } from "utils/con";
67
import { extractHeadingsFromMarkdown } from "utils";
78
import { getSpeakerById } from "./speakers";
8-
import { Conference, Day, Speaker } from "types/con";
9+
import { Conference, Day, Speaker, Track } from "types/con";
910
import { Locale, i18n } from "i18n/i18n-config";
1011

1112
export const getAllConferences = async (
@@ -14,15 +15,15 @@ export const getAllConferences = async (
1415
locale: Locale
1516
) => {
1617
const slugs = (
17-
await readdir(
18-
path.join(process.cwd(), `data/con/${edition}/conferences/${locale}`)
19-
)
18+
await readdir(path.join(process.cwd(), `data/con/${edition}/conferences`))
2019
)
2120
.filter((el) => path.extname(el) === ".md")
2221
.map((slug) => slug.replace(/\.md$/, ""));
2322

2423
return Promise.all(
25-
slugs.map((slug) => getConferenceData(edition, slug, false, withSpeakers))
24+
slugs.map((slug) =>
25+
getConferenceData(edition, slug, false, withSpeakers, locale)
26+
)
2627
);
2728
};
2829

@@ -40,14 +41,9 @@ export const getConferencesBySpeaker = async (
4041
.sort(sortByStartDate);
4142
};
4243

43-
export const getAllConferenceSlugs = async (
44-
edition = "2022",
45-
locale: Locale = i18n.defaultLocale
46-
) => {
44+
export const getAllConferenceSlugs = async (edition = "2022") => {
4745
return (
48-
await readdir(
49-
path.join(process.cwd(), `data/con/${edition}/conferences/${locale}`)
50-
)
46+
await readdir(path.join(process.cwd(), `data/con/${edition}/conferences`))
5147
)
5248
.filter((el) => path.extname(el) === ".md")
5349
.map((slug: string) => slug.replace(/\.md$/, ""));
@@ -61,14 +57,12 @@ export const getConferenceData = async (
6157
locale: Locale = i18n.defaultLocale
6258
) => {
6359
const fileContents = await readFile(
64-
path.join(
65-
process.cwd(),
66-
`data/con/${edition}/conferences/${locale}/${slug}.md`
67-
),
60+
path.join(process.cwd(), `data/con/${edition}/conferences/${slug}.md`),
6861
"utf8"
6962
);
7063

7164
const days = (await import(`data/con/${edition}/days`)).default;
65+
const tracks = (await import(`data/con/${edition}/tracks`)).default;
7266
// Use gray-matter to parse the post metadata section
7367
const matterResult = matter(fileContents);
7468

@@ -94,8 +88,11 @@ export const getConferenceData = async (
9488
description: contentHtml,
9589
url: `/con/${edition}/conferences/${slug}`,
9690
...matterResult.data,
97-
title: extractHeadingsFromMarkdown(matterResult.content, 1)?.[0],
91+
title: unbreakable(
92+
extractHeadingsFromMarkdown(matterResult.content, 1)?.[0] || ""
93+
),
9894
speakers: withSpeakers ? fullSpeakers : speakers,
95+
track: tracks.find((track: Track) => track.id === matterResult.data.track),
9996
day:
10097
days.length > 1 &&
10198
days.find((day: Day) => day.date === matterResult.data.date),

pwa/app/(con)/[locale]/con/[edition]/conferences/[slug]/components/ConferencePage.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ interface ConferencePageProps {
1515

1616
const ConferencePageTemplate = ({ conference, day }: ConferencePageProps) => {
1717
const { title, date, start, end, track, description } = conference;
18-
const { t } = useContext(LanguageContext);
18+
const { t, locale } = useContext(LanguageContext);
1919

2020
return (
2121
<div className="container max-w-6xl flex flex-col items-center pt-10 pb-80 before:bg-wave before:absolute before:w-[2000px] before:h-[500px] before:bg-no-repeat before:opacity-30 before:-translate-x-1/2 before:top-[220px] before:left-[65%] | sm:pt-20">
@@ -26,8 +26,8 @@ const ConferencePageTemplate = ({ conference, day }: ConferencePageProps) => {
2626
<>
2727
{day ? (
2828
<p className="uppercase font-light text-xl relative">
29-
<strong className="font-bold">{day.title}</strong>
30-
{track ? ` - ${t("conferences.track", { track })}` : null}
29+
<strong className="font-bold">{day.title?.[locale]}</strong>
30+
{track ? ` - ${track.title?.[locale]}` : null}
3131
</p>
3232
) : null}
3333
{date ? (

pwa/app/(con)/[locale]/con/[edition]/conferences/[slug]/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export async function generateStaticParams({
5757
}: {
5858
params: { edition: string; locale: Locale };
5959
}) {
60-
const slugs = await getAllConferenceSlugs(edition, locale);
60+
const slugs = await getAllConferenceSlugs(edition);
6161

6262
return slugs.map((slug: string) => ({
6363
slug,

pwa/app/(con)/[locale]/con/[edition]/schedule/components/Schedule.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
"use client";
22
import SectionTitle from "components/con/common/typography/SectionTitle";
3-
import { Conference, Day } from "types/con";
3+
import { Conference, Day, Track } from "types/con";
44
import ScheduleDay from "./ScheduleDay";
55
import { useContext } from "react";
66
import { LanguageContext } from "contexts/con/LanguageContext";
77

88
export default function Schedule({
99
days,
1010
conferences,
11+
tracks,
1112
}: {
1213
days: Day[];
1314
conferences: Conference[];
15+
tracks: Track[];
1416
}) {
15-
const { Translate } = useContext(LanguageContext);
17+
const { Translate, locale } = useContext(LanguageContext);
1618

1719
return (
1820
<div className="relative pt-8 pb-40">
@@ -24,8 +26,9 @@ export default function Schedule({
2426
{days.map((day: Day) => {
2527
return (
2628
<ScheduleDay
27-
key={day.title}
29+
key={day.title?.[locale]}
2830
day={day}
31+
tracks={tracks}
2932
conferences={conferences.filter(
3033
(conference) => conference.date === day.date
3134
)}

pwa/app/(con)/[locale]/con/[edition]/schedule/components/ScheduleDay.module.css

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,9 @@
125125
[time-1900] auto;
126126
grid-template-columns:
127127
[times] 3em
128-
[track-EN] 1fr
129-
[track-FR] 1fr
130-
[track-FR-end];
128+
[track-1] 1fr
129+
[track-2] 1fr
130+
[track-2-end];
131131
}
132132
.track-header {
133133
@apply grid bg-blue-gradient bg-blue text-white font-title font-bold uppercase py-2;

pwa/app/(con)/[locale]/con/[edition]/schedule/components/ScheduleDay.tsx

Lines changed: 56 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
"use client";
22
import React, { useContext } from "react";
33
import { getConferenceDate, sortByStartDate } from "utils/con";
4-
import { Conference, Day } from "types/con";
4+
import { Conference, Day, ExtraConference, Track } from "types/con";
55
import SlotItem from "./SlotItem";
66
import Overline from "components/con/common/typography/Overline";
77
import styles from "./ScheduleDay.module.css";
88
import classNames from "classnames";
99
import { LanguageContext } from "contexts/con/LanguageContext";
1010

11-
function ExtraSlotItem({ conference }: { conference: Conference }) {
11+
function ExtraSlotItem({ conference }: { conference: ExtraConference }) {
12+
const { locale } = useContext(LanguageContext);
13+
const title =
14+
typeof conference.title === "string"
15+
? conference.title
16+
: conference.title[locale];
17+
1218
return (
1319
<div
1420
className={classNames(
@@ -19,29 +25,36 @@ function ExtraSlotItem({ conference }: { conference: Conference }) {
1925
conference.type === "upcoming" && "bg-grey opacity-40"
2026
)}
2127
>
22-
<span className="h6">{conference.title}</span>
28+
<span className="h6">{title}</span>
2329
</div>
2430
);
2531
}
2632

2733
function ScheduleByTrack({
28-
track,
34+
track: trackId,
2935
conferences: allConferences,
36+
tracks,
3037
}: {
3138
track?: string;
3239
conferences: Conference[];
40+
tracks: Track[];
3341
}) {
34-
const { t } = useContext(LanguageContext);
3542
const conferences = allConferences
36-
.filter((conference) => conference.track === track || !conference.track)
43+
.filter(
44+
(conference) => conference.track?.id === trackId || !conference.track
45+
)
3746
.sort(sortByStartDate);
3847

48+
const { locale } = useContext(LanguageContext);
49+
50+
const track = trackId && tracks.find((t) => t.id === trackId);
51+
3952
return (
4053
<div className="grid-cols-1 gap-1 grid bg-white p-2">
4154
{track ? (
4255
<div className={styles["track-header"]}>
4356
<div className="h5" data-value="day">
44-
{t("conferences.track", { track })}
57+
{track.title?.[locale]}
4558
</div>
4659
</div>
4760
) : null}
@@ -61,35 +74,48 @@ function ScheduleByTrack({
6174
interface ScheduleDayProps {
6275
day: Day;
6376
conferences: Conference[];
77+
tracks: Track[];
6478
}
6579

66-
export default function ScheduleDay({ day, conferences }: ScheduleDayProps) {
80+
export default function ScheduleDay({
81+
day,
82+
conferences,
83+
tracks,
84+
}: ScheduleDayProps) {
85+
const { locale } = useContext(LanguageContext);
6786
const times = conferences.reduce((acc, conference) => {
6887
if (!acc.includes(conference.start)) acc.push(conference.start);
6988
if (!acc.includes(conference.end)) acc.push(conference.end);
7089
return acc;
7190
}, [] as string[]);
91+
7292
return day ? (
73-
<div className="mb-14 last:mb-0" key={day.title}>
74-
<h2 className="text-white font-title text-4xl font-bold">{day.title}</h2>
93+
<div className="mb-14 last:mb-0" key={day.title?.[locale]}>
94+
<h2 className="text-white font-title text-4xl font-bold">
95+
{day.title?.[locale]}
96+
</h2>
7597
<Overline className="text-white/80 py-2">
7698
{" "}
7799
{getConferenceDate(day.date)}
78100
</Overline>
79101
{day.tracks ? (
80102
day.tracks.map((track) => (
81103
<div key={track} className="lg:hidden">
82-
<ScheduleByTrack conferences={conferences} track={track} />
104+
<ScheduleByTrack
105+
conferences={conferences}
106+
track={track}
107+
tracks={tracks}
108+
/>
83109
</div>
84110
))
85111
) : (
86112
<div className="lg:hidden">
87-
<ScheduleByTrack conferences={conferences} />
113+
<ScheduleByTrack conferences={conferences} tracks={tracks} />
88114
</div>
89115
)}
90116
<div className="bg-white my-5 hidden max-w-5xl mx-auto | lg:block">
91117
{day.single ? (
92-
<ScheduleByTrack conferences={conferences} />
118+
<ScheduleByTrack conferences={conferences} tracks={tracks} />
93119
) : (
94120
<div className="p-2">
95121
{day.tracks ? (
@@ -99,15 +125,21 @@ export default function ScheduleDay({ day, conferences }: ScheduleDayProps) {
99125
styles["schedule-grid"]
100126
)}
101127
>
102-
{day.tracks.map((track) => (
103-
<span
104-
key={track}
105-
style={{ gridColumn: `track-${track}`, gridRow: "tracks" }}
106-
aria-hidden="true"
107-
>
108-
{`Track ${track}`}
109-
</span>
110-
))}
128+
{day.tracks.map((trackId) => {
129+
const track = tracks.find((t) => t.id === trackId);
130+
return (
131+
<span
132+
key={trackId}
133+
style={{
134+
gridColumn: `track-${trackId}`,
135+
gridRow: "tracks",
136+
}}
137+
aria-hidden="true"
138+
>
139+
{track?.title[locale]}
140+
</span>
141+
);
142+
})}
111143
</div>
112144
) : null}
113145
<div
@@ -132,8 +164,8 @@ export default function ScheduleDay({ day, conferences }: ScheduleDayProps) {
132164
key={`${conference.title} ${conference.start} ${conference.date}`}
133165
style={{
134166
gridColumn: conference.track
135-
? `track-${conference.track}`
136-
: "track-EN / track-FR-end",
167+
? `track-${conference.track.id}`
168+
: "track-1 / track-2-end",
137169
gridRow: `time-${conference.start.replace(
138170
":",
139171
""

pwa/app/(con)/[locale]/con/[edition]/schedule/components/SlotAvatar.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@ export default function Avatar({ speakers }: { speakers: Speaker[] }) {
1515
<Image
1616
key={speaker.name}
1717
alt=""
18-
className="absolute rounded-full -translate-x-1/2 -translate-y-1/2"
18+
className="absolute rounded-full -translate-x-1/2 -translate-y-1/2 object-cover"
1919
src={speaker.image}
2020
width={getSize(speakers.length)}
2121
height={getSize(speakers.length)}
2222
style={{
23+
width: `${getSize(speakers.length)}px`,
24+
height: `${getSize(speakers.length)}px`,
2325
left: `${(100 / (speakers.length + 1)) * (index + 1)}%`,
2426
top: `${(100 / (speakers.length + 1)) * (index + 1)}%`,
2527
}}

0 commit comments

Comments
 (0)