react-busser
Version:
An evented object for scalable and precise communication across ReactJS Components
1,121 lines (1,074 loc) • 40 kB
TypeScript
// Type definitions for react-busser v0.1.4
// Project: https://github.com/codesplinta/busser
type TransformAsArray<L extends {}> = [...L[keyof L][]];
type StorageTypes = string | object;
type JSObject = { [key: string]: unknown };
type JSONObject<D = JSObject> = object | Record<keyof D, string | boolean | number | null | undefined>;
type SerializableValues<D = object> = string | number | boolean | null | undefined | JSONObject<D>;
declare module 'react-busser' {
export type PrinterFont = { family: string, source: string; weight?: string; style?: string; };
/**
* @typedef PrintOptions
* @type {object}
* @property {String=} documentTitle - The document title of the printed patch.
* @property {(() => Promise<void>)=} onBeforeGetContent - The callack to trigger before the printed content is computed.
* @property {(() => void)=} onBeforePrint - The callback to trigger just before printing starts.
* @property {(() => void)=} onAfterPrint - The callback to trigger just before printing finishes.
* @property {Boolean=} removeAfterPrint - The flag that indicates whether to remove print iframe or not.
* @property {(() => void)=} nowPrinting - The callback to trigger as soon as printing starts.
* @property {String=} nonce - CSP nonce for generated <style> tags.
* @property {((errorLocation: 'onBeforePrint' | 'onBeforeGetContent' | 'print', error: Error) => void)=} onPrintError - The callack to trigger when there's a print error.
* @property {(Array.<{ family: string, source: string; weight?: string; style?: string; }>)=} fonts - The fonts loaded for printing.
* @property {(() => HTMLElement | Node)=} content - The callback that returns a component reference value.
* @property {String=} bodyClass - One or more CSS class names that can be passed to the print window.
*/
export type PrintOptions = {
documentTitle?: string,
onBeforeGetContent?: () => Promise<void>,
onBeforePrint?: () => void,
onAfterPrint?: () => void,
removeAfterPrint?: boolean,
nonce?: string,
nowPrinting?: () => void,
onPrintError?: (errorLocation: 'onBeforePrint' | 'onBeforeGetContent' | 'print', error: Error) => void,
fonts?: PrinterFont[],
content?: (() => HTMLElement | Node)
bodyClass?: string
};
/**
* @typedef EventBus
* @type {object}
* @property {Function} on - the event subscription event listener setter.
* @property {Function} off - the event unsubscription listener setter.
* @property {Function} emit - the event trigger routine.
*/
export type EventBus = Readonly<{
on: (eventNameOrList: string | Array<string>, eventCallback: Function) => void,
off: (eventCallback: Function) => void,
emit: (eventName: string, data: unknown) => void
}>;
/**
* @typedef TextSearchQueryController
* @type {object}
* @property {String} text - the input text used for filtering.
* @property {Boolean} isLoading - the status of filtering.
* @property {Number} page - the page for pagination.
* @property {Array} list - the filtered list based on the input text.
*/
export type TextSearchQueryController<T> = {
text: string,
isLoading: boolean,
page: number,
list: T[]
};
/**
* @typedef TextSearchQuerySignalController
* @type {object}
* @property {String} text - the input text used for filtering.
* @property {Boolean} isLoading - the status of filtering.
* @property {Number} page - the page for pagination.
* @property {Array} list - the filtered list based on the input text.
*/
export type TextSearchQuerySignalController<T> = import('@preact/signals-react').ReadonlySignal<{
text: string,
isLoading: boolean,
page: number,
list: T[]
}>;
/**
* @typedef SubscribedEventsStatsData
* @type {object}
* @property {Number} timestamp - an event timestamp.
* @property {String} name - an event name.
*/
export type SubscribedEventsStatsData = {
timestamp: number,
name: string,
};
/**
* @typedef FiredEventsStatsData
* @type {object}
* @property {Number} timestamp - an event timestamp.
* @property {String} name - an event name.
* @property {*} data - the event data.
*/
export type FiredEventsStatsData<D extends unknown> = {
timestamp: number,
name: string,
data: D
};
/**
* @callback TextSearchQueryChangeEventHandler
* @param {React.ChangeEvent} event - the synthetic react browser event object.
* @param {Array.<String>=} listItemKey - the property key upon which to filter on.
*/
export type TextSearchQueryChangeEventHandler = (event: import('react').ChangeEvent<HTMLInputElement | HTMLTextAreaElement>, listItemKey?: string[]) => void;
/**
* @typedef {Array.<TextSearchQueryController, TextSearchQueryChangeEventHandler>} TextSearchQueryResult
*/
export type TextSearchQueryResult<T> = [
TextSearchQueryController<T>,
TextSearchQueryChangeEventHandler
];
/**
* @typedef {Array.<TextSearchQuerySignalController, TextSearchQueryChangeEventHandler>} TextSearchQuerySignalResult
*/
export type TextSearchQuerySignalResult<T> = [
TextSearchQuerySignalController<T>,
TextSearchQueryChangeEventHandler
];
/**
* @callback TextSearchQueryUpdateCallback
* @param {TextSearchQueryController} controller - the composite object for exposing the verious state of filter queries.
*/
export type TextSearchQueryUpdateCallback<T> = (controller?: TextSearchQueryController<T>) => () => void;
/**
* @callback TextSearchListChangedCallback
* @param {TextSearchQueryController} controller - the composite object for exposing the verious state of filter queries.
*/
export type TextSearchListChangedCallback<T> = (controller?: TextSearchQueryController<T>) => void;
/**
* @typedef EventBusStats
* @type {object}
* @property {Object.<String, FiredEventsStatsData>} eventsFired - a record of all events fired.
* @property {Number} eventsFiredCount - a record of the count of all events fired.
* @property {Object.<String, SubscribedEventsStatsData>} eventsSubscribed - a record of all events subscribed.
* @property {Number} eventsSubscribedCount - a record of the count of all events subscribed.
* @property {Object.<String, *>} eventsFiredPath - a record of all event fired in sequence.
*/
export type EventBusStats<D = unknown> = Readonly<{
eventsFired: { [key: string]: FiredEventsStatsData<D> },
eventsFiredCount: number,
eventsSubscribed: { [key: string]: SubscribedEventsStatsData },
eventsSubscribedCount: number,
eventsFiredPath: { [key: string]: D }[]
}>;
/**
* @typedef SharedStateBoxContext
* @type {object}
* @property {Function} dispatch - notify the atom of a change.
* @property {Function} subscribe - subcribe the observer to a change or series of changes.
* @property {Function} getState - get the current state object.
*/
type SharedStateBoxContext<T extends Record<string | number | symbol, unknown> = { "" : {} }> = {
dispatch: (payload: { slice?: string & keyof T, value: T[keyof T] }) => void,
subscribe: (callback: Function, key: string) => () => void,
getState: ((key: string & keyof T) => T[keyof T]) | ((key: "") => T),
};
/**
* @typedef BrowserStorage
* @type {object}
* @property {Function} getFromStorage - getter for browser `Storage` interface.
* @property {Function} setToStorage - setter for browser `Storage` interface.
* @property {Function} clearFromStorage - cleanup for browser `Storage` interface.
*/
export type BrowserStorage = {
getFromStorage<T extends SerializableValues>(key: string, defaultPayload: T): T;
hasKeyInStorage: (key: string) => boolean;
hasKeyPrefixInStorage: (key: string) => boolean;
setToStorage: (key: string, value: SerializableValues) => boolean;
clearFromStorage: (key: string) => boolean;
};
/**
* @typedef BrowserStorageOptions
* @type {object}
* @property {"session" | "local"} storageType - the browser storage type.
*/
export type BrowserStorageOptions = {
storageType: "session" | "local"
};
/**
* @typedef TextSearchQueryPageOptions
* @type {object}
* @property {String} text - the filter text used to filter the list.
* @property {Number=} page - the pagination page number.
* @property {Array} list - the list to filter using `text`.
*/
export type TextSearchQueryPageOptions<T> = {
text?: string,
page?: number,
list: T[]
};
/**
* @typedef TextSearchQueryOptions
* @type {object}
* @property {String=} filterTaskName - the filter query search algorithm to be used.
* @property {Function=} fetchRemoteFilteredList - the callback for running filter query remotely from an API backend.
* @property {TextSearchQueryUpdateCallback=} filterUpdateCallback - the callback for running effects after each distinct filter query.
* @property {TextSearchListChangedCallback=} onListChanged - the callback for running effects after each mutation on the list to filter.
*/
export type TextSearchQueryOptions<T> = {
filterTaskName?: "specific" | "fuzzy" | "complete" | (string & {}),
fetchRemoteFilteredList?: (text?: string, searchKey?: string[]) => Promise<T[]>,
filterUpdateCallback?: TextSearchQueryUpdateCallback<T>
onListChanged?: TextSearchListChangedCallback<T>
};
/**
* @typedef HttpSignalsPayload
* @type {object}
* @property {?String} success - success message for http request.
* @property {?Error} error - error object for failed http request.
* @property {Object.<String, (String | Number | Boolean)} metadata - metadata info for http request.
*/
type HttpSignalsPayload = {
success: string | null,
error: Error | null,
metadata: Record<string, string | number | boolean>
};
/**
* @callback StorageEventCallback
* @param {StorageEvent} event
*/
export type StorageEventCallback = (event: StorageEvent) => void;
/**
* @callback HttpSignalsPayloadCallback
* @param {HttpSignalsPayload} eventPayload
*/
export type HttpSignalsPayloadCallback = (eventPayload: HttpSignalsPayload) => void;
/**
* @typedef HttpSignalsResult
* @type {object}
* @property {EventBusStats} stats - the debug helper object.
* @property {HttpSignalsPayloadCallback} signalRequestStarted - the event handler for the `request:started` event.
* @property {HttpSignalsPayloadCallback} signalRequestEnded - the event handler for the `request:ended` event.
* @property {HttpSignalsPayloadCallback} signalRequestAborted - the event handler for the `request:aborted` event.
* @property {HttpSignalsPayloadCallback} signalCleanup - the event handler for the `cleanup` event.
*/
export type HttpSignalsResult = {
stats: EventBusStats,
signalRequestStarted: HttpSignalsPayloadCallback,
signalRequestEnded: HttpSignalsPayloadCallback,
signalRequestAborted: HttpSignalsPayloadCallback,
signalCleanup: HttpSignalsPayloadCallback
};
/**
* @typedef RoutingMonitorOptions
* @type {object}
* @property {Function} getUserConfirmation - the callback to prompt the user to confirm a route change.
* @property {String=} appPathnamePrefix - the prefix for the app pathname.
* @property {Object.<String, String>=} unsavedChangesRouteKeysMap - the object map for routes and their respective unsaved items' key.
* @property {String=} promptMessage - the prompt text for unsaved items'.
* @property {Function=} onNavigation - the callback called on every route change.
*/
export type RoutingMonitorOptions = Pick<import('react-router-dom').HashRouterProps, "getUserConfirmation"> & {
onNavigation?: (
history: import('history').History,
navigationDetails: {
previousPathname: string,
currentPathname: string,
navigationDirection: "refreshnavigation" | "backwardnavigation" | "forwardnavigation" | "freshnavigation"
}
) => void,
unsavedChangesRouteKeysMap?: Record<string, string>,
appPathnamePrefix?: string,
promptMessage?: string,
shouldBlockRoutingTo?: () => boolean
};
/**
* @typedef UnsavedChangesLockOptions
* @type {object}
* @property {Boolean} useBrowserPrompt - flag for making use of the browser prompt.
*/
export type UnsavedChangesLockOptions = {
useBrowserPrompt?: boolean
};
/**
* @typedef {Array.<TextSearchQueryController, TextSearchQueryChangeEventHandler>} TextSearchQuery
*/
export type TextSearchQuery<T> = [
TextSearchQueryController<T>,
TextSearchQueryChangeEventHandler
];
/**
* @typedef {[EventBus, EventBusStats]} EventBusDetails
*/
export type EventBusDetails = [
EventBus,
EventBusStats
];
export type PropertyDetails<I extends unknown[], P extends string = string, O = unknown> = [
P,
(eventName: string, argumentTransformer?: ((...args: I) => O)) => ((...args: I) => void),
null | Error,
EventBusStats
];
export type SignalsPropertyDetails<I extends unknown[], P extends string = string, O = unknown> = [
import('@preact/signals-react').ReadonlySignal<P>,
(eventName: string, argumentTransformer?: ((...args: I) => O)) => ((...args: I) => void),
import('@preact/signals-react').ReadonlySignal<null | Error>,
EventBusStats
];
export type ListDetails<I extends unknown[], L = unknown[], O = (unknown | L)> = [
L,
(eventName: string, argumentTransformer?: ((...args: I) => O)) => ((...args: I) => void),
null | Error,
EventBusStats
];
export type SignalsListDetails<I extends unknown[], L = unknown[], O = (unknown | L)> = [
import('@preact/signals-react').ReadonlySignal<L>,
(eventName: string, argumentTransformer?: ((...args: I) => O)) => ((...args: I) => void),
import('@preact/signals-react').ReadonlySignal<null | Error>,
EventBusStats
];
export type CountDetails<I extends unknown[]> = [
number,
(eventName: string, argumentTransformer?: ((...args: I) => number)) => ((...args: I) => void),
null | Error,
EventBusStats
];
export type SignalsCountDetails<I extends unknown[]> = [
import('@preact/signals-react').ReadonlySignal<number>,
(eventName: string, argumentTransformer?: ((...args: I) => number)) => ((...args: I) => void),
import('@preact/signals-react').ReadonlySignal<null | Error>,
EventBusStats
];
export type PromiseDetails<I extends unknown[], O = unknown> = [
undefined,
(eventName: string, argumentTransformer?: ((...args: I) => O)) => ((...args: I) => void),
null | Error,
EventBusStats
];
export type CompositeDetails<I extends unknown[], C = Record<string | number | symbol, unknown>, O = unknown> = [
C,
(eventName: string, argumentTransformer?: ((...args: I) => O)) => ((...args: I) => void),
null | Error,
EventBusStats
];
export type SignalsCompositeDetails<I extends unknown[], C = Record<string | number | symbol, unknown>, O = unknown> = [
import('@preact/signals-react').ReadonlySignal<C>,
(eventName: string, argumentTransformer?: ((...args: I) => O)) => ((...args: I) => void),
import('@preact/signals-react').ReadonlySignal<null | Error>,
EventBusStats
];
/**
* useBus:
*
* used to setup communication from one component to another using the events routed via the central event bus (pub/sub)
*
* @param {{ subscribes: Array.<String>, fires: Array.<String> }} context - the list of event names this event bus fires (emits) and/or subscribes to.
* @param {String=} ownerName - the tag/name of the ReactJS component that owns this data primitive.
*
* @returns `EventBusDetails`
*
*/
export function useBus(
context: { subscribes: Array<string>, fires: Array<string> },
ownerName?: string
): EventBusDetails;
/**
* useProperty:
*
* used to manage a single string value that has a finite set of values.
*
* @param {(String | Array.<string>)} eventNameOrEventNameList - the event name or list of event names to respond to
* @param {Function} propertyReducer - similar to a redux reducer but for a `property` state.
* @param {String} property - a piece of state whose data-type is a string and has a finite set of valid values.
* @param {String=} ownerName - the tag/name of the ReactJS component that owns this `property` data primitive.
*
* @returns `PropertyDetails`
*
*/
export function useProperty<I extends unknown[], P extends string = string, O = unknown>(
eventNameOrEventNameList: string | Array<string>,
propertyReducer: (previousProperty: P, eventPayload: O, event?: string) => P,
property: P,
ownerName?: string
): PropertyDetails<I, P, O>
/**
* useSignalsProperty:
*
* used to manage a single string value that has a finite set of values - signals variant.
*
* @param {(String | Array.<string>)} eventNameOrEventNameList - the event name or list of event names to respond to.
* @param {Function} propertyReducer - similar to a redux reducer but for a `property` state.
* @param {String} property - a piece of state whose data-type is a string and has a finite set of valid values.
* @param {String=} ownerName - the tag/name of the ReactJS component that owns this `property` data primitive.
*
* @returns `SignalsPropertyDetails`
*
*/
export function useSignalsProperty<I extends unknown[], P extends string = string, O = unknown>(
eventNameOrEventNameList: string | Array<string>,
propertyReducer: (previousProperty: P, eventPayload: O, event?: string) => P,
property: P,
ownerName?: string
): SignalsPropertyDetails<I, P, O>
/**
* useList:
*
* used to manage a list (array) of things (objects, strings, numbers e.t.c).
*
* @param {(String | Array.<string>)} eventNamesOrEventNameList - the event name or list of event names to respond to.
* @param {Function} listReducer - similar to a redux reducer but for a `list` state.
* @param {Array.<Object.<String, *>>} list - a piece of state whose data-type is an array of other primitive or reference types.
* @param {String=} ownerName - the tag/name of the ReactJS component that owns this `list` data primitive.
*
* @returns `ListDetails`
*
*/
export function useList<I extends unknown[], L = unknown[], O = unknown[] | unknown>(
eventNameOrEventNameList: string | Array<string>,
listReducer: (previousList: L, eventPayload: O, event?: string) => L,
list: L,
ownerName?: string
): ListDetails<I, L, O>;
/**
* useSignalsList:
*
* used to manage a list (array) of things (objects, strings, numbers e.t.c) - signals varaint.
*
* @param {(String | Array.<string>)} eventNamesOrEventNameList - the event name or list of event names to respond to.
* @param {Function} listReducer - similar to a redux reducer but for a `list` state.
* @param {Array.<Object.<String, *>>} list - a piece of state whose data-type is an array of other primitive or reference types.
* @param {String=} ownerName - the tag/name of the ReactJS component that owns this `list` data primitive.
*
* @returns `SignalsListDetails`
*
*/
export function useSignalsList<I extends unknown[], L = unknown[], O = unknown[] | unknown>(
eventNameOrEventNameList: string | Array<string>,
listReducer: (previousList: L, eventPayload: O, event?: string) => L,
list: L,
ownerName?: string
): SignalsListDetails<I, L, O>;
/**
* useCount:
*
* used to manage counting the occurence of an event or addition of enitities (items in a list (data structure)).
*
* @param {(String | Array.<String>)} eventNamesOrEventNameList - the event name or list of event names to respond to.
* @param {Function} countReducer - similar to a redux reducer but for a `count` state.
* @param {{ start: Number, min: Number, max: Number }} count - a piece of state whose data-type is a number for the purposes of counting.
* @param {String=} ownerName - the tag/name of the ReactJS component that owns this `count` data primitive.
*
* @returns `CountDetails`
*
*/
export function useCount<I extends unknown[]>(
eventNamesOrEventNameList: string | Array<string>,
countReducer: (previousCount: number, eventPayload: number, event?: string) => number,
count: { start?: number, min?: number, max?: number },
ownerName?: string
): CountDetails<I>;
/**
* useSignalsCount:
*
* used to manage counting the occurence of an event or addition of enitities (items in a list (data structure)) - signals varaint.
*
* @param {(String | Array.<String>)} eventNamesOrEventNameList - the event name or list of event names to respond to.
* @param {Function} countReducer - similar to a redux reducer but for a `count` state.
* @param {{ start: Number, min: Number, max: Number }} count - a piece of state whose data-type is a number for the purposes of counting.
* @param {String=} ownerName - the tag/name of the ReactJS component that owns this `count` data primitive.
*
* @returns `SignalsCountDetails`
*
*/
export function useSignalsCount<I extends unknown[]>(
eventNamesOrEventNameList: string | Array<string>,
countReducer: (previousCount: number, eventPayload: number, event?: string) => number,
count: { start?: number, min?: number, max?: number },
ownerName?: string
): SignalsCountDetails<I>;
/**
* useOn:
*
* used to setup event handlers on the central event bus.
*
* @param {(String | Array.<String>)} eventNameOrEventNameList
* @param {Function} listener
* @param {String=} name
*
* @returns `EventBusDetails`
*
*/
export function useOn(
eventNameOrEventNameList: string | Array<string>,
listener: Function,
name?: string
): EventBusDetails;
/**
* useComposite:
*
* used to process derived object literal state that is made from logical changes made on base state via events.
*
* @param {(String | Array.<string>)} eventNameOrEventNameList - the event name or list of event names to respond to.
* @param {Function} compositeReducer - similar to a redux reducer but for a `composite` state.
* @param {Object.<String, *>} composite - a piece of state whose data-type is an object literal with property value pairs.
* @param {String=} name - the tag/name of the ReactJS component that owns this `composite` data primitive.
*
* @returns `CompositeDetails`
*
*/
export function useComposite<I extends unknown[], C = Record<string | number | symbol, unknown>, O = unknown>(
eventNameOrEventNameList: string | Array<string>,
compositeReducer: (previousComposite: C, eventPayload: O, event?: string) => C,
composite: C,
name?: string
): CompositeDetails<I, C, O>;
/**
* useSignalsComposite:
*
* used to process derived object literal state that is made from logical changes made on base state via events - signal variant.
*
* @param {(String | Array.<string>)} eventNameOrEventNameList - the event name or list of event names to respond to.
* @param {Function} compositeReducer - similar to a redux reducer but for a `composite` state.
* @param {Object.<String, *>} composite - a piece of state whose data-type is an object literal with property value pairs.
* @param {String=} name - the tag/name of the ReactJS component that owns this `composite` data primitive.
*
* @returns `SignalsCompositeDetails`
*
*/
export function useSignalsComposite<I extends unknown[], C = Record<string | number | symbol, unknown>, O = unknown>(
eventNameOrEventNameList: string | Array<string>,
compositeReducer: (previousComposite: C, eventPayload: O, event?: string) => C,
composite: C,
name?: string
): SignalsCompositeDetails<I, C, O>;
/**
* usePromised:
*
* used to execute any async task with a deffered or promised value triggered via events.
*
* @param {(String | Array.<String>)} eventNameOrEventNameList
* @param {Function} handler
* @param {String=} name
*
* @returns `PromiseDetails`
*
*/
export function usePromised<I extends unknown[], O = unknown>(
eventNameOrEventNameList: string | Array<string>,
handler: () => Promise<unknown>,
name?: string
): PromiseDetails<I, O>;
/**
* useOutsideClick:
*
* used to respond to clicks outside a target DOM element
*
* @param {Function} callback
*
* @returns `[import('react').MutableRefObject<HTMLElement | null>]`
*
*/
export function useOutsideClick<E extends HTMLElement>(
callback: (referenceElement: E | null, targetElement: EventTarget | null) => void
): [
import('react').MutableRefObject<E | null>
];
/**
* useHttpSignals:
*
* used to setup events for when async http requests are started or ended.
*
* @returns `HttpSignalsResult`
*
*/
export function useHttpSignals(): HttpSignalsResult;
/**
* useBrowserStorage:
*
* used to access and update data in either `window.localStorage` or `window.sessionStorage`.
*
* @param {BrowserStorageOptions} storageOptions
*
* @returns `BrowserStorage`
*
*/
export function useBrowserStorage(
storageOptions: BrowserStorageOptions
): BrowserStorage;
/**
* useBrowserStorageEvent:
*
* used to setup browser `stroage` event for `window.localStorage` or `window.sessionStorage` for browser inter-tab updates.
*
* @param {StorageEventCallback} callback
*
* @returns void
*
*/
export function useBrowserStorageEvent(
callback: StorageEventCallback
): void
/**
* useTextFilteredList:
*
* used to filter a list (array) of things based on a search text being typed into an input.
*
* @param {TextSearchQueryPageOptions} textQueryPageOptions
* @param {TextSearchQueryOptions} textQueryOptions
*
* @returns `TextSearchQueryResult`
*
*/
export function useTextFilteredList<T = unknown>(
textQueryPageOptions: TextSearchQueryPageOptions<T>,
textQueryOptions: TextSearchQueryOptions<T>
): TextSearchQueryResult<T>;
/**
* useTextFilteredSignalsList:
*
* used to filter a list (array) of things based on a search text being typed into an input (signals variant).
*
* @param {TextSearchQueryPageOptions} textQueryPageOptions
* @param {TextSearchQueryOptions} textQueryOptions
*
* @returns `TextSearchQueryResult`
*
*/
export function useTextFilteredSignalsList<T = unknown>(
textQueryPageOptions: TextSearchQueryPageOptions<T>,
textQueryOptions: TextSearchQueryOptions<T>
): TextSearchQuerySignalResult<T>;
/**
* useBrowserStorageWithEncryption:
*
* used to access and update data in either `window.localStorage` or `window.sessionStorage` while using encryption.
*
* @param {BrowserStorageOptions} storageOptions
*
* @returns `BrowserStorage`
*
*/
export function useBrowserStorageWithEncryption(
storageOptions: BrowserStorageOptions
): BrowserStorage;
/**
* useRoutingChanged:
*
* used to respond to a SPA page route changes via events.
*
* @param {String} eventName
* @param {Object} history
* @param {String=} name
* @param {Function} callback
*
* @returns void
*
*/
export function useRoutingChanged(
eventName: string,
history: import('history').History,
name?: string,
callback?: () => void
): void;
/**
* useRoutingBlocked:
*
* used to respond to `beforeunload` event in the browser via events.
*
* @param {String} eventName
* @param {Object} history
* @param {String=} name
* @param {Function=} callback
*
* @returns void
*
*/
export function useRoutingBlocked(
eventName: string,
history: import('history').History,
name?: string,
callback?: () => [boolean, string]
): void;
/**
* useRoutingMonitor:
*
* used to monitor page route changes from a central place inside a app router component.
*
* @param {RoutingMonitorOptions} options
*
* @returns `{ navigationList: (import('history').Location)[], getBreadCrumbsList: (pathname: string) => (import('history').Location)[] }`
*
*/
export function useRoutingMonitor(
options: RoutingMonitorOptions
): {
readonly navigationList: (import('history').Location)[],
getBreadCrumbsList: (pathname: string) => (import('history').Location)[]
};
/**
* useSignalsEffect:
*
* used as an alternative to `useEffect()` for signals
*
* @param {Function} effectCallback
* @param {Array<*>} dependencyList
*
* @returns void
*
*/
export function useSignalsEffect(
effectCalback: () => Function | undefined,
dependencyList: import('react').DependencyList
): void;
/**
* useSharedState:
*
* used to share global state to any set of components deep in the tree hierarchy without re-rendering the whole sub-tree.
*
* @param {String=} slice
*
* @returns {Array}
*
*/
export function useSharedState<Q = {} | Record<string | number | symbol, unknown>>(
slice?: string & keyof Q
): [
Q | Q[keyof Q],
(updatePayload: { slice?: string & keyof Q, value: Q[keyof Q] } | ((previousState: Q) => { slice?: string & keyof Q, value: Q[keyof Q] })) => void
];
/**
* useSharedSignalsState:
*
* used to share global state to any set of components deep in the tree hierarchy without re-rendering the whole sub-tree (signals variant).
*
* @param {String=} slice
*
* @returns {Array}
*
*/
export function useSharedSignalsState<Q = {} | Record<string | number | symbol, unknown>>(
slice?: string & keyof Q
): [
import('@preact/signals-react').ReadonlySignal<Q | Q[keyof Q]>,
(updatePayload: { slice?: string & keyof Q, value: Q[keyof Q] } | ((previousState: Q) => { slice?: string & keyof Q, value: Q[keyof Q] })) => void
];
/**
* useUnsavedChangesLock:
*
* used to generate a custom `getUserConfirmation()` function for your router of choice: `<BrowserRouter/>` or `<HashRoute/>`.
*
* @param {UnsavedChangesLockOptions} options
*
* @returns `{ getUserConfirmation: Function, verifyConfirmation: Boolean, allowTransition: Function, blockTransition: Function }`
*
*/
export function useUnsavedChangesLock(
options: UnsavedChangesLockOptions
): Pick<import('react-router-dom').HashRouterProps, "getUserConfirmation"> & {
verifyConfirmation: boolean;
allowTransition: () => void;
blockTransition: () => void;
};
/**
* useSearchParamStateValueUpdate:
*
* used to update the value of a single URL search (query) param.
*
* @param {String=} paramName
*
* @returns `Function`
*/
export function useSearchParamStateValueUpdate(paramName?: string): (
paramValue?: string,
option?: { overwriteHistory?: boolean; }
) => void;
/**
* useSearchParamStateValue:
*
* used to manage the value of a single URL search (query) param.
*
* @param {String=} paramName
*
* @returns `[*, Function]`
*/
export function useSearchParamStateValue(paramName?: string): readonly [
{ [paramNameLiteral: string]: string },
(
paramValue?: string,
option?: { overwriteHistory?: boolean; }
) => void
];
/**
* useBrowserStorageEffectUpdates:
*
* used to sync data in browser storage with ReactJS component state changes.
*
* @param {String} storageKey
* @param {*} storageDefaultValue
* @param {String} storageType
* @param {"bypassEffect" | "enforceEffect"} storageMode
*
* @returns `[*, Function, Function]`
*/
export function useBrowserStorageEffectUpdates<T extends StorageTypes>(
storageKey: string,
storageDefaultValue?: T | null | undefined,
storageType?: BrowserStorageOptions["storageType"],
storageMode?: "bypassEffect" | "enforceEffect"
): readonly [
T | null | undefined,
(nextStorageValueUpdate: T | null, option?: { append?: boolean }) => void,
<T extends SerializableValues>(key: string, defaultPayload?: T | null | undefined) => T | null
];
/**
* useBrowserScreenActivityStatusMonitor:
*
* used to monitor the activity of a user interacting with a web page using callbacks.
*
* @param {Object.<*>} options
*
* @returns `{ updateScreenActivityTimeoutInMilliseconds: Function }`
*/
export function useBrowserScreenActivityStatusMonitor(options: {
onPageNotActive: Function,
onPageNowActive: Function,
onStopped: Function,
onPageHidden: Function,
onPageVisible: Function,
ACTIVITY_TIMEOUT_DURATION: number
}): {
updateScreenActivityTimeoutInMilliseconds: (newTimeoutDuration: number) => void
};
/**
* useTextSortedList:
*
* used to sort an array of items having the same data type.
*
* @param {Array.<*>} listToSort
* @param {String} defaultSortOrder
* @param {String|Number} propertyToSortOn
*
* @returns `[Array, Function]`
*/
export function useTextSortedList<U extends string | number | Record<string, string | number | object>>(
listToSort: U[],
defaultSortOrder: ("ASC" | "DESC") | {}&string,
propertyToSortOn: string | number | null
): readonly [
U[],
(
sortOrder: ("ASC" | "DESC") | {}&string,
propertyToSortOn: string | number | null
) => void
];
/**
* useSearchParamsState:
*
* used to ensure that `useSearchParams()` doesn't lose any URL location search state between route changes.
*
* @param {String} searchParamName
* @param {Boolean=} canReplace
* @param {String=} defaultValue
*
* @returns `[String, Function, Function]`
*
*/
export function useSearchParamsState<S extends string = string>(
searchParamName: string,
canReplace?: boolean,
defaultValue?: S
): [
S,
(newSearchParamValue: S | ((prevSearchParamValue: S) => S)) => void,
() => void
];
/**
* useControlKeyPress:
*
* used to respond to `keypress` event in the browser specifically for control keys (e.g. Enter, Tab).
*
* @param {Function} callback
* @param {Array.<String>} keys
*
* @returns void
*
*/
export function useControlKeysPress(
callback: Function,
keys: string[]
): void;
/**
* useBeforePageUnload:
*
* used to respond to `beforeunload` event in the browser with a message only when a condition is met.
*
* @param {Function} callback
* @param {{ when: Boolean, message: String, extraWatchProperty: String }} options
*
* @returns void
*
*/
export function useBeforePageUnload(
callback: (targetElement: Window | EventTarget | null) => void,
options: { when: boolean, message?: string, extraWatchProperty?: string }
): void;
/**
* useSignalsBeforePageUnload:
*
* used to respond to `beforeunload` event in the browser with a message only when a condition is met (signals variant).
*
* @param {Function} callback
* @param {{ when: Boolean, message: String }} options
*
* @returns void
*
*/
export function useSignalsBeforePageUnload(
callback: (targetElement: Window | HTMLBodyElement) => void,
options: { when: boolean, message: string }
): void;
/**
* useComponentMounted:
*
* used to determine if a React component is mounted or not.
*
* @returns Boolean
*
*/
export function useComponentMounted(): boolean;
/**
* usePageFocused:
*
* used to determine when the document (web page) recieves focus from user interaction.
*
* @returns Boolean
*
*/
export function usePageFocused(): boolean;
/**
* useSignalsPageFocused:
*
* used to determine when the document (web page) recieves focus from user interaction (signals variant).
*
* @returns Boolean
*
*/
export function useSignalsPageFocused(): import('@preact/signals-react').ReadonlySignal<boolean>;
/**
* useIsFirstRender:
*
* used to determine when a React component is only first rendered.
*
* @returns Boolean
*
*/
export function useIsFirstRender(): boolean;
/**
* usePreviousProps:
*
* used to get the previous props in the current render phase of a components' life
*
* @param {import('react').ComponentPropsWithRef<import('react').ElementType>>} props
*
* @returns *
*
*/
export function usePreviousProps<T extends import('react').ComponentPropsWithRef<import('react').ElementType>>(props: T): T;
/**
* useUIDataFetcher:
*
* used to fetch data using a fetcher function ...
*
* @param {{ url: ?String, customizePayload: Function }} config
*
* @returns `{connectToFetcher: Fucntion, fetcher: Function }`
*
*/
export function useUIDataFetcher(config: {
url: string | null,
customizePayload: Function
}): {
connectToFetcher: () => void,
fetcher: (fetcherOptions: {
src: string,
params: Record<string, string>,
method: "GET" | "POST" | "HEAD" | "DELETE" | "PATCH" | "PUT",
metadata: Record<string, unknown>
}) => Promise<unknown>,
};
/**
* useIsDOMElementVisibleOnScreen:
*
* used to determine if an intersection observer has targeted a DOM element at the intersection threshold.
*
* @param {IntersectionObserverInit=} options
*
* @returns `[Boolean, import('react').MutableRefObject<Element | HTMLElement | null>]`
*
*/
export function useIsDOMElementVisibleOnScreen(
options?: IntersectionObserverInit
): [boolean, import('react').MutableRefObject<Element | HTMLElement | null>];
/**
* useSignalsIsDOMElementVisibleOnScreen:
*
* used to determine if an intersection observer has targeted a DOM element at the intersection threshold (signals variant).
*
* @param {IntersectionObserverInit=} options
*
* @returns `[Boolean, import('react').MutableRefObject<Element | HTMLElement | null>]`
*
*/
export function useSignalsIsDOMElementVisibleOnScreen(
options?: IntersectionObserverInit
): [import('@preact/signals-react').ReadonlySignal<boolean>, import('react').MutableRefObject<Element | HTMLElement | null>];
/**
* useUICommands:
*
* used to trigger commands for UI related tasks like printing a web page, copying or pasting text.
*
* @param {{ print: PrintOptions }} options
*
* @returns `{ hub: { print: Function, copy: Function, paste: Function } }`
*
*/
export function useUICommands(
options: {
print: PrintOptions
}
): {
hub: {
print: (componentRef?: import('react').MutableRefObject<HTMLElement> | null) => Promise<void>,
copy: (text: string, selectedElement?: HTMLElement | Node) => Promise<boolean>,
paste: (selectedElement?: HTMLElement | Node) => Promise<string>
}
};
/**
* usePreviousRoutePathname:
*
* used to get the previous route pathname of a React SPA
*
* @returns String
*
*/
export function usePreviousRoutePathname(): string
/**
* useFetchBinder:
*
*
*
* @param
* @param
* @param
* @param
*
* @returns
*
*/
export function useFetchBinder(): void;
/**
* Provider for using the useBus() andd other related hook hook.
*
* @param {{ children?: import('react').ReactNode }} props
*
* @returns `JSX.Element`
*/
export function EventBusProvider({ children }: {
children?: import('react').ReactNode;
}): JSX.Element;
/**
* Provider for using the useSharedState() hook.
*
* @param {{ children?: import('react').ReactNode }} props
*
* @returns `JSX.Element`
*/
export function SharedStateProvider({ children, initialGlobalState, persistence }: {
children?: import('react').ReactNode;
initialGlobalState?: {} | Record<string, unknown>;
persistence?: { persistOn: "none" | "local" | "session", persistKey: string }
}): JSX.Element;
}