Skip to content

Commit 9f16f16

Browse files
feat(plugin-map): a map view with no style draws the deployment's default map style before demotiles (#26326)
Fixes #26163 Clause-②: no Metadata-protocol: none The ui half of #26001. A map view that declares no style of its own now draws the deployment's default style, the runtime-config `mapStyleUrl` that #26162 serves from the operator's `OS_CONSOLE_MAP_STYLE_URL`, before it falls back to the public demo style. ## What changed A map draws the first style it finds, in this order: 1. the view's own style: `mapStyle`, then `map.style` (unchanged); 2. the deployment's default style, from the host; 3. `DEFAULT_MAP_STYLE`, the public demo style (unchanged). - **`@object-ui/react`**: a new `HostMapStyleContext` with `HostMapStyleProvider` and `useHostMapStyle()`. Outside a provider, or with no style given, the hook answers `undefined`. - **`@object-ui/plugin-map`**: `ObjectMap` reads `useHostMapStyle()` after `mapConfig.style`. Its public exports are unchanged. When the deployment's style fails to load, the record-list notice now has its own text: the default map style set for this deployment could not be loaded, ask your administrator to check it. Before this change that case would have shown the default-style notice, which blames the public default tiles that the map never drew. - **`@object-ui/app-shell`**: `AppShellRuntimeConfig.mapStyleUrl?: string` is read from the top-level `mapStyleUrl`. It is re-read from each payload, so absent, empty or non-string values withdraw it. `ConsoleShell` mounts `HostMapStyleProvider` with `getRuntimeConfig().mapStyleUrl`, directly inside `HostNavigationBridge`. - **`@object-ui/i18n`**: one key, `element.map.styleFailedDeployment`, in all ten packs. - Docs: a "Which style draws" section in `plugin-map`'s README and in `content/docs/plugins/plugin-map.mdx`. - `scripts/sdui-manifest.sources/{i18n,plugin-map,react}.json` re-recorded. The artefact itself did not move. ## The seam: a context in `@object-ui/react`, not a prop and not a plugin-map export - **Not a prop.** `ObjectMap` reaches the page through `ComponentRegistry` (`object-map`, rendered by `ObjectView` / `ListView` / `SchemaRenderer`). The Console never builds that element, so it has nowhere to pass a prop. `HostNavigationContext` exists for the same reason, and `ConsoleShell`'s own comment says so. - **Not a context exported from `plugin-map`.** The Console loads `@object-ui/plugin-map` lazily (`registerLazy` in `apps/console/src/register-plugins.ts`) to keep maplibre-gl out of the first bundle. A provider imported from the plugin's single side-effectful entry would load the plugin, and maplibre-gl with it, on every page. - **So the context sits beside `HostNavigationContext` in `@object-ui/react`.** Both the plugin and the app-shell already depend on that package, so neither gains a dependency, and `plugin-map` still does not depend on `app-shell`. `plugin-map`'s public surface is unchanged. `@object-ui/react` gains three exports: the context, the provider and the hook. No spec key and no Setup setting were added (ruling A on #26001). ## Tests Pinned in `ObjectMap.deploymentStyle-26163.test.tsx`, driven through `HostMapStyleProvider`: - env set and no view style: the deployment style draws. Covered for the declared `map` block and for the flat ListView form. - env unset: demotiles. Covered both with a provider that gives no style and with no provider at all. - the view's own `mapStyle` wins, and so does `map.style`. - a failed deployment style gets the deployment notice, and a failed view style still gets the view notice. `ConsoleShell.mapStyle-26163.test.tsx` checks that the console supplies the served value, and supplies nothing when the runtime serves no `mapStyleUrl`. `runtime-config.test.ts` gains a `mapStyleUrl` block covering read, absent, empty, whitespace, non-string, nested under `branding`, and withdrawn. Red first, at the pre-change `ObjectMap.tsx` (`10e80921`) with the tests in place, under the verify lock: ``` × env set, no view style: draws the deployment style × env set, no view style, flat-form config: draws the deployment style × a failed deployment style names the deployment style, not the public default tiles Tests 3 failed | 62 passed (65) ``` After the restore, the file matched its HEAD blob (`git diff HEAD` empty), and the green leg read `Tests 65 passed (65)`. The env-unset and view-wins cases pass on both legs, because they pin behaviour that already existed. Ablation of the Console injection: replacing `styleUrl={getRuntimeConfig().mapStyleUrl}` with `styleUrl={undefined}` turns `hands the served mapStyleUrl to every renderer below it` red (1 failed, 1 passed). After the restore, the file's hash matched HEAD. ## Local verification at head `3f5e3446` These were run after merging `origin/main` (merge commit `10e1f91a`), under `scripts/pm/os-verify-lock.sh`: - Tests: `pnpm exec vitest run packages/plugin-map/ packages/i18n/ packages/react/src/context` plus the three `ConsoleShell` tests (`hostNavigation`, `mapStyle-26163`, `notifications`), `runtime-config.test.ts`, `ObjectView.mapFlatten.test.tsx` and `InterfaceListPage.mapConfig.test.tsx`. Result: `Test Files 149 passed (149)`, `Tests 1862 passed, 13 skipped`. - `pnpm run type-check` in `plugin-map`, `react`, `i18n` and `app-shell`: all exit 0 with 0 TS errors. This was run after `turbo run build --filter='@object-ui/app-shell^...'`, which completed 64 of 64 tasks. - `node scripts/gen-sdui-manifest-node.mjs` re-recorded `i18n`, `plugin-map` and `react`, and the artefact sha256 did not change. `node scripts/check-sdui-manifest.mjs` exits 0. - `eslint` on the changed files: 0 errors (warnings only, of the same kinds the neighbouring files already carry). `pnpm --dir ui run check:new-line-citations`: 0 new citations. - `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` derived 45 commands. 44 exited 0. `pnpm check:type-check-debt` is **NOT MEASURED**: it exited 3 (PREREQUISITE NOT MET) because its closure build timed out in the shared verify-lock queue, so CI's run of it is the reading. `--ran` reconciliation: `45 derived, 44 run, 1 NOT-MEASURED, 0 UNRUN`. - Not run locally: the full app-shell suite and the repo-wide lint. CI runs both. ## Acceptance notes - The `object-map` `mapStyle` input description is the spec row's describe, verbatim: "overriding the public demo tiles". With a deployment default it now overrides that too. The text lives in `@objectstack/spec`, outside this card, so it was left as is. The README and docs rows are updated. - `docs/qa/platform-checklist/RUNNER.md` records a QA reading that the map uses demotiles unless the view declares a style. That reading is historical, tied to its pin, and was left as is. - The default-style notice still tells the reader to ask an administrator to "set a map style for this view". That remedy remains valid, and setting `OS_CONSOLE_MAP_STYLE_URL` is now a second one. The translated text was left unchanged. --- _Generated by [Claude Code](https://claude.ai/code/session_01SMps7wq7rBTk53e8KTSEup)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 68901b0 commit 9f16f16

21 files changed

Lines changed: 435 additions & 22 deletions

File tree

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
---
2+
'@object-ui/plugin-map': patch
3+
'@object-ui/react': patch
4+
'@object-ui/app-shell': patch
5+
'@object-ui/i18n': patch
6+
---
7+
8+
feat(plugin-map): a map view with no style of its own draws the deployment's default map style before the public demo style
9+
10+
Clause-②: no
11+
Metadata-protocol: none
12+
13+
An operator who sets `OS_CONSOLE_MAP_STYLE_URL` now gets that style on every map view that names none. A map draws the first style it finds, in this order:
14+
15+
1. the view's own style: `mapStyle`, then `map.style`;
16+
2. the deployment's default style, the runtime-config `mapStyleUrl`;
17+
3. the public MapLibre demo style.
18+
19+
- **`@object-ui/react`:** `HostMapStyleProvider` and `useHostMapStyle()` let a host hand the deployment's default map style to the map renderer. Outside a provider, the hook answers `undefined` and the map keeps the demo style.
20+
- **`@object-ui/app-shell`:** the runtime config reads the top-level `mapStyleUrl` into `AppShellRuntimeConfig.mapStyleUrl`, re-read from each payload, and `ConsoleShell` supplies it through `HostMapStyleProvider`.
21+
- **`@object-ui/plugin-map`:** `ObjectMap` reads the host's style after the view's own. When the deployment's style fails to load, the notice above the record list says the deployment's default map style could not be loaded and asks the reader to have an administrator check it. It no longer blames the public default tiles, which that map never drew.
22+
- **`@object-ui/i18n`:** one new key, `element.map.styleFailedDeployment`, in all ten packs.
23+
24+
What to do: nothing. A deployment that sets no `OS_CONSOLE_MAP_STYLE_URL` draws the demo style as before, and a view's own `mapStyle` still wins.

‎ui/content/docs/plugins/plugin-map.mdx‎

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ to `onMarkerClick` is not `===` the authored object.
158158
descriptionField?: string, // Field for marker description
159159
zoom?: number, // Zoom level (1-20) — opts out of the auto-fit
160160
center?: [number, number], // Center coordinates [lat, lng] — opts out of the auto-fit
161-
style?: string // MapLibre style URL/spec (overrides the demo default)
161+
style?: string // MapLibre style URL/spec (overrides the deployment and demo defaults)
162162
}
163163
```
164164

@@ -171,6 +171,23 @@ warns `[ObjectMap] Invalid map configuration`, naming the same key. A typo that
171171
leaves the block with no coordinate binding, as `latitudeFieId` does, draws the
172172
refusal described under "An unconfigured map refuses" rather than a map.
173173

174+
## Which style draws
175+
176+
A map draws the first style it finds, in this order:
177+
178+
1. the view's own style: the node-level `mapStyle`, then `map.style`;
179+
2. the deployment's default style, which the host hands down through
180+
`HostMapStyleProvider` from `@object-ui/react`. The Console supplies the
181+
operator's `OS_CONSOLE_MAP_STYLE_URL`, served as `mapStyleUrl` on
182+
`GET /api/v1/runtime/config`;
183+
3. the public MapLibre demo style (`https://demotiles.maplibre.org/style.json`),
184+
which is rate-limited and not meant for production traffic.
185+
186+
A host that provides no style, such as an embedded renderer or a Console whose
187+
operator set none, keeps the demo style. When the style that drew fails to load,
188+
the map is replaced by its record list, and the notice names that style: the
189+
view's own, the deployment's or the public default.
190+
174191
## Configuration
175192

176193
### An unconfigured map refuses

‎ui/packages/app-shell/src/console/ConsoleShell.tsx‎

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { Suspense, useEffect, useRef, useState, type ReactNode } from 'react';
1414
import { Navigate, useLocation } from 'react-router-dom';
1515
import { AuthGuard, useAuth, createAuthenticatedFetch } from '@object-ui/auth';
1616
import { useObjectTranslation } from '@object-ui/i18n';
17-
import { SchemaRendererProvider, ActionProvider, NotificationProvider } from '@object-ui/react';
17+
import { SchemaRendererProvider, ActionProvider, NotificationProvider, HostMapStyleProvider } from '@object-ui/react';
1818
import { NotificationAlerts, NotificationSnackbar } from '@object-ui/components';
1919
import { presentNotificationToast } from '../chrome/notificationToast.js';
2020
import { useActionModal } from '../hooks/useActionModal.js';
@@ -54,6 +54,7 @@ import { ConsoleElementApiOpen } from './ConsoleElementApiOpen.js';
5454
import { ImpersonationBanner } from '../layout/ImpersonationBanner.js';
5555
import { ReadRateBanner } from '../layout/ReadRateBanner.js';
5656
import { StorageUsageBanner } from '../layout/StorageUsageBanner.js';
57+
import { getRuntimeConfig } from '../runtime-config.js';
5758

5859
// The console's every pre-React / pre-auth gate (Suspense fallback, adapter
5960
// not ready, org/auth loading) renders this. It used to be a bare, unbranded
@@ -162,7 +163,15 @@ export function ConsoleShell({ children }: { children: ReactNode }) {
162163
console route and several arrive through `ComponentRegistry`, where no
163164
prop could be passed. */
164165
<HostNavigationBridge>
165-
<ConsoleShellProviders>{children}</ConsoleShellProviders>
166+
{/* objectstack#26163 — the deployment's default map style (the
167+
operator's `OS_CONSOLE_MAP_STYLE_URL`, served as runtime-config
168+
`mapStyleUrl`), for a map view that declares no style of its own.
169+
The map arrives through `ComponentRegistry`, lazily, so a context is
170+
the only way to reach it; absent, the map keeps the demo style.
171+
`initRuntimeConfig()` settles before the console's first render. */}
172+
<HostMapStyleProvider styleUrl={getRuntimeConfig().mapStyleUrl}>
173+
<ConsoleShellProviders>{children}</ConsoleShellProviders>
174+
</HostMapStyleProvider>
166175
</HostNavigationBridge>
167176
);
168177
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/**
2+
* ObjectUI
3+
* Copyright (c) 2024-present ObjectStack Inc.
4+
*
5+
* `ConsoleShell` SUPPLIES the deployment's default map style (objectstack#26163).
6+
*
7+
* The runtime serves the operator's `OS_CONSOLE_MAP_STYLE_URL` as the top-level
8+
* `mapStyleUrl` of `GET /api/v1/runtime/config` (objectstack#26001), and the map
9+
* renderer reads it through `useHostMapStyle()` from `@object-ui/react`. The map
10+
* is a lazily registered plugin, so nothing but this context reaches it; this
11+
* file pins that the console actually mounts the provider with the served value,
12+
* which no test of the renderer or of the config reader can see.
13+
*/
14+
15+
import { describe, it, expect, vi, afterEach } from 'vitest';
16+
import { render, screen, waitFor } from '@testing-library/react';
17+
import { MemoryRouter } from 'react-router-dom';
18+
import { useHostMapStyle } from '@object-ui/react';
19+
import { ConsoleShell } from '../ConsoleShell';
20+
import { initRuntimeConfig, resetRuntimeConfigForTesting } from '../../runtime-config';
21+
22+
// Same two stubs the sibling ConsoleShell tests use: sonner is a global toast
23+
// surface, and the ADR-0069 remediation gate needs an AuthProvider above it.
24+
vi.mock('sonner', () => ({
25+
toast: Object.assign(vi.fn(), {
26+
info: vi.fn(), success: vi.fn(), warning: vi.fn(), error: vi.fn(),
27+
dismiss: vi.fn(), custom: vi.fn(), loading: vi.fn(), promise: vi.fn(),
28+
}),
29+
Toaster: () => null,
30+
}));
31+
vi.mock('../RemediationOverlay', () => ({ RemediationOverlay: () => null }));
32+
33+
const STYLE = 'https://tiles.intranet.example/styles/basic/style.json';
34+
35+
/** A stand-in for the map renderer below the shell. */
36+
function MapStub() {
37+
const style = useHostMapStyle();
38+
return <div data-testid="host-map-style">{style ?? 'none'}</div>;
39+
}
40+
41+
async function boot(payload: Record<string, unknown>) {
42+
vi.stubGlobal('fetch', vi.fn(async () => ({ ok: true, json: async () => payload })) as any);
43+
await initRuntimeConfig();
44+
render(
45+
<MemoryRouter>
46+
<ConsoleShell>
47+
<MapStub />
48+
</ConsoleShell>
49+
</MemoryRouter>,
50+
);
51+
}
52+
53+
afterEach(() => {
54+
resetRuntimeConfigForTesting();
55+
vi.unstubAllGlobals();
56+
});
57+
58+
describe('ConsoleShell — the console supplies the deployment map style (objectstack#26163)', () => {
59+
it('hands the served mapStyleUrl to every renderer below it', async () => {
60+
await boot({ mapStyleUrl: STYLE });
61+
await waitFor(() => expect(screen.getByTestId('host-map-style').textContent).toBe(STYLE));
62+
});
63+
64+
it('hands nothing when the runtime serves no mapStyleUrl', async () => {
65+
await boot({ singleEnvironment: true });
66+
await waitFor(() => expect(screen.getByTestId('host-map-style').textContent).toBe('none'));
67+
});
68+
});

‎ui/packages/app-shell/src/runtime-config.test.ts‎

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,43 @@ describe('runtime-config hideSingleAppSwitcher (objectui#12913)', () => {
280280
});
281281
});
282282

283+
describe('runtime-config mapStyleUrl (objectstack#26163)', () => {
284+
const STYLE = 'https://tiles.intranet.example/styles/basic/style.json';
285+
286+
it('is absent before init', () => {
287+
resetRuntimeConfigForTesting();
288+
expect(getRuntimeConfig().mapStyleUrl).toBeUndefined();
289+
});
290+
291+
it('takes the top-level mapStyleUrl the runtime serves', async () => {
292+
mockPayload({ mapStyleUrl: STYLE });
293+
await initRuntimeConfig();
294+
expect(getRuntimeConfig().mapStyleUrl).toBe(STYLE);
295+
});
296+
297+
it.each([
298+
['absent (the operator set no OS_CONSOLE_MAP_STYLE_URL)', { singleEnvironment: true }],
299+
['empty', { mapStyleUrl: '' }],
300+
['whitespace', { mapStyleUrl: ' ' }],
301+
['not a string', { mapStyleUrl: 42 }],
302+
['nested under branding, where it is not read', { branding: { mapStyleUrl: STYLE } }],
303+
])('is absent when the key is %s', async (_label, payload) => {
304+
mockPayload(payload);
305+
await initRuntimeConfig();
306+
expect(getRuntimeConfig().mapStyleUrl).toBeUndefined();
307+
});
308+
309+
it('withdraws it when a later fetch no longer serves it', async () => {
310+
mockPayload({ mapStyleUrl: STYLE });
311+
await initRuntimeConfig();
312+
expect(getRuntimeConfig().mapStyleUrl).toBe(STYLE);
313+
314+
mockPayload({ singleEnvironment: false });
315+
await initRuntimeConfig();
316+
expect(getRuntimeConfig().mapStyleUrl).toBeUndefined();
317+
});
318+
});
319+
283320
describe('runtime-config platform stage', () => {
284321
it('defaults to preview before init (badge shows out of the box)', () => {
285322
resetRuntimeConfigForTesting();

‎ui/packages/app-shell/src/runtime-config.ts‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,20 @@ export interface AppShellRuntimeConfig {
319319
* `singleEnvironment`: a later payload without it withdraws it.
320320
*/
321321
hideSingleAppSwitcher?: boolean;
322+
/**
323+
* The deployment's default map style (objectstack#26163): the operator's
324+
* `OS_CONSOLE_MAP_STYLE_URL`, served by `RuntimeConfigPlugin` as the
325+
* top-level `mapStyleUrl` (objectstack#26001) and absent when the operator
326+
* set none. A map view with no style of its own draws it before the public
327+
* demo style; `ConsoleShell` hands it to the map renderer through
328+
* `HostMapStyleProvider` from `@object-ui/react`.
329+
*
330+
* Re-derived from each payload in full, like `hideSingleAppSwitcher`: a
331+
* later payload without the key withdraws it. Only a non-empty string is
332+
* taken; the producer already refuses to boot on a value that is not an
333+
* absolute `https:` URL, so nothing is re-validated here.
334+
*/
335+
mapStyleUrl?: string;
322336
}
323337

324338
const defaults: AppShellRuntimeConfig = {
@@ -441,6 +455,12 @@ export async function initRuntimeConfig(baseUrl: string = ''): Promise<void> {
441455
// objectui#12913 — a host's request, so only a real `true` turns it on;
442456
// `'true'`, `1` and an absent key all keep the switcher.
443457
hideSingleAppSwitcher: body.hideSingleAppSwitcher === true,
458+
// objectstack#26163 — the operator's map style, or none. Absent, empty
459+
// and non-string all withdraw it, so the map falls back to the demo style.
460+
mapStyleUrl:
461+
typeof body.mapStyleUrl === 'string' && body.mapStyleUrl.trim()
462+
? body.mapStyleUrl.trim()
463+
: undefined,
444464
defaultOrgId: body.defaultOrgId ?? current.defaultOrgId ?? null,
445465
defaultEnvironmentId: body.defaultEnvironmentId ?? current.defaultEnvironmentId ?? null,
446466
features: body.features

‎ui/packages/i18n/src/locales/ar.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5101,6 +5101,7 @@ const ar = {
51015101
invalidCoordinatesExcluded: "السجلات المستبعدة من الخريطة بسبب إحداثيات مفقودة أو غير صالحة: {{excluded}}",
51025102
styleFailedConfigured: "تعذّر تحميل الخريطة ({{reason}}). السجلات مدرجة أدناه؛ تحقّق من عنوان URL لنمط الخريطة المحدد في طريقة العرض هذه.",
51035103
styleFailedDefault: "تعذّر تحميل الخريطة ({{reason}}). السجلات مدرجة أدناه؛ تعذّر تحميل مربعات الخريطة العامة الافتراضية هنا، لذا اطلب من المسؤول تعيين نمط خريطة لطريقة العرض هذه.",
5104+
styleFailedDeployment: "تعذّر تحميل الخريطة ({{reason}}). السجلات مدرجة أدناه؛ تعذّر هنا تحميل نمط الخريطة الافتراضي المعيّن لهذا النشر، لذا اطلب من المسؤول التحقق منه.",
51045105
styleFailedUnknownReason: "تعذّر تحميل نمط الخريطة أو مربعاتها",
51055106
webgl2Unavailable: "تعذّر تحميل الخريطة (هذا المتصفح لا يوفّر WebGL2 الذي تحتاجه الخريطة). السجلات مدرجة أدناه؛ فعّل تسريع الأجهزة أو استخدم متصفحًا يدعم WebGL2 لعرض الخريطة.",
51065107
retry: "إعادة محاولة تحميل الخريطة",

‎ui/packages/i18n/src/locales/de.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4639,6 +4639,7 @@ const de = {
46394639
invalidCoordinatesExcluded: "Wegen fehlender oder ungültiger Koordinaten nicht auf der Karte angezeigte Datensätze: {{excluded}}",
46404640
styleFailedConfigured: "Die Karte konnte nicht geladen werden ({{reason}}). Die Datensätze sind unten aufgelistet; prüfen Sie die für diese Ansicht festgelegte Kartenstil-URL.",
46414641
styleFailedDefault: "Die Karte konnte nicht geladen werden ({{reason}}). Die Datensätze sind unten aufgelistet; die öffentlichen Standard-Kartenkacheln konnten hier nicht geladen werden. Bitten Sie Ihren Administrator, für diese Ansicht einen Kartenstil festzulegen.",
4642+
styleFailedDeployment: "Die Karte konnte nicht geladen werden ({{reason}}). Die Datensätze sind unten aufgelistet; der für diese Bereitstellung festgelegte Standard-Kartenstil konnte hier nicht geladen werden. Bitten Sie Ihren Administrator, ihn zu überprüfen.",
46424643
styleFailedUnknownReason: "Kartenstil oder Kacheln konnten nicht geladen werden",
46434644
webgl2Unavailable: "Die Karte konnte nicht geladen werden (dieser Browser unterstützt kein WebGL2, das die Karte benötigt). Die Datensätze sind unten aufgelistet; aktivieren Sie die Hardwarebeschleunigung oder verwenden Sie einen Browser mit WebGL2, um die Karte zu sehen.",
46444645
retry: "Karte erneut laden",

‎ui/packages/i18n/src/locales/en.ts‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5437,13 +5437,15 @@ const en = {
54375437
},
54385438
map: {
54395439
sourceUnresolved: 'This map’s data source could not be resolved',
5440-
// objectstack#25889 — the map view's own notices. Both style failures
5441-
// fill `{{reason}}` with MapLibre's message, or `styleFailedUnknownReason`
5442-
// when it gave none; the excluded count reads "Label: N" so no key needs
5440+
// objectstack#25889 — the map view's own notices. The three style
5441+
// failures (the view's own style, the deployment's default style —
5442+
// objectstack#26163 — and the public default) fill `{{reason}}` with
5443+
// MapLibre's message, or `styleFailedUnknownReason` when it gave none; the excluded count reads "Label: N" so no key needs
54435444
// a plural family.
54445445
invalidCoordinatesExcluded: 'Records excluded from the map for missing or invalid coordinates: {{excluded}}',
54455446
styleFailedConfigured: 'Map failed to load ({{reason}}). The records are listed below; check the map style URL set on this view.',
54465447
styleFailedDefault: 'Map failed to load ({{reason}}). The records are listed below; the public default map tiles could not be loaded here, so ask your administrator to set a map style for this view.',
5448+
styleFailedDeployment: 'Map failed to load ({{reason}}). The records are listed below; the default map style set for this deployment could not be loaded here, so ask your administrator to check it.',
54475449
styleFailedUnknownReason: 'the map style or tiles could not be loaded',
54485450
webgl2Unavailable: 'Map failed to load (this browser does not provide WebGL2, which the map needs). The records are listed below; turn on hardware acceleration or use a browser with WebGL2 to see the map.',
54495451
retry: 'Try the map again',

‎ui/packages/i18n/src/locales/es.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4754,6 +4754,7 @@ const es = {
47544754
invalidCoordinatesExcluded: "Registros excluidos del mapa por coordenadas ausentes o no válidas: {{excluded}}",
47554755
styleFailedConfigured: "No se pudo cargar el mapa ({{reason}}). Los registros aparecen a continuación; revise la URL del estilo de mapa configurada en esta vista.",
47564756
styleFailedDefault: "No se pudo cargar el mapa ({{reason}}). Los registros aparecen a continuación; aquí no se pudieron cargar los mosaicos de mapa públicos predeterminados, así que pida a su administrador que configure un estilo de mapa para esta vista.",
4757+
styleFailedDeployment: "No se pudo cargar el mapa ({{reason}}). Los registros aparecen a continuación; aquí no se pudo cargar el estilo de mapa predeterminado configurado para esta implementación, así que pida a su administrador que lo revise.",
47574758
styleFailedUnknownReason: "no se pudieron cargar el estilo o los mosaicos del mapa",
47584759
webgl2Unavailable: "No se pudo cargar el mapa (este navegador no admite WebGL2, que el mapa necesita). Los registros aparecen a continuación; active la aceleración por hardware o use un navegador con WebGL2 para ver el mapa.",
47594760
retry: "Reintentar el mapa",

0 commit comments

Comments
 (0)