summaryrefslogtreecommitdiff
path: root/src/jet/intents/route-url/route-url-controller.ts
diff options
context:
space:
mode:
authorrxliuli <rxliuli@gmail.com>2025-11-04 05:03:50 +0800
committerrxliuli <rxliuli@gmail.com>2025-11-04 05:03:50 +0800
commitbce557cc2dc767628bed6aac87301a1be7c5431b (patch)
treeb51a051228d01fe3306cd7626d4a96768aadb944 /src/jet/intents/route-url/route-url-controller.ts
init commit
Diffstat (limited to 'src/jet/intents/route-url/route-url-controller.ts')
-rw-r--r--src/jet/intents/route-url/route-url-controller.ts28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/jet/intents/route-url/route-url-controller.ts b/src/jet/intents/route-url/route-url-controller.ts
new file mode 100644
index 0000000..8c8fdb6
--- /dev/null
+++ b/src/jet/intents/route-url/route-url-controller.ts
@@ -0,0 +1,28 @@
+import { isSome } from '@jet/environment/types/optional';
+import type { IntentController } from '@jet/environment/dispatching';
+import type { AppStoreObjectGraph } from '@jet-app/app-store/foundation/runtime/app-store-object-graph';
+import { isRoutableIntent } from '@jet-app/app-store/api/intents/routable-intent';
+
+import type { RouteUrlIntent } from '~/jet/intents';
+import { makeFlowAction } from '~/jet/models';
+
+export const RouteUrlIntentController: IntentController<RouteUrlIntent> = {
+ $intentKind: 'RouteUrlIntent',
+
+ async perform(intent: RouteUrlIntent, objectGraph: AppStoreObjectGraph) {
+ const targetIntent = objectGraph.router.intentFor(intent.url);
+
+ if (isSome(targetIntent) && isRoutableIntent(targetIntent)) {
+ return {
+ // intent needed for SSR
+ intent: targetIntent,
+ // only ever used by client; only clients have actions
+ action: makeFlowAction(targetIntent),
+ storefront: targetIntent.storefront,
+ language: targetIntent.language,
+ };
+ }
+
+ return null;
+ },
+};