PluginProbe
Extendify / 0.6.0
Extendify v0.6.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.6.0, at src/pages/layout/Layout.js

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