Skip to content

Commit

Permalink
feat(site): add device preview presets to main site demo (#165)
Browse files Browse the repository at this point in the history
  • Loading branch information
MaziyarMK authored Jun 27, 2024
1 parent fc097f4 commit 43a7ad2
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 3 deletions.
24 changes: 21 additions & 3 deletions site/components/editor-layout/EditPreviewSize.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { Cross1Icon } from '@radix-ui/react-icons';
import { Cross1Icon, DesktopIcon, MobileIcon } from '@radix-ui/react-icons';
import { TabletIcon } from 'lucide-react';
import * as React from 'react';

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

Expand All @@ -13,10 +15,26 @@ type EditPreviewSizeProps = {
export const EditPreviewSize = (props: EditPreviewSizeProps) => {
const editor = useEditor();
const componentEditor = useEditorActiveComponent();

return (
<React.Fragment>
<span className="text-xs mr-3 text-slate-500">Preview size</span>
<div className="flex flex-row items-center">
<span className="text-xs mr-3 text-slate-500">Preview size</span>
<div className="flex items-center pr-2">
<PresetPreviewSize frames={props.frames} width="390px" height="844px">
<MobileIcon />
</PresetPreviewSize>
<PresetPreviewSize
frames={props.frames}
width="820px"
height="1180px"
>
<TabletIcon />
</PresetPreviewSize>
<PresetPreviewSize frames={props.frames} width="100%" height="100%">
<DesktopIcon />
</PresetPreviewSize>
</div>
</div>
<div className="flex items-center">
<TextField
placeholder="100%"
Expand Down
44 changes: 44 additions & 0 deletions site/components/editor-layout/PresetPreviewSize.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import * as React from 'react';

import { Button } from '@app/components/button';
import { useEditor, useEditorActiveComponent } from '@app/editor';
import { UserFrame } from '@app/extensions/UserFrameExtension';

type PresetPreviewSizeProps = {
frames: UserFrame[];
width: string;
height: string;
children?: React.ReactNode;
};

export const PresetPreviewSize = (props: PresetPreviewSizeProps) => {
const editor = useEditor();
const componentEditor = useEditorActiveComponent();

return (
<Button
size="xs"
variant="subtle"
onClick={() => {
editor.reka.change(() => {
const frame = props.frames.find(
(frame) => componentEditor.activeFrame?.user.id === frame.id
);

if (!frame) {
return;
}

if (componentEditor.activeFrame) {
componentEditor.activeFrame.user.width = props.width;
componentEditor.activeFrame.user.height = props.height;
}
frame.width = props.width;
frame.height = props.height;
});
}}
>
{props.children}
</Button>
);
};
4 changes: 4 additions & 0 deletions site/components/text-field/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ export const TextField = React.forwardRef<HTMLInputElement, TextFieldProps>(
const [uncommittedValue, setUncommitedValue] = React.useState(value);
const [hasError, setHasError] = React.useState('');

React.useEffect(() => {
setUncommitedValue(value);
}, [value]);

const commitValue = () => {
if (!onCommit) {
return;
Expand Down

0 comments on commit 43a7ad2

Please sign in to comment.