@noya-app/noya-api-client-react 0.1.20 → 0.1.22
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/.turbo/turbo-build.log +11 -10
- package/CHANGELOG.md +17 -0
- package/dist/index.d.mts +301 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/react/hooks.ts +7 -2
package/.turbo/turbo-build.log
CHANGED
|
@@ -2,16 +2,17 @@
|
|
|
2
2
|
[0m[2m[35m$[0m [2m[1mtsup src/index.ts --format cjs,esm --dts --sourcemap[0m
|
|
3
3
|
[34mCLI[39m Building entry: src/index.ts
|
|
4
4
|
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
5
|
-
[34mCLI[39m tsup
|
|
5
|
+
[34mCLI[39m tsup v8.3.5
|
|
6
6
|
[34mCLI[39m Target: esnext
|
|
7
7
|
[34mCJS[39m Build start
|
|
8
8
|
[34mESM[39m Build start
|
|
9
|
-
[32mESM[39m [1mdist/index.mjs [22m[32m8.
|
|
10
|
-
[32mESM[39m [1mdist/index.mjs.map [22m[32m14.
|
|
11
|
-
[32mESM[39m ⚡️ Build success in
|
|
12
|
-
[32mCJS[39m [1mdist/index.js [22m[32m11.
|
|
13
|
-
[32mCJS[39m [1mdist/index.js.map [22m[32m14.
|
|
14
|
-
[32mCJS[39m ⚡️ Build success in
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m8.15 KB[39m
|
|
10
|
+
[32mESM[39m [1mdist/index.mjs.map [22m[32m14.52 KB[39m
|
|
11
|
+
[32mESM[39m ⚡️ Build success in 20ms
|
|
12
|
+
[32mCJS[39m [1mdist/index.js [22m[32m11.69 KB[39m
|
|
13
|
+
[32mCJS[39m [1mdist/index.js.map [22m[32m14.74 KB[39m
|
|
14
|
+
[32mCJS[39m ⚡️ Build success in 20ms
|
|
15
|
+
DTS Build start
|
|
16
|
+
DTS ⚡️ Build success in 3861ms
|
|
17
|
+
DTS dist/index.d.ts 8.29 KB
|
|
18
|
+
DTS dist/index.d.mts 8.29 KB
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @noya-app/noya-api-client-react
|
|
2
2
|
|
|
3
|
+
## 0.1.22
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 6d31d22: Bump versions
|
|
8
|
+
- Updated dependencies [6d31d22]
|
|
9
|
+
- @noya-app/noya-utils@0.1.3
|
|
10
|
+
- @noya-app/noya-api@0.1.22
|
|
11
|
+
|
|
12
|
+
## 0.1.21
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- Update tsup
|
|
17
|
+
- Updated dependencies
|
|
18
|
+
- @noya-app/noya-api@0.1.21
|
|
19
|
+
|
|
3
20
|
## 0.1.20
|
|
4
21
|
|
|
5
22
|
### Patch Changes
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import { NoyaAPI } from '@noya-app/noya-api';
|
|
2
|
+
export * from '@noya-app/noya-api';
|
|
3
|
+
|
|
4
|
+
type NoyaAPIContextValue = NoyaAPI.Client;
|
|
5
|
+
declare const NoyaAPIProvider: React.Provider<NoyaAPIContextValue | undefined>;
|
|
6
|
+
declare function useNoyaClient(): NoyaAPIContextValue;
|
|
7
|
+
declare function useOptionalNoyaClient(): NoyaAPIContextValue | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* If there's no client, fallback to a memory client.
|
|
10
|
+
* We do this to safely render content when logged out (e.g. when sharing).
|
|
11
|
+
*/
|
|
12
|
+
declare function useNoyaClientOrFallback(): NoyaAPIContextValue;
|
|
13
|
+
|
|
14
|
+
declare function useNoyaFiles(): {
|
|
15
|
+
files: NoyaAPI.File[];
|
|
16
|
+
loading: boolean;
|
|
17
|
+
};
|
|
18
|
+
declare function useNoyaIsOwnFile(fileId?: string): boolean;
|
|
19
|
+
declare function useNoyaTools(initial?: NoyaAPI.Tool[]): {
|
|
20
|
+
tools: {
|
|
21
|
+
addedById?: string | undefined;
|
|
22
|
+
name: string;
|
|
23
|
+
url: string;
|
|
24
|
+
id: string;
|
|
25
|
+
description: string | null;
|
|
26
|
+
tags: {
|
|
27
|
+
toolCount?: number | undefined;
|
|
28
|
+
name: string;
|
|
29
|
+
id: string;
|
|
30
|
+
rank: number;
|
|
31
|
+
}[];
|
|
32
|
+
createdAt: string;
|
|
33
|
+
updatedAt: string;
|
|
34
|
+
slug: string | null;
|
|
35
|
+
tagline: string | null;
|
|
36
|
+
assets: string[];
|
|
37
|
+
homepageUrl: string | null;
|
|
38
|
+
platform: "noya" | "external";
|
|
39
|
+
verificationStatus: "pending" | "approved" | "rejected";
|
|
40
|
+
creator: {
|
|
41
|
+
name: string;
|
|
42
|
+
id: string;
|
|
43
|
+
image: string | null;
|
|
44
|
+
slug: string | null;
|
|
45
|
+
} | null;
|
|
46
|
+
}[];
|
|
47
|
+
loading: boolean;
|
|
48
|
+
};
|
|
49
|
+
declare function useOptionalNoyaTools(initial?: NoyaAPI.Tool[]): {
|
|
50
|
+
tools: {
|
|
51
|
+
addedById?: string | undefined;
|
|
52
|
+
name: string;
|
|
53
|
+
url: string;
|
|
54
|
+
id: string;
|
|
55
|
+
description: string | null;
|
|
56
|
+
tags: {
|
|
57
|
+
toolCount?: number | undefined;
|
|
58
|
+
name: string;
|
|
59
|
+
id: string;
|
|
60
|
+
rank: number;
|
|
61
|
+
}[];
|
|
62
|
+
createdAt: string;
|
|
63
|
+
updatedAt: string;
|
|
64
|
+
slug: string | null;
|
|
65
|
+
tagline: string | null;
|
|
66
|
+
assets: string[];
|
|
67
|
+
homepageUrl: string | null;
|
|
68
|
+
platform: "noya" | "external";
|
|
69
|
+
verificationStatus: "pending" | "approved" | "rejected";
|
|
70
|
+
creator: {
|
|
71
|
+
name: string;
|
|
72
|
+
id: string;
|
|
73
|
+
image: string | null;
|
|
74
|
+
slug: string | null;
|
|
75
|
+
} | null;
|
|
76
|
+
}[];
|
|
77
|
+
loading: boolean;
|
|
78
|
+
};
|
|
79
|
+
declare function useNoyaTags(): {
|
|
80
|
+
tags: {
|
|
81
|
+
toolCount?: number | undefined;
|
|
82
|
+
name: string;
|
|
83
|
+
id: string;
|
|
84
|
+
rank: number;
|
|
85
|
+
}[];
|
|
86
|
+
loading: boolean;
|
|
87
|
+
};
|
|
88
|
+
declare function useOptionalNoyaTags(): {
|
|
89
|
+
tags: {
|
|
90
|
+
toolCount?: number | undefined;
|
|
91
|
+
name: string;
|
|
92
|
+
id: string;
|
|
93
|
+
rank: number;
|
|
94
|
+
}[];
|
|
95
|
+
loading: boolean;
|
|
96
|
+
};
|
|
97
|
+
declare function useNoyaCreators(): {
|
|
98
|
+
creators: {
|
|
99
|
+
name: string;
|
|
100
|
+
id: string;
|
|
101
|
+
image: string | null;
|
|
102
|
+
slug: string | null;
|
|
103
|
+
}[];
|
|
104
|
+
loading: boolean;
|
|
105
|
+
};
|
|
106
|
+
declare function useOptionalNoyaCreators(): {
|
|
107
|
+
creators: {
|
|
108
|
+
name: string;
|
|
109
|
+
id: string;
|
|
110
|
+
image: string | null;
|
|
111
|
+
slug: string | null;
|
|
112
|
+
}[];
|
|
113
|
+
loading: boolean;
|
|
114
|
+
};
|
|
115
|
+
declare function useNoyaAssets(fileId?: string): {
|
|
116
|
+
assets: {
|
|
117
|
+
id: string;
|
|
118
|
+
}[];
|
|
119
|
+
loading: boolean;
|
|
120
|
+
};
|
|
121
|
+
declare function useNoyaSession(): {
|
|
122
|
+
user: {
|
|
123
|
+
name: string | null;
|
|
124
|
+
id: string;
|
|
125
|
+
image: string | null;
|
|
126
|
+
email: string | null;
|
|
127
|
+
};
|
|
128
|
+
expires: string;
|
|
129
|
+
} | null;
|
|
130
|
+
declare function useOptionalNoyaSession(): {
|
|
131
|
+
user: {
|
|
132
|
+
name: string | null;
|
|
133
|
+
id: string;
|
|
134
|
+
image: string | null;
|
|
135
|
+
email: string | null;
|
|
136
|
+
};
|
|
137
|
+
expires: string;
|
|
138
|
+
} | null | undefined;
|
|
139
|
+
declare function useNoyaBilling(): {
|
|
140
|
+
subscriptions: {
|
|
141
|
+
items: {
|
|
142
|
+
id: string;
|
|
143
|
+
created: string;
|
|
144
|
+
price: {
|
|
145
|
+
type: string;
|
|
146
|
+
active: boolean;
|
|
147
|
+
id: string;
|
|
148
|
+
currency: string;
|
|
149
|
+
nickname: string | null;
|
|
150
|
+
recurringInterval: string;
|
|
151
|
+
recurringIntervalCount: number;
|
|
152
|
+
unitAmount: number;
|
|
153
|
+
created: string;
|
|
154
|
+
url?: string | undefined;
|
|
155
|
+
};
|
|
156
|
+
quantity: number;
|
|
157
|
+
}[];
|
|
158
|
+
id: string;
|
|
159
|
+
status: string;
|
|
160
|
+
currency: string;
|
|
161
|
+
created: string;
|
|
162
|
+
cancelAtPeriodEnd: boolean;
|
|
163
|
+
currentPeriodEnd: string;
|
|
164
|
+
currentPeriodStart: string;
|
|
165
|
+
cancelAt: string | null;
|
|
166
|
+
canceledAt: string | null;
|
|
167
|
+
endedAt: string | null;
|
|
168
|
+
trialEnd: string | null;
|
|
169
|
+
trialStart: string | null;
|
|
170
|
+
}[];
|
|
171
|
+
portalUrl: string | null;
|
|
172
|
+
availableProducts: {
|
|
173
|
+
active: boolean;
|
|
174
|
+
name: string;
|
|
175
|
+
id: string;
|
|
176
|
+
description: string | null;
|
|
177
|
+
created: string;
|
|
178
|
+
prices: {
|
|
179
|
+
type: string;
|
|
180
|
+
active: boolean;
|
|
181
|
+
id: string;
|
|
182
|
+
currency: string;
|
|
183
|
+
nickname: string | null;
|
|
184
|
+
recurringInterval: string;
|
|
185
|
+
recurringIntervalCount: number;
|
|
186
|
+
unitAmount: number;
|
|
187
|
+
created: string;
|
|
188
|
+
url?: string | undefined;
|
|
189
|
+
}[];
|
|
190
|
+
}[];
|
|
191
|
+
} & {
|
|
192
|
+
loading: boolean;
|
|
193
|
+
};
|
|
194
|
+
declare function useNoyaEmailLists(): {
|
|
195
|
+
emailLists: {
|
|
196
|
+
name: string;
|
|
197
|
+
url: string;
|
|
198
|
+
id: string;
|
|
199
|
+
description: string | null;
|
|
200
|
+
optIn: boolean;
|
|
201
|
+
}[];
|
|
202
|
+
loading: boolean;
|
|
203
|
+
};
|
|
204
|
+
declare function useNoyaUserData(): {
|
|
205
|
+
userData: {
|
|
206
|
+
metadata: {
|
|
207
|
+
key: string;
|
|
208
|
+
url: string;
|
|
209
|
+
value?: unknown;
|
|
210
|
+
}[];
|
|
211
|
+
emailLists: {
|
|
212
|
+
name: string;
|
|
213
|
+
url: string;
|
|
214
|
+
id: string;
|
|
215
|
+
description: string | null;
|
|
216
|
+
optIn: boolean;
|
|
217
|
+
}[];
|
|
218
|
+
experiments: {};
|
|
219
|
+
beta?: boolean | undefined;
|
|
220
|
+
} | undefined;
|
|
221
|
+
loading: boolean;
|
|
222
|
+
};
|
|
223
|
+
declare function useOptionalNoyaUserData(): {
|
|
224
|
+
userData: {
|
|
225
|
+
metadata: {
|
|
226
|
+
key: string;
|
|
227
|
+
url: string;
|
|
228
|
+
value?: unknown;
|
|
229
|
+
}[];
|
|
230
|
+
emailLists: {
|
|
231
|
+
name: string;
|
|
232
|
+
url: string;
|
|
233
|
+
id: string;
|
|
234
|
+
description: string | null;
|
|
235
|
+
optIn: boolean;
|
|
236
|
+
}[];
|
|
237
|
+
experiments: {};
|
|
238
|
+
beta?: boolean | undefined;
|
|
239
|
+
} | undefined;
|
|
240
|
+
loading: boolean;
|
|
241
|
+
};
|
|
242
|
+
declare function useIsBeta(): boolean;
|
|
243
|
+
declare function useMetadata<T extends NoyaAPI.Json>(key: string): T | undefined;
|
|
244
|
+
declare function useGeneratedComponentNames(name: string): {
|
|
245
|
+
names: {
|
|
246
|
+
name: string;
|
|
247
|
+
}[];
|
|
248
|
+
loading: boolean;
|
|
249
|
+
};
|
|
250
|
+
declare function useGeneratedComponentDescriptions(): {
|
|
251
|
+
descriptions: Record<string, string>;
|
|
252
|
+
loading: Record<string, boolean>;
|
|
253
|
+
};
|
|
254
|
+
declare function useGeneratedComponentDescription(name: string): {
|
|
255
|
+
description: string | undefined;
|
|
256
|
+
loading: boolean;
|
|
257
|
+
};
|
|
258
|
+
declare function useRandomImages(): {
|
|
259
|
+
images: Record<string, {
|
|
260
|
+
url: string;
|
|
261
|
+
source: {
|
|
262
|
+
name: string;
|
|
263
|
+
url: string;
|
|
264
|
+
};
|
|
265
|
+
metadata: {
|
|
266
|
+
color: string;
|
|
267
|
+
};
|
|
268
|
+
user: {
|
|
269
|
+
name: string;
|
|
270
|
+
url: string;
|
|
271
|
+
};
|
|
272
|
+
}>;
|
|
273
|
+
loading: Record<string, boolean>;
|
|
274
|
+
};
|
|
275
|
+
declare function useRandomIcons(): {
|
|
276
|
+
icons: Record<string, {
|
|
277
|
+
url: string;
|
|
278
|
+
data: string;
|
|
279
|
+
}>;
|
|
280
|
+
loading: Record<string, boolean>;
|
|
281
|
+
};
|
|
282
|
+
declare function useNetworkRequests(): {
|
|
283
|
+
id: number;
|
|
284
|
+
method: string;
|
|
285
|
+
completed: boolean;
|
|
286
|
+
abort: () => void;
|
|
287
|
+
aborted: boolean;
|
|
288
|
+
isStreaming: boolean;
|
|
289
|
+
url: string;
|
|
290
|
+
status: number | undefined;
|
|
291
|
+
attempt: number;
|
|
292
|
+
abortStream: () => void;
|
|
293
|
+
}[];
|
|
294
|
+
type EnhancedGeneratedPageName = NoyaAPI.GeneratedName & {
|
|
295
|
+
index: number;
|
|
296
|
+
type: "suggestion";
|
|
297
|
+
};
|
|
298
|
+
declare function useGeneratedPageNames(): EnhancedGeneratedPageName[];
|
|
299
|
+
declare function useGeneratedPageComponentNames(): EnhancedGeneratedPageName[];
|
|
300
|
+
|
|
301
|
+
export { type EnhancedGeneratedPageName, NoyaAPIProvider, useGeneratedComponentDescription, useGeneratedComponentDescriptions, useGeneratedComponentNames, useGeneratedPageComponentNames, useGeneratedPageNames, useIsBeta, useMetadata, useNetworkRequests, useNoyaAssets, useNoyaBilling, useNoyaClient, useNoyaClientOrFallback, useNoyaCreators, useNoyaEmailLists, useNoyaFiles, useNoyaIsOwnFile, useNoyaSession, useNoyaTags, useNoyaTools, useNoyaUserData, useOptionalNoyaClient, useOptionalNoyaCreators, useOptionalNoyaSession, useOptionalNoyaTags, useOptionalNoyaTools, useOptionalNoyaUserData, useRandomIcons, useRandomImages };
|
package/dist/index.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ declare function useNoyaClientOrFallback(): NoyaAPIContextValue;
|
|
|
13
13
|
|
|
14
14
|
declare function useNoyaFiles(): {
|
|
15
15
|
files: NoyaAPI.File[];
|
|
16
|
-
loading:
|
|
16
|
+
loading: boolean;
|
|
17
17
|
};
|
|
18
18
|
declare function useNoyaIsOwnFile(fileId?: string): boolean;
|
|
19
19
|
declare function useNoyaTools(initial?: NoyaAPI.Tool[]): {
|
|
@@ -298,4 +298,4 @@ type EnhancedGeneratedPageName = NoyaAPI.GeneratedName & {
|
|
|
298
298
|
declare function useGeneratedPageNames(): EnhancedGeneratedPageName[];
|
|
299
299
|
declare function useGeneratedPageComponentNames(): EnhancedGeneratedPageName[];
|
|
300
300
|
|
|
301
|
-
export { EnhancedGeneratedPageName, NoyaAPIProvider, useGeneratedComponentDescription, useGeneratedComponentDescriptions, useGeneratedComponentNames, useGeneratedPageComponentNames, useGeneratedPageNames, useIsBeta, useMetadata, useNetworkRequests, useNoyaAssets, useNoyaBilling, useNoyaClient, useNoyaClientOrFallback, useNoyaCreators, useNoyaEmailLists, useNoyaFiles, useNoyaIsOwnFile, useNoyaSession, useNoyaTags, useNoyaTools, useNoyaUserData, useOptionalNoyaClient, useOptionalNoyaCreators, useOptionalNoyaSession, useOptionalNoyaTags, useOptionalNoyaTools, useOptionalNoyaUserData, useRandomIcons, useRandomImages };
|
|
301
|
+
export { type EnhancedGeneratedPageName, NoyaAPIProvider, useGeneratedComponentDescription, useGeneratedComponentDescriptions, useGeneratedComponentNames, useGeneratedPageComponentNames, useGeneratedPageNames, useIsBeta, useMetadata, useNetworkRequests, useNoyaAssets, useNoyaBilling, useNoyaClient, useNoyaClientOrFallback, useNoyaCreators, useNoyaEmailLists, useNoyaFiles, useNoyaIsOwnFile, useNoyaSession, useNoyaTags, useNoyaTools, useNoyaUserData, useOptionalNoyaClient, useOptionalNoyaCreators, useOptionalNoyaSession, useOptionalNoyaTags, useOptionalNoyaTools, useOptionalNoyaUserData, useRandomIcons, useRandomImages };
|
package/dist/index.js
CHANGED
|
@@ -91,13 +91,15 @@ function useNoyaFiles() {
|
|
|
91
91
|
const files = (0, import_react2.useSelector)(client.files$);
|
|
92
92
|
const session = (0, import_react2.useSelector)(useNoyaClient().session$);
|
|
93
93
|
(0, import_react3.useEffect)(() => {
|
|
94
|
-
if (!session)
|
|
95
|
-
return;
|
|
94
|
+
if (!session) return;
|
|
96
95
|
if (files.loading === "notStarted" || files.loading === "populatedOnServer") {
|
|
97
96
|
client.files.refetch();
|
|
98
97
|
}
|
|
99
98
|
}, [client, files.loading, session]);
|
|
100
|
-
return
|
|
99
|
+
return {
|
|
100
|
+
files: files.files,
|
|
101
|
+
loading: files.loading === "loadedInClient" || files.loading === "populatedOnServer"
|
|
102
|
+
};
|
|
101
103
|
}
|
|
102
104
|
function useNoyaIsOwnFile(fileId) {
|
|
103
105
|
const client = useNoyaClientOrFallback();
|
|
@@ -111,8 +113,7 @@ function useNoyaTools(initial) {
|
|
|
111
113
|
const client = useNoyaClientOrFallback();
|
|
112
114
|
const tools = (0, import_react2.useSelector)(client.tools$);
|
|
113
115
|
(0, import_react3.useEffect)(() => {
|
|
114
|
-
if (didInitialize.current)
|
|
115
|
-
return;
|
|
116
|
+
if (didInitialize.current) return;
|
|
116
117
|
didInitialize.current = true;
|
|
117
118
|
if (initial) {
|
|
118
119
|
client.tools.setInitial(initial);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/react/context.ts","../src/react/hooks.ts"],"sourcesContent":["export * from \"@noya-app/noya-api\";\nexport * from \"./react/context\";\nexport * from \"./react/hooks\";\n","import { NoyaAPI } from \"@noya-app/noya-api\";\nimport { createContext, useContext, useMemo } from \"react\";\n\ntype NoyaAPIContextValue = NoyaAPI.Client;\n\nconst NoyaAPIContext = createContext<NoyaAPIContextValue | undefined>(\n undefined\n);\n\nexport const NoyaAPIProvider: React.Provider<NoyaAPIContextValue | undefined> =\n NoyaAPIContext.Provider;\n\nexport function useNoyaClient(): NoyaAPIContextValue {\n const value = useContext(NoyaAPIContext);\n\n if (!value) {\n throw new Error(\"Missing NoyaAPIContextValue\");\n }\n\n return value;\n}\n\nexport function useOptionalNoyaClient(): NoyaAPIContextValue | undefined {\n return useContext(NoyaAPIContext);\n}\n\n/**\n * If there's no client, fallback to a memory client.\n * We do this to safely render content when logged out (e.g. when sharing).\n */\nexport function useNoyaClientOrFallback(): NoyaAPIContextValue {\n const value = useContext(NoyaAPIContext);\n\n const memoryClient = useMemo(() => {\n return new NoyaAPI.Client({\n networkClient: new NoyaAPI.MemoryClient(),\n });\n }, []);\n\n return value ?? memoryClient;\n}\n","import { useSelector } from \"@legendapp/state/react\";\nimport { GENERATED_PAGE_NAME_COUNT, NoyaAPI } from \"@noya-app/noya-api\";\nimport { range } from \"@noya-app/noya-utils\";\nimport { useEffect, useMemo, useRef } from \"react\";\nimport {\n useNoyaClient,\n useNoyaClientOrFallback,\n useOptionalNoyaClient,\n} from \"./context\";\n\nexport function useNoyaFiles(): {\n files: NoyaAPI.File[];\n loading: NoyaAPI.DataLoadingState;\n} {\n const client = useNoyaClientOrFallback();\n const files = useSelector(client.files$);\n const session = useSelector(useNoyaClient().session$);\n\n useEffect(() => {\n if (!session) return;\n\n if (\n files.loading === \"notStarted\" ||\n files.loading === \"populatedOnServer\"\n ) {\n client.files.refetch();\n }\n }, [client, files.loading, session]);\n\n return files;\n}\n\nexport function useNoyaIsOwnFile(fileId?: string) {\n const client = useNoyaClientOrFallback();\n const files = useSelector(client.files$);\n const session = useSelector(client.session$);\n const file = files.files.find((file) => file.id === fileId);\n return file?.userId === session?.user.id;\n}\n\nexport function useNoyaTools(initial?: NoyaAPI.Tool[]) {\n const didInitialize = useRef(false);\n const client = useNoyaClientOrFallback();\n const tools = useSelector(client.tools$);\n useEffect(() => {\n if (didInitialize.current) return;\n didInitialize.current = true;\n\n if (initial) {\n client.tools.setInitial(initial);\n } else {\n client.tools.list();\n }\n }, [client, initial]);\n return tools;\n}\n\nexport function useOptionalNoyaTools(initial?: NoyaAPI.Tool[]) {\n const client = useNoyaClientOrFallback();\n const tools = useSelector(client.tools$);\n return useMemo(\n () =>\n tools.loading && initial ? { loading: true, tools: initial } : tools,\n [initial, tools]\n );\n}\n\nexport function useNoyaTags() {\n const client = useNoyaClient();\n const tags = useSelector(client.tags$);\n useEffect(() => {\n client.tags.read();\n }, [client]);\n return tags;\n}\n\nexport function useOptionalNoyaTags() {\n const client = useNoyaClientOrFallback();\n const tags = useSelector(client.tags$);\n useEffect(() => {\n client.tags.read();\n }, [client]);\n return tags;\n}\n\nexport function useNoyaCreators() {\n const client = useNoyaClientOrFallback();\n const creators = useSelector(client.creators$);\n useEffect(() => {\n client.creators.read();\n }, [client]);\n return creators;\n}\n\nexport function useOptionalNoyaCreators() {\n const client = useNoyaClientOrFallback();\n const creators = useSelector(client.creators$);\n useEffect(() => {\n client.creators.read();\n }, [client]);\n return creators;\n}\n\nexport function useNoyaAssets(fileId?: string) {\n const client = useNoyaClientOrFallback();\n const empty = useMemo(() => ({ assets: [], loading: true }), []);\n const assets = useSelector(\n fileId ? client.assetsByFileId$[fileId] : client.assets$\n );\n return assets ?? empty;\n}\n\nexport function useNoyaSession() {\n const session = useSelector(useNoyaClient().session$);\n return session;\n}\n\nexport function useOptionalNoyaSession() {\n const session = useSelector(useOptionalNoyaClient()?.session$);\n return session;\n}\n\nexport function useNoyaBilling() {\n const billing = useSelector(useNoyaClient().billing$);\n return billing;\n}\n\nexport function useNoyaEmailLists() {\n const emailLists = useSelector(useNoyaClient().emailLists$);\n return emailLists;\n}\n\nexport function useNoyaUserData() {\n const userData = useSelector(useNoyaClientOrFallback().userData$);\n return userData;\n}\n\nexport function useOptionalNoyaUserData() {\n const userData = useSelector(useNoyaClientOrFallback().userData$);\n return userData;\n}\n\nexport function useIsBeta() {\n const userData = useOptionalNoyaUserData();\n return userData?.userData?.beta ?? false;\n}\n\nexport function useMetadata<T extends NoyaAPI.Json>(key: string) {\n const { userData } = useNoyaUserData();\n const metadata = userData?.metadata || [];\n const metadataItem = metadata.find((item) => item.key === key);\n return metadataItem?.value as T | undefined;\n}\n\nexport function useGeneratedComponentNames(name: string) {\n const key = name.trim().toLowerCase();\n const { generatedNames$, loadingNames$ } = useNoyaClientOrFallback();\n const result = useSelector(\n () => generatedNames$[key].get() as NoyaAPI.GeneratedName[] | undefined\n );\n const loading = useSelector(() => loadingNames$[key].get());\n return useMemo(() => ({ names: result ?? [], loading }), [loading, result]);\n}\n\nexport function useGeneratedComponentDescriptions() {\n const { generatedDescriptions$, loadingDescriptions$ } =\n useNoyaClientOrFallback();\n const descriptions = useSelector(generatedDescriptions$);\n const loading = useSelector(loadingDescriptions$);\n return useMemo(() => ({ descriptions, loading }), [loading, descriptions]);\n}\n\nexport function useGeneratedComponentDescription(name: string) {\n const key = name.trim().toLowerCase();\n const { generatedDescriptions$, loadingDescriptions$ } =\n useNoyaClientOrFallback();\n const description = useSelector(\n () => generatedDescriptions$[key].get() as string | undefined\n );\n const loading = useSelector(() => loadingDescriptions$[key].get());\n return useMemo(() => ({ description, loading }), [loading, description]);\n}\n\nexport function useRandomImages() {\n const { randomImages$, loadingRandomImages$ } = useNoyaClientOrFallback();\n const images = useSelector(randomImages$);\n const loading = useSelector(loadingRandomImages$);\n return useMemo(() => ({ images, loading }), [loading, images]);\n}\n\nexport function useRandomIcons() {\n const { randomIcons$, loadingRandomIcons$ } = useNoyaClientOrFallback();\n const icons = useSelector(randomIcons$);\n const loading = useSelector(loadingRandomIcons$);\n return useMemo(() => ({ icons, loading }), [loading, icons]);\n}\n\nexport function useNetworkRequests() {\n const { requests$ } = useNoyaClientOrFallback();\n const requests = useSelector(requests$) as NoyaAPI.RequestSnapshot[];\n return requests;\n}\n\nexport type EnhancedGeneratedPageName = NoyaAPI.GeneratedName & {\n index: number;\n type: \"suggestion\";\n};\n\nexport function useGeneratedPageNames(): EnhancedGeneratedPageName[] {\n const { generatedPageNames$ } = useNoyaClientOrFallback();\n const names = useSelector(generatedPageNames$) as NoyaAPI.GeneratedName[];\n\n const namesWithDefaultsAndTypes = useMemo(() => {\n const rangeArray = range(0, GENERATED_PAGE_NAME_COUNT);\n\n // Fill any empty slots with default names in the 'loading' state\n const withDefaults = rangeArray.map((index): NoyaAPI.GeneratedName => {\n const name = names[index];\n return name ?? { name: `Page ${index + 1}`, loading: true, key: \"\" };\n });\n\n return withDefaults.map(\n (name, index): EnhancedGeneratedPageName => ({\n ...name,\n index,\n type: \"suggestion\",\n })\n );\n }, [names]);\n\n // Take the first 3\n return namesWithDefaultsAndTypes.slice(0, 3);\n}\n\nexport function useGeneratedPageComponentNames(): EnhancedGeneratedPageName[] {\n const { generatedPageComponentNames$: generatedComponentNames$ } =\n useNoyaClientOrFallback();\n const names = useSelector(\n generatedComponentNames$\n ) as NoyaAPI.GeneratedName[];\n\n const namesWithDefaultsAndTypes = useMemo(() => {\n const rangeArray = range(0, GENERATED_PAGE_NAME_COUNT);\n\n // Fill any empty slots with default names in the 'loading' state\n const withDefaults = rangeArray.map((index): NoyaAPI.GeneratedName => {\n const name = names[index];\n return name ?? { name: `Component ${index + 1}`, loading: true, key: \"\" };\n });\n\n return withDefaults.map(\n (name, index): EnhancedGeneratedPageName => ({\n ...name,\n index,\n type: \"suggestion\",\n })\n );\n }, [names]);\n\n // Take the first 3\n return namesWithDefaultsAndTypes.slice(0, 3);\n}\n"],"mappings":"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","names":["import_react","import_noya_api","file"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/react/context.ts","../src/react/hooks.ts"],"sourcesContent":["export * from \"@noya-app/noya-api\";\nexport * from \"./react/context\";\nexport * from \"./react/hooks\";\n","import { NoyaAPI } from \"@noya-app/noya-api\";\nimport { createContext, useContext, useMemo } from \"react\";\n\ntype NoyaAPIContextValue = NoyaAPI.Client;\n\nconst NoyaAPIContext = createContext<NoyaAPIContextValue | undefined>(\n undefined\n);\n\nexport const NoyaAPIProvider: React.Provider<NoyaAPIContextValue | undefined> =\n NoyaAPIContext.Provider;\n\nexport function useNoyaClient(): NoyaAPIContextValue {\n const value = useContext(NoyaAPIContext);\n\n if (!value) {\n throw new Error(\"Missing NoyaAPIContextValue\");\n }\n\n return value;\n}\n\nexport function useOptionalNoyaClient(): NoyaAPIContextValue | undefined {\n return useContext(NoyaAPIContext);\n}\n\n/**\n * If there's no client, fallback to a memory client.\n * We do this to safely render content when logged out (e.g. when sharing).\n */\nexport function useNoyaClientOrFallback(): NoyaAPIContextValue {\n const value = useContext(NoyaAPIContext);\n\n const memoryClient = useMemo(() => {\n return new NoyaAPI.Client({\n networkClient: new NoyaAPI.MemoryClient(),\n });\n }, []);\n\n return value ?? memoryClient;\n}\n","import { useSelector } from \"@legendapp/state/react\";\nimport { GENERATED_PAGE_NAME_COUNT, NoyaAPI } from \"@noya-app/noya-api\";\nimport { range } from \"@noya-app/noya-utils\";\nimport { useEffect, useMemo, useRef } from \"react\";\nimport {\n useNoyaClient,\n useNoyaClientOrFallback,\n useOptionalNoyaClient,\n} from \"./context\";\n\nexport function useNoyaFiles(): {\n files: NoyaAPI.File[];\n loading: boolean;\n} {\n const client = useNoyaClientOrFallback();\n const files = useSelector(client.files$);\n const session = useSelector(useNoyaClient().session$);\n\n useEffect(() => {\n if (!session) return;\n\n if (\n files.loading === \"notStarted\" ||\n files.loading === \"populatedOnServer\"\n ) {\n client.files.refetch();\n }\n }, [client, files.loading, session]);\n\n return {\n files: files.files,\n loading:\n files.loading === \"loadedInClient\" ||\n files.loading === \"populatedOnServer\",\n };\n}\n\nexport function useNoyaIsOwnFile(fileId?: string) {\n const client = useNoyaClientOrFallback();\n const files = useSelector(client.files$);\n const session = useSelector(client.session$);\n const file = files.files.find((file) => file.id === fileId);\n return file?.userId === session?.user.id;\n}\n\nexport function useNoyaTools(initial?: NoyaAPI.Tool[]) {\n const didInitialize = useRef(false);\n const client = useNoyaClientOrFallback();\n const tools = useSelector(client.tools$);\n useEffect(() => {\n if (didInitialize.current) return;\n didInitialize.current = true;\n\n if (initial) {\n client.tools.setInitial(initial);\n } else {\n client.tools.list();\n }\n }, [client, initial]);\n return tools;\n}\n\nexport function useOptionalNoyaTools(initial?: NoyaAPI.Tool[]) {\n const client = useNoyaClientOrFallback();\n const tools = useSelector(client.tools$);\n return useMemo(\n () =>\n tools.loading && initial ? { loading: true, tools: initial } : tools,\n [initial, tools]\n );\n}\n\nexport function useNoyaTags() {\n const client = useNoyaClient();\n const tags = useSelector(client.tags$);\n useEffect(() => {\n client.tags.read();\n }, [client]);\n return tags;\n}\n\nexport function useOptionalNoyaTags() {\n const client = useNoyaClientOrFallback();\n const tags = useSelector(client.tags$);\n useEffect(() => {\n client.tags.read();\n }, [client]);\n return tags;\n}\n\nexport function useNoyaCreators() {\n const client = useNoyaClientOrFallback();\n const creators = useSelector(client.creators$);\n useEffect(() => {\n client.creators.read();\n }, [client]);\n return creators;\n}\n\nexport function useOptionalNoyaCreators() {\n const client = useNoyaClientOrFallback();\n const creators = useSelector(client.creators$);\n useEffect(() => {\n client.creators.read();\n }, [client]);\n return creators;\n}\n\nexport function useNoyaAssets(fileId?: string) {\n const client = useNoyaClientOrFallback();\n const empty = useMemo(() => ({ assets: [], loading: true }), []);\n const assets = useSelector(\n fileId ? client.assetsByFileId$[fileId] : client.assets$\n );\n return assets ?? empty;\n}\n\nexport function useNoyaSession() {\n const session = useSelector(useNoyaClient().session$);\n return session;\n}\n\nexport function useOptionalNoyaSession() {\n const session = useSelector(useOptionalNoyaClient()?.session$);\n return session;\n}\n\nexport function useNoyaBilling() {\n const billing = useSelector(useNoyaClient().billing$);\n return billing;\n}\n\nexport function useNoyaEmailLists() {\n const emailLists = useSelector(useNoyaClient().emailLists$);\n return emailLists;\n}\n\nexport function useNoyaUserData() {\n const userData = useSelector(useNoyaClientOrFallback().userData$);\n return userData;\n}\n\nexport function useOptionalNoyaUserData() {\n const userData = useSelector(useNoyaClientOrFallback().userData$);\n return userData;\n}\n\nexport function useIsBeta() {\n const userData = useOptionalNoyaUserData();\n return userData?.userData?.beta ?? false;\n}\n\nexport function useMetadata<T extends NoyaAPI.Json>(key: string) {\n const { userData } = useNoyaUserData();\n const metadata = userData?.metadata || [];\n const metadataItem = metadata.find((item) => item.key === key);\n return metadataItem?.value as T | undefined;\n}\n\nexport function useGeneratedComponentNames(name: string) {\n const key = name.trim().toLowerCase();\n const { generatedNames$, loadingNames$ } = useNoyaClientOrFallback();\n const result = useSelector(\n () => generatedNames$[key].get() as NoyaAPI.GeneratedName[] | undefined\n );\n const loading = useSelector(() => loadingNames$[key].get());\n return useMemo(() => ({ names: result ?? [], loading }), [loading, result]);\n}\n\nexport function useGeneratedComponentDescriptions() {\n const { generatedDescriptions$, loadingDescriptions$ } =\n useNoyaClientOrFallback();\n const descriptions = useSelector(generatedDescriptions$);\n const loading = useSelector(loadingDescriptions$);\n return useMemo(() => ({ descriptions, loading }), [loading, descriptions]);\n}\n\nexport function useGeneratedComponentDescription(name: string) {\n const key = name.trim().toLowerCase();\n const { generatedDescriptions$, loadingDescriptions$ } =\n useNoyaClientOrFallback();\n const description = useSelector(\n () => generatedDescriptions$[key].get() as string | undefined\n );\n const loading = useSelector(() => loadingDescriptions$[key].get());\n return useMemo(() => ({ description, loading }), [loading, description]);\n}\n\nexport function useRandomImages() {\n const { randomImages$, loadingRandomImages$ } = useNoyaClientOrFallback();\n const images = useSelector(randomImages$);\n const loading = useSelector(loadingRandomImages$);\n return useMemo(() => ({ images, loading }), [loading, images]);\n}\n\nexport function useRandomIcons() {\n const { randomIcons$, loadingRandomIcons$ } = useNoyaClientOrFallback();\n const icons = useSelector(randomIcons$);\n const loading = useSelector(loadingRandomIcons$);\n return useMemo(() => ({ icons, loading }), [loading, icons]);\n}\n\nexport function useNetworkRequests() {\n const { requests$ } = useNoyaClientOrFallback();\n const requests = useSelector(requests$) as NoyaAPI.RequestSnapshot[];\n return requests;\n}\n\nexport type EnhancedGeneratedPageName = NoyaAPI.GeneratedName & {\n index: number;\n type: \"suggestion\";\n};\n\nexport function useGeneratedPageNames(): EnhancedGeneratedPageName[] {\n const { generatedPageNames$ } = useNoyaClientOrFallback();\n const names = useSelector(generatedPageNames$) as NoyaAPI.GeneratedName[];\n\n const namesWithDefaultsAndTypes = useMemo(() => {\n const rangeArray = range(0, GENERATED_PAGE_NAME_COUNT);\n\n // Fill any empty slots with default names in the 'loading' state\n const withDefaults = rangeArray.map((index): NoyaAPI.GeneratedName => {\n const name = names[index];\n return name ?? { name: `Page ${index + 1}`, loading: true, key: \"\" };\n });\n\n return withDefaults.map(\n (name, index): EnhancedGeneratedPageName => ({\n ...name,\n index,\n type: \"suggestion\",\n })\n );\n }, [names]);\n\n // Take the first 3\n return namesWithDefaultsAndTypes.slice(0, 3);\n}\n\nexport function useGeneratedPageComponentNames(): EnhancedGeneratedPageName[] {\n const { generatedPageComponentNames$: generatedComponentNames$ } =\n useNoyaClientOrFallback();\n const names = useSelector(\n generatedComponentNames$\n ) as NoyaAPI.GeneratedName[];\n\n const namesWithDefaultsAndTypes = useMemo(() => {\n const rangeArray = range(0, GENERATED_PAGE_NAME_COUNT);\n\n // Fill any empty slots with default names in the 'loading' state\n const withDefaults = rangeArray.map((index): NoyaAPI.GeneratedName => {\n const name = names[index];\n return name ?? { name: `Component ${index + 1}`, loading: true, key: \"\" };\n });\n\n return withDefaults.map(\n (name, index): EnhancedGeneratedPageName => ({\n ...name,\n index,\n type: \"suggestion\",\n })\n );\n }, [names]);\n\n // Take the first 3\n return namesWithDefaultsAndTypes.slice(0, 3);\n}\n"],"mappings":"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","names":["import_react","import_noya_api","file"]}
|
package/dist/index.mjs
CHANGED
|
@@ -38,13 +38,15 @@ function useNoyaFiles() {
|
|
|
38
38
|
const files = useSelector(client.files$);
|
|
39
39
|
const session = useSelector(useNoyaClient().session$);
|
|
40
40
|
useEffect(() => {
|
|
41
|
-
if (!session)
|
|
42
|
-
return;
|
|
41
|
+
if (!session) return;
|
|
43
42
|
if (files.loading === "notStarted" || files.loading === "populatedOnServer") {
|
|
44
43
|
client.files.refetch();
|
|
45
44
|
}
|
|
46
45
|
}, [client, files.loading, session]);
|
|
47
|
-
return
|
|
46
|
+
return {
|
|
47
|
+
files: files.files,
|
|
48
|
+
loading: files.loading === "loadedInClient" || files.loading === "populatedOnServer"
|
|
49
|
+
};
|
|
48
50
|
}
|
|
49
51
|
function useNoyaIsOwnFile(fileId) {
|
|
50
52
|
const client = useNoyaClientOrFallback();
|
|
@@ -58,8 +60,7 @@ function useNoyaTools(initial) {
|
|
|
58
60
|
const client = useNoyaClientOrFallback();
|
|
59
61
|
const tools = useSelector(client.tools$);
|
|
60
62
|
useEffect(() => {
|
|
61
|
-
if (didInitialize.current)
|
|
62
|
-
return;
|
|
63
|
+
if (didInitialize.current) return;
|
|
63
64
|
didInitialize.current = true;
|
|
64
65
|
if (initial) {
|
|
65
66
|
client.tools.setInitial(initial);
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/react/context.ts","../src/react/hooks.ts"],"sourcesContent":["export * from \"@noya-app/noya-api\";\nexport * from \"./react/context\";\nexport * from \"./react/hooks\";\n","import { NoyaAPI } from \"@noya-app/noya-api\";\nimport { createContext, useContext, useMemo } from \"react\";\n\ntype NoyaAPIContextValue = NoyaAPI.Client;\n\nconst NoyaAPIContext = createContext<NoyaAPIContextValue | undefined>(\n undefined\n);\n\nexport const NoyaAPIProvider: React.Provider<NoyaAPIContextValue | undefined> =\n NoyaAPIContext.Provider;\n\nexport function useNoyaClient(): NoyaAPIContextValue {\n const value = useContext(NoyaAPIContext);\n\n if (!value) {\n throw new Error(\"Missing NoyaAPIContextValue\");\n }\n\n return value;\n}\n\nexport function useOptionalNoyaClient(): NoyaAPIContextValue | undefined {\n return useContext(NoyaAPIContext);\n}\n\n/**\n * If there's no client, fallback to a memory client.\n * We do this to safely render content when logged out (e.g. when sharing).\n */\nexport function useNoyaClientOrFallback(): NoyaAPIContextValue {\n const value = useContext(NoyaAPIContext);\n\n const memoryClient = useMemo(() => {\n return new NoyaAPI.Client({\n networkClient: new NoyaAPI.MemoryClient(),\n });\n }, []);\n\n return value ?? memoryClient;\n}\n","import { useSelector } from \"@legendapp/state/react\";\nimport { GENERATED_PAGE_NAME_COUNT, NoyaAPI } from \"@noya-app/noya-api\";\nimport { range } from \"@noya-app/noya-utils\";\nimport { useEffect, useMemo, useRef } from \"react\";\nimport {\n useNoyaClient,\n useNoyaClientOrFallback,\n useOptionalNoyaClient,\n} from \"./context\";\n\nexport function useNoyaFiles(): {\n files: NoyaAPI.File[];\n loading: NoyaAPI.DataLoadingState;\n} {\n const client = useNoyaClientOrFallback();\n const files = useSelector(client.files$);\n const session = useSelector(useNoyaClient().session$);\n\n useEffect(() => {\n if (!session) return;\n\n if (\n files.loading === \"notStarted\" ||\n files.loading === \"populatedOnServer\"\n ) {\n client.files.refetch();\n }\n }, [client, files.loading, session]);\n\n return files;\n}\n\nexport function useNoyaIsOwnFile(fileId?: string) {\n const client = useNoyaClientOrFallback();\n const files = useSelector(client.files$);\n const session = useSelector(client.session$);\n const file = files.files.find((file) => file.id === fileId);\n return file?.userId === session?.user.id;\n}\n\nexport function useNoyaTools(initial?: NoyaAPI.Tool[]) {\n const didInitialize = useRef(false);\n const client = useNoyaClientOrFallback();\n const tools = useSelector(client.tools$);\n useEffect(() => {\n if (didInitialize.current) return;\n didInitialize.current = true;\n\n if (initial) {\n client.tools.setInitial(initial);\n } else {\n client.tools.list();\n }\n }, [client, initial]);\n return tools;\n}\n\nexport function useOptionalNoyaTools(initial?: NoyaAPI.Tool[]) {\n const client = useNoyaClientOrFallback();\n const tools = useSelector(client.tools$);\n return useMemo(\n () =>\n tools.loading && initial ? { loading: true, tools: initial } : tools,\n [initial, tools]\n );\n}\n\nexport function useNoyaTags() {\n const client = useNoyaClient();\n const tags = useSelector(client.tags$);\n useEffect(() => {\n client.tags.read();\n }, [client]);\n return tags;\n}\n\nexport function useOptionalNoyaTags() {\n const client = useNoyaClientOrFallback();\n const tags = useSelector(client.tags$);\n useEffect(() => {\n client.tags.read();\n }, [client]);\n return tags;\n}\n\nexport function useNoyaCreators() {\n const client = useNoyaClientOrFallback();\n const creators = useSelector(client.creators$);\n useEffect(() => {\n client.creators.read();\n }, [client]);\n return creators;\n}\n\nexport function useOptionalNoyaCreators() {\n const client = useNoyaClientOrFallback();\n const creators = useSelector(client.creators$);\n useEffect(() => {\n client.creators.read();\n }, [client]);\n return creators;\n}\n\nexport function useNoyaAssets(fileId?: string) {\n const client = useNoyaClientOrFallback();\n const empty = useMemo(() => ({ assets: [], loading: true }), []);\n const assets = useSelector(\n fileId ? client.assetsByFileId$[fileId] : client.assets$\n );\n return assets ?? empty;\n}\n\nexport function useNoyaSession() {\n const session = useSelector(useNoyaClient().session$);\n return session;\n}\n\nexport function useOptionalNoyaSession() {\n const session = useSelector(useOptionalNoyaClient()?.session$);\n return session;\n}\n\nexport function useNoyaBilling() {\n const billing = useSelector(useNoyaClient().billing$);\n return billing;\n}\n\nexport function useNoyaEmailLists() {\n const emailLists = useSelector(useNoyaClient().emailLists$);\n return emailLists;\n}\n\nexport function useNoyaUserData() {\n const userData = useSelector(useNoyaClientOrFallback().userData$);\n return userData;\n}\n\nexport function useOptionalNoyaUserData() {\n const userData = useSelector(useNoyaClientOrFallback().userData$);\n return userData;\n}\n\nexport function useIsBeta() {\n const userData = useOptionalNoyaUserData();\n return userData?.userData?.beta ?? false;\n}\n\nexport function useMetadata<T extends NoyaAPI.Json>(key: string) {\n const { userData } = useNoyaUserData();\n const metadata = userData?.metadata || [];\n const metadataItem = metadata.find((item) => item.key === key);\n return metadataItem?.value as T | undefined;\n}\n\nexport function useGeneratedComponentNames(name: string) {\n const key = name.trim().toLowerCase();\n const { generatedNames$, loadingNames$ } = useNoyaClientOrFallback();\n const result = useSelector(\n () => generatedNames$[key].get() as NoyaAPI.GeneratedName[] | undefined\n );\n const loading = useSelector(() => loadingNames$[key].get());\n return useMemo(() => ({ names: result ?? [], loading }), [loading, result]);\n}\n\nexport function useGeneratedComponentDescriptions() {\n const { generatedDescriptions$, loadingDescriptions$ } =\n useNoyaClientOrFallback();\n const descriptions = useSelector(generatedDescriptions$);\n const loading = useSelector(loadingDescriptions$);\n return useMemo(() => ({ descriptions, loading }), [loading, descriptions]);\n}\n\nexport function useGeneratedComponentDescription(name: string) {\n const key = name.trim().toLowerCase();\n const { generatedDescriptions$, loadingDescriptions$ } =\n useNoyaClientOrFallback();\n const description = useSelector(\n () => generatedDescriptions$[key].get() as string | undefined\n );\n const loading = useSelector(() => loadingDescriptions$[key].get());\n return useMemo(() => ({ description, loading }), [loading, description]);\n}\n\nexport function useRandomImages() {\n const { randomImages$, loadingRandomImages$ } = useNoyaClientOrFallback();\n const images = useSelector(randomImages$);\n const loading = useSelector(loadingRandomImages$);\n return useMemo(() => ({ images, loading }), [loading, images]);\n}\n\nexport function useRandomIcons() {\n const { randomIcons$, loadingRandomIcons$ } = useNoyaClientOrFallback();\n const icons = useSelector(randomIcons$);\n const loading = useSelector(loadingRandomIcons$);\n return useMemo(() => ({ icons, loading }), [loading, icons]);\n}\n\nexport function useNetworkRequests() {\n const { requests$ } = useNoyaClientOrFallback();\n const requests = useSelector(requests$) as NoyaAPI.RequestSnapshot[];\n return requests;\n}\n\nexport type EnhancedGeneratedPageName = NoyaAPI.GeneratedName & {\n index: number;\n type: \"suggestion\";\n};\n\nexport function useGeneratedPageNames(): EnhancedGeneratedPageName[] {\n const { generatedPageNames$ } = useNoyaClientOrFallback();\n const names = useSelector(generatedPageNames$) as NoyaAPI.GeneratedName[];\n\n const namesWithDefaultsAndTypes = useMemo(() => {\n const rangeArray = range(0, GENERATED_PAGE_NAME_COUNT);\n\n // Fill any empty slots with default names in the 'loading' state\n const withDefaults = rangeArray.map((index): NoyaAPI.GeneratedName => {\n const name = names[index];\n return name ?? { name: `Page ${index + 1}`, loading: true, key: \"\" };\n });\n\n return withDefaults.map(\n (name, index): EnhancedGeneratedPageName => ({\n ...name,\n index,\n type: \"suggestion\",\n })\n );\n }, [names]);\n\n // Take the first 3\n return namesWithDefaultsAndTypes.slice(0, 3);\n}\n\nexport function useGeneratedPageComponentNames(): EnhancedGeneratedPageName[] {\n const { generatedPageComponentNames$: generatedComponentNames$ } =\n useNoyaClientOrFallback();\n const names = useSelector(\n generatedComponentNames$\n ) as NoyaAPI.GeneratedName[];\n\n const namesWithDefaultsAndTypes = useMemo(() => {\n const rangeArray = range(0, GENERATED_PAGE_NAME_COUNT);\n\n // Fill any empty slots with default names in the 'loading' state\n const withDefaults = rangeArray.map((index): NoyaAPI.GeneratedName => {\n const name = names[index];\n return name ?? { name: `Component ${index + 1}`, loading: true, key: \"\" };\n });\n\n return withDefaults.map(\n (name, index): EnhancedGeneratedPageName => ({\n ...name,\n index,\n type: \"suggestion\",\n })\n );\n }, [names]);\n\n // Take the first 3\n return namesWithDefaultsAndTypes.slice(0, 3);\n}\n"],"mappings":"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","names":["useMemo","file","useMemo"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/react/context.ts","../src/react/hooks.ts"],"sourcesContent":["export * from \"@noya-app/noya-api\";\nexport * from \"./react/context\";\nexport * from \"./react/hooks\";\n","import { NoyaAPI } from \"@noya-app/noya-api\";\nimport { createContext, useContext, useMemo } from \"react\";\n\ntype NoyaAPIContextValue = NoyaAPI.Client;\n\nconst NoyaAPIContext = createContext<NoyaAPIContextValue | undefined>(\n undefined\n);\n\nexport const NoyaAPIProvider: React.Provider<NoyaAPIContextValue | undefined> =\n NoyaAPIContext.Provider;\n\nexport function useNoyaClient(): NoyaAPIContextValue {\n const value = useContext(NoyaAPIContext);\n\n if (!value) {\n throw new Error(\"Missing NoyaAPIContextValue\");\n }\n\n return value;\n}\n\nexport function useOptionalNoyaClient(): NoyaAPIContextValue | undefined {\n return useContext(NoyaAPIContext);\n}\n\n/**\n * If there's no client, fallback to a memory client.\n * We do this to safely render content when logged out (e.g. when sharing).\n */\nexport function useNoyaClientOrFallback(): NoyaAPIContextValue {\n const value = useContext(NoyaAPIContext);\n\n const memoryClient = useMemo(() => {\n return new NoyaAPI.Client({\n networkClient: new NoyaAPI.MemoryClient(),\n });\n }, []);\n\n return value ?? memoryClient;\n}\n","import { useSelector } from \"@legendapp/state/react\";\nimport { GENERATED_PAGE_NAME_COUNT, NoyaAPI } from \"@noya-app/noya-api\";\nimport { range } from \"@noya-app/noya-utils\";\nimport { useEffect, useMemo, useRef } from \"react\";\nimport {\n useNoyaClient,\n useNoyaClientOrFallback,\n useOptionalNoyaClient,\n} from \"./context\";\n\nexport function useNoyaFiles(): {\n files: NoyaAPI.File[];\n loading: boolean;\n} {\n const client = useNoyaClientOrFallback();\n const files = useSelector(client.files$);\n const session = useSelector(useNoyaClient().session$);\n\n useEffect(() => {\n if (!session) return;\n\n if (\n files.loading === \"notStarted\" ||\n files.loading === \"populatedOnServer\"\n ) {\n client.files.refetch();\n }\n }, [client, files.loading, session]);\n\n return {\n files: files.files,\n loading:\n files.loading === \"loadedInClient\" ||\n files.loading === \"populatedOnServer\",\n };\n}\n\nexport function useNoyaIsOwnFile(fileId?: string) {\n const client = useNoyaClientOrFallback();\n const files = useSelector(client.files$);\n const session = useSelector(client.session$);\n const file = files.files.find((file) => file.id === fileId);\n return file?.userId === session?.user.id;\n}\n\nexport function useNoyaTools(initial?: NoyaAPI.Tool[]) {\n const didInitialize = useRef(false);\n const client = useNoyaClientOrFallback();\n const tools = useSelector(client.tools$);\n useEffect(() => {\n if (didInitialize.current) return;\n didInitialize.current = true;\n\n if (initial) {\n client.tools.setInitial(initial);\n } else {\n client.tools.list();\n }\n }, [client, initial]);\n return tools;\n}\n\nexport function useOptionalNoyaTools(initial?: NoyaAPI.Tool[]) {\n const client = useNoyaClientOrFallback();\n const tools = useSelector(client.tools$);\n return useMemo(\n () =>\n tools.loading && initial ? { loading: true, tools: initial } : tools,\n [initial, tools]\n );\n}\n\nexport function useNoyaTags() {\n const client = useNoyaClient();\n const tags = useSelector(client.tags$);\n useEffect(() => {\n client.tags.read();\n }, [client]);\n return tags;\n}\n\nexport function useOptionalNoyaTags() {\n const client = useNoyaClientOrFallback();\n const tags = useSelector(client.tags$);\n useEffect(() => {\n client.tags.read();\n }, [client]);\n return tags;\n}\n\nexport function useNoyaCreators() {\n const client = useNoyaClientOrFallback();\n const creators = useSelector(client.creators$);\n useEffect(() => {\n client.creators.read();\n }, [client]);\n return creators;\n}\n\nexport function useOptionalNoyaCreators() {\n const client = useNoyaClientOrFallback();\n const creators = useSelector(client.creators$);\n useEffect(() => {\n client.creators.read();\n }, [client]);\n return creators;\n}\n\nexport function useNoyaAssets(fileId?: string) {\n const client = useNoyaClientOrFallback();\n const empty = useMemo(() => ({ assets: [], loading: true }), []);\n const assets = useSelector(\n fileId ? client.assetsByFileId$[fileId] : client.assets$\n );\n return assets ?? empty;\n}\n\nexport function useNoyaSession() {\n const session = useSelector(useNoyaClient().session$);\n return session;\n}\n\nexport function useOptionalNoyaSession() {\n const session = useSelector(useOptionalNoyaClient()?.session$);\n return session;\n}\n\nexport function useNoyaBilling() {\n const billing = useSelector(useNoyaClient().billing$);\n return billing;\n}\n\nexport function useNoyaEmailLists() {\n const emailLists = useSelector(useNoyaClient().emailLists$);\n return emailLists;\n}\n\nexport function useNoyaUserData() {\n const userData = useSelector(useNoyaClientOrFallback().userData$);\n return userData;\n}\n\nexport function useOptionalNoyaUserData() {\n const userData = useSelector(useNoyaClientOrFallback().userData$);\n return userData;\n}\n\nexport function useIsBeta() {\n const userData = useOptionalNoyaUserData();\n return userData?.userData?.beta ?? false;\n}\n\nexport function useMetadata<T extends NoyaAPI.Json>(key: string) {\n const { userData } = useNoyaUserData();\n const metadata = userData?.metadata || [];\n const metadataItem = metadata.find((item) => item.key === key);\n return metadataItem?.value as T | undefined;\n}\n\nexport function useGeneratedComponentNames(name: string) {\n const key = name.trim().toLowerCase();\n const { generatedNames$, loadingNames$ } = useNoyaClientOrFallback();\n const result = useSelector(\n () => generatedNames$[key].get() as NoyaAPI.GeneratedName[] | undefined\n );\n const loading = useSelector(() => loadingNames$[key].get());\n return useMemo(() => ({ names: result ?? [], loading }), [loading, result]);\n}\n\nexport function useGeneratedComponentDescriptions() {\n const { generatedDescriptions$, loadingDescriptions$ } =\n useNoyaClientOrFallback();\n const descriptions = useSelector(generatedDescriptions$);\n const loading = useSelector(loadingDescriptions$);\n return useMemo(() => ({ descriptions, loading }), [loading, descriptions]);\n}\n\nexport function useGeneratedComponentDescription(name: string) {\n const key = name.trim().toLowerCase();\n const { generatedDescriptions$, loadingDescriptions$ } =\n useNoyaClientOrFallback();\n const description = useSelector(\n () => generatedDescriptions$[key].get() as string | undefined\n );\n const loading = useSelector(() => loadingDescriptions$[key].get());\n return useMemo(() => ({ description, loading }), [loading, description]);\n}\n\nexport function useRandomImages() {\n const { randomImages$, loadingRandomImages$ } = useNoyaClientOrFallback();\n const images = useSelector(randomImages$);\n const loading = useSelector(loadingRandomImages$);\n return useMemo(() => ({ images, loading }), [loading, images]);\n}\n\nexport function useRandomIcons() {\n const { randomIcons$, loadingRandomIcons$ } = useNoyaClientOrFallback();\n const icons = useSelector(randomIcons$);\n const loading = useSelector(loadingRandomIcons$);\n return useMemo(() => ({ icons, loading }), [loading, icons]);\n}\n\nexport function useNetworkRequests() {\n const { requests$ } = useNoyaClientOrFallback();\n const requests = useSelector(requests$) as NoyaAPI.RequestSnapshot[];\n return requests;\n}\n\nexport type EnhancedGeneratedPageName = NoyaAPI.GeneratedName & {\n index: number;\n type: \"suggestion\";\n};\n\nexport function useGeneratedPageNames(): EnhancedGeneratedPageName[] {\n const { generatedPageNames$ } = useNoyaClientOrFallback();\n const names = useSelector(generatedPageNames$) as NoyaAPI.GeneratedName[];\n\n const namesWithDefaultsAndTypes = useMemo(() => {\n const rangeArray = range(0, GENERATED_PAGE_NAME_COUNT);\n\n // Fill any empty slots with default names in the 'loading' state\n const withDefaults = rangeArray.map((index): NoyaAPI.GeneratedName => {\n const name = names[index];\n return name ?? { name: `Page ${index + 1}`, loading: true, key: \"\" };\n });\n\n return withDefaults.map(\n (name, index): EnhancedGeneratedPageName => ({\n ...name,\n index,\n type: \"suggestion\",\n })\n );\n }, [names]);\n\n // Take the first 3\n return namesWithDefaultsAndTypes.slice(0, 3);\n}\n\nexport function useGeneratedPageComponentNames(): EnhancedGeneratedPageName[] {\n const { generatedPageComponentNames$: generatedComponentNames$ } =\n useNoyaClientOrFallback();\n const names = useSelector(\n generatedComponentNames$\n ) as NoyaAPI.GeneratedName[];\n\n const namesWithDefaultsAndTypes = useMemo(() => {\n const rangeArray = range(0, GENERATED_PAGE_NAME_COUNT);\n\n // Fill any empty slots with default names in the 'loading' state\n const withDefaults = rangeArray.map((index): NoyaAPI.GeneratedName => {\n const name = names[index];\n return name ?? { name: `Component ${index + 1}`, loading: true, key: \"\" };\n });\n\n return withDefaults.map(\n (name, index): EnhancedGeneratedPageName => ({\n ...name,\n index,\n type: \"suggestion\",\n })\n );\n }, [names]);\n\n // Take the first 3\n return namesWithDefaultsAndTypes.slice(0, 3);\n}\n"],"mappings":"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","names":["useMemo","file","useMemo"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noya-app/noya-api-client-react",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.22",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"module": "./dist/index.mjs",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@legendapp/state": "^2.1.1",
|
|
13
|
-
"@noya-app/noya-api": "0.1.
|
|
14
|
-
"@noya-app/noya-utils": "0.1.
|
|
13
|
+
"@noya-app/noya-api": "0.1.22",
|
|
14
|
+
"@noya-app/noya-utils": "0.1.3"
|
|
15
15
|
},
|
|
16
16
|
"peerDependencies": {
|
|
17
17
|
"react": "*",
|
package/src/react/hooks.ts
CHANGED
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
|
|
11
11
|
export function useNoyaFiles(): {
|
|
12
12
|
files: NoyaAPI.File[];
|
|
13
|
-
loading:
|
|
13
|
+
loading: boolean;
|
|
14
14
|
} {
|
|
15
15
|
const client = useNoyaClientOrFallback();
|
|
16
16
|
const files = useSelector(client.files$);
|
|
@@ -27,7 +27,12 @@ export function useNoyaFiles(): {
|
|
|
27
27
|
}
|
|
28
28
|
}, [client, files.loading, session]);
|
|
29
29
|
|
|
30
|
-
return
|
|
30
|
+
return {
|
|
31
|
+
files: files.files,
|
|
32
|
+
loading:
|
|
33
|
+
files.loading === "loadedInClient" ||
|
|
34
|
+
files.loading === "populatedOnServer",
|
|
35
|
+
};
|
|
31
36
|
}
|
|
32
37
|
|
|
33
38
|
export function useNoyaIsOwnFile(fileId?: string) {
|