@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 CHANGED
@@ -1,12 +1,12 @@
1
1
  # @tinacms/app
2
2
 
3
- ## 0.0.0-20230816203521
3
+ ## 0.0.0-20230817135409
4
4
 
5
5
  ### Patch Changes
6
6
 
7
7
  - Updated dependencies [31eb94ebe]
8
- - tinacms@0.0.0-20230816203521
9
- - @tinacms/mdx@0.0.0-20230816203521
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-20230816203521",
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-20230816203521",
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-20230816203521",
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
- return Promise.all(
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 (payload: Payload, cms: TinaCMS) => {
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