@tinacms/app 0.0.0-20230816203521 → 0.0.0-20230817135409
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/CHANGELOG.md +3 -3
- package/package.json +3 -3
- package/src/lib/errors.tsx +24 -0
- package/src/lib/graphql-reducer.ts +28 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# @tinacms/app
|
|
2
2
|
|
|
3
|
-
## 0.0.0-
|
|
3
|
+
## 0.0.0-20230817135409
|
|
4
4
|
|
|
5
5
|
### Patch Changes
|
|
6
6
|
|
|
7
7
|
- Updated dependencies [31eb94ebe]
|
|
8
|
-
- tinacms@0.0.0-
|
|
9
|
-
- @tinacms/mdx@0.0.0-
|
|
8
|
+
- tinacms@0.0.0-20230817135409
|
|
9
|
+
- @tinacms/mdx@0.0.0-20230817135409
|
|
10
10
|
|
|
11
11
|
## 1.2.25
|
|
12
12
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tinacms/app",
|
|
3
|
-
"version": "0.0.0-
|
|
3
|
+
"version": "0.0.0-20230817135409",
|
|
4
4
|
"main": "src/main.tsx",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"devDependencies": {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"@headlessui/react": "1.6.6",
|
|
15
15
|
"@heroicons/react": "1.0.6",
|
|
16
16
|
"@monaco-editor/react": "4.4.5",
|
|
17
|
-
"@tinacms/mdx": "0.0.0-
|
|
17
|
+
"@tinacms/mdx": "0.0.0-20230817135409",
|
|
18
18
|
"@xstate/react": "3.0.0",
|
|
19
19
|
"final-form": "4.20.7",
|
|
20
20
|
"graphiql": "3.0.0-alpha.1",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"react-dom": "17.0.2",
|
|
26
26
|
"react-router-dom": "6.3.0",
|
|
27
27
|
"tailwindcss": "^3.2.7",
|
|
28
|
-
"tinacms": "0.0.0-
|
|
28
|
+
"tinacms": "0.0.0-20230817135409",
|
|
29
29
|
"typescript": "^4.6.4",
|
|
30
30
|
"zod": "^3.14.3"
|
|
31
31
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { TinaCMS } from 'tinacms'
|
|
3
|
+
|
|
4
|
+
const ErrorModalContent = (props: { title: string; errors: string[] }) => {
|
|
5
|
+
const { title, errors } = props
|
|
6
|
+
return (
|
|
7
|
+
<>
|
|
8
|
+
<div>{title}</div>
|
|
9
|
+
<ul>
|
|
10
|
+
{errors.map((error, i) => (
|
|
11
|
+
<li key={i}>{error}</li>
|
|
12
|
+
))}
|
|
13
|
+
</ul>
|
|
14
|
+
</>
|
|
15
|
+
)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const showErrorModal = (
|
|
19
|
+
title: string,
|
|
20
|
+
errors: string[],
|
|
21
|
+
cms: TinaCMS
|
|
22
|
+
) => {
|
|
23
|
+
cms.alerts.error(() => <ErrorModalContent title={title} errors={errors} />)
|
|
24
|
+
}
|
|
@@ -29,6 +29,7 @@ import type {
|
|
|
29
29
|
} from './types'
|
|
30
30
|
import { getFormAndFieldNameFromMetadata } from './util'
|
|
31
31
|
import { useSearchParams } from 'react-router-dom'
|
|
32
|
+
import { showErrorModal } from './errors'
|
|
32
33
|
|
|
33
34
|
const sysSchema = z.object({
|
|
34
35
|
breadcrumbs: z.array(z.string()),
|
|
@@ -152,6 +153,14 @@ const astNodeWithMeta: G.DocumentNode = {
|
|
|
152
153
|
const schema = G.buildASTSchema(astNode)
|
|
153
154
|
const schemaForResolver = G.buildASTSchema(astNodeWithMeta)
|
|
154
155
|
|
|
156
|
+
const isRejected = (
|
|
157
|
+
input: PromiseSettledResult<unknown>
|
|
158
|
+
): input is PromiseRejectedResult => input.status === 'rejected'
|
|
159
|
+
|
|
160
|
+
const isFulfilled = <T>(
|
|
161
|
+
input: PromiseSettledResult<T>
|
|
162
|
+
): input is PromiseFulfilledResult<T> => input.status === 'fulfilled'
|
|
163
|
+
|
|
155
164
|
export const useGraphQLReducer = (
|
|
156
165
|
iframe: React.MutableRefObject<HTMLIFrameElement>,
|
|
157
166
|
url: string
|
|
@@ -159,6 +168,7 @@ export const useGraphQLReducer = (
|
|
|
159
168
|
const cms = useCMS()
|
|
160
169
|
const tinaSchema = cms.api.tina.schema as TinaSchema
|
|
161
170
|
const [payloads, setPayloads] = React.useState<Payload[]>([])
|
|
171
|
+
const [requestErrors, setRequestErrors] = React.useState<string[]>([])
|
|
162
172
|
const [searchParams, setSearchParams] = useSearchParams()
|
|
163
173
|
const [results, setResults] = React.useState<
|
|
164
174
|
{
|
|
@@ -204,7 +214,9 @@ export const useGraphQLReducer = (
|
|
|
204
214
|
*/
|
|
205
215
|
React.useEffect(() => {
|
|
206
216
|
const run = async () => {
|
|
207
|
-
|
|
217
|
+
setRequestErrors([])
|
|
218
|
+
// gather the errors and display an error message containing each error unique message
|
|
219
|
+
return Promise.allSettled(
|
|
208
220
|
payloads.map(async (payload) => {
|
|
209
221
|
// This payload has already been expanded, skip it.
|
|
210
222
|
if (payload.expandedQuery) {
|
|
@@ -219,7 +231,10 @@ export const useGraphQLReducer = (
|
|
|
219
231
|
}
|
|
220
232
|
if (payloads.length) {
|
|
221
233
|
run().then((updatedPayloads) => {
|
|
222
|
-
setPayloads(updatedPayloads)
|
|
234
|
+
setPayloads(updatedPayloads.filter(isFulfilled).map((p) => p.value))
|
|
235
|
+
setRequestErrors(
|
|
236
|
+
updatedPayloads.filter(isRejected).map((p) => String(p.reason))
|
|
237
|
+
)
|
|
223
238
|
})
|
|
224
239
|
}
|
|
225
240
|
}, [JSON.stringify(payloads), cms])
|
|
@@ -575,6 +590,12 @@ export const useGraphQLReducer = (
|
|
|
575
590
|
cms.dispatch({ type: 'set-edit-mode', value: 'basic' })
|
|
576
591
|
}
|
|
577
592
|
}, [iframe.current, JSON.stringify(results)])
|
|
593
|
+
|
|
594
|
+
React.useEffect(() => {
|
|
595
|
+
if (requestErrors.length) {
|
|
596
|
+
showErrorModal('Unexpected error querying content', requestErrors, cms)
|
|
597
|
+
}
|
|
598
|
+
}, [requestErrors])
|
|
578
599
|
}
|
|
579
600
|
|
|
580
601
|
const onSubmit = async (
|
|
@@ -834,12 +855,15 @@ _internalSys: _sys {
|
|
|
834
855
|
return response.node
|
|
835
856
|
}
|
|
836
857
|
|
|
837
|
-
const expandPayload = async (
|
|
858
|
+
const expandPayload = async (
|
|
859
|
+
payload: Payload,
|
|
860
|
+
cms: TinaCMS
|
|
861
|
+
): Promise<Payload> => {
|
|
838
862
|
const { query, variables } = payload
|
|
839
863
|
const documentNode = G.parse(query)
|
|
840
864
|
const expandedDocumentNode = expandQuery({ schema, documentNode })
|
|
841
865
|
const expandedQuery = G.print(expandedDocumentNode)
|
|
842
|
-
const expandedData = await cms.api.tina.request(expandedQuery, {
|
|
866
|
+
const expandedData = await cms.api.tina.request<object>(expandedQuery, {
|
|
843
867
|
variables,
|
|
844
868
|
})
|
|
845
869
|
|