map: click a region to switch the dossier to its owner; fix "no owner" (v0.7.0)
CI / build + unit + e2e (pull_request) Successful in 1m58s
CI / build + unit + e2e (pull_request) Successful in 1m58s
This commit is contained in:
@@ -56,6 +56,23 @@ export interface RegionOwner {
|
||||
}
|
||||
export type RegionMap = Record<string, RegionOwner>;
|
||||
|
||||
/**
|
||||
* Look up the owner record for a map region from the authoritative RegionMap by
|
||||
* its ISO_A3 code. Returns `undefined` for an empty/missing code or an unowned
|
||||
* region. Pure + shared: the client resolves a clicked or hovered map feature by
|
||||
* first reading the feature's stable ISO_A3 code (stored in `properties.regionId`
|
||||
* by the client when it repacks the source — see WorldMap) and then calling this.
|
||||
*
|
||||
* The code must NOT be taken from the feature's top-level `id`: MapLibre repacks
|
||||
* a GeoJSON source's `id` (an ISO_A3 string) into a numeric index when it stores
|
||||
* the source, so at click/hover time `feature.id` is a number, never the ISO_A3
|
||||
* — resolving from it is exactly the "no owner" bug (#6).
|
||||
*/
|
||||
export function regionOwner(regions: RegionMap, isoA3: string | null | undefined): RegionOwner | undefined {
|
||||
if (!isoA3) return undefined;
|
||||
return regions[isoA3];
|
||||
}
|
||||
|
||||
/** Server -> client Server-Sent Events payload (see server/index.ts /sse). */
|
||||
export type SseMessage =
|
||||
| { type: 'state'; state: GameState }
|
||||
|
||||
Reference in New Issue
Block a user