From 6988316fbc7ed6e6c907b937324a4d0f19ed57c6 Mon Sep 17 00:00:00 2001 From: dominik-zeglen Date: Mon, 2 Nov 2020 14:26:02 +0100 Subject: [PATCH] Use dedicated type to return error promise --- .../CustomAppDetailsPage/CustomAppDetailsPage.tsx | 3 ++- .../components/CategoryUpdatePage/CategoryUpdatePage.tsx | 3 ++- src/components/Form/Form.tsx | 4 ++-- .../components/CustomerDetailsPage/CustomerDetailsPage.tsx | 3 ++- src/hooks/useForm.ts | 3 ++- .../components/MenuDetailsPage/MenuDetailsPage.tsx | 3 ++- src/orders/components/OrderDetailsPage/OrderDetailsPage.tsx | 3 ++- src/pages/components/PageDetailsPage/PageDetailsPage.tsx | 3 ++- .../PermissionGroupDetailsPage.tsx | 3 ++- .../ProductTypeDetailsPage/ProductTypeDetailsPage.tsx | 4 ++-- .../components/ProductUpdatePage/ProductUpdatePage.tsx | 3 ++- src/products/components/ProductUpdatePage/form.tsx | 6 +++--- src/products/components/ProductVariantPage/form.tsx | 6 +++--- .../ShippingZoneDetailsPage/ShippingZoneDetailsPage.tsx | 3 ++- .../components/SiteSettingsPage/SiteSettingsPage.tsx | 3 ++- src/staff/components/StaffDetailsPage/StaffDetailsPage.tsx | 3 ++- src/utils/handlers/handleFormSubmit.ts | 4 +++- .../WarehouseDetailsPage/WarehouseDetailsPage.tsx | 3 ++- 18 files changed, 39 insertions(+), 24 deletions(-) diff --git a/src/apps/components/CustomAppDetailsPage/CustomAppDetailsPage.tsx b/src/apps/components/CustomAppDetailsPage/CustomAppDetailsPage.tsx index c32e09b8f..75bdef75d 100644 --- a/src/apps/components/CustomAppDetailsPage/CustomAppDetailsPage.tsx +++ b/src/apps/components/CustomAppDetailsPage/CustomAppDetailsPage.tsx @@ -10,6 +10,7 @@ import Grid from "@saleor/components/Grid"; import PageHeader from "@saleor/components/PageHeader"; import SaveButtonBar from "@saleor/components/SaveButtonBar"; import { ShopInfo_shop_permissions } from "@saleor/components/Shop/types/ShopInfo"; +import { SubmitPromise } from "@saleor/hooks/useForm"; import { sectionNames } from "@saleor/intl"; import { PermissionEnum } from "@saleor/types/globalTypes"; import { getFormErrors } from "@saleor/utils/errors"; @@ -42,7 +43,7 @@ export interface CustomAppDetailsPageProps { onTokenDelete: (id: string) => void; onTokenClose: () => void; onTokenCreate: () => void; - onSubmit: (data: CustomAppDetailsPageFormData) => Promise; + onSubmit: (data: CustomAppDetailsPageFormData) => SubmitPromise; onWebhookCreate: () => void; onWebhookRemove: (id: string) => void; navigateToWebhookDetails: (id: string) => () => void; diff --git a/src/categories/components/CategoryUpdatePage/CategoryUpdatePage.tsx b/src/categories/components/CategoryUpdatePage/CategoryUpdatePage.tsx index ec0df2233..96c46e1c2 100644 --- a/src/categories/components/CategoryUpdatePage/CategoryUpdatePage.tsx +++ b/src/categories/components/CategoryUpdatePage/CategoryUpdatePage.tsx @@ -13,6 +13,7 @@ import SaveButtonBar from "@saleor/components/SaveButtonBar"; import SeoForm from "@saleor/components/SeoForm"; import { Tab, TabContainer } from "@saleor/components/Tab"; import { ProductErrorFragment } from "@saleor/fragments/types/ProductErrorFragment"; +import { SubmitPromise } from "@saleor/hooks/useForm"; import { sectionNames } from "@saleor/intl"; import { mapMetadataItemToInput } from "@saleor/utils/maps"; import useMetadataChangeTrigger from "@saleor/utils/metadata/useMetadataChangeTrigger"; @@ -61,7 +62,7 @@ export interface CategoryUpdatePageProps }; saveButtonBarState: ConfirmButtonTransitionState; onImageDelete: () => void; - onSubmit: (data: FormData) => Promise; + onSubmit: (data: FormData) => SubmitPromise; onImageUpload(file: File); onNextPage(); onPreviousPage(); diff --git a/src/components/Form/Form.tsx b/src/components/Form/Form.tsx index 77b692528..88d893e22 100644 --- a/src/components/Form/Form.tsx +++ b/src/components/Form/Form.tsx @@ -1,4 +1,4 @@ -import useForm, { UseFormResult } from "@saleor/hooks/useForm"; +import useForm, { SubmitPromise, UseFormResult } from "@saleor/hooks/useForm"; import React from "react"; export interface FormProps { @@ -6,7 +6,7 @@ export interface FormProps { confirmLeave?: boolean; initial?: T; resetOnSubmit?: boolean; - onSubmit?: (data: T) => Promise | void; + onSubmit?: (data: T) => SubmitPromise | void; } function Form(props: FormProps) { diff --git a/src/customers/components/CustomerDetailsPage/CustomerDetailsPage.tsx b/src/customers/components/CustomerDetailsPage/CustomerDetailsPage.tsx index 216686180..0cc6b19c5 100644 --- a/src/customers/components/CustomerDetailsPage/CustomerDetailsPage.tsx +++ b/src/customers/components/CustomerDetailsPage/CustomerDetailsPage.tsx @@ -7,6 +7,7 @@ import Grid from "@saleor/components/Grid"; import PageHeader from "@saleor/components/PageHeader"; import SaveButtonBar from "@saleor/components/SaveButtonBar"; import { AccountErrorFragment } from "@saleor/fragments/types/AccountErrorFragment"; +import { SubmitPromise } from "@saleor/hooks/useForm"; import { sectionNames } from "@saleor/intl"; import React from "react"; import { useIntl } from "react-intl"; @@ -33,7 +34,7 @@ export interface CustomerDetailsPageProps { errors: AccountErrorFragment[]; saveButtonBar: ConfirmButtonTransitionState; onBack: () => void; - onSubmit: (data: CustomerDetailsPageFormData) => Promise; + onSubmit: (data: CustomerDetailsPageFormData) => SubmitPromise; onViewAllOrdersClick: () => void; onRowClick: (id: string) => void; onAddressManageClick: () => void; diff --git a/src/hooks/useForm.ts b/src/hooks/useForm.ts index 46009e8a2..5475777e3 100644 --- a/src/hooks/useForm.ts +++ b/src/hooks/useForm.ts @@ -10,6 +10,7 @@ export interface ChangeEvent { value: TData; }; } +export type SubmitPromise = Promise; export type FormChange = (event: ChangeEvent, cb?: () => void) => void; @@ -51,7 +52,7 @@ function handleRefresh( function useForm( initial: T, - onSubmit?: (data: T) => Promise | void + onSubmit?: (data: T) => SubmitPromise | void ): UseFormResult { const [hasChanged, setChanged] = useState(false); const [data, setData] = useStateFromProps(initial, { diff --git a/src/navigation/components/MenuDetailsPage/MenuDetailsPage.tsx b/src/navigation/components/MenuDetailsPage/MenuDetailsPage.tsx index 576dd0bb9..9d0a6ae06 100644 --- a/src/navigation/components/MenuDetailsPage/MenuDetailsPage.tsx +++ b/src/navigation/components/MenuDetailsPage/MenuDetailsPage.tsx @@ -7,6 +7,7 @@ import Form from "@saleor/components/Form"; import Grid from "@saleor/components/Grid"; import SaveButtonBar from "@saleor/components/SaveButtonBar"; import { MenuErrorFragment } from "@saleor/fragments/types/MenuErrorFragment"; +import { SubmitPromise } from "@saleor/hooks/useForm"; import { sectionNames } from "@saleor/intl"; import React from "react"; import { FormattedMessage, useIntl } from "react-intl"; @@ -36,7 +37,7 @@ export interface MenuDetailsPageProps { onItemAdd: () => void; onItemClick: (id: string, type: MenuItemType) => void; onItemEdit: (id: string) => void; - onSubmit: (data: MenuDetailsSubmitData) => Promise; + onSubmit: (data: MenuDetailsSubmitData) => SubmitPromise; } const MenuDetailsPage: React.FC = ({ diff --git a/src/orders/components/OrderDetailsPage/OrderDetailsPage.tsx b/src/orders/components/OrderDetailsPage/OrderDetailsPage.tsx index 62c9bf240..732e3970f 100644 --- a/src/orders/components/OrderDetailsPage/OrderDetailsPage.tsx +++ b/src/orders/components/OrderDetailsPage/OrderDetailsPage.tsx @@ -12,6 +12,7 @@ import Metadata, { MetadataFormData } from "@saleor/components/Metadata"; import PageHeader from "@saleor/components/PageHeader"; import SaveButtonBar from "@saleor/components/SaveButtonBar"; import Skeleton from "@saleor/components/Skeleton"; +import { SubmitPromise } from "@saleor/hooks/useForm"; import { sectionNames } from "@saleor/intl"; import { UserPermissionProps } from "@saleor/types"; import { mapMetadataItemToInput } from "@saleor/utils/maps"; @@ -74,7 +75,7 @@ export interface OrderDetailsPageProps extends UserPermissionProps { onInvoiceClick(invoiceId: string); onInvoiceGenerate(); onInvoiceSend(invoiceId: string); - onSubmit(data: MetadataFormData): Promise; + onSubmit(data: MetadataFormData): SubmitPromise; } const OrderDetailsPage: React.FC = props => { diff --git a/src/pages/components/PageDetailsPage/PageDetailsPage.tsx b/src/pages/components/PageDetailsPage/PageDetailsPage.tsx index 39bc0a055..739433f0c 100644 --- a/src/pages/components/PageDetailsPage/PageDetailsPage.tsx +++ b/src/pages/components/PageDetailsPage/PageDetailsPage.tsx @@ -11,6 +11,7 @@ import SeoForm from "@saleor/components/SeoForm"; import VisibilityCard from "@saleor/components/VisibilityCard"; import { PageErrorFragment } from "@saleor/fragments/types/PageErrorFragment"; import useDateLocalize from "@saleor/hooks/useDateLocalize"; +import { SubmitPromise } from "@saleor/hooks/useForm"; import { sectionNames } from "@saleor/intl"; import { mapMetadataItemToInput } from "@saleor/utils/maps"; import useMetadataChangeTrigger from "@saleor/utils/metadata/useMetadataChangeTrigger"; @@ -45,7 +46,7 @@ export interface PageDetailsPageProps { saveButtonBarState: ConfirmButtonTransitionState; onBack: () => void; onRemove: () => void; - onSubmit: (data: PageDetailsPageFormData) => Promise; + onSubmit: (data: PageDetailsPageFormData) => SubmitPromise; } const PageDetailsPage: React.FC = ({ diff --git a/src/permissionGroups/components/PermissionGroupDetailsPage/PermissionGroupDetailsPage.tsx b/src/permissionGroups/components/PermissionGroupDetailsPage/PermissionGroupDetailsPage.tsx index 871a42e26..fc5c41538 100644 --- a/src/permissionGroups/components/PermissionGroupDetailsPage/PermissionGroupDetailsPage.tsx +++ b/src/permissionGroups/components/PermissionGroupDetailsPage/PermissionGroupDetailsPage.tsx @@ -9,6 +9,7 @@ import PageHeader from "@saleor/components/PageHeader"; import SaveButtonBar from "@saleor/components/SaveButtonBar"; import { ShopInfo_shop_permissions } from "@saleor/components/Shop/types/ShopInfo"; import { PermissionGroupErrorFragment } from "@saleor/fragments/types/PermissionGroupErrorFragment"; +import { SubmitPromise } from "@saleor/hooks/useForm"; import { sectionNames } from "@saleor/intl"; import { MembersListUrlSortField } from "@saleor/permissionGroups/urls"; import { @@ -56,7 +57,7 @@ export interface PermissionGroupDetailsPageProps onAssign: () => void; onBack: () => void; onUnassign: (ids: string[]) => void; - onSubmit: (data: PermissionGroupDetailsPageFormData) => Promise; + onSubmit: (data: PermissionGroupDetailsPageFormData) => SubmitPromise; } const PermissionGroupDetailsPage: React.FC = ({ diff --git a/src/productTypes/components/ProductTypeDetailsPage/ProductTypeDetailsPage.tsx b/src/productTypes/components/ProductTypeDetailsPage/ProductTypeDetailsPage.tsx index 810736704..e5e8bbf48 100644 --- a/src/productTypes/components/ProductTypeDetailsPage/ProductTypeDetailsPage.tsx +++ b/src/productTypes/components/ProductTypeDetailsPage/ProductTypeDetailsPage.tsx @@ -9,7 +9,7 @@ import Metadata from "@saleor/components/Metadata/Metadata"; import { MetadataFormData } from "@saleor/components/Metadata/types"; import PageHeader from "@saleor/components/PageHeader"; import SaveButtonBar from "@saleor/components/SaveButtonBar"; -import { ChangeEvent, FormChange } from "@saleor/hooks/useForm"; +import { ChangeEvent, FormChange, SubmitPromise } from "@saleor/hooks/useForm"; import useStateFromProps from "@saleor/hooks/useStateFromProps"; import { sectionNames } from "@saleor/intl"; import { maybe } from "@saleor/misc"; @@ -61,7 +61,7 @@ export interface ProductTypeDetailsPageProps { onBack: () => void; onDelete: () => void; onHasVariantsToggle: (hasVariants: boolean) => void; - onSubmit: (data: ProductTypeForm) => Promise; + onSubmit: (data: ProductTypeForm) => SubmitPromise; } function handleTaxTypeChange( diff --git a/src/products/components/ProductUpdatePage/ProductUpdatePage.tsx b/src/products/components/ProductUpdatePage/ProductUpdatePage.tsx index 5843bd45d..3e99347e2 100644 --- a/src/products/components/ProductUpdatePage/ProductUpdatePage.tsx +++ b/src/products/components/ProductUpdatePage/ProductUpdatePage.tsx @@ -12,6 +12,7 @@ import { ProductErrorWithAttributesFragment } from "@saleor/fragments/types/Prod import { TaxTypeFragment } from "@saleor/fragments/types/TaxTypeFragment"; import { WarehouseFragment } from "@saleor/fragments/types/WarehouseFragment"; import useDateLocalize from "@saleor/hooks/useDateLocalize"; +import { SubmitPromise } from "@saleor/hooks/useForm"; import useStateFromProps from "@saleor/hooks/useStateFromProps"; import { sectionNames } from "@saleor/intl"; import { maybe } from "@saleor/misc"; @@ -61,7 +62,7 @@ export interface ProductUpdatePageProps extends ListActions { onVariantShow: (id: string) => () => void; onVariantReorder: ReorderAction; onImageDelete: (id: string) => () => void; - onSubmit: (data: ProductUpdatePageSubmitData) => Promise; + onSubmit: (data: ProductUpdatePageSubmitData) => SubmitPromise; onBack?(); onDelete(); onImageEdit?(id: string); diff --git a/src/products/components/ProductUpdatePage/form.tsx b/src/products/components/ProductUpdatePage/form.tsx index 14ee81fdf..009b8b27a 100644 --- a/src/products/components/ProductUpdatePage/form.tsx +++ b/src/products/components/ProductUpdatePage/form.tsx @@ -1,7 +1,7 @@ import { MetadataFormData } from "@saleor/components/Metadata"; import { MultiAutocompleteChoiceType } from "@saleor/components/MultiAutocompleteSelectField"; import { SingleAutocompleteChoiceType } from "@saleor/components/SingleAutocompleteSelectField"; -import useForm, { FormChange } from "@saleor/hooks/useForm"; +import useForm, { FormChange, SubmitPromise } from "@saleor/hooks/useForm"; import useFormset, { FormsetChange, FormsetData @@ -96,7 +96,7 @@ export interface UseProductUpdateFormOpts export interface ProductUpdateFormProps extends UseProductUpdateFormOpts { children: (props: UseProductUpdateFormResult) => React.ReactNode; product: ProductDetails_product; - onSubmit: (data: ProductUpdateSubmitData) => Promise; + onSubmit: (data: ProductUpdateSubmitData) => SubmitPromise; } const getAvailabilityData = ({ @@ -144,7 +144,7 @@ const getMetadata = ( function useProductUpdateForm( product: ProductDetails_product, - onSubmit: (data: ProductUpdateSubmitData) => Promise, + onSubmit: (data: ProductUpdateSubmitData) => SubmitPromise, opts: UseProductUpdateFormOpts ): UseProductUpdateFormResult { const [changed, setChanged] = React.useState(false); diff --git a/src/products/components/ProductVariantPage/form.tsx b/src/products/components/ProductVariantPage/form.tsx index ee2f2735b..9d9fc8203 100644 --- a/src/products/components/ProductVariantPage/form.tsx +++ b/src/products/components/ProductVariantPage/form.tsx @@ -1,6 +1,6 @@ import { MetadataFormData } from "@saleor/components/Metadata"; import { ProductVariant } from "@saleor/fragments/types/ProductVariant"; -import useForm, { FormChange } from "@saleor/hooks/useForm"; +import useForm, { FormChange, SubmitPromise } from "@saleor/hooks/useForm"; import useFormset, { FormsetChange, FormsetData @@ -57,12 +57,12 @@ export interface ProductVariantUpdateFormProps extends UseProductVariantUpdateFormOpts { children: (props: UseProductVariantUpdateFormResult) => React.ReactNode; variant: ProductVariant; - onSubmit: (data: ProductVariantUpdateSubmitData) => Promise; + onSubmit: (data: ProductVariantUpdateSubmitData) => SubmitPromise; } function useProductVariantUpdateForm( variant: ProductVariant, - onSubmit: (data: ProductVariantUpdateSubmitData) => Promise, + onSubmit: (data: ProductVariantUpdateSubmitData) => SubmitPromise, opts: UseProductVariantUpdateFormOpts ): UseProductVariantUpdateFormResult { const [changed, setChanged] = React.useState(false); diff --git a/src/shipping/components/ShippingZoneDetailsPage/ShippingZoneDetailsPage.tsx b/src/shipping/components/ShippingZoneDetailsPage/ShippingZoneDetailsPage.tsx index 18175bf86..c814f3c86 100644 --- a/src/shipping/components/ShippingZoneDetailsPage/ShippingZoneDetailsPage.tsx +++ b/src/shipping/components/ShippingZoneDetailsPage/ShippingZoneDetailsPage.tsx @@ -14,6 +14,7 @@ import { ShippingZoneDetailsFragment, ShippingZoneDetailsFragment_warehouses } from "@saleor/fragments/types/ShippingZoneDetailsFragment"; +import { SubmitPromise } from "@saleor/hooks/useForm"; import useStateFromProps from "@saleor/hooks/useStateFromProps"; import createMultiAutocompleteSelectHandler from "@saleor/utils/handlers/multiAutocompleteSelectChangeHandler"; import React from "react"; @@ -46,7 +47,7 @@ export interface ShippingZoneDetailsPageProps onPriceRateAdd: () => void; onPriceRateEdit: (id: string) => void; onRateRemove: (rateId: string) => void; - onSubmit: (data: FormData) => Promise; + onSubmit: (data: FormData) => SubmitPromise; onWarehouseAdd: () => void; onWeightRateAdd: () => void; onWeightRateEdit: (id: string) => void; diff --git a/src/siteSettings/components/SiteSettingsPage/SiteSettingsPage.tsx b/src/siteSettings/components/SiteSettingsPage/SiteSettingsPage.tsx index 46738b3b2..d6e1a8d0f 100644 --- a/src/siteSettings/components/SiteSettingsPage/SiteSettingsPage.tsx +++ b/src/siteSettings/components/SiteSettingsPage/SiteSettingsPage.tsx @@ -11,6 +11,7 @@ import PageHeader from "@saleor/components/PageHeader"; import SaveButtonBar from "@saleor/components/SaveButtonBar"; import { ShopErrorFragment } from "@saleor/fragments/types/ShopErrorFragment"; import useAddressValidation from "@saleor/hooks/useAddressValidation"; +import { SubmitPromise } from "@saleor/hooks/useForm"; import useStateFromProps from "@saleor/hooks/useStateFromProps"; import { commonMessages, sectionNames } from "@saleor/intl"; import createSingleAutocompleteSelectHandler from "@saleor/utils/handlers/singleAutocompleteSelectChangeHandler"; @@ -54,7 +55,7 @@ export interface SiteSettingsPageProps { onBack: () => void; onKeyAdd: () => void; onKeyRemove: (keyType: AuthorizationKeyType) => void; - onSubmit: (data: SiteSettingsPageFormData) => Promise; + onSubmit: (data: SiteSettingsPageFormData) => SubmitPromise; } export function areAddressInputFieldsModified( diff --git a/src/staff/components/StaffDetailsPage/StaffDetailsPage.tsx b/src/staff/components/StaffDetailsPage/StaffDetailsPage.tsx index 5a3eea8ab..3eab80409 100644 --- a/src/staff/components/StaffDetailsPage/StaffDetailsPage.tsx +++ b/src/staff/components/StaffDetailsPage/StaffDetailsPage.tsx @@ -12,6 +12,7 @@ import { MultiAutocompleteChoiceType } from "@saleor/components/MultiAutocomplet import PageHeader from "@saleor/components/PageHeader"; import SaveButtonBar from "@saleor/components/SaveButtonBar"; import { StaffErrorFragment } from "@saleor/fragments/types/StaffErrorFragment"; +import { SubmitPromise } from "@saleor/hooks/useForm"; import useLocale from "@saleor/hooks/useLocale"; import useStateFromProps from "@saleor/hooks/useStateFromProps"; import { sectionNames } from "@saleor/intl"; @@ -50,7 +51,7 @@ export interface StaffDetailsPageProps extends SearchPageProps { onChangePassword: () => void; onDelete: () => void; onImageDelete: () => void; - onSubmit: (data: StaffDetailsFormData) => Promise; + onSubmit: (data: StaffDetailsFormData) => SubmitPromise; onImageUpload(file: File); } diff --git a/src/utils/handlers/handleFormSubmit.ts b/src/utils/handlers/handleFormSubmit.ts index 8211c6548..584cf6cdf 100644 --- a/src/utils/handlers/handleFormSubmit.ts +++ b/src/utils/handlers/handleFormSubmit.ts @@ -1,6 +1,8 @@ +import { SubmitPromise } from "@saleor/hooks/useForm"; + async function handleFormSubmit( data: T, - onSubmit: (data: T) => Promise, + onSubmit: (data: T) => SubmitPromise, setChanged: (changed: boolean) => void ): Promise { const errors = await onSubmit(data); diff --git a/src/warehouses/components/WarehouseDetailsPage/WarehouseDetailsPage.tsx b/src/warehouses/components/WarehouseDetailsPage/WarehouseDetailsPage.tsx index 44c97b269..9b12d67a5 100644 --- a/src/warehouses/components/WarehouseDetailsPage/WarehouseDetailsPage.tsx +++ b/src/warehouses/components/WarehouseDetailsPage/WarehouseDetailsPage.tsx @@ -11,6 +11,7 @@ import { ShopInfo_shop_countries } from "@saleor/components/Shop/types/ShopInfo" import { AddressTypeInput } from "@saleor/customers/types"; import { WarehouseErrorFragment } from "@saleor/fragments/types/WarehouseErrorFragment"; import useAddressValidation from "@saleor/hooks/useAddressValidation"; +import { SubmitPromise } from "@saleor/hooks/useForm"; import useStateFromProps from "@saleor/hooks/useStateFromProps"; import { sectionNames } from "@saleor/intl"; import { findValueInEnum, maybe } from "@saleor/misc"; @@ -36,7 +37,7 @@ export interface WarehouseDetailsPageProps { onBack: () => void; onDelete: () => void; onShippingZoneClick: (id: string) => void; - onSubmit: (data: WarehouseDetailsPageFormData) => Promise; + onSubmit: (data: WarehouseDetailsPageFormData) => SubmitPromise; } const WarehouseDetailsPage: React.FC = ({