Skip to content

Commit 824e162

Browse files
committed
Add prependOrigin
1 parent 4692820 commit 824e162

File tree

5 files changed

+76
-20
lines changed

5 files changed

+76
-20
lines changed

packages/mini-browser/src/mini-browser.tsx

Lines changed: 67 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@ type MiniBrowserStep = {
1111
loadUrl?: string
1212
children: React.ReactNode
1313
zoom?: number
14+
prependOrigin?: boolean
1415
}
1516

1617
type MiniBrowserProps = {
1718
progress?: number
1819
backward?: boolean
1920
url?: string
2021
children: React.ReactNode
22+
loadUrl?: string
23+
prependOrigin?: boolean
2124
zoom?: number
2225
steps?: MiniBrowserStep[]
2326
} & React.PropsWithoutRef<JSX.IntrinsicElements["div"]>
@@ -35,11 +38,20 @@ function MiniBrowserWithRef(
3538
backward = false,
3639
zoom = 1,
3740
steps: ogSteps,
41+
loadUrl,
42+
prependOrigin,
3843
...props
3944
}: MiniBrowserProps,
4045
ref: React.Ref<HTMLIFrameElement>
4146
) {
42-
const steps = useSteps(ogSteps, { url, children, zoom })
47+
const steps = useSteps(ogSteps, {
48+
url,
49+
children,
50+
zoom,
51+
loadUrl,
52+
prependOrigin,
53+
})
54+
4355
const stepIndex = backward
4456
? Math.floor(progress)
4557
: Math.ceil(progress)
@@ -49,7 +61,12 @@ function MiniBrowserWithRef(
4961
{...props}
5062
zoom={currentStep.zoom}
5163
className={`ch-mini-browser ${props.className || ""}`}
52-
titleBar={<Bar url={currentStep.url!} />}
64+
titleBar={
65+
<Bar
66+
url={currentStep.url!}
67+
linkUrl={currentStep.loadUrl!}
68+
/>
69+
}
5370
>
5471
{currentStep.children || (
5572
<iframe
@@ -64,34 +81,70 @@ function MiniBrowserWithRef(
6481

6582
function useSteps(
6683
ogSteps: MiniBrowserStep[] | undefined,
67-
{ zoom, url, children, loadUrl = url }: MiniBrowserStep
84+
ogDefaults: MiniBrowserStep
6885
) {
86+
const defaults = transformStep(ogDefaults)
87+
const {
88+
zoom,
89+
url,
90+
children,
91+
loadUrl,
92+
prependOrigin,
93+
} = defaults
94+
6995
return React.useMemo(() => {
7096
if (!ogSteps) {
71-
return [{ zoom, url, children, loadUrl }]
97+
return [defaults]
7298
} else {
73-
return ogSteps.map(s => ({
74-
zoom,
75-
url,
76-
children,
77-
loadUrl: s.loadUrl || loadUrl || s.url || url,
78-
...s,
79-
}))
99+
return ogSteps.map(s => {
100+
const step = transformStep({
101+
prependOrigin: prependOrigin,
102+
...s,
103+
})
104+
return {
105+
zoom,
106+
url,
107+
children,
108+
...step,
109+
loadUrl: step.loadUrl || step.url || loadUrl,
110+
}
111+
})
80112
}
81-
}, [ogSteps, zoom, url, children, loadUrl])
113+
}, [ogSteps, zoom, url, children, loadUrl, prependOrigin])
82114
}
83115

84-
function Bar({ url }: { url: string }) {
116+
function Bar({
117+
url,
118+
linkUrl,
119+
}: {
120+
url: string
121+
linkUrl: string
122+
}) {
85123
return (
86124
<>
87125
<FrameButtons />
88126
<Back />
89127
<Forward />
90128
{/* <Refresh /> */}
91129
<input value={url} readOnly />
92-
<Open href={url} />
130+
<Open href={linkUrl} />
93131
</>
94132
)
95133
}
96134

135+
function transformStep(step: MiniBrowserStep) {
136+
const currentOrigin =
137+
typeof window !== "undefined" ? window.origin : ""
138+
const url =
139+
step.url && step.prependOrigin === true
140+
? currentOrigin + step.url
141+
: step.url
142+
const loadUrl = step.loadUrl || url
143+
return {
144+
...step,
145+
url,
146+
loadUrl,
147+
}
148+
}
149+
97150
export { MiniBrowser }

xmdx/demo/cake.mdx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,11 @@ and here is the next step
528528
---
529529

530530
<Video src="017.webm" start={0} end={41.53} />
531-
<Browser url="https://codehike.org" zoom={0.4} />
531+
<Browser
532+
url="https://codehike.org"
533+
zoom={0.5}
534+
prependOrigin={false}
535+
/>
532536
<Editor
533537
code="package.json.copy"
534538
focus="2:16"

xmdx/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "The X in MDX",
2+
"name": "xmdx",
33
"version": "2020",
44
"author": {
55
"name": "Rodrigo Pombo",

xmdx/pages/index.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,12 @@ function getStepsFromMDX(children) {
5757
const browserElement = split.find(
5858
child => child.props.mdxType === "Browser"
5959
)
60-
const { url, children, ...rest } = browserElement.props
60+
const { children, ...rest } = browserElement.props
6161
const actions = React.Children.map(
6262
children,
6363
child => child.props
6464
)
65-
// TODO fix production url
6665
return {
67-
url: "http://localhost:3000" + url,
6866
actions,
6967
...rest,
7068
}

xmdx/src/cake-layout.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import s from "./cake.module.css"
33
import { MiniEditor } from "@code-hike/mini-editor"
44
import { MiniBrowser } from "@code-hike/mini-browser"
55
import { Range, getTrackBackground } from "react-range"
6-
import { Video, useTimeData } from "@code-hike/player"
6+
import { useTimeData } from "@code-hike/player"
77
import { useSpring } from "use-spring"
88
import { sim } from "@code-hike/sim-user"
99
import { SpeakerPanel } from "./speaker"
@@ -99,6 +99,7 @@ export function CakeLayout({
9999
steps={browserSteps}
100100
progress={progress}
101101
backward={backward}
102+
prependOrigin={true}
102103
ref={browserRef}
103104
/>
104105
</div>

0 commit comments

Comments
 (0)