Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(config): ActivityLoaderArgs.config #519

Merged
merged 5 commits into from
Sep 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/perfect-impalas-marry.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@stackflow/react": minor
"@stackflow/link": minor
"@stackflow/config": minor
---

add `config` property in loader args
1 change: 1 addition & 0 deletions biome.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
".vscode/**",
".yarn/**",
".next/**",
"__generated__/**",
".ultra.cache.json",
"package.json"
]
Expand Down
8 changes: 4 additions & 4 deletions config/src/ActivityLoader.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { ActivityLoaderArgs } from "./ActivityLoaderArgs";
import type { RegisteredActivityParamTypes } from "./RegisteredActivityParamTypes";
import type { RegisteredActivityName } from "./RegisteredActivityName";

export type ActivityLoader<
ActivityName extends Extract<keyof RegisteredActivityParamTypes, string>,
> = (args: ActivityLoaderArgs<ActivityName>) => any;
export type ActivityLoader<ActivityName extends RegisteredActivityName> = (
args: ActivityLoaderArgs<ActivityName>,
) => any;
13 changes: 8 additions & 5 deletions config/src/ActivityLoaderArgs.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import type { ActivityDefinition } from "./ActivityDefinition";
import type { Config } from "./Config";
import type { InferActivityParams } from "./InferActivityParams";
import type { RegisteredActivityParamTypes } from "./RegisteredActivityParamTypes";
import type { RegisteredActivityName } from "./RegisteredActivityName";

export type ActivityLoaderArgs<
ActivityName extends Extract<keyof RegisteredActivityParamTypes, string>,
> = {
export interface ActivityLoaderArgs<
ActivityName extends RegisteredActivityName,
> {
params: InferActivityParams<ActivityName>;
};
config: Config<ActivityDefinition<RegisteredActivityName>>;
}
10 changes: 5 additions & 5 deletions config/src/InferActivityParams.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import type { ActivityBaseParams } from "./ActivityBaseParams";
import type { RegisteredActivityName } from "./RegisteredActivityName";
import type { RegisteredActivityParamTypes } from "./RegisteredActivityParamTypes";

export type InferActivityParams<
ActivityName extends Extract<keyof RegisteredActivityParamTypes, string>,
> = RegisteredActivityParamTypes[ActivityName] extends never
? ActivityBaseParams
: RegisteredActivityParamTypes[ActivityName];
export type InferActivityParams<ActivityName extends RegisteredActivityName> =
RegisteredActivityParamTypes[ActivityName] extends never
? ActivityBaseParams
: RegisteredActivityParamTypes[ActivityName];
6 changes: 6 additions & 0 deletions config/src/RegisteredActivityName.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import type { RegisteredActivityParamTypes } from "./RegisteredActivityParamTypes";

export type RegisteredActivityName = Extract<
keyof RegisteredActivityParamTypes,
string
>;
1 change: 1 addition & 0 deletions config/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ export * from "./ActivityLoaderArgs";
export * from "./Config";
export * from "./InferActivityParams";
export * from "./Register";
export * from "./RegisteredActivityName";
export * from "./RegisteredActivityParamTypes";
11 changes: 4 additions & 7 deletions extensions/link/src/future/Link.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import type {
InferActivityParams,
RegisteredActivityParamTypes,
RegisteredActivityName,
} from "@stackflow/config";
import { useConfig, useFlow } from "@stackflow/react/future";
import { useMemo } from "react";
Expand All @@ -16,19 +16,16 @@ type AnchorProps = Omit<
"ref" | "href"
>;

export interface LinkProps<
K extends Extract<keyof RegisteredActivityParamTypes, string>,
> extends AnchorProps {
export interface LinkProps<K extends RegisteredActivityName>
extends AnchorProps {
ref?: React.RefObject<HTMLAnchorElement>;
activityName: K;
activityParams: InferActivityParams<K>;
animate?: boolean;
replace?: boolean;
}

export function Link<
K extends Extract<keyof RegisteredActivityParamTypes, string>,
>(props: LinkProps<K>) {
export function Link<K extends RegisteredActivityName>(props: LinkProps<K>) {
const config = useConfig();
const { push, replace } = useFlow();

Expand Down
6 changes: 3 additions & 3 deletions integrations/react/src/future/Actions.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import type {
InferActivityParams,
RegisteredActivityParamTypes,
RegisteredActivityName,
} from "@stackflow/config";

export type Actions = {
push<K extends Extract<keyof RegisteredActivityParamTypes, string>>(
push<K extends RegisteredActivityName>(
activityName: K,
activityParams: InferActivityParams<K>,
options?: {
Expand All @@ -13,7 +13,7 @@ export type Actions = {
): {
activityId: string;
};
replace<K extends Extract<keyof RegisteredActivityParamTypes, string>>(
replace<K extends RegisteredActivityName>(
activityName: K,
activityParams: InferActivityParams<K>,
options?: {
Expand Down
7 changes: 3 additions & 4 deletions integrations/react/src/future/ActivityComponentType.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import type {
InferActivityParams,
RegisteredActivityParamTypes,
RegisteredActivityName,
} from "@stackflow/config";
import type React from "react";

export type ActivityComponentType<
ActivityName extends Extract<keyof RegisteredActivityParamTypes, string>,
> = React.ComponentType<{ params: InferActivityParams<ActivityName> }>;
export type ActivityComponentType<ActivityName extends RegisteredActivityName> =
React.ComponentType<{ params: InferActivityParams<ActivityName> }>;
3 changes: 3 additions & 0 deletions integrations/react/src/future/loader/loaderPlugin.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ export function loaderPlugin(

const loaderData = loader({
params: activityParams,
config,
});

return {
Expand All @@ -63,6 +64,7 @@ export function loaderPlugin(

const loaderData = loader({
params: activityParams,
config,
});

overrideActionParams({
Expand All @@ -86,6 +88,7 @@ export function loaderPlugin(

const loaderData = loader({
params: activityParams,
config,
});

overrideActionParams({
Expand Down
7 changes: 3 additions & 4 deletions integrations/react/src/future/useActivityParams.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import { useContext } from "react";

import type {
InferActivityParams,
RegisteredActivityParamTypes,
RegisteredActivityName,
} from "@stackflow/config";
import { useContext } from "react";
import { ActivityContext } from "../__internal__/activity/ActivityProvider";

export function useActivityParams<
ActivityName extends Extract<keyof RegisteredActivityParamTypes, string>,
ActivityName extends RegisteredActivityName,
>(): InferActivityParams<ActivityName> {
return useContext(ActivityContext)
.params as InferActivityParams<ActivityName>;
Expand Down
8 changes: 4 additions & 4 deletions integrations/react/src/future/useStepFlow.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import type {
InferActivityParams,
RegisteredActivityParamTypes,
RegisteredActivityName,
} from "@stackflow/config";
import { useCoreActions } from "../__internal__/core";
import type { StepActions } from "./StepActions";
import { makeStepActions } from "./makeStepActions";

export function useStepFlow<
ActivityName extends Extract<keyof RegisteredActivityParamTypes, string>,
>(activityName: ActivityName): StepActions<InferActivityParams<ActivityName>> {
export function useStepFlow<ActivityName extends RegisteredActivityName>(
activityName: ActivityName,
): StepActions<InferActivityParams<ActivityName>> {
const coreActions = useCoreActions();
return makeStepActions(() => coreActions);
}
Loading