1
- import { HighlightedCode } from "codehike/code" ;
1
+ import { HighlightedCode } from "codehike/code" ;
2
2
import React from "react" ;
3
- import { SpeakeasyCodeSamplesCore } from "../core.js" ;
4
- import { codeSamplesGet } from "../funcs/codeSamplesGet.js" ;
5
- import { UsageSnippet } from "../models/components/usagesnippet.js" ;
6
- import { GetCodeSamplesRequest } from "../models/operations/getcodesamples.js" ;
7
- import { useSpeakeasyCodeSamplesContext } from "../react-query/_context.js" ;
8
- import { highlightCode } from "./utils.js" ;
3
+ import { SpeakeasyCodeSamplesCore } from "../core.js" ;
4
+ import { codeSamplesGet } from "../funcs/codeSamplesGet.js" ;
5
+ import { UsageSnippet } from "../models/components/usagesnippet.js" ;
6
+ import { GetCodeSamplesRequest } from "../models/operations/getcodesamples.js" ;
7
+ import { useSpeakeasyCodeSamplesContext } from "../react-query/_context.js" ;
8
+ import { highlightCode } from "./utils.js" ;
9
9
10
10
export type SpeakeasyHighlightedCode = HighlightedCode & {
11
11
/** The snippet data from the code samples api */
@@ -15,23 +15,23 @@ export type SpeakeasyHighlightedCode = HighlightedCode & {
15
15
// Define the state shape.
16
16
export type CodeSampleState =
17
17
| {
18
- status : "loading" ;
19
- error ?: Error | undefined ;
20
- snippets ?: SpeakeasyHighlightedCode [ ] | undefined ;
21
- selectedSnippet ?: SpeakeasyHighlightedCode | undefined ;
22
- }
18
+ status : "loading" ;
19
+ error ?: Error | undefined ;
20
+ snippets ?: SpeakeasyHighlightedCode [ ] | undefined ;
21
+ selectedSnippet ?: SpeakeasyHighlightedCode | undefined ;
22
+ }
23
23
| {
24
- status : "success" ;
25
- error ?: Error | undefined ;
26
- snippets : SpeakeasyHighlightedCode [ ] ;
27
- selectedSnippet : SpeakeasyHighlightedCode ;
28
- }
24
+ status : "success" ;
25
+ error ?: Error | undefined ;
26
+ snippets : SpeakeasyHighlightedCode [ ] ;
27
+ selectedSnippet : SpeakeasyHighlightedCode ;
28
+ }
29
29
| {
30
- status : "error" ;
31
- error : Error ;
32
- snippets ?: SpeakeasyHighlightedCode [ ] | undefined ;
33
- selectedSnippet ?: SpeakeasyHighlightedCode | undefined ;
34
- } ;
30
+ status : "error" ;
31
+ error : Error ;
32
+ snippets ?: SpeakeasyHighlightedCode [ ] | undefined ;
33
+ selectedSnippet ?: SpeakeasyHighlightedCode | undefined ;
34
+ } ;
35
35
36
36
type FetchSuccessPayload = {
37
37
snippets : SpeakeasyHighlightedCode [ ] ;
@@ -43,8 +43,7 @@ type Action =
43
43
| { type : "FETCH_INIT" }
44
44
| { type : "FETCH_SUCCESS" ; payload : FetchSuccessPayload }
45
45
| { type : "FETCH_FAILURE" ; payload : Error }
46
- | { type : "SELECT" ; payload : SafeGetSnippetParams }
47
-
46
+ | { type : "SELECT" ; payload : SafeGetSnippetParams } ;
48
47
49
48
type SafeGetSnippetParams = {
50
49
operationId ?: string | undefined ;
@@ -53,11 +52,16 @@ type SafeGetSnippetParams = {
53
52
54
53
function safeGetSnippet (
55
54
snippets : SpeakeasyHighlightedCode [ ] ,
56
- { operationId, language} : SafeGetSnippetParams ,
55
+ { operationId, language } : SafeGetSnippetParams ,
57
56
) : SpeakeasyHighlightedCode {
58
- const maybeEqual = ( a : string , b : string | undefined ) => b === undefined || a . toLowerCase ( ) === b . toLowerCase ( ) ;
57
+ const maybeEqual = ( a : string , b : string | undefined ) =>
58
+ b === undefined || a . toLowerCase ( ) === b . toLowerCase ( ) ;
59
59
60
- const selectedSnippet = snippets . find ( ( s ) => maybeEqual ( s . raw . operationId , operationId ) && maybeEqual ( s . lang , language ) ) ;
60
+ const selectedSnippet = snippets . find (
61
+ ( s ) =>
62
+ maybeEqual ( s . raw . operationId , operationId ) &&
63
+ maybeEqual ( s . lang , language ) ,
64
+ ) ;
61
65
if ( selectedSnippet ) {
62
66
return selectedSnippet ;
63
67
}
@@ -76,15 +80,14 @@ const reducer: React.Reducer<CodeSampleState, Action> = (
76
80
) => {
77
81
switch ( action . type ) {
78
82
case "FETCH_INIT" :
79
- return { ...state , status : "loading" } ;
83
+ return { ...state , status : "loading" } ;
80
84
case "FETCH_SUCCESS" :
81
85
return {
82
86
status : "success" ,
83
87
snippets : action . payload . snippets ,
84
- selectedSnippet : safeGetSnippet (
85
- action . payload . snippets ,
86
- { language : action . payload . defaultLanguage } ,
87
- ) ,
88
+ selectedSnippet : safeGetSnippet ( action . payload . snippets , {
89
+ language : action . payload . defaultLanguage ,
90
+ } ) ,
88
91
} ;
89
92
case "FETCH_FAILURE" :
90
93
return {
@@ -95,10 +98,7 @@ const reducer: React.Reducer<CodeSampleState, Action> = (
95
98
case "SELECT" :
96
99
return {
97
100
...state ,
98
- selectedSnippet : safeGetSnippet (
99
- state . snippets ! ,
100
- action . payload ,
101
- ) ,
101
+ selectedSnippet : safeGetSnippet ( state . snippets ! , action . payload ) ,
102
102
} ;
103
103
default :
104
104
return state ;
@@ -112,11 +112,11 @@ type UseCodeSampleStateInit = {
112
112
} ;
113
113
114
114
export const useCodeSampleState = ( {
115
- client : clientProp ,
116
- requestParams,
117
- defaultLanguage,
118
- } : UseCodeSampleStateInit ) => {
119
- const [ state , dispatch ] = React . useReducer ( reducer , { status : "loading" } ) ;
115
+ client : clientProp ,
116
+ requestParams,
117
+ defaultLanguage,
118
+ } : UseCodeSampleStateInit ) => {
119
+ const [ state , dispatch ] = React . useReducer ( reducer , { status : "loading" } ) ;
120
120
const client = useSafeSpeakeasyCodeSamplesContext ( clientProp ) ;
121
121
122
122
const highlightSnippets = async ( snippets : UsageSnippet [ ] ) => {
@@ -128,17 +128,17 @@ export const useCodeSampleState = ({
128
128
"github-from-css" ,
129
129
) ;
130
130
131
- return { ...highlightedCode , raw : snippet } ;
131
+ return { ...highlightedCode , raw : snippet } ;
132
132
} ) ,
133
133
) ;
134
134
} ;
135
135
136
136
async function handleMount ( ) {
137
- dispatch ( { type : "FETCH_INIT" } ) ;
137
+ dispatch ( { type : "FETCH_INIT" } ) ;
138
138
const result = await codeSamplesGet ( client , requestParams ) ;
139
139
140
140
if ( ! result . ok ) {
141
- return dispatch ( { type : "FETCH_FAILURE" , payload : result . error } ) ;
141
+ return dispatch ( { type : "FETCH_FAILURE" , payload : result . error } ) ;
142
142
}
143
143
144
144
dispatch ( {
@@ -156,15 +156,16 @@ export const useCodeSampleState = ({
156
156
157
157
function selectSnippet ( params : SafeGetSnippetParams ) {
158
158
dispatch ( {
159
- type : "SELECT" , payload : {
159
+ type : "SELECT" ,
160
+ payload : {
160
161
language : state . selectedSnippet ?. raw . language ,
161
162
operationId : state . selectedSnippet ?. raw . operationId ,
162
163
...params ,
163
- }
164
+ } ,
164
165
} ) ;
165
166
}
166
167
167
- return { state, selectSnippet} ;
168
+ return { state, selectSnippet } ;
168
169
} ;
169
170
170
171
/** Intended to give the user the option of providing their own client. */
@@ -181,7 +182,7 @@ export const useSafeSpeakeasyCodeSamplesContext = (
181
182
} catch {
182
183
throw new Error (
183
184
"The Speakeasy Code Samples component must either be given an apiKey and " +
184
- "registryUrl, or be wrapped in a SpeakeasyCodeSamplesProvider." ,
185
+ "registryUrl, or be wrapped in a SpeakeasyCodeSamplesProvider." ,
185
186
) ;
186
187
}
187
188
} ;
0 commit comments