Skip to content

Commit 67cfe36

Browse files
committed
view on click for mobile viewport
1 parent 5ff907d commit 67cfe36

File tree

2 files changed

+62
-3
lines changed

2 files changed

+62
-3
lines changed

projects/packages/forms/src/dashboard/inbox/dataviews/index.js

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,16 @@ import {
66
ExternalLink,
77
// eslint-disable-next-line @wordpress/no-unsafe-wp-apis
88
__experimentalHStack as HStack,
9+
Modal,
910
} from '@wordpress/components';
10-
import { useResizeObserver } from '@wordpress/compose';
11+
import { useResizeObserver, useViewportMatch } from '@wordpress/compose';
1112
import { DataViews } from '@wordpress/dataviews/wp';
1213
import { dateI18n, getSettings as getDateSettings } from '@wordpress/date';
1314
import { useCallback, useMemo, useState } from '@wordpress/element';
1415
import { decodeEntities } from '@wordpress/html-entities';
1516
import { __ } from '@wordpress/i18n';
1617
import { Icon, globe } from '@wordpress/icons';
18+
import clsx from 'clsx';
1719
import { useEffect } from 'react';
1820
import { useSearchParams } from 'react-router';
1921
/**
@@ -89,6 +91,30 @@ export default function InboxView() {
8991
);
9092
const isMobile = containerWidth <= MOBILE_BREAKPOINT;
9193
const selectedResponses = searchParams.get( 'r' );
94+
const isMobileViewport = useViewportMatch( 'medium', '<' );
95+
const [ isResponseModalOpen, setIsResponseModalOpen ] = useState( false );
96+
const [ responseModal, setResponseModal ] = useState( null );
97+
98+
const closeResponseModal = useCallback( () => {
99+
setIsResponseModalOpen( false );
100+
setResponseModal( null );
101+
}, [ setIsResponseModalOpen, setResponseModal ] );
102+
103+
const openResponseModal = useCallback(
104+
item => {
105+
const content = <ResponseMobileView response={ item } closeModal={ closeResponseModal } />;
106+
107+
setResponseModal( content );
108+
setIsResponseModalOpen( true );
109+
},
110+
[ setIsResponseModalOpen, closeResponseModal, setResponseModal ]
111+
);
112+
113+
useEffect( () => {
114+
if ( ! isMobileViewport ) {
115+
closeResponseModal();
116+
}
117+
}, [ isMobileViewport, closeResponseModal ] );
92118

93119
useEffect( () => {
94120
return setupSidebarWidthObserver();
@@ -228,8 +254,22 @@ export default function InboxView() {
228254
item.author_name || item.author_email || item.author_url || item.ip
229255
);
230256
const defaultImage = item.author_name || item.author_email ? 'initials' : 'mp';
257+
258+
const handleClick = isMobileViewport ? () => openResponseModal( item ) : undefined;
259+
231260
return (
232-
<div className="jp-forms__inbox__author-field">
261+
<div
262+
className={ clsx(
263+
'jp-forms__inbox__author-field',
264+
isMobileViewport && 'jp-forms__inbox__author-field--mobile'
265+
) }
266+
{ ...( isMobileViewport && {
267+
onClick: handleClick,
268+
onKeyDown: () => {},
269+
role: 'button',
270+
tabIndex: 0,
271+
} ) }
272+
>
233273
{ item.is_unread && (
234274
<span
235275
className="jp-forms__inbox__unread-indicator"
@@ -328,7 +368,13 @@ export default function InboxView() {
328368
},
329369
},
330370
],
331-
[ filterOptions, dateSettings.formats.date ]
371+
[
372+
filterOptions?.date,
373+
filterOptions?.source,
374+
isMobileViewport,
375+
openResponseModal,
376+
dateSettings.formats.date,
377+
]
332378
);
333379

334380
const actions = useMemo( () => {
@@ -421,6 +467,15 @@ export default function InboxView() {
421467
/>
422468
}
423469
/>
470+
{ isResponseModalOpen && (
471+
<Modal
472+
title={ __( 'Response', 'jetpack-forms' ) }
473+
__experimentalHideHeader={ true }
474+
onRequestClose={ closeResponseModal }
475+
>
476+
{ responseModal }
477+
</Modal>
478+
) }
424479
</div>
425480
<SingleResponseView
426481
sidePanelItem={ selection.length && sidePanelItem }

projects/packages/forms/src/dashboard/inbox/style.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,10 @@
350350
display: flex;
351351
align-items: center;
352352
gap: 12px;
353+
354+
&--mobile {
355+
text-decoration: underline;
356+
}
353357
}
354358

355359
.jp-forms__inbox__unread-indicator {

0 commit comments

Comments
 (0)