Skip to content

Commit 43a7ad2

Browse files
authored
feat(site): add device preview presets to main site demo (#165)
1 parent fc097f4 commit 43a7ad2

File tree

3 files changed

+69
-3
lines changed

3 files changed

+69
-3
lines changed

site/components/editor-layout/EditPreviewSize.tsx

+21-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
import { Cross1Icon } from '@radix-ui/react-icons';
1+
import { Cross1Icon, DesktopIcon, MobileIcon } from '@radix-ui/react-icons';
2+
import { TabletIcon } from 'lucide-react';
23
import * as React from 'react';
34

5+
import { PresetPreviewSize } from '@app/components/editor-layout/PresetPreviewSize';
46
import { useEditor, useEditorActiveComponent } from '@app/editor';
57
import { UserFrame } from '@app/extensions/UserFrameExtension';
68

@@ -13,10 +15,26 @@ type EditPreviewSizeProps = {
1315
export const EditPreviewSize = (props: EditPreviewSizeProps) => {
1416
const editor = useEditor();
1517
const componentEditor = useEditorActiveComponent();
16-
1718
return (
1819
<React.Fragment>
19-
<span className="text-xs mr-3 text-slate-500">Preview size</span>
20+
<div className="flex flex-row items-center">
21+
<span className="text-xs mr-3 text-slate-500">Preview size</span>
22+
<div className="flex items-center pr-2">
23+
<PresetPreviewSize frames={props.frames} width="390px" height="844px">
24+
<MobileIcon />
25+
</PresetPreviewSize>
26+
<PresetPreviewSize
27+
frames={props.frames}
28+
width="820px"
29+
height="1180px"
30+
>
31+
<TabletIcon />
32+
</PresetPreviewSize>
33+
<PresetPreviewSize frames={props.frames} width="100%" height="100%">
34+
<DesktopIcon />
35+
</PresetPreviewSize>
36+
</div>
37+
</div>
2038
<div className="flex items-center">
2139
<TextField
2240
placeholder="100%"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import * as React from 'react';
2+
3+
import { Button } from '@app/components/button';
4+
import { useEditor, useEditorActiveComponent } from '@app/editor';
5+
import { UserFrame } from '@app/extensions/UserFrameExtension';
6+
7+
type PresetPreviewSizeProps = {
8+
frames: UserFrame[];
9+
width: string;
10+
height: string;
11+
children?: React.ReactNode;
12+
};
13+
14+
export const PresetPreviewSize = (props: PresetPreviewSizeProps) => {
15+
const editor = useEditor();
16+
const componentEditor = useEditorActiveComponent();
17+
18+
return (
19+
<Button
20+
size="xs"
21+
variant="subtle"
22+
onClick={() => {
23+
editor.reka.change(() => {
24+
const frame = props.frames.find(
25+
(frame) => componentEditor.activeFrame?.user.id === frame.id
26+
);
27+
28+
if (!frame) {
29+
return;
30+
}
31+
32+
if (componentEditor.activeFrame) {
33+
componentEditor.activeFrame.user.width = props.width;
34+
componentEditor.activeFrame.user.height = props.height;
35+
}
36+
frame.width = props.width;
37+
frame.height = props.height;
38+
});
39+
}}
40+
>
41+
{props.children}
42+
</Button>
43+
);
44+
};

site/components/text-field/index.tsx

+4
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ export const TextField = React.forwardRef<HTMLInputElement, TextFieldProps>(
3737
const [uncommittedValue, setUncommitedValue] = React.useState(value);
3838
const [hasError, setHasError] = React.useState('');
3939

40+
React.useEffect(() => {
41+
setUncommitedValue(value);
42+
}, [value]);
43+
4044
const commitValue = () => {
4145
if (!onCommit) {
4246
return;

0 commit comments

Comments
 (0)