Skip to content

Commit e323ce3

Browse files
fix(plugin-history-sync): add decode interface to Config and support route: string[] (#560)
Co-authored-by: JH.Lee <contact@jins.dev>
1 parent 5fc54cb commit e323ce3

File tree

19 files changed

+113
-61
lines changed

19 files changed

+113
-61
lines changed

.changeset/young-rules-grin.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
"@stackflow/plugin-history-sync": patch
3+
"@stackflow/react": patch
4+
"@stackflow/link": patch
5+
"@stackflow/config": patch
6+
---
7+
8+
fix: add `decode()` interface to `Config` and support `path: string[]`

config/src/ActivityDefinition.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import type { ActivityLoader } from "./ActivityLoader";
2+
import type { RegisteredActivityName } from "./RegisteredActivityName";
23

3-
export interface ActivityDefinition<ActivityName extends string> {
4+
export interface ActivityDefinition<
5+
ActivityName extends RegisteredActivityName,
6+
> {
47
name: ActivityName;
58
loader?: ActivityLoader<any>;
69
}

config/src/Config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import type { ActivityDefinition } from "./ActivityDefinition";
22
import type { ConfigDefinition } from "./ConfigDefinition";
3+
import type { RegisteredActivityName } from "./RegisteredActivityName";
34

4-
export interface Config<T extends ActivityDefinition<string>>
5+
export interface Config<T extends ActivityDefinition<RegisteredActivityName>>
56
extends ConfigDefinition<T> {
67
decorate<
78
K extends Exclude<keyof Config<T>, keyof ConfigDefinition<T> | "decorate">,

config/src/ConfigDefinition.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import type { ActivityDefinition } from "./ActivityDefinition";
2+
import type { RegisteredActivityName } from "./RegisteredActivityName";
23

3-
export interface ConfigDefinition<T extends ActivityDefinition<string>> {
4+
export interface ConfigDefinition<
5+
T extends ActivityDefinition<RegisteredActivityName>,
6+
> {
47
activities: T[];
58
transitionDuration: number;
69
initialActivity?: () => T["name"];

config/src/defineConfig.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import type { ActivityDefinition } from "./ActivityDefinition";
22
import type { Config } from "./Config";
33
import type { ConfigDefinition } from "./ConfigDefinition";
4+
import type { RegisteredActivityName } from "./RegisteredActivityName";
45

56
export function defineConfig<
6-
ActivityName extends string,
7+
ActivityName extends RegisteredActivityName,
78
Activity extends ActivityDefinition<ActivityName>,
89
>(configDefinition: ConfigDefinition<Activity>): Config<Activity> {
910
const config: Config<Activity> = {

demo/src/activities/Article.loader.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,52 +5,52 @@ export function articleLoader({ params }: ActivityLoaderArgs<"Article">) {
55

66
const recommenderCards = [
77
{
8-
articleId: "25140667",
8+
articleId: 25140667,
99
price: 41,
1010
title: "Ran",
1111
},
1212
{
13-
articleId: "60547101",
13+
articleId: 60547101,
1414
price: 24,
1515
title: "Rest",
1616
},
1717
{
18-
articleId: "34751776",
18+
articleId: 34751776,
1919
price: 42,
2020
title: "Those",
2121
},
2222
{
23-
articleId: "04114554",
23+
articleId: 4114554,
2424
price: 12,
2525
title: "Beauty",
2626
},
2727
{
28-
articleId: "81339443",
28+
articleId: 81339443,
2929
price: 3,
3030
title: "Mighty",
3131
},
3232
{
33-
articleId: "44738871",
33+
articleId: 44738871,
3434
price: 1,
3535
title: "Afternoon",
3636
},
3737
{
38-
articleId: "57388513",
38+
articleId: 57388513,
3939
price: 31,
4040
title: "Brown",
4141
},
4242
{
43-
articleId: "60883443",
43+
articleId: 60883443,
4444
price: 49,
4545
title: "Musical",
4646
},
4747
{
48-
articleId: "00932094",
48+
articleId: 932094,
4949
price: 26,
5050
title: "Occasionally",
5151
},
5252
{
53-
articleId: "10749683",
53+
articleId: 10749683,
5454
price: 35,
5555
title: "Having",
5656
},

demo/src/activities/Article.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import type { articleLoader } from "./Article.loader";
1313
declare module "@stackflow/config" {
1414
interface Register {
1515
Article: {
16-
articleId: string;
16+
articleId: number;
1717
title?: string;
1818
};
1919
}

demo/src/activities/Main.loader.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,70 +2,70 @@ export function mainLoader() {
22
return {
33
cards: [
44
{
5-
articleId: "02542470",
5+
articleId: 2542470,
66
price: 41,
77
title: "Master",
88
region: "Nagevan",
99
daysAgo: 4,
1010
},
1111
{
12-
articleId: "11257089",
12+
articleId: 11257089,
1313
price: 24,
1414
title: "Wild",
1515
region: "Inguima",
1616
daysAgo: 4,
1717
},
1818
{
19-
articleId: "08407137",
19+
articleId: 8407137,
2020
price: 42,
2121
title: "Universe",
2222
region: "Litenego",
2323
daysAgo: 4,
2424
},
2525
{
26-
articleId: "32979422",
26+
articleId: 32979422,
2727
price: 12,
2828
title: "Private",
2929
region: "Umumtaw",
3030
daysAgo: 6,
3131
},
3232
{
33-
articleId: "37998208",
33+
articleId: 37998208,
3434
price: 3,
3535
title: "Harbor",
3636
region: "Gubdidgi",
3737
daysAgo: 3,
3838
},
3939
{
40-
articleId: "01695878",
40+
articleId: 1695878,
4141
price: 1,
4242
title: "Valuable",
4343
region: "Jumjelewu",
4444
daysAgo: 1,
4545
},
4646
{
47-
articleId: "09792471",
47+
articleId: 9792471,
4848
price: 31,
4949
title: "Also",
5050
region: "Salhega",
5151
daysAgo: 1,
5252
},
5353
{
54-
articleId: "23939055",
54+
articleId: 23939055,
5555
price: 49,
5656
title: "Ever",
5757
region: "Jaifuup",
5858
daysAgo: 9,
5959
},
6060
{
61-
articleId: "94689745",
61+
articleId: 94689745,
6262
price: 26,
6363
title: "Production",
6464
region: "Idcipwel",
6565
daysAgo: 3,
6666
},
6767
{
68-
articleId: "49322156",
68+
articleId: 49322156,
6969
price: 35,
7070
title: "Chest",
7171
region: "Ajapaktar",

demo/src/components/ArticleCard.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { LazyLoadImage } from "react-lazy-load-image-component";
33
import * as css from "./ArticleCard.css";
44

55
interface ArticleCardProps {
6-
articleId: string;
6+
articleId: number;
77
title: string;
88
price: number;
99
}
@@ -17,7 +17,7 @@ const ArticleCard: React.FC<ArticleCardProps> = ({
1717
return (
1818
<Link
1919
activityName="Article"
20-
activityParams={{ articleId: String(articleId), title }}
20+
activityParams={{ articleId, title }}
2121
className={css.container}
2222
>
2323
<div className={css.thumbnail}>

demo/src/components/FeedCard.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { LazyLoadImage } from "react-lazy-load-image-component";
33
import * as css from "./FeedCard.css";
44

55
interface FeedCardProps {
6-
articleId: string;
6+
articleId: number;
77
title: string;
88
region: string;
99
price: number;
@@ -22,7 +22,7 @@ const FeedCard: React.FC<FeedCardProps> = ({
2222

2323
const onClick = () => {
2424
push("Article", {
25-
articleId: String(articleId),
25+
articleId,
2626
title,
2727
});
2828
};

0 commit comments

Comments
 (0)