Skip to content

Commit fa9f861

Browse files
authored
Merge pull request #295 from zigzagdev/chore/implement-description_ja-frontend
Chore/implement description ja frontend
2 parents cc9a48b + 312fdd5 commit fa9f861

15 files changed

Lines changed: 86 additions & 62 deletions

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ A SPA to search UNESCO World Heritage sites.
1919

2020
- React + TypeScript + Vite
2121
- React Router
22-
- TailwindCSS(ホワイトベーステーマポリシー / white-based theme policy)
22+
- TailwindCSS
2323
- (任意 / Optional)Jest + Testing Library
2424

2525
---

client/package-lock.json

Lines changed: 29 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

client/src/app/features/heritages/mappers/__tests__/to-world-heritage-detail-vm-test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ const baseDto = (
4141
area_hectares: 107,
4242
buffer_zone_hectares: 143,
4343
short_description: "dummy",
44+
short_description_jp: "ダミー",
4445
unesco_site_url: "https://example.com",
4546
state_party: null,
4647
state_party_codes: ["JPN"],
@@ -75,7 +76,7 @@ describe("toWorldHeritageDetailVm", () => {
7576
expect(vm.countryNameJp).toBe(dto.country_name_jp);
7677
expect(vm.region).toBe(dto.region);
7778

78-
// detail 差分
79+
// detail
7980
expect(vm.primaryStatePartyCode).toBe("JPN");
8081
expect(vm.thumbnailUrl).toBe(dto.thumbnail_url);
8182

client/src/app/features/heritages/mappers/__tests__/to-world-heritage-vm.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const base: ApiWorldHeritageDto = {
1919
area_hectares: 442,
2020
buffer_zone_hectares: 320,
2121
short_description: "desc",
22+
short_description_jp: "ダミー",
2223
unesco_site_url: "https://whc.unesco.org/en/list/663",
2324
state_party: "JPN",
2425
state_party_codes: ["JPN"],
@@ -47,6 +48,7 @@ describe("toWorldHeritageVm", () => {
4748
latitude: null,
4849
longitude: null,
4950
shortDescription: "desc",
51+
shortDescriptionJp: "ダミー",
5052
unescoSiteUrl: "https://whc.unesco.org/en/list/663",
5153
primaryStatePartyCode: null,
5254
criteriaText: "ix, x",

client/src/app/features/heritages/mappers/to-world-heritage-detail-vm.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export function toWorldHeritageDetailVm(dto: ApiWorldHeritageDetailDto): WorldHe
2525
area_hectares: dto.area_hectares,
2626
buffer_zone_hectares: dto.buffer_zone_hectares,
2727
short_description: dto.short_description,
28+
short_description_jp: dto.short_description_jp,
2829
unesco_site_url: dto.unesco_site_url,
2930
state_party: dto.state_party,
3031
state_party_codes: dto.state_party_codes,

client/src/app/features/heritages/mappers/to-world-heritage-vm.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export function toWorldHeritageVm(data: ApiWorldHeritageDto): WorldHeritageVm {
8080
latitude: data.latitude,
8181
longitude: data.longitude,
8282
shortDescription: data.short_description,
83+
shortDescriptionJp: data.short_description_jp,
8384
unescoSiteUrl: data.unesco_site_url,
8485
statePartyCodes: statePartyLabelsJp,
8586
statePartiesMeta: normalizeStatePartiesMeta(data.state_parties_meta),

client/src/app/features/top/apis/index.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ const makeDto = (overrides: Partial<ApiWorldHeritageDto> = {}): ApiWorldHeritage
4343
area_hectares: null,
4444
buffer_zone_hectares: null,
4545
short_description: "",
46+
short_description_jp: "",
4647
unesco_site_url: "https://ex.com/1",
4748
state_party: null,
4849
state_party_codes: ["JPN"],

client/src/app/features/top/components/heritage-detail/HeritageDetailLayout.tsx

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { useState, useEffect } from "react";
2+
import { useNavigate } from "react-router-dom";
23
import type { WorldHeritageDetailVm } from "../../../../../domain/types.ts";
34
import type { Locale } from "../../../../../domain/criteria";
45
import { HeritageSubHeader } from "../HeritageSubHeader.tsx";
@@ -15,6 +16,7 @@ import { BreadcrumbList } from "@shared/components/BreadcrumbList.tsx";
1516
type Props = {
1617
item: WorldHeritageDetailVm;
1718
locale: Locale;
19+
toggleLocale: () => void;
1820
};
1921

2022
const DEFAULT_SEARCH: SearchValues = {
@@ -96,13 +98,23 @@ function KeyExamInfo({ item }: { item: WorldHeritageDetailVm }) {
9698
);
9799
}
98100

99-
export function HeritageDetailLayout({ item, locale }: Props) {
101+
export function HeritageDetailLayout({ item, locale, toggleLocale }: Props) {
100102
const [search, setSearch] = useState<SearchValues>(DEFAULT_SEARCH);
101103
const setLabel = useSetBreadcrumbLabel();
104+
const navigate = useNavigate();
102105

103106
const handleSubmit = (q: Partial<SearchValues>) => {
104107
const next = { ...search, ...q };
105108
setSearch(next);
109+
110+
const params = new URLSearchParams();
111+
if (next.keyword) params.set("search_query", next.keyword);
112+
if (next.region) params.set("region", next.region);
113+
if (next.category) params.set("category", next.category);
114+
if (next.yearInscribedFrom) params.set("year_inscribed_from", next.yearInscribedFrom);
115+
if (next.yearInscribedTo) params.set("year_inscribed_to", next.yearInscribedTo);
116+
117+
navigate(`/heritages/results?${params.toString()}`);
106118
};
107119

108120
useEffect(() => {
@@ -115,7 +127,15 @@ export function HeritageDetailLayout({ item, locale }: Props) {
115127
<div className="min-h-screen bg-zinc-50 text-zinc-900">
116128
<HeritageSubHeader value={search} onChange={setSearch} onSubmit={handleSubmit} />
117129

118-
<HeritageDetailTabs items={TABS} />
130+
<div className="mx-auto w-full max-w-6xl px-4 mt-6 md:mt-8 flex items-center justify-between">
131+
<HeritageDetailTabs items={TABS} />
132+
<button
133+
onClick={toggleLocale}
134+
className="rounded-full border border-zinc-200 px-3 py-1.5 text-xs font-semibold text-zinc-700 hover:bg-zinc-100 shrink-0"
135+
>
136+
{locale === "ja" ? "🇯🇵" : "🇬🇧"}
137+
</button>
138+
</div>
119139

120140
<div className="mx-auto w-full max-w-6xl px-4 mt-4">
121141
<BreadcrumbList />
@@ -136,7 +156,7 @@ export function HeritageDetailLayout({ item, locale }: Props) {
136156
<div className="grid gap-6 lg:gap-8 lg:grid-cols-[minmax(0,1fr)_360px] lg:items-start">
137157
{/* Left: Overview → Gallery */}
138158
<div className="space-y-8" id="content">
139-
<HeritageOverViewSection item={item} />
159+
<HeritageOverViewSection item={item} locale={locale} />
140160
<HeritageGallery images={item.images} />
141161
</div>
142162

0 commit comments

Comments
 (0)