{"_id":"@damocodefish/use-state-machine","_rev":"3-44a36c7e7996f89b4114d0abff2e1b87","name":"@damocodefish/use-state-machine","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"@damocodefish/use-state-machine","version":"1.0.0","description":"React State Machine Hook","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/CodeFishStudio/use-state-machine.git"},"author":{"name":"Damo Salmon"},"license":"ISC","bugs":{"url":"https://github.com/CodeFishStudio/use-state-machine/issues"},"homepage":"https://github.com/CodeFishStudio/use-state-machine#readme","dependencies":{"react":"^17.0.2"},"directories":{"example":"examples"},"devDependencies":{},"gitHead":"427217a60ca38f9f67adb59342bc70f49f3079e1","_id":"@damocodefish/use-state-machine@1.0.0","_nodeVersion":"12.22.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-s6aCG8V2bpt3PLL1V9rUw52aWo0GVEXk15aOgDt+EZZRd+J8T8twpNXXYSY/0HOhaPzSbPIVBrH36BCTdudwuA==","shasum":"7831abaf8d87ca63526b32668423ddea81c3c88a","tarball":"https://registry.npmjs.org/@damocodefish/use-state-machine/-/use-state-machine-1.0.0.tgz","fileCount":4,"unpackedSize":8003,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAWCQtp+tno9vu2lVy6540eind8B2K6agkqtk5JX+qv1AiBaro/R57UiSXo7wI3tyOWCqk/Ti6ljaSBftCm9GeOOvg=="}]},"_npmUser":{"name":"damocodefish","email":"damo@codefishstudio.com"},"maintainers":[{"name":"damocodefish","email":"damo@codefishstudio.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-state-machine_1.0.0_1636433661548_0.8940276911460425"},"_hasShrinkwrap":false},"1.0.1":{"name":"@damocodefish/use-state-machine","version":"1.0.1","description":"React State Machine Hook","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/CodeFishStudio/use-state-machine.git"},"author":{"name":"Damo Salmon"},"license":"ISC","bugs":{"url":"https://github.com/CodeFishStudio/use-state-machine/issues"},"homepage":"https://github.com/CodeFishStudio/use-state-machine#readme","directories":{"example":"examples"},"devDependencies":{},"gitHead":"7845a2085827744f35539e0cfd494a183a03f26a","_id":"@damocodefish/use-state-machine@1.0.1","_nodeVersion":"12.22.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-b6Qt0Hsq5WSNXVuGQly6AwB+IVgld6PcfNncZRMhasWlYvP3MvRr2JRxxTVE3TcdISA/Tn9cLQDCpd99g+gd0g==","shasum":"36e80fc81ee24937aa07b0210bc9334cb744e41a","tarball":"https://registry.npmjs.org/@damocodefish/use-state-machine/-/use-state-machine-1.0.1.tgz","fileCount":7,"unpackedSize":8206,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGgK1Vr/IOwZ7mwCJ3bPgw2RLqDNQicY+N/GZ7hdkDQFAiB+/dLe7NDwLbuzF+9GrpqYjjyJIkqZ7ZksAKLTbCgJeA=="}]},"_npmUser":{"name":"damocodefish","email":"damo@codefishstudio.com"},"maintainers":[{"name":"damocodefish","email":"damo@codefishstudio.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-state-machine_1.0.1_1636434897862_0.5217613559305987"},"_hasShrinkwrap":false},"1.0.3":{"name":"@damocodefish/use-state-machine","version":"1.0.3","description":"React State Machine Hook","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/CodeFishStudio/use-state-machine.git"},"author":{"name":"Damo Salmon"},"license":"ISC","bugs":{"url":"https://github.com/CodeFishStudio/use-state-machine/issues"},"homepage":"https://github.com/CodeFishStudio/use-state-machine#readme","directories":{"example":"examples"},"peerDependencies":{"react":">=16.8.0"},"devDependencies":{"react":"^16.13.1"},"gitHead":"3817aae6e8ad072f14ddd011560974624c167b49","_id":"@damocodefish/use-state-machine@1.0.3","_nodeVersion":"12.22.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-+eOiX/BE2ri3p17YfmSh3OuZMOzi18OoAFaUDktoXNfVjehRC3atElo3YN14NbU2l24RXS53723WDmTNy+80tQ==","shasum":"8afd4d6aebf9d558a809a0b2de3c68755c4a71e4","tarball":"https://registry.npmjs.org/@damocodefish/use-state-machine/-/use-state-machine-1.0.3.tgz","fileCount":7,"unpackedSize":8443,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhlDHyCRA9TVsSAnZWagAAPi8QAI9+jVyGG9kZTQohs1Wu\n7gphnUSYWNaf9Ha5AIOYpO2ffSvIPKVb23Ugd3HUbPDn/qe9YYU3GxN0ZYov\nm4xtbogu4f4mQWCLn0UTOnubrYTGNwYHPM0A6fdBFtHFhydaxM8CvEemOsvf\nboE3B9tRedhVbU/KEY5uAu+7vFYHCOl+5WCbbUoQJLombqTCA6YjJIPU0ffJ\nzE7IgGB+HHOj2piZgEOBUicxeoxqM/bRRb4W2EpJz0AxGJHnbILcdMh0tUiX\nX1Y62F87cYb/+K/OC2Ccxl9Xs/oUQfWoJqXUCIQ7FKJEequsInruE+N4LEKk\n0s+iTlrSUUtD9/LGU5mD3De4D8D0X7b8gk+m1qoy68nYdoVNVYIBBhJGeDcl\nwtwymqp4kPVFwGM2KhTbBTnUgRtK5e4k8jfGw2ZA6xMga+WIr4N71dfL98lZ\n3sXhiHen9QmPG9eDl4mZMsm+1jNTD1rdDmVeA+R1LaNIxK3sQ27IeyuiKNW5\n3UwhHeT+3d7eb5xCM36TTyXXjC7nGvK3RTuEiSzthEJtCUDWEKyZlY0bO7yJ\np8Eiof+dxzS5Yi2fIQYg6A22BZd6LwQCwCk7anUi0ln4Ura5JiJ/yJ/ef+4r\nJVRDIpcFdJGKODFP5j9Oealcw04GzNWPoGrGXreCKqCYj/ZglQ7UGc1GfWJM\nQlRn\r\n=uhTw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE3wP4hhta6jSs/ZGwYexIppPiBJsM7Y0weUOq1YzNEiAiB4RMDzXVIwgI9lm87282U8psjUFHZJVDOAzAd9QVizHw=="}]},"_npmUser":{"name":"damocodefish","email":"damo@codefishstudio.com"},"maintainers":[{"name":"damocodefish","email":"damo@codefishstudio.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/use-state-machine_1.0.3_1637102066611_0.07851631322117081"},"_hasShrinkwrap":false}},"time":{"created":"2021-11-09T04:54:21.503Z","1.0.0":"2021-11-09T04:54:21.714Z","modified":"2022-04-05T02:39:10.748Z","1.0.1":"2021-11-09T05:14:58.074Z","1.0.3":"2021-11-16T22:34:26.748Z"},"maintainers":[{"name":"damocodefish","email":"damo@codefishstudio.com"}],"description":"React State Machine Hook","homepage":"https://github.com/CodeFishStudio/use-state-machine#readme","repository":{"type":"git","url":"git+https://github.com/CodeFishStudio/use-state-machine.git"},"author":{"name":"Damo Salmon"},"bugs":{"url":"https://github.com/CodeFishStudio/use-state-machine/issues"},"license":"ISC","readme":"# Installation\n`npm install @damocodefish/use-state-machine`\n\n---\n\n# Basic Usage\n```javascript\nimport useStateMachine, {useOnState} from '@damocodefish/use-state-machine';\n\nconst STATES = {\n    DEFAULT: 'DEFAULT',\n    CONNECTED: 'CONNECTED',\n    CONNECTING: 'CONNECTING',\n    DISCONNECTED: 'DISCONNECTED',\n    RECONNECTING: 'RECONNECTING',\n};\n\nconst StateConnecting = {\n    hasConnected: false,\n    isConnected: false,\n    isConnecting: true,\n};\n\nconst StateConnected = {\n    isConnected: true,\n};\n\nconst StateDisconnected = {\n    hasConnected: true,\n    isConnected: false,\n    isConnecting: false,\n};\n\nconst StateReconnecting = {\n    isConnecting: true,\n    isConnected: false,\n    hasConnected: true,\n};\n\nconst States = [\n    [StateConnecting, STATES.CONNECTING],\n    [StateConnected, STATES.CONNECTED],\n    [StateDisconnected, STATES.DISCONNECT],\n    [StateReconnecting, STATES.RECONNECTING],\n];\n\nconst App = () => {\n    const [isConnected, setIsConnected] = useState(false);\n    const [isConnecting, setIsConnecting] = useState(false);\n    const [hasConnected, setHasConnected] = useState(false);\n\n    const mappedData = useMemo(() => {\n        return {\n            isConnected,\n            isConnecting,\n            hasConnected,\n        };\n    }, [isConnected, isConnecting, hasConnected]);\n\n    const currentState = useStateMachine(STATES.DEFAULT, mappedData, States);\n\n\n    useOnState(() => {\n        // Try to connect\n        setTimeout(() => {\n            setIsConnecting(true);\n        }, 1000);\n    }, currentState, [STATES.DEFAULT]);\n\n    useOnState(() => {\n        // Trigger connected\n        setTimeout(() => {\n            setIsConnected(true);\n            setHasConnected(true);\n        }, 1000);\n    }, currentState, [STATES.CONNECTING]);\n\n    useOnState(() => {\n        // Try to disconnect\n        setTimeout(() => {\n            setIsConnected(false);\n        }, 1000);\n    }, currentState, [STATES.CONNECTED]);\n\n    useOnState(() => {\n        // Try to reconnect\n        setTimeout(() => {\n            setIsConnecting(true);\n        }, 1000);\n    }, currentState, [STATES.DISCONNECTED]);\n\n    useOnState(() => {\n        setTimeout(() => {\n            setIsConnected(true);\n            setHasConnected(false);\n        },1000);\n    }, currentState, [STATE.RECONNECTING]);\n```\n\n---\n\n# Helper Methods\n\nState can either be required values or you can provide a function for comparing.\n\nThis library provides some default compare functions\n\n```javascript\nimport {StateType} from '@damocodefish/use-state-machine';\n\nconst customCompare = (array) => (val) => {\n    return array.reduce((acc, cur) => {\n        if (acc) return acc;\n        if (val.includes(cur)) return true;\n        return false;\n    }, false);\n};\n\nconst MyState = {\n    firstName: StateTypes.NotNull,\n    lastName: StateTypes.NotEqual('SwearWord'),\n    middleName: StateTypes.NotAny([\"BadWord1\", \"BadWord2\", \"BadWord3\"]),\n    age: StateTypes.GreaterThan(17),\n    money: StateTypes.LessThan(5000),\n    status: StateTypes.Any(['Connected', 'Loaded']),\n    someArray: customCompare(['A', 'B', 'C']), \n};\n```\n","readmeFilename":"README.md"}