Skip to content

Commit cc850c4

Browse files
authored
Use Lang in GlobalData and MainLayout (ocaml#540)
1 parent ba9d3d1 commit cc850c4

File tree

5 files changed

+75
-40
lines changed

5 files changed

+75
-40
lines changed

src/App.res

+3-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ type props = {"Component": PageComponent.t, "pageProps": pageProps}
1717
// We are not using `[@react.component]` since we will never
1818
// use <App/> within our Reason code. It's only used within `pages/_app.js`
1919
let make = (props: props): React.element => {
20+
// TODO: Figure out how to get a lang value as a prop, or from the HTTP request
21+
let lang = #en
2022
let component = props["Component"]
2123
let pageProps = props["pageProps"]
2224

@@ -25,6 +27,6 @@ let make = (props: props): React.element => {
2527
let content = React.createElement(component, pageProps)
2628
// debug with: Js.log(router.route)
2729
switch router.route {
28-
| _ => <MainLayout> content </MainLayout>
30+
| _ => <MainLayout lang> content </MainLayout>
2931
}
3032
}

src/GlobalData.res

+61-30
Original file line numberDiff line numberDiff line change
@@ -117,36 +117,53 @@ let navContentEn = {
117117
}
118118
}
119119

120-
let headerContentEn: HeaderNavigation.content = {
121-
principlesSection: {
122-
header: navContentEn.principlesSection.header,
123-
entries: [
124-
navContentEn.principlesSection.whatIsOcaml,
125-
navContentEn.principlesSection.industrialUsers,
126-
navContentEn.principlesSection.academicExcellence,
127-
navContentEn.principlesSection.successStories,
128-
],
129-
},
130-
resourcesSection: {
131-
header: navContentEn.resourcesSection.header,
132-
entries: [
133-
navContentEn.resourcesSection.language,
134-
navContentEn.resourcesSection.packages,
135-
navContentEn.resourcesSection.applications,
136-
navContentEn.resourcesSection.bestPractices,
137-
],
138-
},
139-
communitySection: {
140-
header: navContentEn.communitySection.header,
141-
entries: [
142-
navContentEn.communitySection.opportunities,
143-
navContentEn.communitySection.news,
144-
navContentEn.communitySection.aroundTheWeb,
145-
navContentEn.communitySection.archive,
146-
],
147-
},
148-
search: `Search ocaml.org`,
149-
openMenu: `Open menu`,
120+
let navContent: Lang.t => navContent = lang => {
121+
switch lang {
122+
| #en => navContentEn
123+
| (_: Lang.t) => navContentEn
124+
}
125+
}
126+
127+
let headerContent: Lang.t => HeaderNavigation.content = lang => {
128+
let searchEn = `Search ocaml.org`
129+
let openMenuEn = `Open menu`
130+
{
131+
principlesSection: {
132+
header: navContentEn.principlesSection.header,
133+
entries: [
134+
navContent(lang).principlesSection.whatIsOcaml,
135+
navContent(lang).principlesSection.industrialUsers,
136+
navContent(lang).principlesSection.academicExcellence,
137+
navContent(lang).principlesSection.successStories,
138+
],
139+
},
140+
resourcesSection: {
141+
header: navContent(lang).resourcesSection.header,
142+
entries: [
143+
navContent(lang).resourcesSection.language,
144+
navContent(lang).resourcesSection.packages,
145+
navContent(lang).resourcesSection.applications,
146+
navContent(lang).resourcesSection.bestPractices,
147+
],
148+
},
149+
communitySection: {
150+
header: navContent(lang).communitySection.header,
151+
entries: [
152+
navContent(lang).communitySection.opportunities,
153+
navContent(lang).communitySection.news,
154+
navContent(lang).communitySection.aroundTheWeb,
155+
navContent(lang).communitySection.archive,
156+
],
157+
},
158+
search: switch lang {
159+
| #en => searchEn
160+
| (_: Lang.t) => searchEn
161+
},
162+
openMenu: switch lang {
163+
| #en => openMenuEn
164+
| (_: Lang.t) => openMenuEn
165+
},
166+
}
150167
}
151168

152169
let footerContentEn: Footer.t = {
@@ -301,3 +318,17 @@ let milestonesContentEn: Milestones.t = {
301318
},
302319
],
303320
}
321+
322+
let footerContent: Lang.t => Footer.t = lang => {
323+
switch lang {
324+
| #en => footerContentEn
325+
| (_: Lang.t) => footerContentEn
326+
}
327+
}
328+
329+
let milestonesContent: Lang.t => Milestones.t = lang => {
330+
switch lang {
331+
| #en => milestonesContentEn
332+
| (_: Lang.t) => milestonesContentEn
333+
}
334+
}

src/GlobalData.resi

+4-4
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ type navContent = {
3030
communitySection: communitySection,
3131
}
3232

33-
let navContentEn: navContent
33+
let navContent: Lang.t => navContent
3434

35-
let headerContentEn: HeaderNavigation.content
35+
let headerContent: Lang.t => HeaderNavigation.content
3636

37-
let footerContentEn: Footer.t
37+
let footerContent: Lang.t => Footer.t
3838

39-
let milestonesContentEn: Milestones.t
39+
let milestonesContent: Lang.t => Milestones.t

src/MainLayout.res

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
open! Import
22

33
@react.component
4-
let make = (~children) =>
4+
let make = (~lang, ~children) =>
55
// TODO: change element to body, move to document.res
66
<div className="bg-white">
7-
<Milestones content=GlobalData.milestonesContentEn />
8-
<div className="relative shadow"> <HeaderNavigation content=GlobalData.headerContentEn /> </div>
7+
<Milestones content={GlobalData.milestonesContent(lang)} />
8+
<div className="relative shadow">
9+
<HeaderNavigation content={GlobalData.headerContent(lang)} />
10+
</div>
911
<main className="relative bg-graylight pb-1">
1012
// pb-1 is used to prevent margin-bottom from collapsing on last child
1113
children
1214
</main>
13-
<div className="relative"> <Footer content=GlobalData.footerContentEn /> </div>
15+
<div className="relative"> <Footer content={GlobalData.footerContent(lang)} /> </div>
1416
</div>

src/MainLayout.resi

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
open! Import
22

33
@react.component
4-
let make: (~children: React.element) => React.element
4+
let make: (~lang: Lang.t, ~children: React.element) => React.element

0 commit comments

Comments
 (0)