@xyo-network/react-schema 2.77.2 → 2.78.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.
@@ -1,2 +1,337 @@
1
- import{NewReleases as L,OpenInNew as b,Verified as A}from"@mui/icons-material";import{IconButton as y}from"@mui/material";import{useAsyncEffect as z}from"@xylabs/react-async-effect";import{LinkEx as F}from"@xylabs/react-link";import{useEvent as g}from"@xyo-network/react-event";import{Property as B,PropertyValue as w}from"@xyo-network/react-property";import{SchemaCache as T}from"@xyo-network/schema-cache";import{forwardRef as Q,useState as H}from"react";import{Fragment as q,jsx as S,jsxs as k}from"react/jsx-runtime";var O=e=>{let[a,n]=H();return z(async i=>{if(e){let o=await T.instance.get(e);i()&&n(o)}},[e]),a},V=Q(({showLinkNames:e=!0,showOpenNewWindowLink:a=!0,showStatusIcon:n=!0,titleProps:i,value:o,...t},r)=>{let s=O(o),[h,c]=g(),[l,f]=g(),m=(d,p=!1)=>{d?.("schema","click",JSON.stringify({openNewWindow:p,schema:o}))};return k(B,{ref:r,title:"Schema",value:o,tip:"Schema sent with the payload",titleProps:i,...t,children:[o&&n?s===null?S(y,{ref:h,size:"small",onClick:()=>m(c),children:S(L,{color:"warning",fontSize:"inherit"})}):s===void 0?S(y,{ref:h,size:"small",onClick:()=>m(c),children:S(L,{color:"disabled",fontSize:"inherit"})}):S(y,{rel:"noopener noreferrer",size:"small",target:"_blank",href:s?.huri?.href??"",children:S(A,{color:"success",fontSize:"inherit"})}):null,o?k(q,{children:[e?S(F,{display:"block",width:"100%",sx:{cursor:"pointer"},children:S(w,{ref:l,value:o,title:"view schema",onClick:()=>m(f)})}):S(w,{ref:l,value:o,title:"view schema",onClick:()=>m(f)}),a?S(y,{ref:h,size:"small",onClick:()=>m(c,!0),children:S(b,{fontSize:"inherit"})}):null]}):null]})});V.displayName="SchemaProperty";import{MenuItem as D,Typography as ye}from"@mui/material";import{SelectEx as Pe}from"@xylabs/react-select";import{createContextEx as G}from"@xyo-network/react-shared";var u=G();import{compact as he}from"@xylabs/lodash";import{useEffect as fe,useState as I}from"react";import{useAsyncEffect as J}from"@xylabs/react-async-effect";import{PayloadBuilder as Y}from"@xyo-network/payload-builder";import{ModuleErrorSchema as _}from"@xyo-network/payload-model";import{SchemaCache as K}from"@xyo-network/schema-cache";import{useState as P}from"react";var qe=e=>{let[a,n]=P(!1),[i,o]=P(),[t,r]=P(),[s,h]=P();return J(async c=>{let l=!a&&!t&&!i,f=e!==s;if(e&&l||e&&f)try{let m=await K.instance.get(e);c()&&(r(m),n(m==null))}catch(m){let d=m;console.error(m),c()&&o({message:d.message,schema:_,sources:[]})}f&&h(e)},[i,a,e,s,t]),{notFound:a,schemaHuri:t?.huri,schemaPayload:t&&new Y(t?.payload).fields(t.payload).build(),xyoError:i}};import{useAsyncEffect as U}from"@xylabs/react-async-effect";import{SchemaCache as X}from"@xyo-network/schema-cache";import{useState as Z}from"react";var Ke=e=>{let[a,n]=Z();return U(async i=>{if(e){let o=await Promise.allSettled(e?.map(({name:t})=>X.instance.get(t)));i()&&n(o.map(t=>t.status==="fulfilled"?t.value?.payload:void 0).filter(t=>t!=null))}},[e]),a};import{useAsyncEffect as $}from"@xylabs/react-async-effect";import{SchemaListQuerySchema as j}from"@xyo-network/diviner-schema-list-model";import{useWeakDivinerFromNode as ee}from"@xyo-network/react-diviner";import{useEffect as te,useMemo as re,useState as M}from"react";var rt=(e,a="SchemaListDiviner")=>{let[n,i]=M(),[o,t]=M(),[r,s]=ee(a),h=re(()=>e?[{address:e,schema:j}]:void 0,[e]);return te(()=>{r===null&&(i(null),t(void 0))},[r]),$(async c=>{let l=r?.deref();if(l)try{let f=await l.divine(h);c()&&(i(f?.[0]),t(void 0))}catch(f){t(f),i(void 0)}},[r,s,h]),[n,o]};import{useAsyncEffect as oe}from"@xylabs/react-async-effect";import{SchemaStatsDivinerSchema as ae,SchemaStatsQuerySchema as ne}from"@xyo-network/diviner-schema-stats-model";import{TYPES as se}from"@xyo-network/node-core-types";import{isPayloadOfSchemaTypeWithMeta as ie}from"@xyo-network/payload-model";import{useWeakDivinerFromNode as ce}from"@xyo-network/react-diviner";import{useMemo as me,useState as v}from"react";var W=(e,a=se.SchemaStatsDiviner)=>{let[n,i]=v(1),[o,t]=ce(a),[r,s]=v(),h=()=>i(m=>m+1),[c,l]=v(),f=me(()=>({address:e,schema:ne}),[e]);return oe(async m=>{let d=o?.deref();if(d)if(t)m()&&(s(t),l(void 0));else try{let p=(await d.divine([f])).filter(ie(ae));m()&&(l(p),s(void 0))}catch(p){s(p),l(void 0)}},[o,n,t,f]),[c,r,h]};import{jsx as le}from"react/jsx-runtime";var N=({defaultSchema:e,knownSchemaList:a=[],...n})=>{let[i,o]=I(e),[t,r]=I(a),[s]=W();return fe(()=>{if(s){let h=he(s.map(({name:c})=>c));r(h)}},[s]),le(u.Provider,{value:{provided:!0,schema:i,schemaList:a??t,setSchema:o,setSchemaList:r},...n})};import{useCallback as R,useEffect as de}from"react";import{useSearchParams as ue}from"react-router-dom";import{useContextEx as Se}from"@xyo-network/react-shared";var E=(e=!1)=>Se(u,"Schema",e);import{jsx as C}from"react/jsx-runtime";var pe=({children:e})=>{let{schema:a,setSchema:n,schemaList:i}=E(),[o,t]=ue(),r=o.get("schema"),s=R(c=>{c?(o.set("schema",c),t(o,{replace:!0}),n?.(c)):o.delete("network")},[o,t,n]),h=R(c=>{s(c),n?.(c)},[s,n]);return de(()=>{r!==a&&(r===void 0&&a!==void 0?h(a):r&&n?.(r))},[r,a,s,n,h]),C(u.Provider,{value:{provided:!0,schema:a,schemaList:i,setSchema:h},children:e})},Rt=({knownSchemaList:e,defaultSchema:a,...n})=>C(N,{knownSchemaList:e,defaultSchema:a,children:C(pe,{...n})});import{jsx as x,jsxs as Ee}from"react/jsx-runtime";var Tt=({onChange:e,variant:a="outlined",...n})=>{let{schema:i,setSchema:o,schemaList:t}=E(!1);return Ee(Pe,{variant:a,size:"small",value:i??"none",onChange:(r,s)=>{r.target.value!==i&&(e?.(r,s),o?.(r.target.value))},renderValue:r=>x(ye,{children:r==="none"?"- None -":r}),...n,children:[t?.map((r,s)=>x(D,{value:r,children:r},s)),x(D,{value:"none",children:"- None -"},"none")]})};export{u as SchemaContext,N as SchemaMemoryProvider,V as SchemaProperty,Rt as SchemaRouteProvider,Tt as SchemaSelectEx,qe as useGetSchemaPayload,E as useSchema,Ke as useSchemaDefinitions,rt as useSchemaList,W as useSchemaStats};
1
+ // src/components/Property/SchemaProperty.tsx
2
+ import { NewReleases as NewReleasesIcon, OpenInNew as OpenInNewIcon, Verified as VerifiedIcon } from "@mui/icons-material";
3
+ import { IconButton } from "@mui/material";
4
+ import { useAsyncEffect } from "@xylabs/react-async-effect";
5
+ import { LinkEx } from "@xylabs/react-link";
6
+ import { useEvent } from "@xyo-network/react-event";
7
+ import { Property, PropertyValue } from "@xyo-network/react-property";
8
+ import { SchemaCache } from "@xyo-network/schema-cache";
9
+ import { forwardRef, useState } from "react";
10
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
11
+ var useResolveSchema = (schema) => {
12
+ const [entry, setEntry] = useState();
13
+ useAsyncEffect(
14
+ // eslint-disable-next-line react-hooks/exhaustive-deps
15
+ async (mounted) => {
16
+ if (schema) {
17
+ const entry2 = await SchemaCache.instance.get(schema);
18
+ if (mounted()) {
19
+ setEntry(entry2);
20
+ }
21
+ }
22
+ },
23
+ [schema]
24
+ );
25
+ return entry;
26
+ };
27
+ var SchemaProperty = forwardRef(
28
+ ({ showLinkNames = true, showOpenNewWindowLink = true, showStatusIcon = true, titleProps, value, ...props }, forwardedRef) => {
29
+ const resolvedSchema = useResolveSchema(value);
30
+ const [buttonRef, buttonDispatch] = useEvent();
31
+ const [divRef, divDispatch] = useEvent();
32
+ const onClick = (dispatch, openNewWindow = false) => {
33
+ dispatch?.(
34
+ "schema",
35
+ "click",
36
+ JSON.stringify({
37
+ openNewWindow,
38
+ schema: value
39
+ })
40
+ );
41
+ };
42
+ return /* @__PURE__ */ jsxs(Property, { ref: forwardedRef, title: "Schema", value, tip: "Schema sent with the payload", titleProps, ...props, children: [
43
+ value && showStatusIcon ? resolvedSchema === null ? /* @__PURE__ */ jsx(IconButton, { ref: buttonRef, size: "small", onClick: () => onClick(buttonDispatch), children: /* @__PURE__ */ jsx(NewReleasesIcon, { color: "warning", fontSize: "inherit" }) }) : resolvedSchema === void 0 ? /* @__PURE__ */ jsx(IconButton, { ref: buttonRef, size: "small", onClick: () => onClick(buttonDispatch), children: /* @__PURE__ */ jsx(NewReleasesIcon, { color: "disabled", fontSize: "inherit" }) }) : /* @__PURE__ */ jsx(IconButton, { rel: "noopener noreferrer", size: "small", target: "_blank", href: resolvedSchema?.huri?.href ?? "", children: /* @__PURE__ */ jsx(VerifiedIcon, { color: "success", fontSize: "inherit" }) }) : null,
44
+ value ? /* @__PURE__ */ jsxs(Fragment, { children: [
45
+ showLinkNames ? /* @__PURE__ */ jsx(LinkEx, { display: "block", width: "100%", sx: { cursor: "pointer" }, children: /* @__PURE__ */ jsx(PropertyValue, { ref: divRef, value, title: "view schema", onClick: () => onClick(divDispatch) }) }) : /* @__PURE__ */ jsx(PropertyValue, { ref: divRef, value, title: "view schema", onClick: () => onClick(divDispatch) }),
46
+ showOpenNewWindowLink ? /* @__PURE__ */ jsx(IconButton, { ref: buttonRef, size: "small", onClick: () => onClick(buttonDispatch, true), children: /* @__PURE__ */ jsx(OpenInNewIcon, { fontSize: "inherit" }) }) : null
47
+ ] }) : null
48
+ ] });
49
+ }
50
+ );
51
+ SchemaProperty.displayName = "SchemaProperty";
52
+
53
+ // src/components/SelectEx/SchemaSelectEx.tsx
54
+ import { MenuItem, Typography } from "@mui/material";
55
+ import { SelectEx } from "@xylabs/react-select";
56
+
57
+ // src/contexts/Schema/Context.ts
58
+ import { createContextEx } from "@xyo-network/react-shared";
59
+ var SchemaContext = createContextEx();
60
+
61
+ // src/contexts/Schema/Provider/Memory.tsx
62
+ import { compact } from "@xylabs/lodash";
63
+ import { useEffect as useEffect2, useState as useState6 } from "react";
64
+
65
+ // src/hooks/useGetSchema.tsx
66
+ import { useAsyncEffect as useAsyncEffect2 } from "@xylabs/react-async-effect";
67
+ import { PayloadBuilder } from "@xyo-network/payload-builder";
68
+ import { ModuleErrorSchema } from "@xyo-network/payload-model";
69
+ import { SchemaCache as SchemaCache2 } from "@xyo-network/schema-cache";
70
+ import { useState as useState2 } from "react";
71
+ var useGetSchemaPayload = (schema) => {
72
+ const [notFound, setNotFound] = useState2(false);
73
+ const [xyoError, setError] = useState2();
74
+ const [schemaCacheEntry, setSchemaCacheEntry] = useState2();
75
+ const [schemaLocal, setSchemaLocal] = useState2();
76
+ useAsyncEffect2(
77
+ // eslint-disable-next-line react-hooks/exhaustive-deps
78
+ async (mounted) => {
79
+ const firstRequest = !notFound && !schemaCacheEntry && !xyoError;
80
+ const schemaChanged = schema !== schemaLocal;
81
+ if (schema && firstRequest || schema && schemaChanged) {
82
+ try {
83
+ const schemaCacheEntry2 = await SchemaCache2.instance.get(schema);
84
+ if (mounted()) {
85
+ setSchemaCacheEntry(schemaCacheEntry2);
86
+ setNotFound(schemaCacheEntry2 === null || schemaCacheEntry2 === void 0);
87
+ }
88
+ } catch (e) {
89
+ const error = e;
90
+ console.error(e);
91
+ if (mounted()) {
92
+ setError({ message: error.message, schema: ModuleErrorSchema, sources: [] });
93
+ }
94
+ }
95
+ }
96
+ if (schemaChanged) {
97
+ setSchemaLocal(schema);
98
+ }
99
+ },
100
+ [xyoError, notFound, schema, schemaLocal, schemaCacheEntry]
101
+ );
102
+ return {
103
+ notFound,
104
+ schemaHuri: schemaCacheEntry?.huri,
105
+ schemaPayload: schemaCacheEntry ? new PayloadBuilder(schemaCacheEntry?.payload).fields(schemaCacheEntry.payload).build() : schemaCacheEntry,
106
+ xyoError
107
+ };
108
+ };
109
+
110
+ // src/hooks/useSchemaDefinitions.tsx
111
+ import { useAsyncEffect as useAsyncEffect3 } from "@xylabs/react-async-effect";
112
+ import { SchemaCache as SchemaCache3 } from "@xyo-network/schema-cache";
113
+ import { useState as useState3 } from "react";
114
+ var useSchemaDefinitions = (schemaList) => {
115
+ const [schemaPayloads, setSchemaPayloads] = useState3();
116
+ useAsyncEffect3(
117
+ // eslint-disable-next-line react-hooks/exhaustive-deps
118
+ async (mounted) => {
119
+ if (schemaList) {
120
+ const promiseResults = await Promise.allSettled(schemaList?.map(({ name }) => SchemaCache3.instance.get(name)));
121
+ if (mounted()) {
122
+ setSchemaPayloads(
123
+ promiseResults.map((result) => result.status === "fulfilled" ? result.value?.payload : void 0).filter((item) => item !== void 0 && item !== null)
124
+ );
125
+ }
126
+ }
127
+ },
128
+ [schemaList]
129
+ );
130
+ return schemaPayloads;
131
+ };
132
+
133
+ // src/hooks/useSchemaList.tsx
134
+ import { useAsyncEffect as useAsyncEffect4 } from "@xylabs/react-async-effect";
135
+ import { SchemaListQuerySchema } from "@xyo-network/diviner-schema-list-model";
136
+ import { useWeakDivinerFromNode } from "@xyo-network/react-diviner";
137
+ import { useEffect, useMemo, useState as useState4 } from "react";
138
+ var useSchemaList = (address, nameOrAddress = "SchemaListDiviner") => {
139
+ const [schemaList, setSchemaList] = useState4();
140
+ const [error, setError] = useState4();
141
+ const [diviner, divinerError] = useWeakDivinerFromNode(nameOrAddress);
142
+ const query = useMemo(
143
+ () => address ? [
144
+ {
145
+ address,
146
+ schema: SchemaListQuerySchema
147
+ }
148
+ ] : void 0,
149
+ [address]
150
+ );
151
+ useEffect(() => {
152
+ if (diviner === null) {
153
+ setSchemaList(null);
154
+ setError(void 0);
155
+ }
156
+ }, [diviner]);
157
+ useAsyncEffect4(
158
+ // eslint-disable-next-line react-hooks/exhaustive-deps, require-await
159
+ async (mounted) => {
160
+ const divinerInstance = diviner?.deref();
161
+ if (divinerInstance) {
162
+ try {
163
+ const response = await divinerInstance.divine(query);
164
+ if (mounted()) {
165
+ setSchemaList(response?.[0]);
166
+ setError(void 0);
167
+ }
168
+ } catch (e) {
169
+ setError(e);
170
+ setSchemaList(void 0);
171
+ }
172
+ }
173
+ },
174
+ [diviner, divinerError, query]
175
+ );
176
+ return [schemaList, error];
177
+ };
178
+
179
+ // src/hooks/useSchemaStats.tsx
180
+ import { useAsyncEffect as useAsyncEffect5 } from "@xylabs/react-async-effect";
181
+ import {
182
+ SchemaStatsDivinerSchema,
183
+ SchemaStatsQuerySchema
184
+ } from "@xyo-network/diviner-schema-stats-model";
185
+ import { TYPES } from "@xyo-network/node-core-types";
186
+ import { isPayloadOfSchemaTypeWithMeta } from "@xyo-network/payload-model";
187
+ import { useWeakDivinerFromNode as useWeakDivinerFromNode2 } from "@xyo-network/react-diviner";
188
+ import { useMemo as useMemo2, useState as useState5 } from "react";
189
+ var useSchemaStats = (statsAddress, nameOrAddress = TYPES.SchemaStatsDiviner) => {
190
+ const [refresh, setRefresh] = useState5(1);
191
+ const [diviner, divinerError] = useWeakDivinerFromNode2(nameOrAddress);
192
+ const [error, setError] = useState5();
193
+ const refreshHistory = () => setRefresh((previous) => previous + 1);
194
+ const [schemaList, setSchemaList] = useState5();
195
+ const query = useMemo2(
196
+ () => ({
197
+ address: statsAddress,
198
+ schema: SchemaStatsQuerySchema
199
+ }),
200
+ [statsAddress]
201
+ );
202
+ useAsyncEffect5(
203
+ // eslint-disable-next-line react-hooks/exhaustive-deps
204
+ async (mounted) => {
205
+ const instance = diviner?.deref();
206
+ if (instance) {
207
+ if (divinerError) {
208
+ if (mounted()) {
209
+ setError(divinerError);
210
+ setSchemaList(void 0);
211
+ }
212
+ } else {
213
+ try {
214
+ const schemas = (await instance.divine([query])).filter(isPayloadOfSchemaTypeWithMeta(SchemaStatsDivinerSchema));
215
+ if (mounted()) {
216
+ setSchemaList(schemas);
217
+ setError(void 0);
218
+ }
219
+ } catch (ex) {
220
+ setError(ex);
221
+ setSchemaList(void 0);
222
+ }
223
+ }
224
+ }
225
+ },
226
+ [diviner, refresh, divinerError, query]
227
+ );
228
+ return [schemaList, error, refreshHistory];
229
+ };
230
+
231
+ // src/contexts/Schema/Provider/Memory.tsx
232
+ import { jsx as jsx2 } from "react/jsx-runtime";
233
+ var SchemaMemoryProvider = ({ defaultSchema, knownSchemaList = [], ...props }) => {
234
+ const [schema, setSchema] = useState6(defaultSchema);
235
+ const [schemaList, setSchemaList] = useState6(knownSchemaList);
236
+ const [fetchedSchemaStats] = useSchemaStats();
237
+ useEffect2(() => {
238
+ if (fetchedSchemaStats) {
239
+ const schemaList2 = compact(fetchedSchemaStats.map(({ name }) => name));
240
+ setSchemaList(schemaList2);
241
+ }
242
+ }, [fetchedSchemaStats]);
243
+ return /* @__PURE__ */ jsx2(SchemaContext.Provider, { value: { provided: true, schema, schemaList: knownSchemaList ?? schemaList, setSchema, setSchemaList }, ...props });
244
+ };
245
+
246
+ // src/contexts/Schema/Provider/Route.tsx
247
+ import { useCallback, useEffect as useEffect3 } from "react";
248
+ import { useSearchParams } from "react-router-dom";
249
+
250
+ // src/contexts/Schema/use.ts
251
+ import { useContextEx } from "@xyo-network/react-shared";
252
+ var useSchema = (required = false) => {
253
+ return useContextEx(SchemaContext, "Schema", required);
254
+ };
255
+
256
+ // src/contexts/Schema/Provider/Route.tsx
257
+ import { jsx as jsx3 } from "react/jsx-runtime";
258
+ var SchemaRouteProviderInner = ({ children }) => {
259
+ const { schema, setSchema, schemaList } = useSchema();
260
+ const [params, setParams] = useSearchParams();
261
+ const routeSchema = params.get("schema");
262
+ const setSchemaParam = useCallback(
263
+ (schema2) => {
264
+ if (schema2) {
265
+ params.set("schema", schema2);
266
+ setParams(params, { replace: true });
267
+ setSchema?.(schema2);
268
+ } else {
269
+ params.delete("network");
270
+ }
271
+ },
272
+ [params, setParams, setSchema]
273
+ );
274
+ const setSchemaLocal = useCallback(
275
+ (schema2) => {
276
+ setSchemaParam(schema2);
277
+ setSchema?.(schema2);
278
+ },
279
+ [setSchemaParam, setSchema]
280
+ );
281
+ useEffect3(() => {
282
+ if (routeSchema !== schema) {
283
+ if (routeSchema === void 0 && schema !== void 0) {
284
+ setSchemaLocal(schema);
285
+ } else if (routeSchema) {
286
+ setSchema?.(routeSchema);
287
+ }
288
+ }
289
+ }, [routeSchema, schema, setSchemaParam, setSchema, setSchemaLocal]);
290
+ return /* @__PURE__ */ jsx3(SchemaContext.Provider, { value: { provided: true, schema, schemaList, setSchema: setSchemaLocal }, children });
291
+ };
292
+ var SchemaRouteProvider = ({ knownSchemaList, defaultSchema, ...props }) => {
293
+ return /* @__PURE__ */ jsx3(SchemaMemoryProvider, { knownSchemaList, defaultSchema, children: /* @__PURE__ */ jsx3(SchemaRouteProviderInner, { ...props }) });
294
+ };
295
+
296
+ // src/components/SelectEx/SchemaSelectEx.tsx
297
+ import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
298
+ var SchemaSelectEx = ({ onChange, variant = "outlined", ...props }) => {
299
+ const { schema, setSchema, schemaList } = useSchema(false);
300
+ return /* @__PURE__ */ jsxs2(
301
+ SelectEx,
302
+ {
303
+ variant,
304
+ size: "small",
305
+ value: schema ?? "none",
306
+ onChange: (event, child) => {
307
+ if (event.target.value !== schema) {
308
+ onChange?.(event, child);
309
+ setSchema?.(event.target.value);
310
+ }
311
+ },
312
+ renderValue: (value) => {
313
+ return /* @__PURE__ */ jsx4(Typography, { children: value === "none" ? "- None -" : value });
314
+ },
315
+ ...props,
316
+ children: [
317
+ schemaList?.map((schema2, index) => {
318
+ return /* @__PURE__ */ jsx4(MenuItem, { value: schema2, children: schema2 }, index);
319
+ }),
320
+ /* @__PURE__ */ jsx4(MenuItem, { value: "none", children: "- None -" }, "none")
321
+ ]
322
+ }
323
+ );
324
+ };
325
+ export {
326
+ SchemaContext,
327
+ SchemaMemoryProvider,
328
+ SchemaProperty,
329
+ SchemaRouteProvider,
330
+ SchemaSelectEx,
331
+ useGetSchemaPayload,
332
+ useSchema,
333
+ useSchemaDefinitions,
334
+ useSchemaList,
335
+ useSchemaStats
336
+ };
2
337
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/Property/SchemaProperty.tsx","../../src/components/SelectEx/SchemaSelectEx.tsx","../../src/contexts/Schema/Context.ts","../../src/contexts/Schema/Provider/Memory.tsx","../../src/hooks/useGetSchema.tsx","../../src/hooks/useSchemaDefinitions.tsx","../../src/hooks/useSchemaList.tsx","../../src/hooks/useSchemaStats.tsx","../../src/contexts/Schema/Provider/Route.tsx","../../src/contexts/Schema/use.ts"],"sourcesContent":["import { NewReleases as NewReleasesIcon, OpenInNew as OpenInNewIcon, Verified as VerifiedIcon } from '@mui/icons-material'\nimport { IconButton } from '@mui/material'\nimport { useAsyncEffect } from '@xylabs/react-async-effect'\nimport { LinkEx } from '@xylabs/react-link'\nimport { EventDispatch, EventNoun, useEvent } from '@xyo-network/react-event'\nimport { Property, PropertyProps, PropertyValue } from '@xyo-network/react-property'\nimport { SchemaCache, SchemaCacheEntry } from '@xyo-network/schema-cache'\nimport { forwardRef, useState } from 'react'\n\nexport type SchemaPropertyProps = PropertyProps & {\n showLinkNames?: boolean\n showOpenNewWindowLink?: boolean\n showStatusIcon?: boolean\n value?: string\n}\n\nconst useResolveSchema = (schema?: string) => {\n const [entry, setEntry] = useState<SchemaCacheEntry | null>()\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps\n async (mounted) => {\n if (schema) {\n const entry = await SchemaCache.instance.get(schema)\n if (mounted()) {\n setEntry(entry)\n }\n }\n },\n [schema],\n )\n return entry\n}\n\nexport const SchemaProperty = forwardRef<HTMLDivElement, SchemaPropertyProps>(\n ({ showLinkNames = true, showOpenNewWindowLink = true, showStatusIcon = true, titleProps, value, ...props }, forwardedRef) => {\n const resolvedSchema = useResolveSchema(value)\n const [buttonRef, buttonDispatch] = useEvent<HTMLButtonElement>()\n const [divRef, divDispatch] = useEvent<HTMLDivElement>()\n\n const onClick = (dispatch?: EventDispatch<EventNoun, 'click', string>, openNewWindow = false) => {\n dispatch?.(\n 'schema',\n 'click',\n JSON.stringify({\n openNewWindow,\n schema: value,\n }),\n )\n }\n\n return (\n <Property ref={forwardedRef} title=\"Schema\" value={value} tip=\"Schema sent with the payload\" titleProps={titleProps} {...props}>\n {value && showStatusIcon ?\n resolvedSchema === null ?\n <IconButton ref={buttonRef} size=\"small\" onClick={() => onClick(buttonDispatch)}>\n <NewReleasesIcon color=\"warning\" fontSize=\"inherit\" />\n </IconButton>\n : resolvedSchema === undefined ?\n <IconButton ref={buttonRef} size=\"small\" onClick={() => onClick(buttonDispatch)}>\n <NewReleasesIcon color=\"disabled\" fontSize=\"inherit\" />\n </IconButton>\n : <IconButton rel=\"noopener noreferrer\" size=\"small\" target=\"_blank\" href={resolvedSchema?.huri?.href ?? ''}>\n <VerifiedIcon color=\"success\" fontSize=\"inherit\" />\n </IconButton>\n\n : null}\n {value ?\n <>\n {showLinkNames ?\n <LinkEx display=\"block\" width=\"100%\" sx={{ cursor: 'pointer' }}>\n <PropertyValue ref={divRef} value={value} title=\"view schema\" onClick={() => onClick(divDispatch)} />\n </LinkEx>\n : <PropertyValue ref={divRef} value={value} title=\"view schema\" onClick={() => onClick(divDispatch)} />}\n {showOpenNewWindowLink ?\n <IconButton ref={buttonRef} size=\"small\" onClick={() => onClick(buttonDispatch, true)}>\n <OpenInNewIcon fontSize=\"inherit\" />\n </IconButton>\n : null}\n </>\n : null}\n </Property>\n )\n },\n)\n\nSchemaProperty.displayName = 'SchemaProperty'\n","import { MenuItem, Typography } from '@mui/material'\nimport { SelectEx, SelectExProps } from '@xylabs/react-select'\n\nimport { useSchema } from '../../contexts'\n\nexport type SchemaSelectExProps = SelectExProps<string>\n\nexport const SchemaSelectEx: React.FC<SchemaSelectExProps> = ({ onChange, variant = 'outlined', ...props }) => {\n const { schema, setSchema, schemaList } = useSchema(false)\n\n return (\n <SelectEx\n variant={variant}\n size=\"small\"\n value={schema ?? 'none'}\n onChange={(event, child) => {\n if (event.target.value !== schema) {\n onChange?.(event, child)\n setSchema?.(event.target.value)\n }\n }}\n renderValue={(value) => {\n return <Typography>{value === 'none' ? '- None -' : value}</Typography>\n }}\n {...props}\n >\n {schemaList?.map((schema, index) => {\n return (\n <MenuItem key={index} value={schema}>\n {schema}\n </MenuItem>\n )\n })}\n <MenuItem key=\"none\" value=\"none\">\n - None -\n </MenuItem>\n </SelectEx>\n )\n}\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport { SchemaContextState } from './State'\n\nexport const SchemaContext = createContextEx<SchemaContextState>()\n","import { compact } from '@xylabs/lodash'\nimport { WithChildren } from '@xylabs/react-shared'\nimport { useEffect, useState } from 'react'\n\nimport { useSchemaStats } from '../../../hooks'\nimport { SchemaContext } from '../Context'\nimport { SchemaProviderProps } from './Props'\n\nexport const SchemaMemoryProvider: React.FC<WithChildren<SchemaProviderProps>> = ({ defaultSchema, knownSchemaList = [], ...props }) => {\n const [schema, setSchema] = useState(defaultSchema)\n const [schemaList, setSchemaList] = useState<string[] | undefined>(knownSchemaList)\n const [fetchedSchemaStats] = useSchemaStats()\n\n useEffect(() => {\n if (fetchedSchemaStats) {\n const schemaList = compact(fetchedSchemaStats.map(({ name }) => name))\n setSchemaList(schemaList)\n }\n }, [fetchedSchemaStats])\n\n return <SchemaContext.Provider value={{ provided: true, schema, schemaList: knownSchemaList ?? schemaList, setSchema, setSchemaList }} {...props} />\n}\n","import { useAsyncEffect } from '@xylabs/react-async-effect'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { ModuleError, ModuleErrorSchema } from '@xyo-network/payload-model'\nimport { SchemaCache, SchemaCacheEntry } from '@xyo-network/schema-cache'\nimport { SchemaPayload } from '@xyo-network/schema-payload-plugin'\nimport { useState } from 'react'\n\n/**\n * Gets a Huri and schema payload from a schema string\n */\nconst useGetSchemaPayload = (schema?: string) => {\n const [notFound, setNotFound] = useState(false)\n const [xyoError, setError] = useState<ModuleError>()\n const [schemaCacheEntry, setSchemaCacheEntry] = useState<SchemaCacheEntry | null | undefined>()\n const [schemaLocal, setSchemaLocal] = useState<string>()\n\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps\n async (mounted) => {\n const firstRequest = !notFound && !schemaCacheEntry && !xyoError\n const schemaChanged = schema !== schemaLocal\n\n if ((schema && firstRequest) || (schema && schemaChanged)) {\n try {\n const schemaCacheEntry = await SchemaCache.instance.get(schema)\n if (mounted()) {\n setSchemaCacheEntry(schemaCacheEntry)\n setNotFound(schemaCacheEntry === null || schemaCacheEntry === undefined)\n }\n } catch (e) {\n const error = e as Error\n console.error(e)\n if (mounted()) {\n setError({ message: error.message, schema: ModuleErrorSchema, sources: [] })\n }\n }\n }\n if (schemaChanged) {\n setSchemaLocal(schema)\n }\n },\n [xyoError, notFound, schema, schemaLocal, schemaCacheEntry],\n )\n\n return {\n notFound,\n schemaHuri: schemaCacheEntry?.huri,\n schemaPayload:\n schemaCacheEntry ? new PayloadBuilder<SchemaPayload>(schemaCacheEntry?.payload).fields(schemaCacheEntry.payload).build() : schemaCacheEntry,\n xyoError,\n }\n}\n\nexport { useGetSchemaPayload }\n","import { useAsyncEffect } from '@xylabs/react-async-effect'\nimport { SchemaCache } from '@xyo-network/schema-cache'\nimport { SchemaPayload } from '@xyo-network/schema-payload-plugin'\nimport { useState } from 'react'\n\nexport type SchemaList = { name: string }\n\nexport const useSchemaDefinitions = (schemaList?: SchemaList[]): SchemaPayload[] | undefined => {\n const [schemaPayloads, setSchemaPayloads] = useState<SchemaPayload[]>()\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps\n async (mounted) => {\n if (schemaList) {\n const promiseResults = await Promise.allSettled(schemaList?.map(({ name }) => SchemaCache.instance.get(name)))\n if (mounted()) {\n setSchemaPayloads(\n promiseResults\n .map((result) => (result.status === 'fulfilled' ? result.value?.payload : undefined))\n .filter((item) => item !== undefined && item !== null) as SchemaPayload[],\n )\n }\n }\n },\n [schemaList],\n )\n return schemaPayloads\n}\n","import { Address } from '@xylabs/hex'\nimport { useAsyncEffect } from '@xylabs/react-async-effect'\nimport { SchemaListPayload, SchemaListQueryPayload, SchemaListQuerySchema } from '@xyo-network/diviner-schema-list-model'\nimport { WithMeta } from '@xyo-network/payload-model'\nimport { useWeakDivinerFromNode } from '@xyo-network/react-diviner'\nimport { useEffect, useMemo, useState } from 'react'\n\nexport const useSchemaList = (address?: Address, nameOrAddress = 'SchemaListDiviner'): [SchemaListPayload | null | undefined, Error | undefined] => {\n const [schemaList, setSchemaList] = useState<SchemaListPayload | null>()\n const [error, setError] = useState<Error>()\n const [diviner, divinerError] = useWeakDivinerFromNode(nameOrAddress)\n\n const query: SchemaListQueryPayload[] | undefined = useMemo(\n () =>\n address ?\n [\n {\n address,\n schema: SchemaListQuerySchema,\n },\n ]\n : undefined,\n [address],\n )\n\n useEffect(() => {\n if (diviner === null) {\n setSchemaList(null)\n setError(undefined)\n }\n }, [diviner])\n\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps, require-await\n async (mounted) => {\n const divinerInstance = diviner?.deref()\n if (divinerInstance) {\n try {\n const response = (await divinerInstance.divine(query)) as WithMeta<SchemaListPayload>[]\n if (mounted()) {\n setSchemaList(response?.[0])\n setError(undefined)\n }\n } catch (e) {\n setError(e as Error)\n setSchemaList(undefined)\n }\n }\n },\n [diviner, divinerError, query],\n )\n return [schemaList, error]\n}\n","import { Address } from '@xylabs/hex'\nimport { useAsyncEffect } from '@xylabs/react-async-effect'\nimport {\n SchemaStatsDivinerSchema,\n SchemaStatsPayload,\n SchemaStatsQueryPayload,\n SchemaStatsQuerySchema,\n} from '@xyo-network/diviner-schema-stats-model'\nimport { TYPES } from '@xyo-network/node-core-types'\nimport { isPayloadOfSchemaTypeWithMeta, WithMeta, WithSources } from '@xyo-network/payload-model'\nimport { useWeakDivinerFromNode } from '@xyo-network/react-diviner'\nimport { Dispatch, SetStateAction, useMemo, useState } from 'react'\n\nexport const useSchemaStats = (\n statsAddress?: Address,\n nameOrAddress = TYPES.SchemaStatsDiviner,\n): [SchemaStatsPayload[] | undefined, Error | undefined, Dispatch<SetStateAction<number>>] => {\n const [refresh, setRefresh] = useState(1)\n const [diviner, divinerError] = useWeakDivinerFromNode(nameOrAddress)\n const [error, setError] = useState<Error>()\n const refreshHistory = () => setRefresh((previous) => previous + 1)\n\n const [schemaList, setSchemaList] = useState<WithSources<WithMeta<SchemaStatsPayload>>[]>()\n\n const query: SchemaStatsQueryPayload = useMemo(\n () => ({\n address: statsAddress,\n schema: SchemaStatsQuerySchema,\n }),\n [statsAddress],\n )\n\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps\n async (mounted) => {\n const instance = diviner?.deref()\n if (instance) {\n if (divinerError) {\n if (mounted()) {\n setError(divinerError)\n setSchemaList(undefined)\n }\n } else {\n try {\n const schemas = (await instance.divine([query])).filter(isPayloadOfSchemaTypeWithMeta(SchemaStatsDivinerSchema)) as WithSources<\n WithMeta<SchemaStatsPayload>\n >[]\n if (mounted()) {\n setSchemaList(schemas)\n setError(undefined)\n }\n } catch (ex) {\n setError(ex as Error)\n setSchemaList(undefined)\n }\n }\n }\n },\n [diviner, refresh, divinerError, query],\n )\n\n return [schemaList, error, refreshHistory]\n}\n","import type { WithChildren } from '@xylabs/react-shared'\nimport { useCallback, useEffect } from 'react'\nimport { useSearchParams } from 'react-router-dom'\n\nimport { SchemaContext } from '../Context'\nimport { useSchema } from '../use'\nimport { SchemaMemoryProvider } from './Memory'\nimport { SchemaProviderProps } from './Props'\n\nconst SchemaRouteProviderInner: React.FC<WithChildren> = ({ children }) => {\n const { schema, setSchema, schemaList } = useSchema()\n\n const [params, setParams] = useSearchParams()\n\n const routeSchema = params.get('schema')\n\n //update the network stored in the route\n const setSchemaParam = useCallback(\n (schema?: string) => {\n if (schema) {\n params.set('schema', schema)\n setParams(params, { replace: true })\n setSchema?.(schema)\n } else {\n params.delete('network')\n }\n },\n [params, setParams, setSchema],\n )\n\n //if the network is actively changed, update both memory and route\n const setSchemaLocal = useCallback(\n (schema: string) => {\n setSchemaParam(schema)\n setSchema?.(schema)\n },\n [setSchemaParam, setSchema],\n )\n\n //sync memory and route storage of network\n useEffect(() => {\n if (routeSchema !== schema) {\n if (routeSchema === undefined && schema !== undefined) {\n //if the route does not have a network selected, use what is in the memory context\n setSchemaLocal(schema)\n } else if (routeSchema) {\n //if the route has a selection and it is different from memory, update memory\n setSchema?.(routeSchema)\n }\n }\n }, [routeSchema, schema, setSchemaParam, setSchema, setSchemaLocal])\n\n return <SchemaContext.Provider value={{ provided: true, schema, schemaList, setSchema: setSchemaLocal }}>{children}</SchemaContext.Provider>\n}\n\nexport const SchemaRouteProvider: React.FC<WithChildren<SchemaProviderProps>> = ({ knownSchemaList, defaultSchema, ...props }) => {\n return (\n <SchemaMemoryProvider knownSchemaList={knownSchemaList} defaultSchema={defaultSchema}>\n <SchemaRouteProviderInner {...props} />\n </SchemaMemoryProvider>\n )\n}\n","import { useContextEx } from '@xyo-network/react-shared'\n\nimport { SchemaContext } from './Context'\nimport { SchemaContextState } from './State'\n\nexport const useSchema = (required = false) => {\n return useContextEx<SchemaContextState>(SchemaContext, 'Schema', required)\n}\n"],"mappings":"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","names":["NewReleasesIcon","OpenInNewIcon","VerifiedIcon","IconButton","useAsyncEffect","LinkEx","useEvent","Property","PropertyValue","SchemaCache","forwardRef","useState","Fragment","jsx","jsxs","useResolveSchema","schema","entry","setEntry","mounted","SchemaProperty","showLinkNames","showOpenNewWindowLink","showStatusIcon","titleProps","value","props","forwardedRef","resolvedSchema","buttonRef","buttonDispatch","divRef","divDispatch","onClick","dispatch","openNewWindow","MenuItem","Typography","SelectEx","createContextEx","SchemaContext","compact","useEffect","useState","useAsyncEffect","PayloadBuilder","ModuleErrorSchema","SchemaCache","useState","useGetSchemaPayload","schema","notFound","setNotFound","xyoError","setError","schemaCacheEntry","setSchemaCacheEntry","schemaLocal","setSchemaLocal","mounted","firstRequest","schemaChanged","e","error","useAsyncEffect","SchemaCache","useState","useSchemaDefinitions","schemaList","schemaPayloads","setSchemaPayloads","mounted","promiseResults","name","result","item","useAsyncEffect","SchemaListQuerySchema","useWeakDivinerFromNode","useEffect","useMemo","useState","useSchemaList","address","nameOrAddress","schemaList","setSchemaList","error","setError","diviner","divinerError","query","mounted","divinerInstance","response","e","useAsyncEffect","SchemaStatsDivinerSchema","SchemaStatsQuerySchema","TYPES","isPayloadOfSchemaTypeWithMeta","useWeakDivinerFromNode","useMemo","useState","useSchemaStats","statsAddress","nameOrAddress","refresh","setRefresh","diviner","divinerError","error","setError","refreshHistory","previous","schemaList","setSchemaList","query","mounted","instance","schemas","ex","jsx","SchemaMemoryProvider","defaultSchema","knownSchemaList","props","schema","setSchema","useState","schemaList","setSchemaList","fetchedSchemaStats","useSchemaStats","useEffect","compact","name","SchemaContext","useCallback","useEffect","useSearchParams","useContextEx","useSchema","required","useContextEx","SchemaContext","jsx","SchemaRouteProviderInner","children","schema","setSchema","schemaList","useSchema","params","setParams","useSearchParams","routeSchema","setSchemaParam","useCallback","setSchemaLocal","useEffect","SchemaContext","SchemaRouteProvider","knownSchemaList","defaultSchema","props","SchemaMemoryProvider","jsx","jsxs","SchemaSelectEx","onChange","variant","props","schema","setSchema","schemaList","useSchema","SelectEx","event","child","value","Typography","index","MenuItem"]}
1
+ {"version":3,"sources":["../../src/components/Property/SchemaProperty.tsx","../../src/components/SelectEx/SchemaSelectEx.tsx","../../src/contexts/Schema/Context.ts","../../src/contexts/Schema/Provider/Memory.tsx","../../src/hooks/useGetSchema.tsx","../../src/hooks/useSchemaDefinitions.tsx","../../src/hooks/useSchemaList.tsx","../../src/hooks/useSchemaStats.tsx","../../src/contexts/Schema/Provider/Route.tsx","../../src/contexts/Schema/use.ts"],"sourcesContent":["import { NewReleases as NewReleasesIcon, OpenInNew as OpenInNewIcon, Verified as VerifiedIcon } from '@mui/icons-material'\nimport { IconButton } from '@mui/material'\nimport { useAsyncEffect } from '@xylabs/react-async-effect'\nimport { LinkEx } from '@xylabs/react-link'\nimport { EventDispatch, EventNoun, useEvent } from '@xyo-network/react-event'\nimport { Property, PropertyProps, PropertyValue } from '@xyo-network/react-property'\nimport { SchemaCache, SchemaCacheEntry } from '@xyo-network/schema-cache'\nimport { forwardRef, useState } from 'react'\n\nexport type SchemaPropertyProps = PropertyProps & {\n showLinkNames?: boolean\n showOpenNewWindowLink?: boolean\n showStatusIcon?: boolean\n value?: string\n}\n\nconst useResolveSchema = (schema?: string) => {\n const [entry, setEntry] = useState<SchemaCacheEntry | null>()\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps\n async (mounted) => {\n if (schema) {\n const entry = await SchemaCache.instance.get(schema)\n if (mounted()) {\n setEntry(entry)\n }\n }\n },\n [schema],\n )\n return entry\n}\n\nexport const SchemaProperty = forwardRef<HTMLDivElement, SchemaPropertyProps>(\n ({ showLinkNames = true, showOpenNewWindowLink = true, showStatusIcon = true, titleProps, value, ...props }, forwardedRef) => {\n const resolvedSchema = useResolveSchema(value)\n const [buttonRef, buttonDispatch] = useEvent<HTMLButtonElement>()\n const [divRef, divDispatch] = useEvent<HTMLDivElement>()\n\n const onClick = (dispatch?: EventDispatch<EventNoun, 'click', string>, openNewWindow = false) => {\n dispatch?.(\n 'schema',\n 'click',\n JSON.stringify({\n openNewWindow,\n schema: value,\n }),\n )\n }\n\n return (\n <Property ref={forwardedRef} title=\"Schema\" value={value} tip=\"Schema sent with the payload\" titleProps={titleProps} {...props}>\n {value && showStatusIcon ?\n resolvedSchema === null ?\n <IconButton ref={buttonRef} size=\"small\" onClick={() => onClick(buttonDispatch)}>\n <NewReleasesIcon color=\"warning\" fontSize=\"inherit\" />\n </IconButton>\n : resolvedSchema === undefined ?\n <IconButton ref={buttonRef} size=\"small\" onClick={() => onClick(buttonDispatch)}>\n <NewReleasesIcon color=\"disabled\" fontSize=\"inherit\" />\n </IconButton>\n : <IconButton rel=\"noopener noreferrer\" size=\"small\" target=\"_blank\" href={resolvedSchema?.huri?.href ?? ''}>\n <VerifiedIcon color=\"success\" fontSize=\"inherit\" />\n </IconButton>\n\n : null}\n {value ?\n <>\n {showLinkNames ?\n <LinkEx display=\"block\" width=\"100%\" sx={{ cursor: 'pointer' }}>\n <PropertyValue ref={divRef} value={value} title=\"view schema\" onClick={() => onClick(divDispatch)} />\n </LinkEx>\n : <PropertyValue ref={divRef} value={value} title=\"view schema\" onClick={() => onClick(divDispatch)} />}\n {showOpenNewWindowLink ?\n <IconButton ref={buttonRef} size=\"small\" onClick={() => onClick(buttonDispatch, true)}>\n <OpenInNewIcon fontSize=\"inherit\" />\n </IconButton>\n : null}\n </>\n : null}\n </Property>\n )\n },\n)\n\nSchemaProperty.displayName = 'SchemaProperty'\n","import { MenuItem, Typography } from '@mui/material'\nimport { SelectEx, SelectExProps } from '@xylabs/react-select'\n\nimport { useSchema } from '../../contexts'\n\nexport type SchemaSelectExProps = SelectExProps<string>\n\nexport const SchemaSelectEx: React.FC<SchemaSelectExProps> = ({ onChange, variant = 'outlined', ...props }) => {\n const { schema, setSchema, schemaList } = useSchema(false)\n\n return (\n <SelectEx\n variant={variant}\n size=\"small\"\n value={schema ?? 'none'}\n onChange={(event, child) => {\n if (event.target.value !== schema) {\n onChange?.(event, child)\n setSchema?.(event.target.value)\n }\n }}\n renderValue={(value) => {\n return <Typography>{value === 'none' ? '- None -' : value}</Typography>\n }}\n {...props}\n >\n {schemaList?.map((schema, index) => {\n return (\n <MenuItem key={index} value={schema}>\n {schema}\n </MenuItem>\n )\n })}\n <MenuItem key=\"none\" value=\"none\">\n - None -\n </MenuItem>\n </SelectEx>\n )\n}\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport { SchemaContextState } from './State'\n\nexport const SchemaContext = createContextEx<SchemaContextState>()\n","import { compact } from '@xylabs/lodash'\nimport { WithChildren } from '@xylabs/react-shared'\nimport { useEffect, useState } from 'react'\n\nimport { useSchemaStats } from '../../../hooks'\nimport { SchemaContext } from '../Context'\nimport { SchemaProviderProps } from './Props'\n\nexport const SchemaMemoryProvider: React.FC<WithChildren<SchemaProviderProps>> = ({ defaultSchema, knownSchemaList = [], ...props }) => {\n const [schema, setSchema] = useState(defaultSchema)\n const [schemaList, setSchemaList] = useState<string[] | undefined>(knownSchemaList)\n const [fetchedSchemaStats] = useSchemaStats()\n\n useEffect(() => {\n if (fetchedSchemaStats) {\n const schemaList = compact(fetchedSchemaStats.map(({ name }) => name))\n setSchemaList(schemaList)\n }\n }, [fetchedSchemaStats])\n\n return <SchemaContext.Provider value={{ provided: true, schema, schemaList: knownSchemaList ?? schemaList, setSchema, setSchemaList }} {...props} />\n}\n","import { useAsyncEffect } from '@xylabs/react-async-effect'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { ModuleError, ModuleErrorSchema } from '@xyo-network/payload-model'\nimport { SchemaCache, SchemaCacheEntry } from '@xyo-network/schema-cache'\nimport { SchemaPayload } from '@xyo-network/schema-payload-plugin'\nimport { useState } from 'react'\n\n/**\n * Gets a Huri and schema payload from a schema string\n */\nconst useGetSchemaPayload = (schema?: string) => {\n const [notFound, setNotFound] = useState(false)\n const [xyoError, setError] = useState<ModuleError>()\n const [schemaCacheEntry, setSchemaCacheEntry] = useState<SchemaCacheEntry | null | undefined>()\n const [schemaLocal, setSchemaLocal] = useState<string>()\n\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps\n async (mounted) => {\n const firstRequest = !notFound && !schemaCacheEntry && !xyoError\n const schemaChanged = schema !== schemaLocal\n\n if ((schema && firstRequest) || (schema && schemaChanged)) {\n try {\n const schemaCacheEntry = await SchemaCache.instance.get(schema)\n if (mounted()) {\n setSchemaCacheEntry(schemaCacheEntry)\n setNotFound(schemaCacheEntry === null || schemaCacheEntry === undefined)\n }\n } catch (e) {\n const error = e as Error\n console.error(e)\n if (mounted()) {\n setError({ message: error.message, schema: ModuleErrorSchema, sources: [] })\n }\n }\n }\n if (schemaChanged) {\n setSchemaLocal(schema)\n }\n },\n [xyoError, notFound, schema, schemaLocal, schemaCacheEntry],\n )\n\n return {\n notFound,\n schemaHuri: schemaCacheEntry?.huri,\n schemaPayload:\n schemaCacheEntry ? new PayloadBuilder<SchemaPayload>(schemaCacheEntry?.payload).fields(schemaCacheEntry.payload).build() : schemaCacheEntry,\n xyoError,\n }\n}\n\nexport { useGetSchemaPayload }\n","import { useAsyncEffect } from '@xylabs/react-async-effect'\nimport { SchemaCache } from '@xyo-network/schema-cache'\nimport { SchemaPayload } from '@xyo-network/schema-payload-plugin'\nimport { useState } from 'react'\n\nexport type SchemaList = { name: string }\n\nexport const useSchemaDefinitions = (schemaList?: SchemaList[]): SchemaPayload[] | undefined => {\n const [schemaPayloads, setSchemaPayloads] = useState<SchemaPayload[]>()\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps\n async (mounted) => {\n if (schemaList) {\n const promiseResults = await Promise.allSettled(schemaList?.map(({ name }) => SchemaCache.instance.get(name)))\n if (mounted()) {\n setSchemaPayloads(\n promiseResults\n .map((result) => (result.status === 'fulfilled' ? result.value?.payload : undefined))\n .filter((item) => item !== undefined && item !== null) as SchemaPayload[],\n )\n }\n }\n },\n [schemaList],\n )\n return schemaPayloads\n}\n","import { Address } from '@xylabs/hex'\nimport { useAsyncEffect } from '@xylabs/react-async-effect'\nimport { SchemaListPayload, SchemaListQueryPayload, SchemaListQuerySchema } from '@xyo-network/diviner-schema-list-model'\nimport { WithMeta } from '@xyo-network/payload-model'\nimport { useWeakDivinerFromNode } from '@xyo-network/react-diviner'\nimport { useEffect, useMemo, useState } from 'react'\n\nexport const useSchemaList = (address?: Address, nameOrAddress = 'SchemaListDiviner'): [SchemaListPayload | null | undefined, Error | undefined] => {\n const [schemaList, setSchemaList] = useState<SchemaListPayload | null>()\n const [error, setError] = useState<Error>()\n const [diviner, divinerError] = useWeakDivinerFromNode(nameOrAddress)\n\n const query: SchemaListQueryPayload[] | undefined = useMemo(\n () =>\n address ?\n [\n {\n address,\n schema: SchemaListQuerySchema,\n },\n ]\n : undefined,\n [address],\n )\n\n useEffect(() => {\n if (diviner === null) {\n setSchemaList(null)\n setError(undefined)\n }\n }, [diviner])\n\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps, require-await\n async (mounted) => {\n const divinerInstance = diviner?.deref()\n if (divinerInstance) {\n try {\n const response = (await divinerInstance.divine(query)) as WithMeta<SchemaListPayload>[]\n if (mounted()) {\n setSchemaList(response?.[0])\n setError(undefined)\n }\n } catch (e) {\n setError(e as Error)\n setSchemaList(undefined)\n }\n }\n },\n [diviner, divinerError, query],\n )\n return [schemaList, error]\n}\n","import { Address } from '@xylabs/hex'\nimport { useAsyncEffect } from '@xylabs/react-async-effect'\nimport {\n SchemaStatsDivinerSchema,\n SchemaStatsPayload,\n SchemaStatsQueryPayload,\n SchemaStatsQuerySchema,\n} from '@xyo-network/diviner-schema-stats-model'\nimport { TYPES } from '@xyo-network/node-core-types'\nimport { isPayloadOfSchemaTypeWithMeta, WithMeta, WithSources } from '@xyo-network/payload-model'\nimport { useWeakDivinerFromNode } from '@xyo-network/react-diviner'\nimport { Dispatch, SetStateAction, useMemo, useState } from 'react'\n\nexport const useSchemaStats = (\n statsAddress?: Address,\n nameOrAddress = TYPES.SchemaStatsDiviner,\n): [SchemaStatsPayload[] | undefined, Error | undefined, Dispatch<SetStateAction<number>>] => {\n const [refresh, setRefresh] = useState(1)\n const [diviner, divinerError] = useWeakDivinerFromNode(nameOrAddress)\n const [error, setError] = useState<Error>()\n const refreshHistory = () => setRefresh((previous) => previous + 1)\n\n const [schemaList, setSchemaList] = useState<WithSources<WithMeta<SchemaStatsPayload>>[]>()\n\n const query: SchemaStatsQueryPayload = useMemo(\n () => ({\n address: statsAddress,\n schema: SchemaStatsQuerySchema,\n }),\n [statsAddress],\n )\n\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps\n async (mounted) => {\n const instance = diviner?.deref()\n if (instance) {\n if (divinerError) {\n if (mounted()) {\n setError(divinerError)\n setSchemaList(undefined)\n }\n } else {\n try {\n const schemas = (await instance.divine([query])).filter(isPayloadOfSchemaTypeWithMeta(SchemaStatsDivinerSchema)) as WithSources<\n WithMeta<SchemaStatsPayload>\n >[]\n if (mounted()) {\n setSchemaList(schemas)\n setError(undefined)\n }\n } catch (ex) {\n setError(ex as Error)\n setSchemaList(undefined)\n }\n }\n }\n },\n [diviner, refresh, divinerError, query],\n )\n\n return [schemaList, error, refreshHistory]\n}\n","import type { WithChildren } from '@xylabs/react-shared'\nimport { useCallback, useEffect } from 'react'\nimport { useSearchParams } from 'react-router-dom'\n\nimport { SchemaContext } from '../Context'\nimport { useSchema } from '../use'\nimport { SchemaMemoryProvider } from './Memory'\nimport { SchemaProviderProps } from './Props'\n\nconst SchemaRouteProviderInner: React.FC<WithChildren> = ({ children }) => {\n const { schema, setSchema, schemaList } = useSchema()\n\n const [params, setParams] = useSearchParams()\n\n const routeSchema = params.get('schema')\n\n //update the network stored in the route\n const setSchemaParam = useCallback(\n (schema?: string) => {\n if (schema) {\n params.set('schema', schema)\n setParams(params, { replace: true })\n setSchema?.(schema)\n } else {\n params.delete('network')\n }\n },\n [params, setParams, setSchema],\n )\n\n //if the network is actively changed, update both memory and route\n const setSchemaLocal = useCallback(\n (schema: string) => {\n setSchemaParam(schema)\n setSchema?.(schema)\n },\n [setSchemaParam, setSchema],\n )\n\n //sync memory and route storage of network\n useEffect(() => {\n if (routeSchema !== schema) {\n if (routeSchema === undefined && schema !== undefined) {\n //if the route does not have a network selected, use what is in the memory context\n setSchemaLocal(schema)\n } else if (routeSchema) {\n //if the route has a selection and it is different from memory, update memory\n setSchema?.(routeSchema)\n }\n }\n }, [routeSchema, schema, setSchemaParam, setSchema, setSchemaLocal])\n\n return <SchemaContext.Provider value={{ provided: true, schema, schemaList, setSchema: setSchemaLocal }}>{children}</SchemaContext.Provider>\n}\n\nexport const SchemaRouteProvider: React.FC<WithChildren<SchemaProviderProps>> = ({ knownSchemaList, defaultSchema, ...props }) => {\n return (\n <SchemaMemoryProvider knownSchemaList={knownSchemaList} defaultSchema={defaultSchema}>\n <SchemaRouteProviderInner {...props} />\n </SchemaMemoryProvider>\n )\n}\n","import { useContextEx } from '@xyo-network/react-shared'\n\nimport { SchemaContext } from './Context'\nimport { SchemaContextState } from './State'\n\nexport const useSchema = (required = false) => {\n return useContextEx<SchemaContextState>(SchemaContext, 'Schema', required)\n}\n"],"mappings":"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","names":["entry","useEffect","useState","useAsyncEffect","SchemaCache","useState","schemaCacheEntry","useAsyncEffect","SchemaCache","useState","useAsyncEffect","useState","useAsyncEffect","useWeakDivinerFromNode","useMemo","useState","jsx","useState","useEffect","schemaList","useEffect","jsx","schema","useEffect","jsx","jsxs","schema"]}