anki/ts/sveltelib/subscribe-updates.ts
Henrik Giesel 88217c5e7d
Replace (some) Bootstrap dropdowns with Floating UI (#1695)
* Implement a first version of WithFloating and Portal

* Add outside slot for Portal

* Execute computePosition from WithFloating

* Set up a first example of new WithFloating with the Latex menu

* Use autoUpdate in WithFloating

* Create sveltelib/position

* Add event-store

* Use event-store in close-on-click

* Implement subscribeToUpdates

* Introduce sass/elevation

* Split close-on-click to closing-click and subscribe-trigger

* Have closing-* stores return a symbol

- This way they act more of an EventEmitter than a store

* Allow passing show store

* Remove styling on float on updatePosition removal

* Implement a nice border for dropdowns

* Apply different border and box-shadow to Popover in dark/light theme

* Fix Ctrl+Shift+T not working

* Satisfy formatters and tests

* Add copyright header

* move copyright header to top (dae)
2022-03-02 14:21:19 +10:00

27 lines
724 B
TypeScript

// Copyright: Ankitects Pty Ltd and contributors
// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import type { Readable, Subscriber, Unsubscriber } from "svelte/store";
/**
* In some cases, we only care for updates, and not the initial
* value of a store, e.g. when the store wraps events.
* This also means, we can not use the special store syntax.
*/
function subscribeToUpdates<T>(
store: Readable<T>,
subscription: Subscriber<T>,
): Unsubscriber {
let first = true;
return store.subscribe((value: T): void => {
if (first) {
first = false;
} else {
subscription(value);
}
});
}
export default subscribeToUpdates;