@agent-native/toolkit 0.214.0 → 0.217.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-native.eject.json +5 -0
- package/dist/app/agentkit/react/chat.d.ts.map +1 -1
- package/dist/app/agentkit/react/chat.js +2 -2
- package/dist/app/agentkit/react/chat.js.map +1 -1
- package/dist/app/agentkit/react/components.d.ts +4 -1
- package/dist/app/agentkit/react/components.d.ts.map +1 -1
- package/dist/app/agentkit/react/components.js +69 -15
- package/dist/app/agentkit/react/components.js.map +1 -1
- package/dist/app/agentkit/react/context.d.ts +7 -1
- package/dist/app/agentkit/react/context.d.ts.map +1 -1
- package/dist/app/agentkit/react/context.js +5 -1
- package/dist/app/agentkit/react/context.js.map +1 -1
- package/dist/app/agentkit/react/index.d.ts +1 -0
- package/dist/app/agentkit/react/index.d.ts.map +1 -1
- package/dist/app/agentkit/react/index.js +1 -0
- package/dist/app/agentkit/react/index.js.map +1 -1
- package/dist/app/agentkit/react/root.d.ts +4 -1
- package/dist/app/agentkit/react/root.d.ts.map +1 -1
- package/dist/app/agentkit/react/root.js +2 -2
- package/dist/app/agentkit/react/root.js.map +1 -1
- package/dist/app/agentkit/react/styles.css +43 -6
- package/dist/app/agentkit/react/transcript-layout.d.ts +51 -0
- package/dist/app/agentkit/react/transcript-layout.d.ts.map +1 -0
- package/dist/app/agentkit/react/transcript-layout.js +34 -0
- package/dist/app/agentkit/react/transcript-layout.js.map +1 -0
- package/dist/app/auth/AuthPage.d.ts.map +1 -1
- package/dist/app/auth/AuthPage.js +33 -44
- package/dist/app/auth/AuthPage.js.map +1 -1
- package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
- package/dist/app/chat/AgentKitAssistantChat.js +3 -3
- package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
- package/dist/app/chat/AgentPanel.d.ts +2 -0
- package/dist/app/chat/AgentPanel.d.ts.map +1 -1
- package/dist/app/chat/AgentPanel.js +6 -2
- package/dist/app/chat/AgentPanel.js.map +1 -1
- package/dist/app/chat/chat/index.d.ts +2 -0
- package/dist/app/chat/chat/index.d.ts.map +1 -1
- package/dist/app/chat/chat/index.js.map +1 -1
- package/dist/app/chat/chat/surface-types.d.ts +7 -0
- package/dist/app/chat/chat/surface-types.d.ts.map +1 -1
- package/dist/app/chat/chat/surface-types.js.map +1 -1
- package/dist/app/chat/chat/tool-call-display.d.ts +7 -2
- package/dist/app/chat/chat/tool-call-display.d.ts.map +1 -1
- package/dist/app/chat/chat/tool-call-display.js +10 -9
- package/dist/app/chat/chat/tool-call-display.js.map +1 -1
- package/dist/app/chat/chat/widgets/DataChartRenderer.d.ts.map +1 -1
- package/dist/app/chat/chat/widgets/DataChartRenderer.js +196 -26
- package/dist/app/chat/chat/widgets/DataChartRenderer.js.map +1 -1
- package/dist/app/chat/chat/widgets/DataChartWidget.d.ts.map +1 -1
- package/dist/app/chat/chat/widgets/DataChartWidget.js +5 -1
- package/dist/app/chat/chat/widgets/DataChartWidget.js.map +1 -1
- package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.d.ts +2 -2
- package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.d.ts.map +1 -1
- package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.js +6 -4
- package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.js.map +1 -1
- package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ar-SA.js +1 -0
- package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.js +1 -0
- package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
- package/dist/app/i18n/catalogs/en-US.d.ts +1 -0
- package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/en-US.js +1 -0
- package/dist/app/i18n/catalogs/en-US.js.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.js +1 -0
- package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.js +1 -0
- package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.js +1 -0
- package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.js +1 -0
- package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.js +1 -0
- package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.js +1 -0
- package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.js +1 -0
- package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.js +1 -0
- package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
- package/dist/app/onboarding/GettingStartedCard.d.ts +35 -0
- package/dist/app/onboarding/GettingStartedCard.d.ts.map +1 -0
- package/dist/app/onboarding/GettingStartedCard.js +38 -0
- package/dist/app/onboarding/GettingStartedCard.js.map +1 -0
- package/dist/app/onboarding/index.d.ts +1 -0
- package/dist/app/onboarding/index.d.ts.map +1 -1
- package/dist/app/onboarding/index.js +1 -0
- package/dist/app/onboarding/index.js.map +1 -1
- package/dist/app/providers/AppProviders.d.ts.map +1 -1
- package/dist/app/providers/AppProviders.js +3 -1
- package/dist/app/providers/AppProviders.js.map +1 -1
- package/dist/app/settings/AccountSettingsCard.d.ts.map +1 -1
- package/dist/app/settings/AccountSettingsCard.js +2 -1
- package/dist/app/settings/AccountSettingsCard.js.map +1 -1
- package/dist/app/settings/index.d.ts +1 -0
- package/dist/app/settings/index.d.ts.map +1 -1
- package/dist/app/settings/index.js +1 -0
- package/dist/app/settings/index.js.map +1 -1
- package/dist/app/settings/shell/SettingsShell.d.ts +40 -1
- package/dist/app/settings/shell/SettingsShell.d.ts.map +1 -1
- package/dist/app/settings/shell/SettingsShell.js +87 -20
- package/dist/app/settings/shell/SettingsShell.js.map +1 -1
- package/dist/app/settings/shell/bridge.d.ts +5 -3
- package/dist/app/settings/shell/bridge.d.ts.map +1 -1
- package/dist/app/settings/shell/bridge.js +8 -5
- package/dist/app/settings/shell/bridge.js.map +1 -1
- package/dist/app/settings/shell/index.d.ts +2 -2
- package/dist/app/settings/shell/index.d.ts.map +1 -1
- package/dist/app/settings/shell/index.js.map +1 -1
- package/dist/app/settings/shell/registry.d.ts +9 -1
- package/dist/app/settings/shell/registry.d.ts.map +1 -1
- package/dist/app/settings/shell/registry.js +16 -0
- package/dist/app/settings/shell/registry.js.map +1 -1
- package/dist/app/settings/shell/routing.d.ts +5 -4
- package/dist/app/settings/shell/routing.d.ts.map +1 -1
- package/dist/app/settings/shell/routing.js +38 -10
- package/dist/app/settings/shell/routing.js.map +1 -1
- package/dist/app/shared/CommandMenu.d.ts +86 -6
- package/dist/app/shared/CommandMenu.d.ts.map +1 -1
- package/dist/app/shared/CommandMenu.js +303 -41
- package/dist/app/shared/CommandMenu.js.map +1 -1
- package/dist/app/shared/ConsentBanner.d.ts +9 -0
- package/dist/app/shared/ConsentBanner.d.ts.map +1 -0
- package/dist/app/shared/ConsentBanner.js +35 -0
- package/dist/app/shared/ConsentBanner.js.map +1 -0
- package/dist/composer/ComposerContextBanner.d.ts +3 -1
- package/dist/composer/ComposerContextBanner.d.ts.map +1 -1
- package/dist/composer/ComposerContextBanner.js +2 -2
- package/dist/composer/ComposerContextBanner.js.map +1 -1
- package/dist/ui/sonner.d.ts +2 -2
- package/dist/ui/sonner.d.ts.map +1 -1
- package/dist/ui/sonner.js +2 -2
- package/dist/ui/sonner.js.map +1 -1
- package/package.json +3 -3
- package/src/app/agentkit/react/chat.tsx +2 -0
- package/src/app/agentkit/react/components.interaction.spec.tsx +107 -0
- package/src/app/agentkit/react/components.spec.tsx +28 -1
- package/src/app/agentkit/react/components.tsx +153 -17
- package/src/app/agentkit/react/context.tsx +12 -0
- package/src/app/agentkit/react/index.ts +1 -0
- package/src/app/agentkit/react/lifecycle.spec.tsx +186 -16
- package/src/app/agentkit/react/root.tsx +7 -0
- package/src/app/agentkit/react/styles.css +43 -6
- package/src/app/agentkit/react/transcript-layout.spec.ts +72 -0
- package/src/app/agentkit/react/transcript-layout.ts +97 -0
- package/src/app/auth/AuthPage.attribution.spec.tsx +6 -0
- package/src/app/auth/AuthPage.interaction.spec.tsx +74 -0
- package/src/app/auth/AuthPage.tsx +32 -39
- package/src/app/chat/AgentKitAssistantChat.spec.tsx +39 -0
- package/src/app/chat/AgentKitAssistantChat.tsx +5 -0
- package/src/app/chat/AgentPanel.page-header-share.spec.tsx +101 -0
- package/src/app/chat/AgentPanel.tsx +14 -2
- package/src/app/chat/chat/index.ts +2 -0
- package/src/app/chat/chat/surface-types.ts +10 -0
- package/src/app/chat/chat/tool-call-display.spec.tsx +83 -0
- package/src/app/chat/chat/tool-call-display.tsx +40 -8
- package/src/app/chat/chat/widgets/DataChartRenderer.spec.tsx +632 -0
- package/src/app/chat/chat/widgets/DataChartRenderer.tsx +308 -51
- package/src/app/chat/chat/widgets/DataChartWidget.spec.tsx +126 -23
- package/src/app/chat/chat/widgets/DataChartWidget.tsx +10 -0
- package/src/app/chat/chat/widgets/DataWidgetDisplayControls.tsx +26 -6
- package/src/app/i18n/catalogs/ar-SA.ts +1 -0
- package/src/app/i18n/catalogs/de-DE.ts +2 -0
- package/src/app/i18n/catalogs/en-US.ts +2 -0
- package/src/app/i18n/catalogs/es-ES.ts +2 -0
- package/src/app/i18n/catalogs/fr-FR.ts +2 -0
- package/src/app/i18n/catalogs/hi-IN.ts +1 -0
- package/src/app/i18n/catalogs/ja-JP.ts +2 -0
- package/src/app/i18n/catalogs/ko-KR.ts +1 -0
- package/src/app/i18n/catalogs/pt-BR.ts +2 -0
- package/src/app/i18n/catalogs/zh-CN.ts +1 -0
- package/src/app/i18n/catalogs/zh-TW.ts +1 -0
- package/src/app/onboarding/GettingStartedCard.tsx +203 -0
- package/src/app/onboarding/index.ts +1 -0
- package/src/app/providers/AppProviders.tsx +7 -1
- package/src/app/settings/AccountSettingsCard.spec.tsx +31 -0
- package/src/app/settings/AccountSettingsCard.tsx +8 -0
- package/src/app/settings/index.ts +1 -0
- package/src/app/settings/shell/SettingsShell.spec.tsx +472 -1
- package/src/app/settings/shell/SettingsShell.tsx +245 -31
- package/src/app/settings/shell/bridge.spec.ts +12 -0
- package/src/app/settings/shell/bridge.ts +17 -4
- package/src/app/settings/shell/index.ts +6 -1
- package/src/app/settings/shell/registry.ts +33 -1
- package/src/app/settings/shell/routing.spec.ts +92 -1
- package/src/app/settings/shell/routing.ts +52 -9
- package/src/app/shared/CommandMenu.spec.tsx +1662 -1
- package/src/app/shared/CommandMenu.tsx +763 -164
- package/src/app/shared/ConsentBanner.spec.tsx +141 -0
- package/src/app/shared/ConsentBanner.tsx +141 -0
- package/src/composer/ComposerContextBanner.spec.tsx +31 -5
- package/src/composer/ComposerContextBanner.tsx +7 -2
- package/src/ui/sonner.spec.ts +10 -0
- package/src/ui/sonner.tsx +2 -2
|
@@ -38,7 +38,15 @@ function resolve(
|
|
|
38
38
|
rest: Partial<SettingsLocation> = {},
|
|
39
39
|
pages: readonly SettingsPageDefinition[] = CORE_SETTINGS_PAGES,
|
|
40
40
|
) {
|
|
41
|
-
return resolveSettingsRoute({ pathname, hash, ...rest }, pages
|
|
41
|
+
return resolveSettingsRoute({ pathname, hash, ...rest }, pages, {
|
|
42
|
+
templateTabPageIds: new Map(
|
|
43
|
+
pages.flatMap((page) =>
|
|
44
|
+
page.group === "app"
|
|
45
|
+
? (page.legacyTabIds ?? []).map((tabId) => [tabId, page.id] as const)
|
|
46
|
+
: [],
|
|
47
|
+
),
|
|
48
|
+
),
|
|
49
|
+
});
|
|
42
50
|
}
|
|
43
51
|
|
|
44
52
|
describe("settings shell routing", () => {
|
|
@@ -244,6 +252,27 @@ describe("legacy settings links", () => {
|
|
|
244
252
|
"recordings",
|
|
245
253
|
]),
|
|
246
254
|
).toMatchObject({ page: "app", sub: "recordings" });
|
|
255
|
+
const collidingPages = [...CORE_SETTINGS_PAGES, appPage("alerts")];
|
|
256
|
+
expect(
|
|
257
|
+
resolveSettingsTabValue("alerts", collidingPages, ["alerts"]),
|
|
258
|
+
).toMatchObject({ page: "alerts", sub: null, legacy: false });
|
|
259
|
+
expect(
|
|
260
|
+
resolveSettingsRoute(
|
|
261
|
+
{ pathname: "/settings", hash: "" },
|
|
262
|
+
collidingPages,
|
|
263
|
+
{
|
|
264
|
+
appAreaIds: ["alerts"],
|
|
265
|
+
tabValue: "alerts",
|
|
266
|
+
},
|
|
267
|
+
),
|
|
268
|
+
).toMatchObject({ page: "alerts", sub: null, legacy: false });
|
|
269
|
+
expect(
|
|
270
|
+
resolveSettingsRoute(
|
|
271
|
+
{ pathname: "/settings/alerts", hash: "" },
|
|
272
|
+
collidingPages,
|
|
273
|
+
{ appAreaIds: ["alerts"] },
|
|
274
|
+
),
|
|
275
|
+
).toMatchObject({ page: "alerts", sub: null, legacy: false });
|
|
247
276
|
// Today's tab path for an area (Analytics' Alerts tab).
|
|
248
277
|
expect(
|
|
249
278
|
resolveSettingsRoute(
|
|
@@ -267,6 +296,67 @@ describe("legacy settings links", () => {
|
|
|
267
296
|
).toMatchObject({ page: "usage", legacy: false });
|
|
268
297
|
});
|
|
269
298
|
|
|
299
|
+
it("keeps app and derived template pages addressable when ids collide", () => {
|
|
300
|
+
const pages = [
|
|
301
|
+
...CORE_SETTINGS_PAGES,
|
|
302
|
+
appPage("app-drafting", "drafting"),
|
|
303
|
+
appPage("drafting"),
|
|
304
|
+
];
|
|
305
|
+
expect(
|
|
306
|
+
resolveSettingsRoute(
|
|
307
|
+
{ pathname: "/settings/drafting", hash: "" },
|
|
308
|
+
pages,
|
|
309
|
+
{ templateTabPageIds: new Map([["drafting", "app-drafting"]]) },
|
|
310
|
+
),
|
|
311
|
+
).toEqual({
|
|
312
|
+
page: "drafting",
|
|
313
|
+
sub: null,
|
|
314
|
+
anchor: null,
|
|
315
|
+
legacy: false,
|
|
316
|
+
});
|
|
317
|
+
expect(
|
|
318
|
+
resolveSettingsRoute(
|
|
319
|
+
{ pathname: "/settings/app-drafting", hash: "" },
|
|
320
|
+
pages,
|
|
321
|
+
{ templateTabPageIds: new Map([["drafting", "app-drafting"]]) },
|
|
322
|
+
),
|
|
323
|
+
).toMatchObject({ page: "app-drafting", legacy: false });
|
|
324
|
+
expect(
|
|
325
|
+
resolveSettingsTabValue(
|
|
326
|
+
"drafting",
|
|
327
|
+
pages,
|
|
328
|
+
[],
|
|
329
|
+
new Map([["drafting", "app-drafting"]]),
|
|
330
|
+
),
|
|
331
|
+
).toMatchObject({ page: "app-drafting", legacy: true });
|
|
332
|
+
expect(
|
|
333
|
+
resolveSettingsRoute(
|
|
334
|
+
{
|
|
335
|
+
pathname: "/settings",
|
|
336
|
+
hash: "",
|
|
337
|
+
search: "?section=drafting",
|
|
338
|
+
},
|
|
339
|
+
pages,
|
|
340
|
+
{ templateTabPageIds: new Map([["drafting", "app-drafting"]]) },
|
|
341
|
+
),
|
|
342
|
+
).toMatchObject({ page: "app-drafting", legacy: true });
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
it("preserves nested routes for app-owned page ids that match legacy patterns", () => {
|
|
346
|
+
const pages = [...CORE_SETTINGS_PAGES, appPage("secrets")];
|
|
347
|
+
expect(
|
|
348
|
+
resolveSettingsRoute(
|
|
349
|
+
{ pathname: "/settings/secrets/credentials", hash: "" },
|
|
350
|
+
pages,
|
|
351
|
+
),
|
|
352
|
+
).toEqual({
|
|
353
|
+
page: "secrets",
|
|
354
|
+
sub: "credentials",
|
|
355
|
+
anchor: null,
|
|
356
|
+
legacy: false,
|
|
357
|
+
});
|
|
358
|
+
});
|
|
359
|
+
|
|
270
360
|
it("prefers the agent panel's section over the hash it navigated to", () => {
|
|
271
361
|
// The panel sends `secrets` to #integrations for today's Settings.
|
|
272
362
|
expect(
|
|
@@ -284,6 +374,7 @@ describe("legacy settings links", () => {
|
|
|
284
374
|
expect(
|
|
285
375
|
resolveSettingsRoute({ pathname: "/settings", hash: "" }, MAIL_PAGES, {
|
|
286
376
|
tabValue: "drafting",
|
|
377
|
+
templateTabPageIds: new Map([["drafting", "drafting"]]),
|
|
287
378
|
}),
|
|
288
379
|
).toMatchObject({ page: "drafting", legacy: true });
|
|
289
380
|
});
|
|
@@ -43,6 +43,8 @@ export interface ResolvedSettingsRoute extends SettingsRoute {
|
|
|
43
43
|
export interface ResolveSettingsRouteOptions {
|
|
44
44
|
/** Tabs on the app's General page, routed `/settings/app/<id>`. */
|
|
45
45
|
appAreaIds?: readonly string[];
|
|
46
|
+
/** Legacy template tab ids map unless a direct page claims that path. */
|
|
47
|
+
templateTabPageIds?: ReadonlyMap<string, string>;
|
|
46
48
|
/**
|
|
47
49
|
* The tab a controlled template chose. A bare `/settings` opens it, which
|
|
48
50
|
* covers the moment between a template stripping `?section=` from the URL
|
|
@@ -159,17 +161,30 @@ function pageForTabIds(
|
|
|
159
161
|
}
|
|
160
162
|
|
|
161
163
|
/**
|
|
162
|
-
* The page a template's tab id opens.
|
|
163
|
-
*
|
|
164
|
-
* Automations page.
|
|
164
|
+
* The page a template's tab id opens. Direct page ids are canonical paths;
|
|
165
|
+
* template aliases still win over legacy redirects and core tab aliases.
|
|
165
166
|
*/
|
|
166
167
|
export function resolveSettingsTabValue(
|
|
167
168
|
value: string,
|
|
168
169
|
pages: readonly SettingsPageDefinition[],
|
|
169
170
|
appAreaIds: readonly string[] = [],
|
|
171
|
+
templateTabPageIds?: ReadonlyMap<string, string>,
|
|
170
172
|
): ResolvedSettingsRoute {
|
|
171
173
|
const tab = value.trim();
|
|
172
174
|
if (!tab) return NO_ROUTE;
|
|
175
|
+
const templatePage = templateTabPageIds?.get(tab);
|
|
176
|
+
if (templatePage && pages.some((page) => page.id === templatePage)) {
|
|
177
|
+
return { page: templatePage, sub: null, anchor: null, legacy: true };
|
|
178
|
+
}
|
|
179
|
+
const directAppPage = pages.find(
|
|
180
|
+
(page) => isAppPage(page) && page.id === tab,
|
|
181
|
+
);
|
|
182
|
+
if (directAppPage) {
|
|
183
|
+
return { page: directAppPage.id, sub: null, anchor: null, legacy: false };
|
|
184
|
+
}
|
|
185
|
+
if (appAreaIds.includes(tab)) {
|
|
186
|
+
return { page: "app", sub: tab, anchor: null, legacy: true };
|
|
187
|
+
}
|
|
173
188
|
const appPage = pages.find(
|
|
174
189
|
(page) =>
|
|
175
190
|
isAppPage(page) && (page.id === tab || page.legacyTabIds?.includes(tab)),
|
|
@@ -177,9 +192,6 @@ export function resolveSettingsTabValue(
|
|
|
177
192
|
if (appPage) {
|
|
178
193
|
return { page: appPage.id, sub: null, anchor: null, legacy: true };
|
|
179
194
|
}
|
|
180
|
-
if (appAreaIds.includes(tab)) {
|
|
181
|
-
return { page: "app", sub: tab, anchor: null, legacy: true };
|
|
182
|
-
}
|
|
183
195
|
const redirect = resolveLegacySettingsId(tab, "tab");
|
|
184
196
|
if (redirect) return redirectRoute(redirect, pages, null);
|
|
185
197
|
const page =
|
|
@@ -206,7 +218,8 @@ export function resolveSettingsRoute(
|
|
|
206
218
|
if (segments.length > 0) {
|
|
207
219
|
const joined = segments.join(":");
|
|
208
220
|
const pageId = segments[0]!;
|
|
209
|
-
|
|
221
|
+
const directPage = pages.find((page) => page.id === pageId);
|
|
222
|
+
if (directPage && isCoreSettingsPageId(pageId)) {
|
|
210
223
|
const pattern = segments.length > 1 && resolveSettingsIdPattern(joined);
|
|
211
224
|
if (pattern) return redirectRoute(pattern, pages, hash || null);
|
|
212
225
|
return {
|
|
@@ -216,6 +229,26 @@ export function resolveSettingsRoute(
|
|
|
216
229
|
legacy: segments.length > 2,
|
|
217
230
|
};
|
|
218
231
|
}
|
|
232
|
+
if (directPage) {
|
|
233
|
+
return {
|
|
234
|
+
page: pageId,
|
|
235
|
+
sub: segments[1] ?? null,
|
|
236
|
+
anchor: hash || null,
|
|
237
|
+
legacy: segments.length > 2,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
const templatePageId = options.templateTabPageIds?.get(pageId);
|
|
241
|
+
const templatePage = templatePageId
|
|
242
|
+
? pages.find((page) => page.id === templatePageId)
|
|
243
|
+
: undefined;
|
|
244
|
+
if (templatePage) {
|
|
245
|
+
return {
|
|
246
|
+
page: templatePage.id,
|
|
247
|
+
sub: null,
|
|
248
|
+
anchor: hash || null,
|
|
249
|
+
legacy: true,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
219
252
|
// Today's tab link to an area that moved onto the app's General page
|
|
220
253
|
// (`/settings/alerts`). Checked before the redirect table, like
|
|
221
254
|
// `resolveSettingsTabValue`, because the area id is the template's own.
|
|
@@ -266,11 +299,21 @@ export function resolveSettingsRoute(
|
|
|
266
299
|
}
|
|
267
300
|
const section = settingsSectionParam(location.search);
|
|
268
301
|
if (section) {
|
|
269
|
-
const route = resolveSettingsTabValue(
|
|
302
|
+
const route = resolveSettingsTabValue(
|
|
303
|
+
section,
|
|
304
|
+
pages,
|
|
305
|
+
options.appAreaIds,
|
|
306
|
+
options.templateTabPageIds,
|
|
307
|
+
);
|
|
270
308
|
if (route.page) return route;
|
|
271
309
|
}
|
|
272
310
|
if (options.tabValue) {
|
|
273
|
-
return resolveSettingsTabValue(
|
|
311
|
+
return resolveSettingsTabValue(
|
|
312
|
+
options.tabValue,
|
|
313
|
+
pages,
|
|
314
|
+
options.appAreaIds,
|
|
315
|
+
options.templateTabPageIds,
|
|
316
|
+
);
|
|
274
317
|
}
|
|
275
318
|
return NO_ROUTE;
|
|
276
319
|
}
|