1import { useCallback, useState } from 'react';
12 CONNECTING: 'CONNECTING',
14 CONNECTED: 'CONNECTED',
17export function useHostedShip(client, patp) {
18 const [state, _setState] = useState(STATE.UNKNOWN);
19 const setState = useCallback(
27 const [sysEvents, setSysEvents] = useState([]);
28 const [newEvents, setNewEvents] = useState([]);
29 const [runEvents, setRunEvents] = useState([]);
31 const [error, _setError] = useState();
32 const setError = useCallback(
36 setState(STATE.UNKNOWN);
43 const unknown = state === STATE.UNKNOWN;
44 const missing = state === STATE.MISSING;
45 const running = state === STATE.RUNNING;
46 const pending = state === STATE.PENDING;
47 const querying = state === STATE.QUERYING;
48 const booting = state === STATE.BOOTING;
49 const connecting = state === STATE.CONNECTING;
50 const connected = state === STATE.CONNECTED;
52 const resetEvents = useCallback(() => {
58 const getStatus = useCallback(async () => {
64 setState(STATE.QUERYING);
66 const response = await client.getShipsByPatp(patp);
68 if (response.status === 404) {
69 setState(STATE.MISSING);
70 } else if (!response.ok) {
71 setError(response.statusText);
73 const ship = await response.json();
75 if (ship.status === 'Pending') {
76 setState(STATE.PENDING);
77 } else if (ship.status === 'Running') {
78 setState(STATE.RUNNING);
86 }, [client, patp, resetEvents, setError, setState]);
88 const getEvents = useCallback(() => {
94 setState(STATE.CONNECTING);
96 const url = client.getShipsByPatpUrl(patp) + '/events';
97 const source = new EventSource(url);
99 source.onopen = () => setState(STATE.CONNECTED);
100 // source.onerror = () => setState(STATE.UNKNOWN);
101 // source.onmessage = console.log;
103 source.addEventListener('sys', event => {
104 setSysEvents(previous => [...previous, JSON.parse(event.data)]);
107 source.addEventListener('new', event => {
108 if (event.data !== '') {
109 setNewEvents(previous => [...previous, event.data]);
113 source.addEventListener('run', event => {
114 if (event.data !== '') {
115 setRunEvents(previous => [...previous, event.data]);
121 }, [setError, resetEvents, client, patp, setState]);
123 const create = useCallback(async () => {
127 setState(STATE.BOOTING);
129 const response = await client.postShips({
135 setError(response.statusText);
142 }, [setError, setState, client, patp, getEvents]);
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list