mirror of
https://github.com/tauri-apps/tauri.git
synced 2024-12-19 08:31:35 +03:00
119 lines
3.8 KiB
TypeScript
119 lines
3.8 KiB
TypeScript
// Copyright 2019-2022 Tauri Programme within The Commons Conservancy
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
/**
|
|
* The event system allows you to emit events to the backend and listen to events from it.
|
|
*
|
|
* This package is also accessible with `window.__TAURI__.event` when [`build.withGlobalTauri`](https://tauri.app/v1/api/config/#buildconfig.withglobaltauri) in `tauri.conf.json` is set to `true`.
|
|
* @module
|
|
*/
|
|
|
|
import * as eventApi from './helpers/event'
|
|
import type { EventCallback, UnlistenFn, Event } from './helpers/event'
|
|
|
|
export type EventName = TauriEvent | string
|
|
|
|
/**
|
|
* @since 1.1.0
|
|
*/
|
|
export enum TauriEvent {
|
|
WINDOW_RESIZED = 'tauri://resize',
|
|
WINDOW_MOVED = 'tauri://move',
|
|
WINDOW_CLOSE_REQUESTED = 'tauri://close-requested',
|
|
WINDOW_CREATED = 'tauri://window-created',
|
|
WINDOW_DESTROYED = 'tauri://destroyed',
|
|
WINDOW_FOCUS = 'tauri://focus',
|
|
WINDOW_BLUR = 'tauri://blur',
|
|
WINDOW_SCALE_FACTOR_CHANGED = 'tauri://scale-change',
|
|
WINDOW_THEME_CHANGED = 'tauri://theme-changed',
|
|
WINDOW_FILE_DROP = 'tauri://file-drop',
|
|
WINDOW_FILE_DROP_HOVER = 'tauri://file-drop-hover',
|
|
WINDOW_FILE_DROP_CANCELLED = 'tauri://file-drop-cancelled',
|
|
MENU = 'tauri://menu',
|
|
CHECK_UPDATE = 'tauri://update',
|
|
UPDATE_AVAILABLE = 'tauri://update-available',
|
|
INSTALL_UPDATE = 'tauri://update-install',
|
|
STATUS_UPDATE = 'tauri://update-status',
|
|
DOWNLOAD_PROGRESS = 'tauri://update-download-progress'
|
|
}
|
|
|
|
/**
|
|
* Listen to an event from the backend.
|
|
*
|
|
* @example
|
|
* ```typescript
|
|
* import { listen } from '@tauri-apps/api/event';
|
|
* const unlisten = await listen<string>('error', (event) => {
|
|
* console.log(`Got error in window ${event.windowLabel}, payload: ${payload}`);
|
|
* });
|
|
*
|
|
* // you need to call unlisten if your handler goes out of scope e.g. the component is unmounted
|
|
* unlisten();
|
|
* ```
|
|
*
|
|
* @param event Event name. Must include only alphanumeric characters, `-`, `/`, `:` and `_`.
|
|
* @param handler Event handler callback.
|
|
* @returns A promise resolving to a function to unlisten to the event.
|
|
* Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
async function listen<T>(
|
|
event: EventName,
|
|
handler: EventCallback<T>
|
|
): Promise<UnlistenFn> {
|
|
return eventApi.listen(event, null, handler)
|
|
}
|
|
|
|
/**
|
|
* Listen to an one-off event from the backend.
|
|
*
|
|
* @example
|
|
* ```typescript
|
|
* import { once } from '@tauri-apps/api/event';
|
|
* interface LoadedPayload {
|
|
* loggedIn: boolean,
|
|
* token: string
|
|
* }
|
|
* const unlisten = await once<LoadedPayload>('loaded', (event) => {
|
|
* console.log(`App is loaded, loggedIn: ${event.payload.loggedIn}, token: ${event.payload.token}`);
|
|
* });
|
|
*
|
|
* // you need to call unlisten if your handler goes out of scope e.g. the component is unmounted
|
|
* unlisten();
|
|
* ```
|
|
*
|
|
* @param event Event name. Must include only alphanumeric characters, `-`, `/`, `:` and `_`.
|
|
* @returns A promise resolving to a function to unlisten to the event.
|
|
* Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
async function once<T>(
|
|
event: EventName,
|
|
handler: EventCallback<T>
|
|
): Promise<UnlistenFn> {
|
|
return eventApi.once(event, null, handler)
|
|
}
|
|
|
|
/**
|
|
* Emits an event to the backend.
|
|
* @example
|
|
* ```typescript
|
|
* import { emit } from '@tauri-apps/api/event';
|
|
* await emit('frontend-loaded', { loggedIn: true, token: 'authToken' });
|
|
* ```
|
|
*
|
|
* @param event Event name. Must include only alphanumeric characters, `-`, `/`, `:` and `_`.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
async function emit(event: string, payload?: unknown): Promise<void> {
|
|
return eventApi.emit(event, undefined, payload)
|
|
}
|
|
|
|
export type { Event, EventCallback, UnlistenFn }
|
|
|
|
export { listen, once, emit }
|