123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- "use strict";
- var __read = (this && this.__read) || function (o, n) {
- var m = typeof Symbol === "function" && o[Symbol.iterator];
- if (!m) return o;
- var i = m.call(o), r, ar = [], e;
- try {
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
- }
- catch (error) { e = { error: error }; }
- finally {
- try {
- if (r && !r.done && (m = i["return"])) m.call(i);
- }
- finally { if (e) throw e.error; }
- }
- return ar;
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.useService = exports.useMachine = void 0;
- var fsm_1 = require("@xstate/fsm");
- var react_1 = require("react");
- var use_isomorphic_layout_effect_1 = require("use-isomorphic-layout-effect");
- var with_selector_1 = require("use-sync-external-store/shim/with-selector");
- var useConstant_1 = require("./useConstant");
- function identity(a) {
- return a;
- }
- var getServiceState = function (service) {
- var currentValue;
- service
- .subscribe(function (state) {
- currentValue = state;
- })
- .unsubscribe();
- return currentValue;
- };
- function useMachine(stateMachine, options) {
- var persistedStateRef = (0, react_1.useRef)();
- if (process.env.NODE_ENV !== 'production') {
- var _a = __read((0, react_1.useState)(stateMachine), 1), initialMachine = _a[0];
- if (stateMachine !== initialMachine) {
- console.warn('Machine given to `useMachine` has changed between renders. This is not supported and might lead to unexpected results.\n' +
- 'Please make sure that you pass the same Machine as argument each time.');
- }
- }
- var _b = __read((0, useConstant_1.default)(function () {
- var queue = [];
- var service = (0, fsm_1.interpret)((0, fsm_1.createMachine)(stateMachine.config, options ? options : stateMachine._options));
- var send = service.send;
- service.send = function (event) {
- if (service.status === fsm_1.InterpreterStatus.NotStarted) {
- queue.push(event);
- return;
- }
- send(event);
- persistedStateRef.current = service.state;
- };
- return [service, queue];
- }), 2), service = _b[0], queue = _b[1];
- (0, use_isomorphic_layout_effect_1.default)(function () {
- if (options) {
- service._machine._options = options;
- }
- });
- var useServiceResult = useService(service);
- (0, react_1.useEffect)(function () {
- service.start(persistedStateRef.current);
- queue.forEach(service.send);
- persistedStateRef.current = service.state;
- return function () {
- service.stop();
- };
- }, []);
- return useServiceResult;
- }
- exports.useMachine = useMachine;
- var isEqual = function (_prevState, nextState) { return nextState.changed === false; };
- function useService(service) {
- var getSnapshot = (0, react_1.useCallback)(function () { return getServiceState(service); }, [service]);
- var subscribe = (0, react_1.useCallback)(function (handleStoreChange) {
- var unsubscribe = service.subscribe(handleStoreChange).unsubscribe;
- return unsubscribe;
- }, [service]);
- var storeSnapshot = (0, with_selector_1.useSyncExternalStoreWithSelector)(subscribe, getSnapshot, getSnapshot, identity, isEqual);
- return [storeSnapshot, service.send, service];
- }
- exports.useService = useService;
|