PluginProbe
Extendify / 0.3.0
Extendify v0.3.0
3.2.1 3.2.0 3.1.6 3.1.5 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.6 3.0.5 3.0.4 trunk 0.1.0 0.10.0 0.10.1 0.10.2 0.11.0 0.11.1 0.2.0 0.3.0 0.3.1 0.4.0 0.5.0 0.6.0 All 127 releases
extendify / src / pages / layout / Layout.js

Layout.js in Extendify 0.3.0, at src/pages/layout/Layout.js

81 lines 3.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { __ } from '@wordpress/i18n'
2 import Sidebar from '../Sidebar'
3 import HasSidebar from './HasSidebar'
4 import { Toolbar } from './Toolbar'
5 import { GridView } from '../GridView'
6 import { Button } from '@wordpress/components'
7 import { useRef, useEffect, useState, useCallback } from '@wordpress/element'
8 import { useTemplatesStore } from '../../state/Templates'
9 import { useWhenIdle } from '../../hooks/helpers'
10
11 export const Layout = ({ setOpen }) => {
12 const gridContainer = useRef()
13 const searchParams = useTemplatesStore((state) => state.searchParams)
14 const [showIdleScreen, setShowIdleScreen] = useState(false)
15 const resetTemplates = useTemplatesStore((state) => state.resetTemplates)
16 const idle = useWhenIdle(600_000) // 10 minutes
17 const removeIdleScreen = useCallback(() => {
18 setShowIdleScreen(false)
19 resetTemplates()
20 }, [resetTemplates])
21
22 useEffect(() => {
23 if (idle) setShowIdleScreen(true)
24 }, [idle])
25 useEffect(() => {
26 setShowIdleScreen(false)
27 }, [searchParams])
28 useEffect(() => {
29 gridContainer.current.scrollTop = 0
30 }, [searchParams])
31 return (
32 <div className="h-full flex flex-col items-center relative max-w-screen-4xl mx-auto">
33 <div className="w-full flex-grow overflow-hidden">
34 <button
35 onClick={() =>
36 document
37 .getElementById('extendify-templates')
38 .querySelector('button')
39 .focus()
40 }
41 className="sr-only focus:not-sr-only focus:text-blue-500">
42 {__('Skip to content', 'extendify')}
43 </button>
44 <div className="sm:flex relative mx-auto h-full">
45 <HasSidebar>
46 <Sidebar />
47 <div className="relative h-full z-30 flex flex-col">
48 <Toolbar
49 className="hidden sm:block w-full h-20 flex-shrink-0 px-6 md:px-8"
50 hideLibrary={() => setOpen(false)}
51 />
52 <div
53 ref={gridContainer}
54 className="flex-grow z-20 overflow-y-auto px-6 md:px-8">
55 {showIdleScreen ? (
56 <IdleScreen callback={removeIdleScreen} />
57 ) : (
58 <GridView />
59 )}
60 </div>
61 </div>
62 </HasSidebar>
63 </div>
64 </div>
65 </div>
66 )
67 }
68
69 const IdleScreen = ({ callback }) => (
70 <div className="flex flex-col items-center justify-center h-full">
71 <p className="text-sm text-extendify-gray font-normal mb-6">
72 {__("We've added new stuff while you were away.", 'extendify')}
73 </p>
74 <Button
75 className="components-button bg-wp-theme-500 hover:bg-wp-theme-600 border-color-wp-theme-500 text-white"
76 onClick={callback}>
77 {__('Reload')}
78 </Button>
79 </div>
80 )
81