
* Use generated hooks in apps * Remove unused files * Use proper types in apps * Use generated hooks in attributes * Use generated hooks in auth module * Use generated hooks in categories * Use generated hooks in channels * Use generated types in collections * Remove legacy types from background tasks * Use generated hooks in customers * Use generated hooks in discounts * Use generated hook in file upload * Use generated types in gift cards * Use generated types in home * Use generated hooks in navigation * Use generated hooks in orders * Use generated hooks in pages * Use generated hooks in page types * Use generated hooks in permission groups * Use generated hooks in plugins * Use generated hooks in products * Use fragment to mark product variants * Improve code a bit * Use generated hooks in page types * Use generated types in searches * Use generated hooks in shipping * Use generated hooks in site settings * Use generated hooks in staff members * Use generated hooks in taxes * Place all gql generated files in one directory * Use generated hooks in translations * Use global types from new generated module * Use generated hooks in warehouses * Use generated hooks in webhooks * Use generated fragment types * Unclutter types * Remove hoc components * Split hooks and types * Fetch introspection file * Delete obsolete schema file * Fix rebase artifacts * Fix autoreplace * Fix auth provider tests * Fix urls * Remove leftover types * Fix rebase artifacts
113 lines
3.3 KiB
TypeScript
113 lines
3.3 KiB
TypeScript
import { WindowTitle } from "@saleor/components/WindowTitle";
|
|
import { IS_CLOUD_INSTANCE } from "@saleor/config";
|
|
import {
|
|
CountryCode,
|
|
useShopSettingsUpdateMutation,
|
|
useSiteSettingsQuery
|
|
} from "@saleor/graphql";
|
|
import useNavigator from "@saleor/hooks/useNavigator";
|
|
import useNotifier from "@saleor/hooks/useNotifier";
|
|
import { commonMessages, sectionNames } from "@saleor/intl";
|
|
import React from "react";
|
|
import { useIntl } from "react-intl";
|
|
|
|
import { configurationMenuUrl } from "../../configuration";
|
|
import { extractMutationErrors, findInEnum } from "../../misc";
|
|
import SiteSettingsPage, {
|
|
areAddressInputFieldsModified,
|
|
SiteSettingsPageFormData
|
|
} from "../components/SiteSettingsPage";
|
|
import { SiteSettingsUrlQueryParams } from "../urls";
|
|
|
|
export interface SiteSettingsProps {
|
|
params: SiteSettingsUrlQueryParams;
|
|
}
|
|
|
|
export const SiteSettings: React.FC<SiteSettingsProps> = () => {
|
|
const navigate = useNavigator();
|
|
const notify = useNotifier();
|
|
const intl = useIntl();
|
|
|
|
const siteSettings = useSiteSettingsQuery({
|
|
displayLoader: true
|
|
});
|
|
|
|
const [
|
|
updateShopSettings,
|
|
updateShopSettingsOpts
|
|
] = useShopSettingsUpdateMutation({
|
|
onCompleted: data => {
|
|
if (
|
|
[
|
|
...data.shopAddressUpdate.errors,
|
|
...data.shopSettingsUpdate.errors,
|
|
...(data.shopDomainUpdate?.errors || [])
|
|
].length === 0
|
|
) {
|
|
notify({
|
|
status: "success",
|
|
text: intl.formatMessage(commonMessages.savedChanges)
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
const errors = [
|
|
...(updateShopSettingsOpts.data?.shopDomainUpdate?.errors || []),
|
|
...(updateShopSettingsOpts.data?.shopSettingsUpdate.errors || []),
|
|
...(updateShopSettingsOpts.data?.shopAddressUpdate.errors || [])
|
|
];
|
|
const loading = siteSettings.loading || updateShopSettingsOpts.loading;
|
|
|
|
const handleUpdateShopSettings = async (data: SiteSettingsPageFormData) => {
|
|
const addressInput = areAddressInputFieldsModified(data)
|
|
? {
|
|
city: data.city,
|
|
companyName: data.companyName,
|
|
country: findInEnum(data.country, CountryCode),
|
|
countryArea: data.countryArea,
|
|
phone: data.phone,
|
|
postalCode: data.postalCode,
|
|
streetAddress1: data.streetAddress1,
|
|
streetAddress2: data.streetAddress2
|
|
}
|
|
: {
|
|
companyName: data.companyName
|
|
};
|
|
|
|
return extractMutationErrors(
|
|
updateShopSettings({
|
|
variables: {
|
|
addressInput,
|
|
shopDomainInput: {
|
|
domain: data.domain,
|
|
name: data.name
|
|
},
|
|
shopSettingsInput: {
|
|
description: data.description,
|
|
reserveStockDurationAnonymousUser:
|
|
data.reserveStockDurationAnonymousUser || null,
|
|
reserveStockDurationAuthenticatedUser:
|
|
data.reserveStockDurationAuthenticatedUser || null
|
|
},
|
|
isCloudInstance: IS_CLOUD_INSTANCE
|
|
}
|
|
})
|
|
);
|
|
};
|
|
|
|
return (
|
|
<>
|
|
<WindowTitle title={intl.formatMessage(sectionNames.siteSettings)} />
|
|
<SiteSettingsPage
|
|
disabled={loading}
|
|
errors={errors}
|
|
shop={siteSettings.data?.shop}
|
|
onBack={() => navigate(configurationMenuUrl)}
|
|
onSubmit={handleUpdateShopSettings}
|
|
saveButtonBarState={updateShopSettingsOpts.status}
|
|
/>
|
|
</>
|
|
);
|
|
};
|
|
export default SiteSettings;
|