planner: the details refresh reads through a repository, and the form drops what moved out

The fresh lookup behind New place details goes through placeDetailsRepo
(online-only, like the service identity) instead of api/ directly. The form
loses the Translate type and the comment that moved with the head band's
pills, which takes it under its line limit and out of the size baseline; the
maps service suite's test-size entry follows its shorter count.
This commit is contained in:
Maurice
2026-10-30 21:42:44 +01:00
parent aba329b1b1
commit c28604b891
5 changed files with 21 additions and 9 deletions
-1
View File
@@ -13,7 +13,6 @@
"src/components/Planner/DayPlanSidebar.test.tsx": 5349,
"src/components/Planner/DayPlanSidebar.tsx": 2936,
"src/components/Planner/PlaceFormModal.test.tsx": 2836,
"src/components/Planner/PlaceFormModal.tsx": 1002,
"src/components/Planner/PlaceInspector.tsx": 1290,
"src/components/Studio/TravelElements.tsx": 1559,
"src/components/Studio/countryShapes.ts": 2595,
@@ -486,9 +486,6 @@ const SIDE_BUTTON = 'grid w-[38px] flex-none place-items-center rounded-[10px] t
* for them; this gives them the eyebrow every other field here has.
*/
const SERVICE_STOP_LABELS = '[&_label]:mb-[5px] [&_label]:block [&_label]:font-geist [&_label]:text-[length:calc(9.5px*var(--fs-scale-caption,1))] [&_label]:font-bold [&_label]:uppercase [&_label]:tracking-[.08em] [&_label]:text-content-faint'
/** A round white button in the head band's pill row, as tall as the pills beside it. */
type Translate = (key: string, params?: Record<string, string | number>) => string
export default function PlaceFormModal(props: PlaceFormModalProps) {
const S = usePlaceFormModal(props)
@@ -1,6 +1,6 @@
import type { PlaceClientOrigin } from '@trek/shared';
import { useEffect, useMemo, useState } from 'react';
import { mapsApi } from '../../api/client';
import { placeDetailsRepo } from '../../repo/placeDetailsRepo';
import type { Place } from '../../types';
import type { PlaceFormData } from './PlaceFormModal.helpers';
import { resultOrigin } from './placeFieldOrigins';
@@ -34,9 +34,9 @@ export function usePlaceRefresh({
useEffect(() => {
if (!detailId || !key) return;
let live = true;
mapsApi.details(detailId, language).then(
(answer: { place?: Record<string, unknown> | null }) => {
if (live && answer?.place) setFresh({ key, details: answer.place });
placeDetailsRepo.details(detailId, language).then(
(details) => {
if (live && details) setFresh({ key, details });
},
() => undefined
);
+16
View File
@@ -0,0 +1,16 @@
import { mapsApi } from '../api/client';
import { requireOnline } from './onlineOnly';
/**
* A provider's details of a place, looked up fresh (Google, the TREK index or
* OpenStreetMap, by the id the place carries). **Online-only, no Dexie table:**
* the point of asking is the current answer, and a cached one would offer the
* same values again as if they were new.
*/
export const placeDetailsRepo = {
async details(placeId: string, lang: string): Promise<Record<string, unknown> | null> {
requireOnline();
const answer = (await mapsApi.details(placeId, lang)) as { place?: Record<string, unknown> | null } | null;
return answer?.place ?? null;
},
};
+1 -1
View File
@@ -3,7 +3,7 @@
"tests/unit/nest/budget.service.db.test.ts": 2220,
"tests/unit/nest/doc-sync/doc-sync.service.test.ts": 2511,
"tests/unit/nest/journey-domain.service.test.ts": 3876,
"tests/unit/nest/maps.service.test.ts": 3681,
"tests/unit/nest/maps.service.test.ts": 3680,
"tests/unit/nest/places.service.test.ts": 2561,
"tests/unit/nest/trips.service.test.ts": 2404
}