rebase from live enviornment
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import { useRef, useEffect } from 'preact/hooks';
|
||||
import { effect } from '@preact/signals';
|
||||
|
||||
function afterNextFrame( callback ) {
|
||||
const done = () => {
|
||||
cancelAnimationFrame( raf );
|
||||
setTimeout( callback );
|
||||
};
|
||||
const raf = requestAnimationFrame( done );
|
||||
}
|
||||
|
||||
// Using the mangled properties:
|
||||
// this.c: this._callback
|
||||
// this.x: this._compute
|
||||
// https://github.com/preactjs/signals/blob/main/mangle.json
|
||||
function createFlusher( compute, notify ) {
|
||||
let flush;
|
||||
const dispose = effect( function () {
|
||||
flush = this.c.bind( this );
|
||||
this.x = compute;
|
||||
this.c = notify;
|
||||
return compute();
|
||||
} );
|
||||
return { flush, dispose };
|
||||
}
|
||||
|
||||
// Version of `useSignalEffect` with a `useEffect`-like execution. This hook
|
||||
// implementation comes from this PR:
|
||||
// https://github.com/preactjs/signals/pull/290.
|
||||
//
|
||||
// We need to include it here in this repo until the mentioned PR is merged.
|
||||
export function useSignalEffect( cb ) {
|
||||
const callback = useRef( cb );
|
||||
callback.current = cb;
|
||||
|
||||
useEffect( () => {
|
||||
const execute = () => callback.current();
|
||||
const notify = () => afterNextFrame( eff.flush );
|
||||
const eff = createFlusher( execute, notify );
|
||||
return eff.dispose;
|
||||
}, [] );
|
||||
}
|
||||
|
||||
// For wrapperless hydration.
|
||||
// See https://gist.github.com/developit/f4c67a2ede71dc2fab7f357f39cff28c
|
||||
export const createRootFragment = ( parent, replaceNode ) => {
|
||||
replaceNode = [].concat( replaceNode );
|
||||
const s = replaceNode[ replaceNode.length - 1 ].nextSibling;
|
||||
function insert( c, r ) {
|
||||
parent.insertBefore( c, r || s );
|
||||
}
|
||||
return ( parent.__k = {
|
||||
nodeType: 1,
|
||||
parentNode: parent,
|
||||
firstChild: replaceNode[ 0 ],
|
||||
childNodes: replaceNode,
|
||||
insertBefore: insert,
|
||||
appendChild: insert,
|
||||
removeChild( c ) {
|
||||
parent.removeChild( c );
|
||||
},
|
||||
} );
|
||||
};
|
||||
Reference in New Issue
Block a user