@xyo-network/react-chain-network 1.12.0 → 1.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.mjs +165 -189
- package/dist/browser/index.mjs.map +1 -1
- package/package.json +14 -14
package/dist/browser/index.mjs
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
1
4
|
// src/components/menu/Avatar.tsx
|
|
2
5
|
import { Avatar } from "@mui/material";
|
|
6
|
+
import React3 from "react";
|
|
3
7
|
|
|
4
8
|
// src/context/network/context.ts
|
|
5
9
|
import { createContextEx } from "@xylabs/react-shared";
|
|
@@ -9,18 +13,8 @@ var ChainNetworkContext = createContextEx();
|
|
|
9
13
|
import { ErrorRender } from "@xylabs/react-error";
|
|
10
14
|
import { usePromise } from "@xylabs/react-promise";
|
|
11
15
|
import { SequenceNetwork } from "@xyo-network/chain-network-model";
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
useMemo,
|
|
15
|
-
useState
|
|
16
|
-
} from "react";
|
|
17
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
18
|
-
var ChainNetworkProvider = ({
|
|
19
|
-
children,
|
|
20
|
-
getActiveNetwork,
|
|
21
|
-
networks,
|
|
22
|
-
setActiveNetwork: setActiveNetworkExternal
|
|
23
|
-
}) => {
|
|
16
|
+
import React, { useCallback, useMemo, useState } from "react";
|
|
17
|
+
var ChainNetworkProvider = /* @__PURE__ */ __name(({ children, getActiveNetwork, networks, setActiveNetwork: setActiveNetworkExternal }) => {
|
|
24
18
|
const [activeNetwork, setActiveNetwork] = useState();
|
|
25
19
|
const [error, setError] = useState();
|
|
26
20
|
const [resolvedActiveNetwork, activeNetworkError] = usePromise(async () => {
|
|
@@ -33,12 +27,16 @@ var ChainNetworkProvider = ({
|
|
|
33
27
|
await setActiveNetworkExternal?.(defaultNetwork.id);
|
|
34
28
|
return defaultNetwork;
|
|
35
29
|
}
|
|
36
|
-
}, [
|
|
30
|
+
}, [
|
|
31
|
+
networks
|
|
32
|
+
]);
|
|
37
33
|
useMemo(() => {
|
|
38
34
|
if (resolvedActiveNetwork) {
|
|
39
35
|
setActiveNetwork(resolvedActiveNetwork);
|
|
40
36
|
}
|
|
41
|
-
}, [
|
|
37
|
+
}, [
|
|
38
|
+
resolvedActiveNetwork
|
|
39
|
+
]);
|
|
42
40
|
const updateActiveNetwork = useCallback((networkId) => {
|
|
43
41
|
setError(void 0);
|
|
44
42
|
const network = networks?.find((network2) => network2.id === networkId);
|
|
@@ -48,176 +46,136 @@ var ChainNetworkProvider = ({
|
|
|
48
46
|
}
|
|
49
47
|
setActiveNetwork(network);
|
|
50
48
|
void setActiveNetworkExternal?.(networkId);
|
|
51
|
-
}, [
|
|
49
|
+
}, [
|
|
50
|
+
networks
|
|
51
|
+
]);
|
|
52
52
|
const value = useMemo(() => ({
|
|
53
53
|
activeNetwork,
|
|
54
54
|
networks,
|
|
55
55
|
provided: true,
|
|
56
56
|
updateActiveNetwork,
|
|
57
57
|
chainNetworkError: error ?? activeNetworkError
|
|
58
|
-
}), [
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
]
|
|
63
|
-
|
|
58
|
+
}), [
|
|
59
|
+
activeNetwork,
|
|
60
|
+
networks,
|
|
61
|
+
updateActiveNetwork
|
|
62
|
+
]);
|
|
63
|
+
return /* @__PURE__ */ React.createElement(ChainNetworkContext, {
|
|
64
|
+
value
|
|
65
|
+
}, /* @__PURE__ */ React.createElement(ErrorRender, {
|
|
66
|
+
error: error ?? activeNetworkError,
|
|
67
|
+
scope: "ChainNetworkProvider"
|
|
68
|
+
}), children);
|
|
69
|
+
}, "ChainNetworkProvider");
|
|
64
70
|
|
|
65
71
|
// src/context/network/use.ts
|
|
66
72
|
import { useContextEx } from "@xylabs/react-shared";
|
|
67
|
-
var useChainNetwork = (required = true) => useContextEx(ChainNetworkContext, "ChainNetwork", required);
|
|
73
|
+
var useChainNetwork = /* @__PURE__ */ __name((required = true) => useContextEx(ChainNetworkContext, "ChainNetwork", required), "useChainNetwork");
|
|
68
74
|
|
|
69
75
|
// src/components/menu/Icon.tsx
|
|
70
|
-
import
|
|
71
|
-
var NetworkIcon = ({
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
...props
|
|
87
|
-
}
|
|
88
|
-
);
|
|
89
|
-
};
|
|
76
|
+
import React2 from "react";
|
|
77
|
+
var NetworkIcon = /* @__PURE__ */ __name(({ icon, style, ...props }) => {
|
|
78
|
+
return /* @__PURE__ */ React2.createElement("span", {
|
|
79
|
+
// eslint-disable-next-line @eslint-react/dom/no-dangerously-set-innerhtml
|
|
80
|
+
dangerouslySetInnerHTML: {
|
|
81
|
+
__html: icon ?? ""
|
|
82
|
+
},
|
|
83
|
+
style: {
|
|
84
|
+
display: "inline-flex",
|
|
85
|
+
width: 24,
|
|
86
|
+
height: 24,
|
|
87
|
+
...style
|
|
88
|
+
},
|
|
89
|
+
...props
|
|
90
|
+
});
|
|
91
|
+
}, "NetworkIcon");
|
|
90
92
|
|
|
91
93
|
// src/components/menu/Avatar.tsx
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
{
|
|
103
|
-
|
|
104
|
-
alt: name,
|
|
105
|
-
...props,
|
|
106
|
-
children: /* @__PURE__ */ jsx3(
|
|
107
|
-
NetworkIcon,
|
|
108
|
-
{
|
|
109
|
-
icon,
|
|
110
|
-
style: { ...iconStyles }
|
|
111
|
-
}
|
|
112
|
-
)
|
|
94
|
+
var NetworkAvatar = /* @__PURE__ */ __name(({ icon, iconStyles, name, sx, ...props }) => {
|
|
95
|
+
return /* @__PURE__ */ React3.createElement(Avatar, {
|
|
96
|
+
sx: {
|
|
97
|
+
backgroundColor: "white",
|
|
98
|
+
...sx
|
|
99
|
+
},
|
|
100
|
+
alt: name,
|
|
101
|
+
...props
|
|
102
|
+
}, /* @__PURE__ */ React3.createElement(NetworkIcon, {
|
|
103
|
+
icon,
|
|
104
|
+
style: {
|
|
105
|
+
...iconStyles
|
|
113
106
|
}
|
|
114
|
-
);
|
|
115
|
-
};
|
|
116
|
-
var ActiveNetworkAvatar = (props) => {
|
|
107
|
+
}));
|
|
108
|
+
}, "NetworkAvatar");
|
|
109
|
+
var ActiveNetworkAvatar = /* @__PURE__ */ __name((props) => {
|
|
117
110
|
const { activeNetwork } = useChainNetwork();
|
|
118
|
-
return /* @__PURE__ */
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
);
|
|
126
|
-
};
|
|
111
|
+
return /* @__PURE__ */ React3.createElement(NetworkAvatar, {
|
|
112
|
+
icon: activeNetwork?.icon,
|
|
113
|
+
name: activeNetwork?.name,
|
|
114
|
+
...props
|
|
115
|
+
});
|
|
116
|
+
}, "ActiveNetworkAvatar");
|
|
127
117
|
|
|
128
118
|
// src/components/menu/MenuItem.tsx
|
|
129
119
|
import { ListItemText } from "@mui/material";
|
|
130
120
|
import { ActiveMenuItem } from "@xyo-network/react-chain-shared";
|
|
131
|
-
import
|
|
132
|
-
var NetworkMenuItem = ({
|
|
133
|
-
|
|
134
|
-
network,
|
|
135
|
-
onClick,
|
|
136
|
-
updateActiveNetwork,
|
|
137
|
-
...props
|
|
138
|
-
}) => {
|
|
139
|
-
const handleClick = (event) => {
|
|
121
|
+
import React4 from "react";
|
|
122
|
+
var NetworkMenuItem = /* @__PURE__ */ __name(({ active, network, onClick, updateActiveNetwork, ...props }) => {
|
|
123
|
+
const handleClick = /* @__PURE__ */ __name((event) => {
|
|
140
124
|
if (network === void 0) throw new Error("Network is undefined");
|
|
141
125
|
updateActiveNetwork?.(network.id);
|
|
142
126
|
onClick?.(event);
|
|
143
|
-
};
|
|
144
|
-
return /* @__PURE__ */
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
127
|
+
}, "handleClick");
|
|
128
|
+
return /* @__PURE__ */ React4.createElement(ActiveMenuItem, {
|
|
129
|
+
title: network?.name,
|
|
130
|
+
disableRipple: true,
|
|
131
|
+
onClick: handleClick,
|
|
132
|
+
active,
|
|
133
|
+
sx: {
|
|
134
|
+
py: 1
|
|
135
|
+
},
|
|
136
|
+
...props
|
|
137
|
+
}, /* @__PURE__ */ React4.createElement(NetworkAvatar, {
|
|
138
|
+
icon: network?.icon,
|
|
139
|
+
name: network?.name,
|
|
140
|
+
sx: {
|
|
141
|
+
width: 30,
|
|
142
|
+
height: 30
|
|
157
143
|
}
|
|
158
|
-
);
|
|
159
|
-
};
|
|
144
|
+
}), /* @__PURE__ */ React4.createElement(ListItemText, null, network?.name));
|
|
145
|
+
}, "NetworkMenuItem");
|
|
160
146
|
|
|
161
147
|
// src/components/status/Alert.tsx
|
|
162
|
-
import {
|
|
163
|
-
|
|
164
|
-
AlertTitle,
|
|
165
|
-
Button as Button2
|
|
166
|
-
} from "@mui/material";
|
|
167
|
-
import { useMemo as useMemo2, useState as useState2 } from "react";
|
|
148
|
+
import { Alert, AlertTitle, Button as Button2 } from "@mui/material";
|
|
149
|
+
import React6, { useMemo as useMemo2, useState as useState2 } from "react";
|
|
168
150
|
|
|
169
151
|
// src/components/status/Dialog.tsx
|
|
170
|
-
import {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
flexDirection: "column",
|
|
193
|
-
alignItems: "start",
|
|
194
|
-
pl: 0
|
|
195
|
-
},
|
|
196
|
-
children: [
|
|
197
|
-
/* @__PURE__ */ jsx5(Typography, { children: update }),
|
|
198
|
-
/* @__PURE__ */ jsxs3(Typography, { gutterBottom: true, sx: { opacity: 0.75, fontSize: ".8333rem" }, children: [
|
|
199
|
-
"Start:",
|
|
200
|
-
" ",
|
|
201
|
-
new Date(start).toLocaleString(),
|
|
202
|
-
" ",
|
|
203
|
-
/* @__PURE__ */ jsx5("br", {}),
|
|
204
|
-
"End:",
|
|
205
|
-
" ",
|
|
206
|
-
new Date(end).toLocaleString()
|
|
207
|
-
] })
|
|
208
|
-
]
|
|
209
|
-
},
|
|
210
|
-
start + update
|
|
211
|
-
)) }) }),
|
|
212
|
-
/* @__PURE__ */ jsx5(DialogActions, { children: /* @__PURE__ */ jsx5(Button, { onClick: (e) => props.onClose?.(e, "backdropClick"), color: "primary", variant: "outlined", children: "Close" }) })
|
|
213
|
-
] });
|
|
214
|
-
};
|
|
152
|
+
import { Button, Dialog, DialogActions, DialogContent, DialogTitle, List, ListItem, Typography } from "@mui/material";
|
|
153
|
+
import React5 from "react";
|
|
154
|
+
var NetworkStatusDialog = /* @__PURE__ */ __name(({ updates, ...props }) => {
|
|
155
|
+
return /* @__PURE__ */ React5.createElement(Dialog, props, /* @__PURE__ */ React5.createElement(DialogTitle, null, "Recent Status Updates"), /* @__PURE__ */ React5.createElement(DialogContent, null, /* @__PURE__ */ React5.createElement(List, null, updates.map(({ start, end, update }) => /* @__PURE__ */ React5.createElement(ListItem, {
|
|
156
|
+
key: start + update,
|
|
157
|
+
sx: {
|
|
158
|
+
flexDirection: "column",
|
|
159
|
+
alignItems: "start",
|
|
160
|
+
pl: 0
|
|
161
|
+
}
|
|
162
|
+
}, /* @__PURE__ */ React5.createElement(Typography, null, update), /* @__PURE__ */ React5.createElement(Typography, {
|
|
163
|
+
gutterBottom: true,
|
|
164
|
+
sx: {
|
|
165
|
+
opacity: 0.75,
|
|
166
|
+
fontSize: ".8333rem"
|
|
167
|
+
}
|
|
168
|
+
}, "Start:", " ", new Date(start).toLocaleString(), " ", /* @__PURE__ */ React5.createElement("br", null), "End:", " ", new Date(end).toLocaleString()))))), /* @__PURE__ */ React5.createElement(DialogActions, null, /* @__PURE__ */ React5.createElement(Button, {
|
|
169
|
+
onClick: /* @__PURE__ */ __name((e) => props.onClose?.(e, "backdropClick"), "onClick"),
|
|
170
|
+
color: "primary",
|
|
171
|
+
variant: "outlined"
|
|
172
|
+
}, "Close")));
|
|
173
|
+
}, "NetworkStatusDialog");
|
|
215
174
|
|
|
216
175
|
// src/components/status/Alert.tsx
|
|
217
|
-
|
|
218
|
-
var NetworkStatusAlert = ({ status, ...props }) => {
|
|
176
|
+
var NetworkStatusAlert = /* @__PURE__ */ __name(({ status, ...props }) => {
|
|
219
177
|
const [open, setOpen] = useState2(false);
|
|
220
|
-
const handleClose = () => setOpen(false);
|
|
178
|
+
const handleClose = /* @__PURE__ */ __name(() => setOpen(false), "handleClose");
|
|
221
179
|
const severity = useMemo2(() => {
|
|
222
180
|
if (!status) return;
|
|
223
181
|
switch (status.state) {
|
|
@@ -234,74 +192,85 @@ var NetworkStatusAlert = ({ status, ...props }) => {
|
|
|
234
192
|
return "error";
|
|
235
193
|
}
|
|
236
194
|
}
|
|
237
|
-
}, [
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
195
|
+
}, [
|
|
196
|
+
status
|
|
197
|
+
]);
|
|
198
|
+
return /* @__PURE__ */ React6.createElement(Alert, {
|
|
199
|
+
severity,
|
|
200
|
+
...props
|
|
201
|
+
}, /* @__PURE__ */ React6.createElement(AlertTitle, null, status?.description), status?.updates && status.updates.length > 0 && /* @__PURE__ */ React6.createElement(React6.Fragment, null, /* @__PURE__ */ React6.createElement(Button2, {
|
|
202
|
+
color: severity,
|
|
203
|
+
variant: "outlined",
|
|
204
|
+
size: "small",
|
|
205
|
+
onClick: /* @__PURE__ */ __name(() => setOpen(true), "onClick")
|
|
206
|
+
}, "Updates"), /* @__PURE__ */ React6.createElement(NetworkStatusDialog, {
|
|
207
|
+
open,
|
|
208
|
+
onClose: handleClose,
|
|
209
|
+
updates: status.updates
|
|
210
|
+
})));
|
|
211
|
+
}, "NetworkStatusAlert");
|
|
212
|
+
|
|
213
|
+
// src/components/status/NetworkStatus.tsx
|
|
214
|
+
import React7 from "react";
|
|
246
215
|
|
|
247
216
|
// src/hooks/provider/useActiveNetworkCurrentBlock.ts
|
|
248
217
|
import { useCurrentBlock, useViewerFromWallet as useViewerFromWallet2 } from "@xyo-network/react-chain-provider";
|
|
249
218
|
|
|
250
219
|
// src/hooks/provider/useViewerInPage.ts
|
|
251
220
|
import { useHttpRpcViewer, useViewerFromWallet } from "@xyo-network/react-chain-provider";
|
|
252
|
-
var useViewerInPage = () => {
|
|
221
|
+
var useViewerInPage = /* @__PURE__ */ __name(() => {
|
|
253
222
|
const { activeNetwork } = useChainNetwork();
|
|
254
223
|
const httpRpcViewer = useHttpRpcViewer(activeNetwork?.url);
|
|
255
224
|
const walletRpcViewer = useViewerFromWallet(activeNetwork?.id);
|
|
256
225
|
return walletRpcViewer ?? httpRpcViewer;
|
|
257
|
-
};
|
|
226
|
+
}, "useViewerInPage");
|
|
258
227
|
|
|
259
228
|
// src/hooks/provider/useActiveNetworkCurrentBlock.ts
|
|
260
|
-
var useActiveNetworkCurrentBlock = (refresh = 1, viewer) => {
|
|
229
|
+
var useActiveNetworkCurrentBlock = /* @__PURE__ */ __name((refresh = 1, viewer) => {
|
|
261
230
|
const currentBlock = useCurrentBlock(refresh, viewer);
|
|
262
231
|
return currentBlock;
|
|
263
|
-
};
|
|
264
|
-
var useActiveNetworkCurrentBlockInPage = (refresh = 1) => {
|
|
232
|
+
}, "useActiveNetworkCurrentBlock");
|
|
233
|
+
var useActiveNetworkCurrentBlockInPage = /* @__PURE__ */ __name((refresh = 1) => {
|
|
265
234
|
const viewer = useViewerInPage();
|
|
266
235
|
const currentBlock = useCurrentBlock(refresh, viewer);
|
|
267
236
|
return currentBlock;
|
|
268
|
-
};
|
|
269
|
-
var useActiveNetworkCurrentBlockInWallet = (refresh = 1) => {
|
|
237
|
+
}, "useActiveNetworkCurrentBlockInPage");
|
|
238
|
+
var useActiveNetworkCurrentBlockInWallet = /* @__PURE__ */ __name((refresh = 1) => {
|
|
270
239
|
const viewer = useViewerFromWallet2();
|
|
271
240
|
const currentBlock = useCurrentBlock(refresh, viewer);
|
|
272
241
|
return currentBlock;
|
|
273
|
-
};
|
|
242
|
+
}, "useActiveNetworkCurrentBlockInWallet");
|
|
274
243
|
|
|
275
244
|
// src/hooks/provider/useActiveNetworkNetwork.ts
|
|
276
245
|
import { useNetwork } from "@xyo-network/react-chain-provider";
|
|
277
|
-
var useActiveNetworkNetwork = () => {
|
|
246
|
+
var useActiveNetworkNetwork = /* @__PURE__ */ __name(() => {
|
|
278
247
|
const { activeNetwork } = useChainNetwork();
|
|
279
248
|
const network = useNetwork(activeNetwork?.id);
|
|
280
249
|
return network;
|
|
281
|
-
};
|
|
250
|
+
}, "useActiveNetworkNetwork");
|
|
282
251
|
|
|
283
252
|
// src/hooks/provider/useActiveNetworkRunner.ts
|
|
284
253
|
import { useHttpRpcRunner } from "@xyo-network/react-chain-provider";
|
|
285
|
-
var useActiveNetworkRunner = () => {
|
|
254
|
+
var useActiveNetworkRunner = /* @__PURE__ */ __name(() => {
|
|
286
255
|
const { activeNetwork } = useChainNetwork();
|
|
287
256
|
const runner = useHttpRpcRunner(activeNetwork?.url);
|
|
288
257
|
return runner;
|
|
289
|
-
};
|
|
258
|
+
}, "useActiveNetworkRunner");
|
|
290
259
|
|
|
291
260
|
// src/hooks/provider/useViewerInWallet.ts
|
|
292
261
|
import { useHttpRpcViewer as useHttpRpcViewer2 } from "@xyo-network/react-chain-provider";
|
|
293
|
-
var useViewerInWallet = () => {
|
|
262
|
+
var useViewerInWallet = /* @__PURE__ */ __name(() => {
|
|
294
263
|
const { activeNetwork } = useChainNetwork();
|
|
295
264
|
const walletViewer = useHttpRpcViewer2(activeNetwork?.url);
|
|
296
265
|
return walletViewer;
|
|
297
|
-
};
|
|
266
|
+
}, "useViewerInWallet");
|
|
298
267
|
|
|
299
268
|
// src/hooks/status/usePollNetworkStatus.ts
|
|
300
269
|
import { delay } from "@xylabs/delay";
|
|
301
270
|
import { isUndefined } from "@xylabs/typeof";
|
|
302
271
|
import { useEffect, useState as useState3 } from "react";
|
|
303
272
|
var STATUS_CHECK_INTERVAL = 1e4;
|
|
304
|
-
var usePollNetworkStatus = () => {
|
|
273
|
+
var usePollNetworkStatus = /* @__PURE__ */ __name(() => {
|
|
305
274
|
const network = useActiveNetworkNetwork();
|
|
306
275
|
const [networkStatus, setNetworkStatus] = useState3();
|
|
307
276
|
const [networkStatusError, setNetworkStatusError] = useState3();
|
|
@@ -325,21 +294,28 @@ var usePollNetworkStatus = () => {
|
|
|
325
294
|
return () => {
|
|
326
295
|
checkNetwork = false;
|
|
327
296
|
};
|
|
328
|
-
}, [
|
|
329
|
-
|
|
330
|
-
|
|
297
|
+
}, [
|
|
298
|
+
network
|
|
299
|
+
]);
|
|
300
|
+
return [
|
|
301
|
+
networkStatus,
|
|
302
|
+
networkStatusError
|
|
303
|
+
];
|
|
304
|
+
}, "usePollNetworkStatus");
|
|
331
305
|
|
|
332
306
|
// src/components/status/NetworkStatus.tsx
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
307
|
+
var validNetworkStates = /* @__PURE__ */ new Set([
|
|
308
|
+
"online",
|
|
309
|
+
"unknown"
|
|
310
|
+
]);
|
|
311
|
+
var NetworkStatus = /* @__PURE__ */ __name(({ children, ...props }) => {
|
|
336
312
|
const [networkStatus] = usePollNetworkStatus();
|
|
337
313
|
const showStatus = networkStatus && !validNetworkStates.has(networkStatus.state);
|
|
338
|
-
return /* @__PURE__ */
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
};
|
|
314
|
+
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, showStatus && /* @__PURE__ */ React7.createElement(NetworkStatusAlert, {
|
|
315
|
+
status: networkStatus,
|
|
316
|
+
...props
|
|
317
|
+
}), children);
|
|
318
|
+
}, "NetworkStatus");
|
|
343
319
|
export {
|
|
344
320
|
ActiveNetworkAvatar,
|
|
345
321
|
ChainNetworkContext,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/menu/Avatar.tsx","../../src/context/network/context.ts","../../src/context/network/Provider.tsx","../../src/context/network/use.ts","../../src/components/menu/Icon.tsx","../../src/components/menu/MenuItem.tsx","../../src/components/status/Alert.tsx","../../src/components/status/Dialog.tsx","../../src/hooks/provider/useActiveNetworkCurrentBlock.ts","../../src/hooks/provider/useViewerInPage.ts","../../src/hooks/provider/useActiveNetworkNetwork.ts","../../src/hooks/provider/useActiveNetworkRunner.ts","../../src/hooks/provider/useViewerInWallet.ts","../../src/hooks/status/usePollNetworkStatus.ts","../../src/components/status/NetworkStatus.tsx"],"sourcesContent":["import type { AvatarProps } from '@mui/material'\nimport { Avatar } from '@mui/material'\nimport type { CSSProperties } from 'react'\nimport React from 'react'\n\nimport { useChainNetwork } from '../../context/index.ts'\nimport { NetworkIcon } from './Icon.tsx'\n\nexport interface NetworkAvatarProps extends AvatarProps {\n icon?: string\n iconStyles?: CSSProperties\n name?: string\n}\n\nexport const NetworkAvatar: React.FC<NetworkAvatarProps> = ({\n icon, iconStyles, name, sx, ...props\n}) => {\n return (\n <Avatar\n sx={{ backgroundColor: 'white', ...sx }}\n alt={name}\n {...props}\n >\n <NetworkIcon\n icon={icon}\n style={{ ...iconStyles }}\n />\n </Avatar>\n )\n}\n\nexport const ActiveNetworkAvatar: React.FC<AvatarProps> = (props) => {\n const { activeNetwork } = useChainNetwork()\n\n return (\n <NetworkAvatar\n icon={activeNetwork?.icon}\n name={activeNetwork?.name}\n {...props}\n />\n )\n}\n","import { createContextEx } from '@xylabs/react-shared'\n\nimport type { ChainNetworkState } from './state.ts'\n\nexport const ChainNetworkContext = createContextEx<ChainNetworkState>()\n","import { ErrorRender } from '@xylabs/react-error'\nimport { usePromise } from '@xylabs/react-promise'\nimport type { NetworkBootstrap } from '@xyo-network/chain-network-model'\nimport { SequenceNetwork } from '@xyo-network/chain-network-model'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useCallback, useMemo, useState,\n} from 'react'\n\nimport { ChainNetworkContext } from './context.ts'\nimport type { ChainNetworkState } from './state.ts'\n\nexport interface ChainNetworkProviderProps extends PropsWithChildren {\n getActiveNetwork?: () => Promise<NetworkBootstrap | undefined>\n networks?: NetworkBootstrap[]\n setActiveNetwork?: (networkId: NetworkBootstrap['id']) => Promise<NetworkBootstrap>\n}\n\nexport const ChainNetworkProvider: React.FC<ChainNetworkProviderProps> = ({\n children, getActiveNetwork, networks, setActiveNetwork: setActiveNetworkExternal,\n}) => {\n const [activeNetwork, setActiveNetwork] = useState<NetworkBootstrap>()\n const [error, setError] = useState<Error>()\n\n // Set the active network upon initialization\n const [resolvedActiveNetwork, activeNetworkError] = usePromise(async () => {\n // ensure networks are loaded\n if (!networks) return\n // get last saved active network\n const activeNetwork = await getActiveNetwork?.()\n // ensure the active network saved is found in the list of networks\n if (activeNetwork && networks?.find(network => network.id === activeNetwork.id)) {\n // Set the active network if it exists\n return activeNetwork\n } else {\n // Set the default network if no active network exists\n const defaultNetwork = networks.find(network => network.id === SequenceNetwork.id) ?? networks[1]\n await setActiveNetworkExternal?.(defaultNetwork.id)\n\n // Set the active network in the context\n return defaultNetwork\n }\n }, [networks])\n\n useMemo(() => {\n if (resolvedActiveNetwork) {\n setActiveNetwork(resolvedActiveNetwork)\n }\n }, [resolvedActiveNetwork])\n\n const updateActiveNetwork = useCallback((networkId: NetworkBootstrap['id']) => {\n setError(undefined)\n const network = networks?.find(network => network.id === networkId)\n if (!network) {\n setError(new Error(`Network with id ${networkId} not found`))\n return\n }\n // set internally\n setActiveNetwork(network)\n // set externally\n void setActiveNetworkExternal?.(networkId)\n }, [networks])\n\n const value: ChainNetworkState = useMemo(() => ({\n activeNetwork,\n networks,\n provided: true,\n updateActiveNetwork,\n chainNetworkError: error ?? activeNetworkError,\n }), [activeNetwork, networks, updateActiveNetwork])\n\n return (\n <ChainNetworkContext value={value}>\n <ErrorRender error={error ?? activeNetworkError} scope=\"ChainNetworkProvider\" />\n {children}\n </ChainNetworkContext>\n )\n}\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { ChainNetworkContext } from './context.ts'\n\nexport const useChainNetwork = (required = true) => useContextEx(ChainNetworkContext, 'ChainNetwork', required)\n","import type { DetailedHTMLProps, HtmlHTMLAttributes } from 'react'\nimport React from 'react'\n\nexport interface NetworkIconProps extends DetailedHTMLProps<HtmlHTMLAttributes<HTMLSpanElement>, HTMLSpanElement> {\n icon?: string\n}\n\nexport const NetworkIcon: React.FC<NetworkIconProps> = ({\n icon, style, ...props\n}) => {\n return (\n <span\n // eslint-disable-next-line @eslint-react/dom/no-dangerously-set-innerhtml\n dangerouslySetInnerHTML={{ __html: icon ?? '' }} // Placeholder for SVG\\\n style={{\n display: 'inline-flex', width: 24, height: 24, ...style,\n }}\n {...props}\n />\n )\n}\n","import type { MenuItemProps } from '@mui/material'\nimport { ListItemText } from '@mui/material'\nimport type { NetworkBootstrap } from '@xyo-network/chain-network-model'\nimport { ActiveMenuItem } from '@xyo-network/react-chain-shared'\nimport type { NetworkId } from '@xyo-network/xl1-protocol'\nimport type { MouseEvent as ReactMouseEvent } from 'react'\nimport React from 'react'\n\nimport { NetworkAvatar } from './Avatar.tsx'\n\nexport interface NetworkMenuItemProps extends MenuItemProps {\n active?: boolean\n network?: NetworkBootstrap\n updateActiveNetwork?: (networkId: NetworkId) => void\n}\n\nexport const NetworkMenuItem: React.FC<NetworkMenuItemProps> = ({\n active, network, onClick, updateActiveNetwork, ...props\n}) => {\n const handleClick = (event: ReactMouseEvent<HTMLLIElement, MouseEvent>) => {\n if (network === undefined) throw new Error('Network is undefined')\n updateActiveNetwork?.(network.id)\n onClick?.(event)\n }\n\n return (\n <ActiveMenuItem\n title={network?.name}\n disableRipple\n onClick={handleClick}\n active={active}\n sx={{ py: 1 }}\n {...props}\n >\n <NetworkAvatar icon={network?.icon} name={network?.name} sx={{ width: 30, height: 30 }} />\n <ListItemText>{network?.name}</ListItemText>\n </ActiveMenuItem>\n )\n}\n","import type { AlertProps } from '@mui/material'\nimport {\n Alert, AlertTitle, Button,\n} from '@mui/material'\nimport type { NetworkStatus } from '@xyo-network/xl1-protocol'\nimport React, { useMemo, useState } from 'react'\n\nimport { NetworkStatusDialog } from './Dialog.tsx'\n\nexport interface NetworkStatusAlertProps extends AlertProps {\n status?: NetworkStatus\n}\n\nexport const NetworkStatusAlert: React.FC<NetworkStatusAlertProps> = ({ status, ...props }) => {\n const [open, setOpen] = useState(false)\n const handleClose = () => setOpen(false)\n\n const severity = useMemo(() => {\n if (!status) return\n switch (status.state) {\n case 'online': {\n return 'success'\n }\n case 'offline': {\n return 'error'\n }\n case 'degraded': {\n return 'warning'\n }\n case 'unknown': {\n return 'error'\n }\n }\n }, [status])\n\n return (\n <Alert severity={severity} {...props}>\n <AlertTitle>{status?.description}</AlertTitle>\n {status?.updates && status.updates.length > 0 && (\n <>\n <Button color={severity} variant=\"outlined\" size=\"small\" onClick={() => setOpen(true)}>\n Updates\n </Button>\n <NetworkStatusDialog open={open} onClose={handleClose} updates={status.updates} />\n </>\n )}\n </Alert>\n )\n}\n","import type { DialogProps } from '@mui/material'\nimport {\n Button, Dialog, DialogActions, DialogContent, DialogTitle, List, ListItem, Typography,\n} from '@mui/material'\nimport type { NetworkStatusUpdate } from '@xyo-network/xl1-protocol'\nimport React from 'react'\n\nexport interface NetworkStatusDialogProps extends DialogProps {\n updates: NetworkStatusUpdate[]\n}\n\nexport const NetworkStatusDialog: React.FC<NetworkStatusDialogProps> = ({ updates, ...props }) => {\n return (\n <Dialog {...props}>\n <DialogTitle>Recent Status Updates</DialogTitle>\n <DialogContent>\n <List>\n {updates.map(({\n start, end, update,\n }) => (\n <ListItem\n key={start + update}\n sx={{\n flexDirection: 'column', alignItems: 'start', pl: 0,\n }}\n >\n <Typography>\n {update}\n </Typography>\n <Typography gutterBottom sx={{ opacity: 0.75, fontSize: '.8333rem' }}>\n Start:\n {' '}\n {new Date(start).toLocaleString()}\n {' '}\n <br />\n End:\n {' '}\n {new Date(end).toLocaleString()}\n </Typography>\n </ListItem>\n ))}\n </List>\n </DialogContent>\n <DialogActions>\n <Button onClick={e => props.onClose?.(e, 'backdropClick')} color=\"primary\" variant=\"outlined\">\n Close\n </Button>\n </DialogActions>\n </Dialog>\n )\n}\n","import { useCurrentBlock, useViewerFromWallet } from '@xyo-network/react-chain-provider'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol'\n\nimport { useViewerInPage } from './useViewerInPage.ts'\n\nexport const useActiveNetworkCurrentBlock = (refresh = 1, viewer?: XyoViewer) => {\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n\nexport const useActiveNetworkCurrentBlockInPage = (refresh = 1) => {\n const viewer = useViewerInPage()\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n\nexport const useActiveNetworkCurrentBlockInWallet = (refresh = 1) => {\n const viewer = useViewerFromWallet()\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n","import { useHttpRpcViewer, useViewerFromWallet } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\n/**\n * Get the viewer for the active network, first from the wallet or fallback to HTTP RPC\n * @returns - XyoViewer for the active network\n */\nexport const useViewerInPage = () => {\n const { activeNetwork } = useChainNetwork()\n const httpRpcViewer = useHttpRpcViewer(activeNetwork?.url)\n const walletRpcViewer = useViewerFromWallet(activeNetwork?.id)\n return walletRpcViewer ?? httpRpcViewer\n}\n","import { useNetwork } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\nexport const useActiveNetworkNetwork = () => {\n const { activeNetwork } = useChainNetwork()\n const network = useNetwork(activeNetwork?.id)\n return network\n}\n","import { useHttpRpcRunner } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\nexport const useActiveNetworkRunner = () => {\n const { activeNetwork } = useChainNetwork()\n const runner = useHttpRpcRunner(activeNetwork?.url)\n\n return runner\n}\n","import { useHttpRpcViewer } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\n/**\n * Get the viewer directly from the active network\n * @returns - The viewer for the active network\n */\nexport const useViewerInWallet = () => {\n const { activeNetwork } = useChainNetwork()\n const walletViewer = useHttpRpcViewer(activeNetwork?.url)\n return walletViewer\n}\n","import { delay } from '@xylabs/delay'\nimport { isUndefined } from '@xylabs/typeof'\nimport type { NetworkStatus } from '@xyo-network/xl1-protocol'\nimport { useEffect, useState } from 'react'\n\nimport { useActiveNetworkNetwork } from '../index.ts'\n\nconst STATUS_CHECK_INTERVAL = 10_000\n\nexport const usePollNetworkStatus = () => {\n const network = useActiveNetworkNetwork()\n const [networkStatus, setNetworkStatus] = useState<NetworkStatus>()\n const [networkStatusError, setNetworkStatusError] = useState<Error>()\n\n // Check network status every 10 seconds\n useEffect(() => {\n let checkNetwork = true\n void (async () => {\n if (isUndefined(network)) return\n while (checkNetwork) {\n try {\n const response = await network.status()\n setNetworkStatus(response)\n setNetworkStatusError(undefined)\n } catch (error) {\n console.error('Error fetching network status:', error)\n setNetworkStatus(undefined)\n setNetworkStatusError(error as Error)\n }\n await delay(STATUS_CHECK_INTERVAL)\n }\n })()\n\n return () => {\n // Cleanup function to stop checking network status at the current statusUrl\n checkNetwork = false\n }\n }, [network])\n\n return [networkStatus, networkStatusError] as const\n}\n","import type { AlertProps } from '@mui/material'\nimport type { PropsWithChildren } from 'react'\nimport React from 'react'\n\nimport { usePollNetworkStatus } from '../../hooks/index.ts'\nimport { NetworkStatusAlert } from './Alert.tsx'\n\nconst validNetworkStates = new Set(['online', 'unknown'])\n\nexport interface NetworkStatusProps extends PropsWithChildren<AlertProps> {}\n\nexport const NetworkStatus: React.FC<NetworkStatusProps> = ({ children, ...props }) => {\n const [networkStatus] = usePollNetworkStatus()\n const showStatus = networkStatus && !validNetworkStates.has(networkStatus.state)\n return (\n <>\n {showStatus && <NetworkStatusAlert status={networkStatus} {...props} />}\n {children}\n </>\n )\n}\n"],"mappings":"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","names":["activeNetwork","network","jsx","jsx","jsx","jsxs","Button","useMemo","useState","jsx","jsxs","jsx","jsxs","useState","useMemo","Button","useViewerFromWallet","useViewerFromWallet","useHttpRpcViewer","useHttpRpcViewer","useState","useState","Fragment","jsx","jsxs"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/menu/Avatar.tsx","../../src/context/network/context.ts","../../src/context/network/Provider.tsx","../../src/context/network/use.ts","../../src/components/menu/Icon.tsx","../../src/components/menu/MenuItem.tsx","../../src/components/status/Alert.tsx","../../src/components/status/Dialog.tsx","../../src/components/status/NetworkStatus.tsx","../../src/hooks/provider/useActiveNetworkCurrentBlock.ts","../../src/hooks/provider/useViewerInPage.ts","../../src/hooks/provider/useActiveNetworkNetwork.ts","../../src/hooks/provider/useActiveNetworkRunner.ts","../../src/hooks/provider/useViewerInWallet.ts","../../src/hooks/status/usePollNetworkStatus.ts"],"sourcesContent":["import type { AvatarProps } from '@mui/material'\nimport { Avatar } from '@mui/material'\nimport type { CSSProperties } from 'react'\nimport React from 'react'\n\nimport { useChainNetwork } from '../../context/index.ts'\nimport { NetworkIcon } from './Icon.tsx'\n\nexport interface NetworkAvatarProps extends AvatarProps {\n icon?: string\n iconStyles?: CSSProperties\n name?: string\n}\n\nexport const NetworkAvatar: React.FC<NetworkAvatarProps> = ({\n icon, iconStyles, name, sx, ...props\n}) => {\n return (\n <Avatar\n sx={{ backgroundColor: 'white', ...sx }}\n alt={name}\n {...props}\n >\n <NetworkIcon\n icon={icon}\n style={{ ...iconStyles }}\n />\n </Avatar>\n )\n}\n\nexport const ActiveNetworkAvatar: React.FC<AvatarProps> = (props) => {\n const { activeNetwork } = useChainNetwork()\n\n return (\n <NetworkAvatar\n icon={activeNetwork?.icon}\n name={activeNetwork?.name}\n {...props}\n />\n )\n}\n","import { createContextEx } from '@xylabs/react-shared'\n\nimport type { ChainNetworkState } from './state.ts'\n\nexport const ChainNetworkContext = createContextEx<ChainNetworkState>()\n","import { ErrorRender } from '@xylabs/react-error'\nimport { usePromise } from '@xylabs/react-promise'\nimport type { NetworkBootstrap } from '@xyo-network/chain-network-model'\nimport { SequenceNetwork } from '@xyo-network/chain-network-model'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useCallback, useMemo, useState,\n} from 'react'\n\nimport { ChainNetworkContext } from './context.ts'\nimport type { ChainNetworkState } from './state.ts'\n\nexport interface ChainNetworkProviderProps extends PropsWithChildren {\n getActiveNetwork?: () => Promise<NetworkBootstrap | undefined>\n networks?: NetworkBootstrap[]\n setActiveNetwork?: (networkId: NetworkBootstrap['id']) => Promise<NetworkBootstrap>\n}\n\nexport const ChainNetworkProvider: React.FC<ChainNetworkProviderProps> = ({\n children, getActiveNetwork, networks, setActiveNetwork: setActiveNetworkExternal,\n}) => {\n const [activeNetwork, setActiveNetwork] = useState<NetworkBootstrap>()\n const [error, setError] = useState<Error>()\n\n // Set the active network upon initialization\n const [resolvedActiveNetwork, activeNetworkError] = usePromise(async () => {\n // ensure networks are loaded\n if (!networks) return\n // get last saved active network\n const activeNetwork = await getActiveNetwork?.()\n // ensure the active network saved is found in the list of networks\n if (activeNetwork && networks?.find(network => network.id === activeNetwork.id)) {\n // Set the active network if it exists\n return activeNetwork\n } else {\n // Set the default network if no active network exists\n const defaultNetwork = networks.find(network => network.id === SequenceNetwork.id) ?? networks[1]\n await setActiveNetworkExternal?.(defaultNetwork.id)\n\n // Set the active network in the context\n return defaultNetwork\n }\n }, [networks])\n\n useMemo(() => {\n if (resolvedActiveNetwork) {\n setActiveNetwork(resolvedActiveNetwork)\n }\n }, [resolvedActiveNetwork])\n\n const updateActiveNetwork = useCallback((networkId: NetworkBootstrap['id']) => {\n setError(undefined)\n const network = networks?.find(network => network.id === networkId)\n if (!network) {\n setError(new Error(`Network with id ${networkId} not found`))\n return\n }\n // set internally\n setActiveNetwork(network)\n // set externally\n void setActiveNetworkExternal?.(networkId)\n }, [networks])\n\n const value: ChainNetworkState = useMemo(() => ({\n activeNetwork,\n networks,\n provided: true,\n updateActiveNetwork,\n chainNetworkError: error ?? activeNetworkError,\n }), [activeNetwork, networks, updateActiveNetwork])\n\n return (\n <ChainNetworkContext value={value}>\n <ErrorRender error={error ?? activeNetworkError} scope=\"ChainNetworkProvider\" />\n {children}\n </ChainNetworkContext>\n )\n}\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { ChainNetworkContext } from './context.ts'\n\nexport const useChainNetwork = (required = true) => useContextEx(ChainNetworkContext, 'ChainNetwork', required)\n","import type { DetailedHTMLProps, HtmlHTMLAttributes } from 'react'\nimport React from 'react'\n\nexport interface NetworkIconProps extends DetailedHTMLProps<HtmlHTMLAttributes<HTMLSpanElement>, HTMLSpanElement> {\n icon?: string\n}\n\nexport const NetworkIcon: React.FC<NetworkIconProps> = ({\n icon, style, ...props\n}) => {\n return (\n <span\n // eslint-disable-next-line @eslint-react/dom/no-dangerously-set-innerhtml\n dangerouslySetInnerHTML={{ __html: icon ?? '' }} // Placeholder for SVG\\\n style={{\n display: 'inline-flex', width: 24, height: 24, ...style,\n }}\n {...props}\n />\n )\n}\n","import type { MenuItemProps } from '@mui/material'\nimport { ListItemText } from '@mui/material'\nimport type { NetworkBootstrap } from '@xyo-network/chain-network-model'\nimport { ActiveMenuItem } from '@xyo-network/react-chain-shared'\nimport type { NetworkId } from '@xyo-network/xl1-protocol'\nimport type { MouseEvent as ReactMouseEvent } from 'react'\nimport React from 'react'\n\nimport { NetworkAvatar } from './Avatar.tsx'\n\nexport interface NetworkMenuItemProps extends MenuItemProps {\n active?: boolean\n network?: NetworkBootstrap\n updateActiveNetwork?: (networkId: NetworkId) => void\n}\n\nexport const NetworkMenuItem: React.FC<NetworkMenuItemProps> = ({\n active, network, onClick, updateActiveNetwork, ...props\n}) => {\n const handleClick = (event: ReactMouseEvent<HTMLLIElement, MouseEvent>) => {\n if (network === undefined) throw new Error('Network is undefined')\n updateActiveNetwork?.(network.id)\n onClick?.(event)\n }\n\n return (\n <ActiveMenuItem\n title={network?.name}\n disableRipple\n onClick={handleClick}\n active={active}\n sx={{ py: 1 }}\n {...props}\n >\n <NetworkAvatar icon={network?.icon} name={network?.name} sx={{ width: 30, height: 30 }} />\n <ListItemText>{network?.name}</ListItemText>\n </ActiveMenuItem>\n )\n}\n","import type { AlertProps } from '@mui/material'\nimport {\n Alert, AlertTitle, Button,\n} from '@mui/material'\nimport type { NetworkStatus } from '@xyo-network/xl1-protocol'\nimport React, { useMemo, useState } from 'react'\n\nimport { NetworkStatusDialog } from './Dialog.tsx'\n\nexport interface NetworkStatusAlertProps extends AlertProps {\n status?: NetworkStatus\n}\n\nexport const NetworkStatusAlert: React.FC<NetworkStatusAlertProps> = ({ status, ...props }) => {\n const [open, setOpen] = useState(false)\n const handleClose = () => setOpen(false)\n\n const severity = useMemo(() => {\n if (!status) return\n switch (status.state) {\n case 'online': {\n return 'success'\n }\n case 'offline': {\n return 'error'\n }\n case 'degraded': {\n return 'warning'\n }\n case 'unknown': {\n return 'error'\n }\n }\n }, [status])\n\n return (\n <Alert severity={severity} {...props}>\n <AlertTitle>{status?.description}</AlertTitle>\n {status?.updates && status.updates.length > 0 && (\n <>\n <Button color={severity} variant=\"outlined\" size=\"small\" onClick={() => setOpen(true)}>\n Updates\n </Button>\n <NetworkStatusDialog open={open} onClose={handleClose} updates={status.updates} />\n </>\n )}\n </Alert>\n )\n}\n","import type { DialogProps } from '@mui/material'\nimport {\n Button, Dialog, DialogActions, DialogContent, DialogTitle, List, ListItem, Typography,\n} from '@mui/material'\nimport type { NetworkStatusUpdate } from '@xyo-network/xl1-protocol'\nimport React from 'react'\n\nexport interface NetworkStatusDialogProps extends DialogProps {\n updates: NetworkStatusUpdate[]\n}\n\nexport const NetworkStatusDialog: React.FC<NetworkStatusDialogProps> = ({ updates, ...props }) => {\n return (\n <Dialog {...props}>\n <DialogTitle>Recent Status Updates</DialogTitle>\n <DialogContent>\n <List>\n {updates.map(({\n start, end, update,\n }) => (\n <ListItem\n key={start + update}\n sx={{\n flexDirection: 'column', alignItems: 'start', pl: 0,\n }}\n >\n <Typography>\n {update}\n </Typography>\n <Typography gutterBottom sx={{ opacity: 0.75, fontSize: '.8333rem' }}>\n Start:\n {' '}\n {new Date(start).toLocaleString()}\n {' '}\n <br />\n End:\n {' '}\n {new Date(end).toLocaleString()}\n </Typography>\n </ListItem>\n ))}\n </List>\n </DialogContent>\n <DialogActions>\n <Button onClick={e => props.onClose?.(e, 'backdropClick')} color=\"primary\" variant=\"outlined\">\n Close\n </Button>\n </DialogActions>\n </Dialog>\n )\n}\n","import type { AlertProps } from '@mui/material'\nimport type { PropsWithChildren } from 'react'\nimport React from 'react'\n\nimport { usePollNetworkStatus } from '../../hooks/index.ts'\nimport { NetworkStatusAlert } from './Alert.tsx'\n\nconst validNetworkStates = new Set(['online', 'unknown'])\n\nexport interface NetworkStatusProps extends PropsWithChildren<AlertProps> {}\n\nexport const NetworkStatus: React.FC<NetworkStatusProps> = ({ children, ...props }) => {\n const [networkStatus] = usePollNetworkStatus()\n const showStatus = networkStatus && !validNetworkStates.has(networkStatus.state)\n return (\n <>\n {showStatus && <NetworkStatusAlert status={networkStatus} {...props} />}\n {children}\n </>\n )\n}\n","import { useCurrentBlock, useViewerFromWallet } from '@xyo-network/react-chain-provider'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol'\n\nimport { useViewerInPage } from './useViewerInPage.ts'\n\nexport const useActiveNetworkCurrentBlock = (refresh = 1, viewer?: XyoViewer) => {\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n\nexport const useActiveNetworkCurrentBlockInPage = (refresh = 1) => {\n const viewer = useViewerInPage()\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n\nexport const useActiveNetworkCurrentBlockInWallet = (refresh = 1) => {\n const viewer = useViewerFromWallet()\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n","import { useHttpRpcViewer, useViewerFromWallet } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\n/**\n * Get the viewer for the active network, first from the wallet or fallback to HTTP RPC\n * @returns - XyoViewer for the active network\n */\nexport const useViewerInPage = () => {\n const { activeNetwork } = useChainNetwork()\n const httpRpcViewer = useHttpRpcViewer(activeNetwork?.url)\n const walletRpcViewer = useViewerFromWallet(activeNetwork?.id)\n return walletRpcViewer ?? httpRpcViewer\n}\n","import { useNetwork } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\nexport const useActiveNetworkNetwork = () => {\n const { activeNetwork } = useChainNetwork()\n const network = useNetwork(activeNetwork?.id)\n return network\n}\n","import { useHttpRpcRunner } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\nexport const useActiveNetworkRunner = () => {\n const { activeNetwork } = useChainNetwork()\n const runner = useHttpRpcRunner(activeNetwork?.url)\n\n return runner\n}\n","import { useHttpRpcViewer } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\n/**\n * Get the viewer directly from the active network\n * @returns - The viewer for the active network\n */\nexport const useViewerInWallet = () => {\n const { activeNetwork } = useChainNetwork()\n const walletViewer = useHttpRpcViewer(activeNetwork?.url)\n return walletViewer\n}\n","import { delay } from '@xylabs/delay'\nimport { isUndefined } from '@xylabs/typeof'\nimport type { NetworkStatus } from '@xyo-network/xl1-protocol'\nimport { useEffect, useState } from 'react'\n\nimport { useActiveNetworkNetwork } from '../index.ts'\n\nconst STATUS_CHECK_INTERVAL = 10_000\n\nexport const usePollNetworkStatus = () => {\n const network = useActiveNetworkNetwork()\n const [networkStatus, setNetworkStatus] = useState<NetworkStatus>()\n const [networkStatusError, setNetworkStatusError] = useState<Error>()\n\n // Check network status every 10 seconds\n useEffect(() => {\n let checkNetwork = true\n void (async () => {\n if (isUndefined(network)) return\n while (checkNetwork) {\n try {\n const response = await network.status()\n setNetworkStatus(response)\n setNetworkStatusError(undefined)\n } catch (error) {\n console.error('Error fetching network status:', error)\n setNetworkStatus(undefined)\n setNetworkStatusError(error as Error)\n }\n await delay(STATUS_CHECK_INTERVAL)\n }\n })()\n\n return () => {\n // Cleanup function to stop checking network status at the current statusUrl\n checkNetwork = false\n }\n }, [network])\n\n return [networkStatus, networkStatusError] as const\n}\n"],"mappings":"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","names":["Avatar","React","createContextEx","ChainNetworkContext","ErrorRender","usePromise","SequenceNetwork","React","useCallback","useMemo","useState","ChainNetworkProvider","children","getActiveNetwork","networks","setActiveNetwork","setActiveNetworkExternal","activeNetwork","useState","error","setError","resolvedActiveNetwork","activeNetworkError","usePromise","find","network","id","defaultNetwork","SequenceNetwork","useMemo","updateActiveNetwork","useCallback","networkId","undefined","Error","value","provided","chainNetworkError","ChainNetworkContext","ErrorRender","scope","useContextEx","useChainNetwork","required","useContextEx","ChainNetworkContext","React","NetworkIcon","icon","style","props","React","span","dangerouslySetInnerHTML","__html","display","width","height","NetworkAvatar","icon","iconStyles","name","sx","props","React","Avatar","backgroundColor","alt","NetworkIcon","style","ActiveNetworkAvatar","activeNetwork","useChainNetwork","ListItemText","ActiveMenuItem","React","NetworkMenuItem","active","network","onClick","updateActiveNetwork","props","handleClick","event","undefined","Error","id","React","ActiveMenuItem","title","name","disableRipple","sx","py","NetworkAvatar","icon","width","height","ListItemText","Alert","AlertTitle","Button","React","useMemo","useState","Button","Dialog","DialogActions","DialogContent","DialogTitle","List","ListItem","Typography","React","NetworkStatusDialog","updates","props","React","Dialog","DialogTitle","DialogContent","List","map","start","end","update","ListItem","key","sx","flexDirection","alignItems","pl","Typography","gutterBottom","opacity","fontSize","Date","toLocaleString","br","DialogActions","Button","onClick","e","onClose","color","variant","NetworkStatusAlert","status","props","open","setOpen","useState","handleClose","severity","useMemo","state","React","Alert","AlertTitle","description","updates","length","Button","color","variant","size","onClick","NetworkStatusDialog","onClose","React","useCurrentBlock","useViewerFromWallet","useHttpRpcViewer","useViewerFromWallet","useViewerInPage","activeNetwork","useChainNetwork","httpRpcViewer","useHttpRpcViewer","url","walletRpcViewer","useViewerFromWallet","id","useActiveNetworkCurrentBlock","refresh","viewer","currentBlock","useCurrentBlock","useActiveNetworkCurrentBlockInPage","useViewerInPage","useActiveNetworkCurrentBlockInWallet","useViewerFromWallet","useNetwork","useActiveNetworkNetwork","activeNetwork","useChainNetwork","network","useNetwork","id","useHttpRpcRunner","useActiveNetworkRunner","activeNetwork","useChainNetwork","runner","useHttpRpcRunner","url","useHttpRpcViewer","useViewerInWallet","activeNetwork","useChainNetwork","walletViewer","useHttpRpcViewer","url","delay","isUndefined","useEffect","useState","STATUS_CHECK_INTERVAL","usePollNetworkStatus","network","useActiveNetworkNetwork","networkStatus","setNetworkStatus","useState","networkStatusError","setNetworkStatusError","useEffect","checkNetwork","isUndefined","response","status","undefined","error","console","delay","validNetworkStates","Set","NetworkStatus","children","props","networkStatus","usePollNetworkStatus","showStatus","has","state","React","NetworkStatusAlert","status"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@xyo-network/react-chain-network",
|
|
4
|
-
"version": "1.12.
|
|
4
|
+
"version": "1.12.1",
|
|
5
5
|
"description": "XYO Layer One React SDK",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -45,15 +45,15 @@
|
|
|
45
45
|
"start": "storybook dev -p 6006"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@xylabs/delay": "~5.0.
|
|
49
|
-
"@xylabs/react-error": "~7.0.
|
|
50
|
-
"@xylabs/react-promise": "~7.0.
|
|
51
|
-
"@xylabs/react-shared": "~7.0.
|
|
52
|
-
"@xylabs/typeof": "~5.0.
|
|
53
|
-
"@xyo-network/chain-network-model": "~1.12.
|
|
54
|
-
"@xyo-network/react-chain-provider": "~1.12.
|
|
55
|
-
"@xyo-network/react-chain-shared": "~1.12.
|
|
56
|
-
"@xyo-network/xl1-protocol": "~1.10.
|
|
48
|
+
"@xylabs/delay": "~5.0.8",
|
|
49
|
+
"@xylabs/react-error": "~7.0.1",
|
|
50
|
+
"@xylabs/react-promise": "~7.0.1",
|
|
51
|
+
"@xylabs/react-shared": "~7.0.1",
|
|
52
|
+
"@xylabs/typeof": "~5.0.8",
|
|
53
|
+
"@xyo-network/chain-network-model": "~1.12.1",
|
|
54
|
+
"@xyo-network/react-chain-provider": "~1.12.1",
|
|
55
|
+
"@xyo-network/react-chain-shared": "~1.12.1",
|
|
56
|
+
"@xyo-network/xl1-protocol": "~1.10.13"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
59
|
"@emotion/react": "~11.14.0",
|
|
@@ -62,10 +62,10 @@
|
|
|
62
62
|
"@mui/material": "~7.3.1",
|
|
63
63
|
"@storybook/react-vite": "~9.1.2",
|
|
64
64
|
"@types/react": "~19.1.10",
|
|
65
|
-
"@xylabs/ts-scripts-yarn3": "~7.1.
|
|
66
|
-
"@xylabs/tsconfig": "~7.1.
|
|
67
|
-
"@xylabs/tsconfig-dom": "~7.1.
|
|
68
|
-
"@xylabs/tsconfig-react": "~7.1.
|
|
65
|
+
"@xylabs/ts-scripts-yarn3": "~7.1.2",
|
|
66
|
+
"@xylabs/tsconfig": "~7.1.2",
|
|
67
|
+
"@xylabs/tsconfig-dom": "~7.1.2",
|
|
68
|
+
"@xylabs/tsconfig-react": "~7.1.2",
|
|
69
69
|
"react": "~19.1.1",
|
|
70
70
|
"react-dom": "~19.1.1",
|
|
71
71
|
"react-router-dom": "~7.8.0",
|