@@ -34,7 +34,6 @@ module Params = {
34
34
}
35
35
36
36
let lang = P .field ("lang" , Lang .ofJson )
37
- let tutorial = P .field ("tutorial" , Js .Json .decodeString )
38
37
39
38
module Lang = {
40
39
type t = {lang : Lang .t }
@@ -44,15 +43,20 @@ module Params = {
44
43
let toJson = ({lang }: t ): Js .Json .t =>
45
44
Js .Json .object_ (Js .Dict .fromArray ([("lang" , lang -> Lang .toJson )]))
46
45
47
- module Tutorial = {
48
- type t = {lang : Lang .t , tutorial : string }
49
- let make = (lang , tutorial ) => {lang : lang , tutorial : tutorial }
46
+ module Slug = (
47
+ Arg : {
48
+ let name : string
49
+ },
50
+ ) => {
51
+ type t = {lang : Lang .t , slug : string }
52
+ let slug = P .field (Arg .name , Js .Json .decodeString )
53
+ let make = (lang , slug ) => {lang : lang , slug : slug }
50
54
51
55
let ofJson = (json : Js .Json .t ): option <t > =>
52
- P .return (make )-> P .ap (lang )-> P .ap (tutorial )-> P .parse (json )
53
- let toJson = ({lang , tutorial }: t ): Js .Json .t =>
56
+ P .return (make )-> P .ap (lang )-> P .ap (slug )-> P .parse (json )
57
+ let toJson = ({lang , slug }: t ): Js .Json .t =>
54
58
Js .Json .object_ (
55
- Js .Dict .fromArray ([("lang" , lang -> Lang .toJson ), ("tutorial" , tutorial -> Js .Json .string )]),
59
+ Js .Dict .fromArray ([("lang" , lang -> Lang .toJson ), (Arg . name , slug -> Js .Json .string )]),
56
60
)
57
61
}
58
62
}
@@ -62,11 +66,12 @@ module type S = {
62
66
type t
63
67
type props <'content , 'params >
64
68
type params
69
+ type json1 <'a > = Js .Json .t
65
70
66
71
@react.component
67
72
let make : (~content : t , ~params : params ) => React .element
68
- let getStaticProps : Next .GetStaticProps .t <props <t , params >, params , void >
69
- let getStaticPaths : Next .GetStaticPaths .t <params >
73
+ let getStaticProps : Next .GetStaticProps .t <props <t , params >, json1 < params > , void >
74
+ let getStaticPaths : Next .GetStaticPaths .t <json1 < params > >
70
75
let default : props <Js .Json .t , Js .Json .t > => React .element
71
76
}
72
77
@@ -106,21 +111,26 @@ module Make = (Arg: Arg): (S with type t := Arg.t and type params = Arg.Params.t
106
111
107
112
type props <'a , 'b > = Props .t <'a , 'b >
108
113
type params = Arg .Params .t
109
-
110
- let getStaticProps : Next .GetStaticProps .t <props <Arg .t , params >, params , void > = ctx => {
111
- Arg .getContent (ctx .params ) |> Js .Promise .then_ (content => {
112
- switch content {
113
- | None =>
114
- failwith (
115
- "BUG: No content found for params: " ++ ctx .params -> Arg .Params .toJson -> Js .Json .stringify ,
116
- )
117
- | Some (content ) =>
118
- let props = {Props .content : content , params : ctx .params }
119
- Js .Promise .resolve ({
120
- "props" : props -> Props .toJson (Arg .toJson , Arg .Params .toJson ),
121
- })
122
- }
123
- })
114
+ type json1 <'a > = Js .Json .t
115
+
116
+ let getStaticProps : Next .GetStaticProps .t <props <Arg .t , params >, json1 <params >, void > = ctx => {
117
+ switch Arg .Params .ofJson (ctx .params ) {
118
+ | None => failwith ("BUG: Unable to parse params" )
119
+ | Some (params : Arg .Params .t ) =>
120
+ Arg .getContent (params ) |> Js .Promise .then_ (content => {
121
+ switch content {
122
+ | None =>
123
+ failwith (
124
+ "BUG: No content found for params: " ++ params -> Arg .Params .toJson -> Js .Json .stringify ,
125
+ )
126
+ | Some (content ) =>
127
+ let props = {Props .content : content , params : params }
128
+ Js .Promise .resolve ({
129
+ "props" : props -> Props .toJson (Arg .toJson , Arg .Params .toJson ),
130
+ })
131
+ }
132
+ })
133
+ }
124
134
}
125
135
126
136
let default = (props : props <Js .Json .t , Js .Json .t >) => {
@@ -134,12 +144,12 @@ module Make = (Arg: Arg): (S with type t := Arg.t and type params = Arg.Params.t
134
144
}
135
145
}
136
146
137
- let getStaticPaths : Next .GetStaticPaths .t <Arg .Params .t > = () => {
147
+ let getStaticPaths : Next .GetStaticPaths .t <json1 < Arg .Params .t > > = () => {
138
148
let params = Arg .getParams ()
139
149
params |> Js .Promise .then_ (params =>
140
150
Js .Promise .resolve ({
141
151
Next .GetStaticPaths .paths : params -> Belt .Array .map (params => {
142
- Next .GetStaticPaths .params : params ,
152
+ Next .GetStaticPaths .params : Arg . Params . toJson ( params ) ,
143
153
}),
144
154
fallback : false ,
145
155
})
0 commit comments