Skip to content

Commit d51b541

Browse files
SaxonFmtias
authored andcommitted
frame resizer centered
1 parent 1c19781 commit d51b541

File tree

5 files changed

+231
-108
lines changed

5 files changed

+231
-108
lines changed

packages/edit-site/src/components/layout/index.js

Lines changed: 20 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import {
1111
__unstableMotion as motion,
1212
__unstableAnimatePresence as AnimatePresence,
1313
__unstableUseNavigateRegions as useNavigateRegions,
14-
ResizableBox,
1514
} from '@wordpress/components';
1615
import {
1716
useReducedMotion,
@@ -38,7 +37,7 @@ import getIsListPage from '../../utils/get-is-list-page';
3837
import Header from '../header-edit-mode';
3938
import useInitEditedEntityFromURL from '../sync-state-with-url/use-init-edited-entity-from-url';
4039
import SiteHub from '../site-hub';
41-
import ResizeHandle from '../block-editor/resize-handle';
40+
import ResizableFrame from '../resizable-frame';
4241
import useSyncCanvasModeWithURL from '../sync-state-with-url/use-sync-canvas-mode-with-url';
4342
import { unlock } from '../../private-apis';
4443
import SavePanel from '../save-panel';
@@ -47,17 +46,6 @@ import KeyboardShortcutsGlobal from '../keyboard-shortcuts/global';
4746
import { useCommands } from '../../hooks/commands';
4847

4948
const ANIMATION_DURATION = 0.5;
50-
const emptyResizeHandleStyles = {
51-
position: undefined,
52-
userSelect: undefined,
53-
cursor: undefined,
54-
width: undefined,
55-
height: undefined,
56-
top: undefined,
57-
right: undefined,
58-
bottom: undefined,
59-
left: undefined,
60-
};
6149

6250
export default function Layout() {
6351
// This ensures the edited entity id and type are initialized properly.
@@ -87,6 +75,7 @@ export default function Layout() {
8775
select( preferencesStore ).get( 'fixedToolbar' ),
8876
};
8977
}, [] );
78+
const isEditing = canvasMode === 'edit';
9079
const navigateRegionsProps = useNavigateRegions( {
9180
previous: previousShortcut,
9281
next: nextShortcut,
@@ -98,25 +87,17 @@ export default function Layout() {
9887
( isMobileViewport && ! isListPage ) ||
9988
( ! isMobileViewport && ( canvasMode === 'view' || ! isEditorPage ) );
10089
const showCanvas =
101-
( isMobileViewport && isEditorPage && canvasMode === 'edit' ) ||
90+
( isMobileViewport && isEditorPage && isEditing ) ||
10291
! isMobileViewport ||
10392
! isEditorPage;
10493
const showFrame =
10594
( ! isEditorPage && ! isMobileViewport ) ||
10695
( ! isMobileViewport && isEditorPage && canvasMode === 'view' );
10796
const isFullCanvas =
108-
( isMobileViewport && isListPage ) ||
109-
( isEditorPage && canvasMode === 'edit' );
97+
( isMobileViewport && isListPage ) || ( isEditorPage && isEditing );
11098
const [ canvasResizer, canvasSize ] = useResizeObserver();
111-
const [ fullResizer, fullSize ] = useResizeObserver();
112-
const [ forcedWidth, setForcedWidth ] = useState( null );
113-
const [ isResizing, setIsResizing ] = useState( false );
114-
const isResizingEnabled = ! isMobileViewport && canvasMode === 'view';
115-
const defaultSidebarWidth = isMobileViewport ? '100vw' : 360;
116-
let canvasWidth = isResizing ? '100%' : fullSize.width;
117-
if ( showFrame && ! isResizing ) {
118-
canvasWidth = canvasSize.width - canvasPadding;
119-
}
99+
const [ fullResizer ] = useResizeObserver();
100+
const [ isResizing ] = useState( false );
120101

121102
// Synchronizing the URL with the store value of canvasMode happens in an effect
122103
// This condition ensures the component is only rendered after the synchronization happens
@@ -139,15 +120,15 @@ export default function Layout() {
139120
navigateRegionsProps.className,
140121
{
141122
'is-full-canvas': isFullCanvas,
142-
'is-edit-mode': canvasMode === 'edit',
123+
'is-edit-mode': isEditing,
143124
'has-fixed-toolbar': hasFixedToolbar,
144125
}
145126
) }
146127
>
147128
<SiteHub ref={ hubRef } className="edit-site-layout__hub" />
148129

149130
<AnimatePresence initial={ false }>
150-
{ isEditorPage && canvasMode === 'edit' && (
131+
{ isEditorPage && isEditing && (
151132
<NavigableRegion
152133
className="edit-site-layout__header"
153134
ariaLabel={ __( 'Editor top bar' ) }
@@ -169,16 +150,15 @@ export default function Layout() {
169150
ease: 'easeOut',
170151
} }
171152
>
172-
{ canvasMode === 'edit' && <Header /> }
153+
{ isEditing && <Header /> }
173154
</NavigableRegion>
174155
) }
175156
</AnimatePresence>
176157

177158
<div className="edit-site-layout__content">
178159
<AnimatePresence initial={ false }>
179160
{ showSidebar && (
180-
<ResizableBox
181-
as={ motion.div }
161+
<motion.div
182162
initial={ {
183163
opacity: 0,
184164
} }
@@ -190,86 +170,35 @@ export default function Layout() {
190170
} }
191171
transition={ {
192172
type: 'tween',
193-
duration:
194-
disableMotion || isResizing
195-
? 0
196-
: ANIMATION_DURATION,
173+
duration: ANIMATION_DURATION,
197174
ease: 'easeOut',
198175
} }
199-
size={ {
200-
height: '100%',
201-
width:
202-
isResizingEnabled && forcedWidth
203-
? forcedWidth
204-
: defaultSidebarWidth,
205-
} }
206176
className="edit-site-layout__sidebar"
207-
enable={ {
208-
right: isResizingEnabled,
209-
} }
210-
onResizeStop={ ( event, direction, elt ) => {
211-
setForcedWidth( elt.clientWidth );
212-
setIsResizing( false );
213-
} }
214-
onResizeStart={ () => {
215-
setIsResizing( true );
216-
} }
217-
onResize={ ( event, direction, elt ) => {
218-
// This is a performance optimization
219-
// We set the width imperatively to avoid re-rendering
220-
// the whole component while resizing.
221-
hubRef.current.style.width =
222-
elt.clientWidth - 48 + 'px';
223-
} }
224-
handleComponent={ {
225-
right: (
226-
<ResizeHandle
227-
direction="right"
228-
variation="separator"
229-
resizeWidthBy={ ( delta ) => {
230-
setForcedWidth(
231-
( forcedWidth ??
232-
defaultSidebarWidth ) +
233-
delta
234-
);
235-
} }
236-
/>
237-
),
238-
} }
239-
handleClasses={ undefined }
240-
handleStyles={ {
241-
right: emptyResizeHandleStyles,
242-
} }
243-
minWidth={ isResizingEnabled ? 320 : undefined }
244-
maxWidth={
245-
isResizingEnabled && fullSize
246-
? fullSize.width - 360
247-
: undefined
248-
}
249177
>
250178
<NavigableRegion
251179
ariaLabel={ __( 'Navigation sidebar' ) }
252180
>
253181
<Sidebar />
254182
</NavigableRegion>
255-
</ResizableBox>
183+
</motion.div>
256184
) }
257185
</AnimatePresence>
258186

259187
<SavePanel />
260188

261189
{ showCanvas && (
262-
<div
190+
<motion.div
263191
className={ classnames(
264192
'edit-site-layout__canvas-container',
265193
{
266194
'is-resizing': isResizing,
267195
}
268196
) }
269-
style={ {
197+
animate={ {
270198
paddingTop: showFrame ? canvasPadding : 0,
271199
paddingBottom: showFrame ? canvasPadding : 0,
272200
} }
201+
transition={ { duration: ANIMATION_DURATION } }
273202
>
274203
{ canvasResizer }
275204
{ !! canvasSize.width && (
@@ -301,34 +230,18 @@ export default function Layout() {
301230
ease: 'easeOut',
302231
} }
303232
>
304-
<motion.div
305-
style={ {
306-
position: 'absolute',
307-
top: 0,
308-
left: 0,
309-
bottom: 0,
310-
} }
311-
initial={ false }
312-
animate={ {
313-
width: canvasWidth,
314-
} }
315-
transition={ {
316-
type: 'tween',
317-
duration:
318-
disableMotion || isResizing
319-
? 0
320-
: ANIMATION_DURATION,
321-
ease: 'easeOut',
322-
} }
233+
<ResizableFrame
234+
startWidth={ canvasSize.width }
235+
isFull={ isEditing }
323236
>
324237
<ErrorBoundary>
325238
{ isEditorPage && <Editor /> }
326239
{ isListPage && <ListPage /> }
327240
</ErrorBoundary>
328-
</motion.div>
241+
</ResizableFrame>
329242
</motion.div>
330243
) }
331-
</div>
244+
</motion.div>
332245
) }
333246
</div>
334247
</div>

packages/edit-site/src/components/layout/style.scss

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,9 @@
105105
left: 0;
106106
bottom: 0;
107107
width: 100%;
108-
108+
display: flex;
109+
justify-content: center;
110+
align-items: center;
109111
& > div {
110112
color: $gray-900;
111113
background: $white;

0 commit comments

Comments
 (0)