Skip to content

Commit 438eadb

Browse files
authored
LiveCode: Allow scope to be a function (#332)
* allow scope to be a function * add changeset
1 parent 2214ca4 commit 438eadb

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

.changeset/dynamic-live-scope.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@primer/gatsby-theme-doctocat': minor
3+
---
4+
5+
Support function for `live-code-scope`

theme/src/components/code.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ import React from 'react'
66
import ClipboardCopy from './clipboard-copy'
77
import LiveCode from './live-code'
88

9-
function Code({className, children, live, noinline}) {
9+
function Code({className, children, live, noinline, metastring}) {
1010
const language = className ? className.replace(/language-/, '') : ''
1111
const code = children.trim()
1212

1313
if (live) {
14-
return <LiveCode code={code} language={language} noinline={noinline} />
14+
return <LiveCode code={code} language={language} noinline={noinline} metastring={metastring} />
1515
}
1616

1717
return (

theme/src/components/live-code.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,24 @@ function wrapWithFragment(jsx) {
3434
return `<React.Fragment>${jsx}</React.Fragment>`
3535
}
3636

37-
function LiveCode({code, language, noinline}) {
37+
const getResolvedScope = metastring => {
38+
if (typeof scope === 'function') return scope(metastring)
39+
return scope
40+
}
41+
42+
function LiveCode({code, language, noinline, metastring}) {
3843
const theme = React.useContext(ThemeContext)
3944
const [liveCode, setLiveCode] = useState(code)
4045
const handleChange = updatedLiveCode => setLiveCode(updatedLiveCode)
4146

4247
return (
4348
<Flex sx={{flexDirection: 'column', mb: 3}}>
44-
<LiveProvider scope={scope} code={liveCode} transformCode={languageTransformers[language]} noInline={noinline}>
49+
<LiveProvider
50+
scope={getResolvedScope(metastring)}
51+
code={liveCode}
52+
transformCode={languageTransformers[language]}
53+
noInline={noinline}
54+
>
4555
<Flex
4656
sx={{
4757
border: '1px solid',

0 commit comments

Comments
 (0)