feat: revamped keybinding implementation

This commit is contained in:
Andrew Bastin
2021-07-29 22:13:06 -04:00
parent e138a5f846
commit b524fa7248
8 changed files with 341 additions and 124 deletions

View File

@@ -0,0 +1,14 @@
/**
* Copies a given string to the clipboard using
* the legacy exec method
*
* @param content The content to be copied
*/
export function copyToClipboard(content: string) {
const dummy = document.createElement("input")
document.body.appendChild(dummy)
dummy.value = content
dummy.select()
document.execCommand("copy")
document.body.removeChild(dummy)
}

View File

@@ -88,3 +88,35 @@ export function pluckRef<T, K extends keyof T>(ref: Ref<T>, key: K): Ref<T[K]> {
}
})
}
/**
* A composable that listens to the stream and fires update callbacks
* but respects the component lifecycle
*
* @param stream The stream to subscribe to
* @param next Callback called on value emission
* @param error Callback called on stream error
* @param complete Callback called on stream completion
*/
export function subscribeToStream<T>(
stream: Observable<T>,
next: (value: T) => void,
error: (e: any) => void,
complete: () => void
) {
let sub: Subscription | null = null
// Don't perform anymore updates if the component is
// gonna unmount
onBeforeUnmount(() => {
if (sub) {
sub.unsubscribe()
}
})
sub = stream.subscribe({
next,
error,
complete,
})
}