1- import {
2- batch ,
3- createEffect ,
4- createMemo ,
5- createSignal ,
6- For ,
7- on ,
8- onCleanup ,
9- onMount ,
10- ParentProps ,
11- Show ,
12- untrack ,
13- } from "solid-js"
1+ import { batch , createEffect , createMemo , For , on , onCleanup , onMount , ParentProps , Show , untrack } from "solid-js"
142import { useNavigate , useParams } from "@solidjs/router"
153import { useLayout , LocalProject } from "@/context/layout"
164import { useGlobalSync } from "@/context/global-sync"
@@ -145,6 +133,10 @@ export default function Layout(props: ParentProps) {
145133 hoverProject : undefined as string | undefined ,
146134 scrollSessionKey : undefined as string | undefined ,
147135 nav : undefined as HTMLElement | undefined ,
136+ sortNow : Date . now ( ) ,
137+ sizing : false ,
138+ peek : undefined as LocalProject | undefined ,
139+ peeked : false ,
148140 } )
149141
150142 const editor = createInlineEditorController ( )
@@ -163,14 +155,13 @@ export default function Layout(props: ParentProps) {
163155 }
164156 const isBusy = ( directory : string ) => ! ! state . busyWorkspaces [ workspaceKey ( directory ) ]
165157 const navLeave = { current : undefined as number | undefined }
166- const [ sortNow , setSortNow ] = createSignal ( Date . now ( ) )
167- const [ sizing , setSizing ] = createSignal ( false )
158+ const sortNow = ( ) => state . sortNow
168159 let sizet : number | undefined
169160 let sortNowInterval : ReturnType < typeof setInterval > | undefined
170161 const sortNowTimeout = setTimeout (
171162 ( ) => {
172- setSortNow ( Date . now ( ) )
173- sortNowInterval = setInterval ( ( ) => setSortNow ( Date . now ( ) ) , 60_000 )
163+ setState ( "sortNow" , Date . now ( ) )
164+ sortNowInterval = setInterval ( ( ) => setState ( "sortNow" , Date . now ( ) ) , 60_000 )
174165 } ,
175166 60_000 - ( Date . now ( ) % 60_000 ) ,
176167 )
@@ -196,7 +187,7 @@ export default function Layout(props: ParentProps) {
196187 } )
197188
198189 onMount ( ( ) => {
199- const stop = ( ) => setSizing ( false )
190+ const stop = ( ) => setState ( "sizing" , false )
200191 window . addEventListener ( "pointerup" , stop )
201192 window . addEventListener ( "pointercancel" , stop )
202193 window . addEventListener ( "blur" , stop )
@@ -234,8 +225,6 @@ export default function Layout(props: ParentProps) {
234225 } , 300 )
235226 }
236227
237- const [ peek , setPeek ] = createSignal < LocalProject | undefined > ( undefined )
238- const [ peeked , setPeeked ] = createSignal ( false )
239228 let peekt : number | undefined
240229
241230 const hoverProjectData = createMemo ( ( ) => {
@@ -251,17 +240,17 @@ export default function Layout(props: ParentProps) {
251240 clearTimeout ( peekt )
252241 peekt = undefined
253242 }
254- setPeek ( p )
255- setPeeked ( true )
243+ setState ( "peek" , p )
244+ setState ( "peeked" , true )
256245 return
257246 }
258247
259- setPeeked ( false )
260- if ( peek ( ) === undefined ) return
248+ setState ( "peeked" , false )
249+ if ( state . peek === undefined ) return
261250 if ( peekt !== undefined ) clearTimeout ( peekt )
262251 peekt = window . setTimeout ( ( ) => {
263252 peekt = undefined
264- setPeek ( undefined )
253+ setState ( "peek" , undefined )
265254 } , 180 )
266255 } )
267256
@@ -2245,17 +2234,17 @@ export default function Layout(props: ParentProps) {
22452234 >
22462235 < div class = "@container w-full h-full contain-strict" > { sidebarContent ( ) } </ div >
22472236 < Show when = { layout . sidebar . opened ( ) } >
2248- < div onPointerDown = { ( ) => setSizing ( true ) } >
2237+ < div onPointerDown = { ( ) => setState ( "sizing" , true ) } >
22492238 < ResizeHandle
22502239 direction = "horizontal"
22512240 size = { layout . sidebar . width ( ) }
22522241 min = { 244 }
22532242 max = { typeof window === "undefined" ? 1000 : window . innerWidth * 0.3 + 64 }
22542243 collapseThreshold = { 244 }
22552244 onResize = { ( w ) => {
2256- setSizing ( true )
2245+ setState ( "sizing" , true )
22572246 if ( sizet !== undefined ) clearTimeout ( sizet )
2258- sizet = window . setTimeout ( ( ) => setSizing ( false ) , 120 )
2247+ sizet = window . setTimeout ( ( ) => setState ( "sizing" , false ) , 120 )
22592248 layout . sidebar . resize ( w )
22602249 } }
22612250 onCollapse = { layout . sidebar . close }
@@ -2300,7 +2289,7 @@ export default function Layout(props: ParentProps) {
23002289 "xl:inset-y-0 xl:right-0 xl:left-[var(--main-left)]" : true ,
23012290 "z-20" : true ,
23022291 "transition-[left] duration-200 ease-[cubic-bezier(0.22,1,0.36,1)] will-change-[left] motion-reduce:transition-none" :
2303- ! sizing ( ) ,
2292+ ! state . sizing ,
23042293 } }
23052294 style = { {
23062295 "--main-left" : layout . sidebar . opened ( ) ? `${ Math . max ( layout . sidebar . width ( ) , 244 ) } px` : "4rem" ,
@@ -2320,11 +2309,11 @@ export default function Layout(props: ParentProps) {
23202309 < div
23212310 classList = { {
23222311 "hidden xl:flex absolute inset-y-0 left-16 z-30" : true ,
2323- "opacity-100 translate-x-0 pointer-events-auto" : peeked ( ) && ! layout . sidebar . opened ( ) ,
2324- "opacity-0 -translate-x-2 pointer-events-none" : ! peeked ( ) || layout . sidebar . opened ( ) ,
2312+ "opacity-100 translate-x-0 pointer-events-auto" : state . peeked && ! layout . sidebar . opened ( ) ,
2313+ "opacity-0 -translate-x-2 pointer-events-none" : ! state . peeked || layout . sidebar . opened ( ) ,
23252314 "transition-[opacity,transform] motion-reduce:transition-none" : true ,
2326- "duration-180 ease-out" : peeked ( ) && ! layout . sidebar . opened ( ) ,
2327- "duration-120 ease-in" : ! peeked ( ) || layout . sidebar . opened ( ) ,
2315+ "duration-180 ease-out" : state . peeked && ! layout . sidebar . opened ( ) ,
2316+ "duration-120 ease-in" : ! state . peeked || layout . sidebar . opened ( ) ,
23282317 } }
23292318 onMouseMove = { disarm }
23302319 onMouseEnter = { ( ) => {
@@ -2336,19 +2325,19 @@ export default function Layout(props: ParentProps) {
23362325 arm ( )
23372326 } }
23382327 >
2339- < Show when = { peek ( ) } >
2340- < SidebarPanel project = { peek ( ) } merged = { false } />
2328+ < Show when = { state . peek } >
2329+ < SidebarPanel project = { state . peek } merged = { false } />
23412330 </ Show >
23422331 </ div >
23432332
23442333 < div
23452334 classList = { {
23462335 "hidden xl:block pointer-events-none absolute inset-y-0 right-0 z-25 overflow-hidden" : true ,
2347- "opacity-100 translate-x-0" : peeked ( ) && ! layout . sidebar . opened ( ) ,
2348- "opacity-0 -translate-x-2" : ! peeked ( ) || layout . sidebar . opened ( ) ,
2336+ "opacity-100 translate-x-0" : state . peeked && ! layout . sidebar . opened ( ) ,
2337+ "opacity-0 -translate-x-2" : ! state . peeked || layout . sidebar . opened ( ) ,
23492338 "transition-[opacity,transform] motion-reduce:transition-none" : true ,
2350- "duration-180 ease-out" : peeked ( ) && ! layout . sidebar . opened ( ) ,
2351- "duration-120 ease-in" : ! peeked ( ) || layout . sidebar . opened ( ) ,
2339+ "duration-180 ease-out" : state . peeked && ! layout . sidebar . opened ( ) ,
2340+ "duration-120 ease-in" : ! state . peeked || layout . sidebar . opened ( ) ,
23522341 } }
23532342 style = { { left : `calc(4rem + ${ Math . max ( Math . max ( layout . sidebar . width ( ) , 244 ) - 64 , 0 ) } px)` } }
23542343 >
0 commit comments