summaryrefslogtreecommitdiff
path: root/ui/lib/store
Commit message (Collapse)AuthorAge
* Track state on a per-session basis, rather than via globals.Owen Jacobson2025-02-26
| | | | | | | | | | | Sorry about the thousand-line omnibus change; this is functionally a rewrite of the client's state tracking, flavoured to resemble the existing code as far as is possible, rather than something that can be parted out and committed in pieces. Highlights: * No more `store.writeable()`s. All state is now tracked using state runs or derivatives. State is still largely structured the way it was, but several bits of nested state have been rewritten to ensure that their properties are reactive just as much as their containers are. * State is no longer global. `(app)/+layout` manages a stateful session, created via its load hook and started/stopped via component mount and destroy events. The session also tracks an event source for the current state, and feeds events into the state, broadly along the same lines as the previous stores-based approach. Together these two changes fix up several rough spots integrating state with Svelte, and allow for the possibility of multiple states. This is a major step towards restartable states, and thus towards better connection management, which will require the ability to "start over" once a connection is restored.
* Split Markdown rendering out into its own JS module.Owen Jacobson2025-02-25
|
* npm run fmtOwen Jacobson2025-02-24
|
* Remove explanatory commentKit La Touche2025-02-20
| | | | That no longer vitally pertains.
* Separate channel metadata out into its own storeKit La Touche2025-02-20
| | | | | | | | This is stored locally, and, while parallel to channel info, is not the same as. Eventually, this may hold info about moot/decayed channels, and grow unbounded. That'll need to be addressed.
* Merge local channel data and remote to maintain stateKit La Touche2025-02-20
| | | | | | | | | When we hit the boot endpoint, we get the server's view of things. If we just setChannels with that, we overwrite all our locally-stored info in on things like lastReadAt. So we need to merge data. Eventually, this might militate for a `meta` key containing an object of locally stored data, rather than having to handle each key specially.
* npm run formatOwen Jacobson2025-01-11
|
* Use Luxon dates on Message store and componentKit La Touche2024-11-29
| | | | | | This includes jamming the "at" of a message into a data- attribute on the Message component, so that it can later be used by parent components via Plain Old Javascript and the .dataset attribute of an HTML node.
* Rename and modify channels storeKit La Touche2024-11-29
| | | | | | | | I tried to have a custom class for Channel objects, but Svelte's automatic proxy logic works only on bare objects, as far as I could tell. So that broke everything. I resorted to a function that would build the bare objects, but we still lack methods that I think would make life easier ("touch last read" etc).
* HTML-ify message bodies once, on receipt, and not every time the message is ↵Owen Jacobson2024-11-15
| | | | | | rendered. ~16% of the `hi development` channel's rendering time was taken up on this.
* Stop chopping the first message off of each channel (oops).Owen Jacobson2024-11-08
|
* Fix up calls to `addMessage` inside `Messages`.Owen Jacobson2024-11-07
|
* Tweak addMessage call signatureKit La Touche2024-11-07
|
* Split message runs after ten minutes' silence.Owen Jacobson2024-11-06
| | | | I've also refactored how runs are processed, to avoid re-splitting runs every time the channel view is rendered. They're generated when messages are ingested into the `$messages` store, instead.
* Run spaces-style prettier formattingKit La Touche2024-11-03
|
* Run prettier, make lint part of pre-commitOwen Jacobson2024-11-02
|
* Remove notification permissions prompt.Owen Jacobson2024-11-02
| | | | On Safari (iOS and macOS), the permissions prompt can only be done during a user gesture; mounting is sufficiently disconnected from any user gestures that it's not allowed. The browser raises an exception, which, since it is unhandled, then leaks out and interrupts SvelteKit's element unmounting, leading to the whole UI being duplicated when switching channels (the old UI is not unmounted).
* Do some toast notificatingKit La Touche2024-10-31
|
* Coalesce adjacent messages by the same author into runs, to consolidate ↵Owen Jacobson2024-10-30
| | | | message display.
* Compute the active channel from the current routing state, not from a store.Owen Jacobson2024-10-10
|
* Hoist the UI one step up furtherOwen Jacobson2024-10-10