@xyo-network/react-chain-network 1.9.0 → 1.10.0
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 +189 -165
- package/dist/browser/index.mjs.map +1 -1
- package/package.json +30 -29
package/dist/browser/index.mjs
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
-
|
|
4
1
|
// src/components/menu/Avatar.tsx
|
|
5
2
|
import { Avatar } from "@mui/material";
|
|
6
|
-
import React3 from "react";
|
|
7
3
|
|
|
8
4
|
// src/context/network/context.ts
|
|
9
5
|
import { createContextEx } from "@xylabs/react-shared";
|
|
@@ -13,8 +9,18 @@ var ChainNetworkContext = createContextEx();
|
|
|
13
9
|
import { ErrorRender } from "@xylabs/react-error";
|
|
14
10
|
import { usePromise } from "@xylabs/react-promise";
|
|
15
11
|
import { SequenceNetwork } from "@xyo-network/chain-network-model";
|
|
16
|
-
import
|
|
17
|
-
|
|
12
|
+
import {
|
|
13
|
+
useCallback,
|
|
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
|
+
}) => {
|
|
18
24
|
const [activeNetwork, setActiveNetwork] = useState();
|
|
19
25
|
const [error, setError] = useState();
|
|
20
26
|
const [resolvedActiveNetwork, activeNetworkError] = usePromise(async () => {
|
|
@@ -27,16 +33,12 @@ var ChainNetworkProvider = /* @__PURE__ */ __name(({ children, getActiveNetwork,
|
|
|
27
33
|
await setActiveNetworkExternal?.(defaultNetwork.id);
|
|
28
34
|
return defaultNetwork;
|
|
29
35
|
}
|
|
30
|
-
}, [
|
|
31
|
-
networks
|
|
32
|
-
]);
|
|
36
|
+
}, [networks]);
|
|
33
37
|
useMemo(() => {
|
|
34
38
|
if (resolvedActiveNetwork) {
|
|
35
39
|
setActiveNetwork(resolvedActiveNetwork);
|
|
36
40
|
}
|
|
37
|
-
}, [
|
|
38
|
-
resolvedActiveNetwork
|
|
39
|
-
]);
|
|
41
|
+
}, [resolvedActiveNetwork]);
|
|
40
42
|
const updateActiveNetwork = useCallback((networkId) => {
|
|
41
43
|
setError(void 0);
|
|
42
44
|
const network = networks?.find((network2) => network2.id === networkId);
|
|
@@ -46,136 +48,176 @@ var ChainNetworkProvider = /* @__PURE__ */ __name(({ children, getActiveNetwork,
|
|
|
46
48
|
}
|
|
47
49
|
setActiveNetwork(network);
|
|
48
50
|
void setActiveNetworkExternal?.(networkId);
|
|
49
|
-
}, [
|
|
50
|
-
networks
|
|
51
|
-
]);
|
|
51
|
+
}, [networks]);
|
|
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
|
-
|
|
64
|
-
value
|
|
65
|
-
}, /* @__PURE__ */ React.createElement(ErrorRender, {
|
|
66
|
-
error: error ?? activeNetworkError,
|
|
67
|
-
scope: "ChainNetworkProvider"
|
|
68
|
-
}), children);
|
|
69
|
-
}, "ChainNetworkProvider");
|
|
58
|
+
}), [activeNetwork, networks, updateActiveNetwork]);
|
|
59
|
+
return /* @__PURE__ */ jsxs(ChainNetworkContext, { value, children: [
|
|
60
|
+
/* @__PURE__ */ jsx(ErrorRender, { error: error ?? activeNetworkError, scope: "ChainNetworkProvider" }),
|
|
61
|
+
children
|
|
62
|
+
] });
|
|
63
|
+
};
|
|
70
64
|
|
|
71
65
|
// src/context/network/use.ts
|
|
72
66
|
import { useContextEx } from "@xylabs/react-shared";
|
|
73
|
-
var useChainNetwork =
|
|
67
|
+
var useChainNetwork = (required = true) => useContextEx(ChainNetworkContext, "ChainNetwork", required);
|
|
74
68
|
|
|
75
69
|
// src/components/menu/Icon.tsx
|
|
76
|
-
import
|
|
77
|
-
var NetworkIcon =
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
},
|
|
70
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
71
|
+
var NetworkIcon = ({
|
|
72
|
+
icon,
|
|
73
|
+
style,
|
|
74
|
+
...props
|
|
75
|
+
}) => {
|
|
76
|
+
return /* @__PURE__ */ jsx2(
|
|
77
|
+
"span",
|
|
78
|
+
{
|
|
79
|
+
dangerouslySetInnerHTML: { __html: icon ?? "" },
|
|
80
|
+
style: {
|
|
81
|
+
display: "inline-flex",
|
|
82
|
+
width: 24,
|
|
83
|
+
height: 24,
|
|
84
|
+
...style
|
|
85
|
+
},
|
|
86
|
+
...props
|
|
87
|
+
}
|
|
88
|
+
);
|
|
89
|
+
};
|
|
92
90
|
|
|
93
91
|
// src/components/menu/Avatar.tsx
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
...
|
|
92
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
93
|
+
var NetworkAvatar = ({
|
|
94
|
+
icon,
|
|
95
|
+
iconStyles,
|
|
96
|
+
name,
|
|
97
|
+
sx,
|
|
98
|
+
...props
|
|
99
|
+
}) => {
|
|
100
|
+
return /* @__PURE__ */ jsx3(
|
|
101
|
+
Avatar,
|
|
102
|
+
{
|
|
103
|
+
sx: { backgroundColor: "white", ...sx },
|
|
104
|
+
alt: name,
|
|
105
|
+
...props,
|
|
106
|
+
children: /* @__PURE__ */ jsx3(
|
|
107
|
+
NetworkIcon,
|
|
108
|
+
{
|
|
109
|
+
icon,
|
|
110
|
+
style: { ...iconStyles }
|
|
111
|
+
}
|
|
112
|
+
)
|
|
106
113
|
}
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
var ActiveNetworkAvatar =
|
|
114
|
+
);
|
|
115
|
+
};
|
|
116
|
+
var ActiveNetworkAvatar = (props) => {
|
|
110
117
|
const { activeNetwork } = useChainNetwork();
|
|
111
|
-
return /* @__PURE__ */
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
118
|
+
return /* @__PURE__ */ jsx3(
|
|
119
|
+
NetworkAvatar,
|
|
120
|
+
{
|
|
121
|
+
icon: activeNetwork?.icon,
|
|
122
|
+
name: activeNetwork?.name,
|
|
123
|
+
...props
|
|
124
|
+
}
|
|
125
|
+
);
|
|
126
|
+
};
|
|
117
127
|
|
|
118
128
|
// src/components/menu/MenuItem.tsx
|
|
119
129
|
import { ListItemText } from "@mui/material";
|
|
120
130
|
import { ActiveMenuItem } from "@xyo-network/react-chain-shared";
|
|
121
|
-
import
|
|
122
|
-
var NetworkMenuItem =
|
|
123
|
-
|
|
131
|
+
import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
132
|
+
var NetworkMenuItem = ({
|
|
133
|
+
active,
|
|
134
|
+
network,
|
|
135
|
+
onClick,
|
|
136
|
+
updateActiveNetwork,
|
|
137
|
+
...props
|
|
138
|
+
}) => {
|
|
139
|
+
const handleClick = (event) => {
|
|
124
140
|
if (network === void 0) throw new Error("Network is undefined");
|
|
125
141
|
updateActiveNetwork?.(network.id);
|
|
126
142
|
onClick?.(event);
|
|
127
|
-
}
|
|
128
|
-
return /* @__PURE__ */
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
width: 30,
|
|
142
|
-
height: 30
|
|
143
|
+
};
|
|
144
|
+
return /* @__PURE__ */ jsxs2(
|
|
145
|
+
ActiveMenuItem,
|
|
146
|
+
{
|
|
147
|
+
title: network?.name,
|
|
148
|
+
disableRipple: true,
|
|
149
|
+
onClick: handleClick,
|
|
150
|
+
active,
|
|
151
|
+
sx: { py: 1 },
|
|
152
|
+
...props,
|
|
153
|
+
children: [
|
|
154
|
+
/* @__PURE__ */ jsx4(NetworkAvatar, { icon: network?.icon, name: network?.name, sx: { width: 30, height: 30 } }),
|
|
155
|
+
/* @__PURE__ */ jsx4(ListItemText, { children: network?.name })
|
|
156
|
+
]
|
|
143
157
|
}
|
|
144
|
-
|
|
145
|
-
}
|
|
158
|
+
);
|
|
159
|
+
};
|
|
146
160
|
|
|
147
161
|
// src/components/status/Alert.tsx
|
|
148
|
-
import {
|
|
149
|
-
|
|
162
|
+
import {
|
|
163
|
+
Alert,
|
|
164
|
+
AlertTitle,
|
|
165
|
+
Button as Button2
|
|
166
|
+
} from "@mui/material";
|
|
167
|
+
import { useMemo as useMemo2, useState as useState2 } from "react";
|
|
150
168
|
|
|
151
169
|
// src/components/status/Dialog.tsx
|
|
152
|
-
import {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
170
|
+
import {
|
|
171
|
+
Button,
|
|
172
|
+
Dialog,
|
|
173
|
+
DialogActions,
|
|
174
|
+
DialogContent,
|
|
175
|
+
DialogTitle,
|
|
176
|
+
List,
|
|
177
|
+
ListItem,
|
|
178
|
+
Typography
|
|
179
|
+
} from "@mui/material";
|
|
180
|
+
import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
181
|
+
var NetworkStatusDialog = ({ updates, ...props }) => {
|
|
182
|
+
return /* @__PURE__ */ jsxs3(Dialog, { ...props, children: [
|
|
183
|
+
/* @__PURE__ */ jsx5(DialogTitle, { children: "Recent Status Updates" }),
|
|
184
|
+
/* @__PURE__ */ jsx5(DialogContent, { children: /* @__PURE__ */ jsx5(List, { children: updates.map(({
|
|
185
|
+
start,
|
|
186
|
+
end,
|
|
187
|
+
update
|
|
188
|
+
}) => /* @__PURE__ */ jsxs3(
|
|
189
|
+
ListItem,
|
|
190
|
+
{
|
|
191
|
+
sx: {
|
|
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
|
+
};
|
|
174
215
|
|
|
175
216
|
// src/components/status/Alert.tsx
|
|
176
|
-
|
|
217
|
+
import { Fragment, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
218
|
+
var NetworkStatusAlert = ({ status, ...props }) => {
|
|
177
219
|
const [open, setOpen] = useState2(false);
|
|
178
|
-
const handleClose =
|
|
220
|
+
const handleClose = () => setOpen(false);
|
|
179
221
|
const severity = useMemo2(() => {
|
|
180
222
|
if (!status) return;
|
|
181
223
|
switch (status.state) {
|
|
@@ -192,85 +234,74 @@ var NetworkStatusAlert = /* @__PURE__ */ __name(({ status, ...props }) => {
|
|
|
192
234
|
return "error";
|
|
193
235
|
}
|
|
194
236
|
}
|
|
195
|
-
}, [
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
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";
|
|
237
|
+
}, [status]);
|
|
238
|
+
return /* @__PURE__ */ jsxs4(Alert, { severity, ...props, children: [
|
|
239
|
+
/* @__PURE__ */ jsx6(AlertTitle, { children: status?.description }),
|
|
240
|
+
status?.updates && status.updates.length > 0 && /* @__PURE__ */ jsxs4(Fragment, { children: [
|
|
241
|
+
/* @__PURE__ */ jsx6(Button2, { color: severity, variant: "outlined", size: "small", onClick: () => setOpen(true), children: "Updates" }),
|
|
242
|
+
/* @__PURE__ */ jsx6(NetworkStatusDialog, { open, onClose: handleClose, updates: status.updates })
|
|
243
|
+
] })
|
|
244
|
+
] });
|
|
245
|
+
};
|
|
215
246
|
|
|
216
247
|
// src/hooks/provider/useActiveNetworkCurrentBlock.ts
|
|
217
248
|
import { useCurrentBlock, useViewerFromWallet as useViewerFromWallet2 } from "@xyo-network/react-chain-provider";
|
|
218
249
|
|
|
219
250
|
// src/hooks/provider/useViewerInPage.ts
|
|
220
251
|
import { useHttpRpcViewer, useViewerFromWallet } from "@xyo-network/react-chain-provider";
|
|
221
|
-
var useViewerInPage =
|
|
252
|
+
var useViewerInPage = () => {
|
|
222
253
|
const { activeNetwork } = useChainNetwork();
|
|
223
254
|
const httpRpcViewer = useHttpRpcViewer(activeNetwork?.url);
|
|
224
255
|
const walletRpcViewer = useViewerFromWallet(activeNetwork?.id);
|
|
225
256
|
return walletRpcViewer ?? httpRpcViewer;
|
|
226
|
-
}
|
|
257
|
+
};
|
|
227
258
|
|
|
228
259
|
// src/hooks/provider/useActiveNetworkCurrentBlock.ts
|
|
229
|
-
var useActiveNetworkCurrentBlock =
|
|
260
|
+
var useActiveNetworkCurrentBlock = (refresh = 1, viewer) => {
|
|
230
261
|
const currentBlock = useCurrentBlock(refresh, viewer);
|
|
231
262
|
return currentBlock;
|
|
232
|
-
}
|
|
233
|
-
var useActiveNetworkCurrentBlockInPage =
|
|
263
|
+
};
|
|
264
|
+
var useActiveNetworkCurrentBlockInPage = (refresh = 1) => {
|
|
234
265
|
const viewer = useViewerInPage();
|
|
235
266
|
const currentBlock = useCurrentBlock(refresh, viewer);
|
|
236
267
|
return currentBlock;
|
|
237
|
-
}
|
|
238
|
-
var useActiveNetworkCurrentBlockInWallet =
|
|
268
|
+
};
|
|
269
|
+
var useActiveNetworkCurrentBlockInWallet = (refresh = 1) => {
|
|
239
270
|
const viewer = useViewerFromWallet2();
|
|
240
271
|
const currentBlock = useCurrentBlock(refresh, viewer);
|
|
241
272
|
return currentBlock;
|
|
242
|
-
}
|
|
273
|
+
};
|
|
243
274
|
|
|
244
275
|
// src/hooks/provider/useActiveNetworkNetwork.ts
|
|
245
276
|
import { useNetwork } from "@xyo-network/react-chain-provider";
|
|
246
|
-
var useActiveNetworkNetwork =
|
|
277
|
+
var useActiveNetworkNetwork = () => {
|
|
247
278
|
const { activeNetwork } = useChainNetwork();
|
|
248
279
|
const network = useNetwork(activeNetwork?.id);
|
|
249
280
|
return network;
|
|
250
|
-
}
|
|
281
|
+
};
|
|
251
282
|
|
|
252
283
|
// src/hooks/provider/useActiveNetworkRunner.ts
|
|
253
284
|
import { useHttpRpcRunner } from "@xyo-network/react-chain-provider";
|
|
254
|
-
var useActiveNetworkRunner =
|
|
285
|
+
var useActiveNetworkRunner = () => {
|
|
255
286
|
const { activeNetwork } = useChainNetwork();
|
|
256
287
|
const runner = useHttpRpcRunner(activeNetwork?.url);
|
|
257
288
|
return runner;
|
|
258
|
-
}
|
|
289
|
+
};
|
|
259
290
|
|
|
260
291
|
// src/hooks/provider/useViewerInWallet.ts
|
|
261
292
|
import { useHttpRpcViewer as useHttpRpcViewer2 } from "@xyo-network/react-chain-provider";
|
|
262
|
-
var useViewerInWallet =
|
|
293
|
+
var useViewerInWallet = () => {
|
|
263
294
|
const { activeNetwork } = useChainNetwork();
|
|
264
295
|
const walletViewer = useHttpRpcViewer2(activeNetwork?.url);
|
|
265
296
|
return walletViewer;
|
|
266
|
-
}
|
|
297
|
+
};
|
|
267
298
|
|
|
268
299
|
// src/hooks/status/usePollNetworkStatus.ts
|
|
269
300
|
import { delay } from "@xylabs/delay";
|
|
270
301
|
import { isUndefined } from "@xylabs/typeof";
|
|
271
302
|
import { useEffect, useState as useState3 } from "react";
|
|
272
303
|
var STATUS_CHECK_INTERVAL = 1e4;
|
|
273
|
-
var usePollNetworkStatus =
|
|
304
|
+
var usePollNetworkStatus = () => {
|
|
274
305
|
const network = useActiveNetworkNetwork();
|
|
275
306
|
const [networkStatus, setNetworkStatus] = useState3();
|
|
276
307
|
const [networkStatusError, setNetworkStatusError] = useState3();
|
|
@@ -294,28 +325,21 @@ var usePollNetworkStatus = /* @__PURE__ */ __name(() => {
|
|
|
294
325
|
return () => {
|
|
295
326
|
checkNetwork = false;
|
|
296
327
|
};
|
|
297
|
-
}, [
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
return [
|
|
301
|
-
networkStatus,
|
|
302
|
-
networkStatusError
|
|
303
|
-
];
|
|
304
|
-
}, "usePollNetworkStatus");
|
|
328
|
+
}, [network]);
|
|
329
|
+
return [networkStatus, networkStatusError];
|
|
330
|
+
};
|
|
305
331
|
|
|
306
332
|
// src/components/status/NetworkStatus.tsx
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
]);
|
|
311
|
-
var NetworkStatus = /* @__PURE__ */ __name(({ children, ...props }) => {
|
|
333
|
+
import { Fragment as Fragment2, jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
334
|
+
var validNetworkStates = /* @__PURE__ */ new Set(["online", "unknown"]);
|
|
335
|
+
var NetworkStatus = ({ children, ...props }) => {
|
|
312
336
|
const [networkStatus] = usePollNetworkStatus();
|
|
313
337
|
const showStatus = networkStatus && !validNetworkStates.has(networkStatus.state);
|
|
314
|
-
return /* @__PURE__ */
|
|
315
|
-
status: networkStatus,
|
|
316
|
-
|
|
317
|
-
})
|
|
318
|
-
}
|
|
338
|
+
return /* @__PURE__ */ jsxs5(Fragment2, { children: [
|
|
339
|
+
showStatus && /* @__PURE__ */ jsx7(NetworkStatusAlert, { status: networkStatus, ...props }),
|
|
340
|
+
children
|
|
341
|
+
] });
|
|
342
|
+
};
|
|
319
343
|
export {
|
|
320
344
|
ActiveNetworkAvatar,
|
|
321
345
|
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/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"]}
|
|
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"]}
|
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.
|
|
4
|
+
"version": "1.10.0",
|
|
5
5
|
"description": "XYO Layer One React SDK",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -45,40 +45,41 @@
|
|
|
45
45
|
"start": "storybook dev -p 6006"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@xylabs/delay": "
|
|
49
|
-
"@xylabs/react-error": "
|
|
50
|
-
"@xylabs/react-promise": "
|
|
51
|
-
"@xylabs/react-shared": "
|
|
52
|
-
"@xylabs/typeof": "
|
|
53
|
-
"@xyo-network/chain-network-model": "
|
|
54
|
-
"@xyo-network/react-chain-provider": "
|
|
55
|
-
"@xyo-network/react-chain-shared": "
|
|
56
|
-
"@xyo-network/xl1-protocol": "
|
|
48
|
+
"@xylabs/delay": "~5.0.2",
|
|
49
|
+
"@xylabs/react-error": "~7.0.0",
|
|
50
|
+
"@xylabs/react-promise": "~7.0.0",
|
|
51
|
+
"@xylabs/react-shared": "~7.0.0",
|
|
52
|
+
"@xylabs/typeof": "~5.0.2",
|
|
53
|
+
"@xyo-network/chain-network-model": "~1.10.0",
|
|
54
|
+
"@xyo-network/react-chain-provider": "~1.10.0",
|
|
55
|
+
"@xyo-network/react-chain-shared": "~1.10.0",
|
|
56
|
+
"@xyo-network/xl1-protocol": "~1.9.3"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@emotion/react": "
|
|
60
|
-
"@emotion/styled": "
|
|
61
|
-
"@mui/icons-material": "
|
|
62
|
-
"@mui/material": "
|
|
63
|
-
"@storybook/react-vite": "
|
|
64
|
-
"@types/react": "
|
|
65
|
-
"@xylabs/ts-scripts-yarn3": "
|
|
66
|
-
"@xylabs/tsconfig
|
|
67
|
-
"
|
|
68
|
-
"react": "
|
|
69
|
-
"react
|
|
70
|
-
"react-
|
|
71
|
-
"
|
|
59
|
+
"@emotion/react": "~11.14.0",
|
|
60
|
+
"@emotion/styled": "~11.14.1",
|
|
61
|
+
"@mui/icons-material": "~7.3.0",
|
|
62
|
+
"@mui/material": "~7.3.0",
|
|
63
|
+
"@storybook/react-vite": "~9.1.1",
|
|
64
|
+
"@types/react": "~19.1.9",
|
|
65
|
+
"@xylabs/ts-scripts-yarn3": "~7.0.3",
|
|
66
|
+
"@xylabs/tsconfig": "~7.0.3",
|
|
67
|
+
"@xylabs/tsconfig-dom": "~7.0.3",
|
|
68
|
+
"@xylabs/tsconfig-react": "~7.0.3",
|
|
69
|
+
"react": "~19.1.1",
|
|
70
|
+
"react-dom": "~19.1.1",
|
|
71
|
+
"react-router-dom": "~7.7.1",
|
|
72
|
+
"typescript": "~5.9.2"
|
|
72
73
|
},
|
|
73
74
|
"peerDependencies": {
|
|
74
|
-
"@emotion/react": "
|
|
75
|
-
"@emotion/styled": "
|
|
75
|
+
"@emotion/react": "~11",
|
|
76
|
+
"@emotion/styled": "~11",
|
|
76
77
|
"@mui/icons-material": ">=6 <8",
|
|
77
78
|
"@mui/material": ">=6 <8",
|
|
78
|
-
"ethers": "
|
|
79
|
-
"react": "
|
|
80
|
-
"react-dom": "
|
|
81
|
-
"react-router-dom": "
|
|
79
|
+
"ethers": "~6",
|
|
80
|
+
"react": "~19",
|
|
81
|
+
"react-dom": "~19",
|
|
82
|
+
"react-router-dom": "~7"
|
|
82
83
|
},
|
|
83
84
|
"engines": {
|
|
84
85
|
"node": ">=22.3 <23"
|