@graphcommerce/ecommerce-ui 10.0.0-canary.68 → 10.0.0-canary.72
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 +16 -0
- package/components/ApolloError/ApolloErrorAlert.tsx +45 -42
- package/components/ApolloError/ApolloErrorFullPage.tsx +8 -4
- package/components/ApolloError/ApolloErrorSnackbar.tsx +9 -4
- package/components/ApolloError/maskNetworkError.tsx +6 -15
- package/components/FormComponents/NumberFieldElement.tsx +1 -1
- package/components/WaitForQueries/WaitForQueries.tsx +2 -2
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @graphcommerce/ecommerce-ui
|
|
2
2
|
|
|
3
|
+
## 10.0.0-canary.72
|
|
4
|
+
|
|
5
|
+
## 10.0.0-canary.71
|
|
6
|
+
|
|
7
|
+
## 10.0.0-canary.70
|
|
8
|
+
|
|
9
|
+
### Major Changes
|
|
10
|
+
|
|
11
|
+
- [#2565](https://github.com/graphcommerce-org/graphcommerce/pull/2565) [`c96dfcd`](https://github.com/graphcommerce-org/graphcommerce/commit/c96dfcdca981baca387c270ad9e2b9515cdd00cc) - Updated to Apollo Client 4 ([@paales](https://github.com/paales))
|
|
12
|
+
|
|
13
|
+
## 10.0.0-canary.69
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- [#2567](https://github.com/graphcommerce-org/graphcommerce/pull/2567) [`0af3466`](https://github.com/graphcommerce-org/graphcommerce/commit/0af34663f882ad9906dc13ae6c835c158598b945) - Fix NumberFieldElement plus button decreasing the number instead of increasing ([@paales](https://github.com/paales))
|
|
18
|
+
|
|
3
19
|
## 10.0.0-canary.68
|
|
4
20
|
|
|
5
21
|
### Major Changes
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { ApolloError } from '@graphcommerce/graphql'
|
|
2
1
|
import { extendableComponent } from '@graphcommerce/next-ui/Styles/extendableComponent'
|
|
2
|
+
import type { ErrorLike } from '@apollo/client'
|
|
3
|
+
import { CombinedGraphQLErrors } from '@apollo/client/errors'
|
|
3
4
|
import type { AlertProps, SxProps, Theme } from '@mui/material'
|
|
4
5
|
import { Alert, Box } from '@mui/material'
|
|
5
6
|
import { maskNetworkError } from './maskNetworkError'
|
|
@@ -7,7 +8,7 @@ import { maskNetworkError } from './maskNetworkError'
|
|
|
7
8
|
const { classes, selectors } = extendableComponent('ApolloErrorAlert', ['root', 'alert'] as const)
|
|
8
9
|
|
|
9
10
|
export type ApolloErrorAlertProps = {
|
|
10
|
-
error?:
|
|
11
|
+
error?: ErrorLike | null
|
|
11
12
|
graphqlErrorAlertProps?: Omit<AlertProps, 'severity'>
|
|
12
13
|
networkErrorAlertProps?: Omit<AlertProps, 'severity'>
|
|
13
14
|
sx?: SxProps<Theme>
|
|
@@ -15,48 +16,50 @@ export type ApolloErrorAlertProps = {
|
|
|
15
16
|
export function ApolloErrorAlert(props: ApolloErrorAlertProps) {
|
|
16
17
|
const { error, graphqlErrorAlertProps, networkErrorAlertProps, sx } = props
|
|
17
18
|
|
|
19
|
+
if (!error) return null
|
|
20
|
+
|
|
21
|
+
// Check if this is a CombinedGraphQLErrors
|
|
22
|
+
const isGraphQLError = CombinedGraphQLErrors.is(error)
|
|
23
|
+
const graphQLErrors = isGraphQLError ? error.errors : []
|
|
24
|
+
|
|
18
25
|
return (
|
|
19
|
-
|
|
20
|
-
{
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
</Alert>
|
|
53
|
-
</Box>
|
|
54
|
-
</Box>
|
|
55
|
-
)}
|
|
26
|
+
<Box key='alerts'>
|
|
27
|
+
<Box sx={sx} className={classes.root}>
|
|
28
|
+
{graphQLErrors.map((e, index) => (
|
|
29
|
+
// eslint-disable-next-line react/no-array-index-key
|
|
30
|
+
<Box key={index}>
|
|
31
|
+
<div className={classes.alert}>
|
|
32
|
+
<Alert
|
|
33
|
+
severity='error'
|
|
34
|
+
{...graphqlErrorAlertProps}
|
|
35
|
+
sx={(theme) => ({
|
|
36
|
+
borderRadius: theme.shape.borderRadius * 1,
|
|
37
|
+
marginTop: 0.5,
|
|
38
|
+
})}
|
|
39
|
+
>
|
|
40
|
+
{e.message}
|
|
41
|
+
</Alert>
|
|
42
|
+
</div>
|
|
43
|
+
</Box>
|
|
44
|
+
))}
|
|
45
|
+
{!isGraphQLError && error && (
|
|
46
|
+
<Box key='networkError'>
|
|
47
|
+
<Box
|
|
48
|
+
sx={(theme) => ({
|
|
49
|
+
paddingTop: theme.spacings.xxs,
|
|
50
|
+
paddingBottom: theme.spacings.xxs,
|
|
51
|
+
})}
|
|
52
|
+
className={classes.alert}
|
|
53
|
+
key='networkError'
|
|
54
|
+
>
|
|
55
|
+
<Alert severity='error' {...networkErrorAlertProps}>
|
|
56
|
+
{maskNetworkError(error)}
|
|
57
|
+
</Alert>
|
|
58
|
+
</Box>
|
|
56
59
|
</Box>
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
)}
|
|
61
|
+
</Box>
|
|
62
|
+
</Box>
|
|
60
63
|
)
|
|
61
64
|
}
|
|
62
65
|
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import type { ApolloError } from '@graphcommerce/graphql'
|
|
2
1
|
import type { FullPageMessageProps } from '@graphcommerce/next-ui'
|
|
3
2
|
import { FullPageMessage } from '@graphcommerce/next-ui'
|
|
3
|
+
import type { ErrorLike } from '@apollo/client'
|
|
4
|
+
import { CombinedGraphQLErrors } from '@apollo/client/errors'
|
|
4
5
|
import { Trans } from '@lingui/react/macro'
|
|
5
6
|
import type { AlertProps } from '@mui/material'
|
|
6
7
|
import { ApolloErrorAlert } from './ApolloErrorAlert'
|
|
7
8
|
import { maskNetworkError } from './maskNetworkError'
|
|
8
9
|
|
|
9
10
|
export type ApolloErrorFullPageProps = {
|
|
10
|
-
error:
|
|
11
|
+
error: ErrorLike
|
|
11
12
|
graphqlErrorAlertProps?: Omit<AlertProps, 'severity'>
|
|
12
13
|
networkErrorAlertProps?: Omit<AlertProps, 'severity'>
|
|
13
14
|
} & Omit<FullPageMessageProps, 'title' | 'description'>
|
|
@@ -21,14 +22,17 @@ export function ApolloErrorFullPage(props: ApolloErrorFullPageProps) {
|
|
|
21
22
|
...fullPageMessageProps
|
|
22
23
|
} = props
|
|
23
24
|
|
|
24
|
-
|
|
25
|
+
// Check if this is a CombinedGraphQLErrors
|
|
26
|
+
const isGraphQLError = CombinedGraphQLErrors.is(error)
|
|
27
|
+
const graphQLErrors = isGraphQLError ? error.errors : []
|
|
28
|
+
const errorCount = graphQLErrors.length + (isGraphQLError ? 0 : 1)
|
|
25
29
|
|
|
26
30
|
if (errorCount === 0) return null
|
|
27
31
|
|
|
28
32
|
if (errorCount === 1) {
|
|
29
33
|
return (
|
|
30
34
|
<FullPageMessage
|
|
31
|
-
title={
|
|
35
|
+
title={graphQLErrors[0]?.message ?? maskNetworkError(error)}
|
|
32
36
|
{...fullPageMessageProps}
|
|
33
37
|
>
|
|
34
38
|
{children}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type { ApolloError } from '@graphcommerce/graphql'
|
|
2
1
|
import type { ErrorSnackbarProps } from '@graphcommerce/next-ui'
|
|
3
2
|
import { ErrorSnackbar } from '@graphcommerce/next-ui'
|
|
3
|
+
import type { ErrorLike } from '@apollo/client'
|
|
4
|
+
import { CombinedGraphQLErrors } from '@apollo/client/errors'
|
|
4
5
|
import { maskNetworkError } from './maskNetworkError'
|
|
5
6
|
|
|
6
7
|
export type ApolloErrorSnackbarProps = {
|
|
7
|
-
error?:
|
|
8
|
+
error?: ErrorLike | null
|
|
8
9
|
} & Pick<ErrorSnackbarProps, 'action' | 'onClose'>
|
|
9
10
|
|
|
10
11
|
export function ApolloErrorSnackbar(props: ApolloErrorSnackbarProps) {
|
|
@@ -12,11 +13,15 @@ export function ApolloErrorSnackbar(props: ApolloErrorSnackbarProps) {
|
|
|
12
13
|
|
|
13
14
|
if (!error) return null
|
|
14
15
|
|
|
16
|
+
// Check if this is a CombinedGraphQLErrors
|
|
17
|
+
const isGraphQLError = CombinedGraphQLErrors.is(error)
|
|
18
|
+
const graphQLErrors = isGraphQLError ? error.errors : []
|
|
19
|
+
|
|
15
20
|
return (
|
|
16
21
|
<ErrorSnackbar variant='pill' severity='error' {...passedProps} open={!!error}>
|
|
17
22
|
<>
|
|
18
|
-
{
|
|
19
|
-
{maskNetworkError(error
|
|
23
|
+
{graphQLErrors.map((e) => e.message).join(', ')}
|
|
24
|
+
{!isGraphQLError && maskNetworkError(error)}
|
|
20
25
|
</>
|
|
21
26
|
</ErrorSnackbar>
|
|
22
27
|
)
|
|
@@ -1,24 +1,15 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ErrorLike } from '@apollo/client'
|
|
2
|
+
import { ServerError, ServerParseError } from '@apollo/client/errors'
|
|
2
3
|
import { Trans } from '@lingui/react/macro'
|
|
3
4
|
|
|
4
|
-
function
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
function isServerParseError(
|
|
9
|
-
error: Error | ServerParseError | ServerError | null,
|
|
10
|
-
): error is ServerParseError {
|
|
11
|
-
return 'bodyText' in (error as ServerParseError)
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export function maskNetworkError(networkError: Error | ServerParseError | ServerError | null) {
|
|
15
|
-
if (!networkError) return null
|
|
5
|
+
export function maskNetworkError(error: ErrorLike | null) {
|
|
6
|
+
if (!error) return null
|
|
16
7
|
|
|
17
8
|
if (process.env.NODE_ENV === 'development') {
|
|
18
|
-
console.log(
|
|
9
|
+
console.log(error)
|
|
19
10
|
}
|
|
20
11
|
|
|
21
|
-
if (
|
|
12
|
+
if (ServerParseError.is(error) || ServerError.is(error)) {
|
|
22
13
|
return <Trans>Something went wrong on the server, please try again later.</Trans>
|
|
23
14
|
}
|
|
24
15
|
|
|
@@ -167,7 +167,7 @@ function NumberFieldElementBase(props: NumberFieldElementProps) {
|
|
|
167
167
|
onClick={() => {
|
|
168
168
|
if (valueAsNumber >= (inputProps.max ?? Infinity)) return
|
|
169
169
|
// Round to nearest step with precision fix
|
|
170
|
-
const newValue = roundToPrecision(Math.round((valueAsNumber
|
|
170
|
+
const newValue = roundToPrecision(Math.round((valueAsNumber + step) / step) * step)
|
|
171
171
|
onChange(newValue)
|
|
172
172
|
}}
|
|
173
173
|
sx={sxx(
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ApolloClient, useQuery } from '@graphcommerce/graphql'
|
|
2
2
|
import { useIsSSR } from '@graphcommerce/next-ui'
|
|
3
3
|
import React from 'react'
|
|
4
4
|
|
|
5
5
|
export type WaitForQueriesProps = {
|
|
6
6
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
-
waitFor:
|
|
7
|
+
waitFor: useQuery.Result<any, any> | boolean | (useQuery.Result<any, any> | boolean)[] | undefined
|
|
8
8
|
children: React.ReactNode
|
|
9
9
|
fallback?: React.ReactNode
|
|
10
10
|
}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@graphcommerce/ecommerce-ui",
|
|
3
3
|
"homepage": "https://www.graphcommerce.org/",
|
|
4
4
|
"repository": "github:graphcommerce-org/graphcommerce",
|
|
5
|
-
"version": "10.0.0-canary.
|
|
5
|
+
"version": "10.0.0-canary.72",
|
|
6
6
|
"sideEffects": false,
|
|
7
7
|
"prettier": "@graphcommerce/prettier-config-pwa",
|
|
8
8
|
"eslintConfig": {
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"peerDependencies": {
|
|
15
|
-
"@graphcommerce/eslint-config-pwa": "^10.0.0-canary.
|
|
16
|
-
"@graphcommerce/graphql": "^10.0.0-canary.
|
|
17
|
-
"@graphcommerce/next-ui": "^10.0.0-canary.
|
|
18
|
-
"@graphcommerce/prettier-config-pwa": "^10.0.0-canary.
|
|
19
|
-
"@graphcommerce/react-hook-form": "^10.0.0-canary.
|
|
20
|
-
"@graphcommerce/typescript-config-pwa": "^10.0.0-canary.
|
|
15
|
+
"@graphcommerce/eslint-config-pwa": "^10.0.0-canary.72",
|
|
16
|
+
"@graphcommerce/graphql": "^10.0.0-canary.72",
|
|
17
|
+
"@graphcommerce/next-ui": "^10.0.0-canary.72",
|
|
18
|
+
"@graphcommerce/prettier-config-pwa": "^10.0.0-canary.72",
|
|
19
|
+
"@graphcommerce/react-hook-form": "^10.0.0-canary.72",
|
|
20
|
+
"@graphcommerce/typescript-config-pwa": "^10.0.0-canary.72",
|
|
21
21
|
"@lingui/core": "^5",
|
|
22
22
|
"@lingui/macro": "^5",
|
|
23
23
|
"@lingui/react": "^5",
|