30bbbaf00b
* Make eslint sort our imports * fix missing deps in eslint rule (dae) Caught on Linux due to the stricter sandboxing * Remove exports-last eslint rule (for now?) * Adjust browserslist settings - We use ResizeObserver which is not supported in browsers like KaiOS, Baidu or Android UC * Raise minimum iOS version 13.4 - It's the first version that supports ResizeObserver * Apply new eslint rules to sort imports
47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
// Copyright: Ankitects Pty Ltd and contributors
|
|
// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|
|
|
import { getContext, hasContext, setContext } from "svelte";
|
|
|
|
type SetContextPropertyAction<T> = (value: T) => void;
|
|
|
|
export interface ContextProperty<T> {
|
|
/**
|
|
* Retrieves the component's context
|
|
*
|
|
* @remarks
|
|
* The typing of the return value is a lie insofar as calling `get` outside
|
|
* of the component's context will return `undefined`.
|
|
* If you are uncertain if your component is actually within the context
|
|
* of this component, you should check with `available` first.
|
|
*
|
|
* @returns The component's context
|
|
*/
|
|
get(): T;
|
|
/**
|
|
* Checks whether the component's context is available
|
|
*/
|
|
available(): boolean;
|
|
}
|
|
|
|
function contextProperty<T>(
|
|
key: symbol,
|
|
): [ContextProperty<T>, SetContextPropertyAction<T>] {
|
|
function set(context: T): void {
|
|
setContext(key, context);
|
|
}
|
|
|
|
const context = {
|
|
get(): T {
|
|
return getContext(key);
|
|
},
|
|
available(): boolean {
|
|
return hasContext(key);
|
|
},
|
|
};
|
|
|
|
return [context, set];
|
|
}
|
|
|
|
export default contextProperty;
|