@assistant-ui/react
Version:
TypeScript/React library for AI Chat
41 lines (34 loc) • 736 B
text/typescript
import {
tapMemo,
tapEffect,
ResourceElement,
resource,
createResource,
Unsubscribe,
} from "@assistant-ui/tap";
export interface Store<TState> {
/**
* Get the current state of the store.
*/
getState(): TState;
/**
* Subscribe to the store.
*/
subscribe(listener: () => void): Unsubscribe;
/**
* Synchronously flush all the updates to the store.
*/
flushSync(): void;
}
export const asStore = resource(
<TState, TProps>(element: ResourceElement<TState, TProps>): Store<TState> => {
const resource = tapMemo(
() => createResource(element, true),
[element.type],
);
tapEffect(() => {
resource.updateInput(element.props);
});
return resource;
},
);