2023-06-19 07:59:21 +03:00
|
|
|
import {render} from 'https://unpkg.com/preact?module';
|
|
|
|
|
|
|
|
|
|
let state, component, root
|
|
|
|
|
|
2024-02-23 18:17:50 +08:00
|
|
|
if(globalThis.leporello) {
|
|
|
|
|
// See https://github.com/leporello-js/leporello-js?tab=readme-ov-file#saving-state-between-page-reloads
|
|
|
|
|
// Get initial state from Leporello storage
|
|
|
|
|
state = globalThis.leporello.storage.get('state')
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-19 07:59:21 +03:00
|
|
|
export const createApp = initial => {
|
2024-02-23 18:17:50 +08:00
|
|
|
/* if state was loaded from Leporello storage then keep it,
|
|
|
|
|
* otherwise initialize with initial state */
|
2023-06-19 07:59:21 +03:00
|
|
|
state = state ?? initial.initialState
|
|
|
|
|
component = initial.component
|
|
|
|
|
root = initial.root
|
|
|
|
|
do_render()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const handler = fn => (...args) => {
|
|
|
|
|
state = fn(state, ...args)
|
2024-02-23 18:17:50 +08:00
|
|
|
if(globalThis.leporello) {
|
|
|
|
|
// Save state to Leporello storage to load it after page reload
|
|
|
|
|
globalThis.leporello.storage.set('state', state)
|
|
|
|
|
}
|
2023-06-19 07:59:21 +03:00
|
|
|
do_render()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const connect = comp => props => comp(props, state)
|
|
|
|
|
|
|
|
|
|
const do_render = () => render(component(), root)
|