Fetch shop data after user is authenticated (#1427)

This commit is contained in:
Jakub Majorek 2021-09-21 15:30:41 +02:00 committed by GitHub
parent ebe56da583
commit 6e102964a1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 39 additions and 26 deletions

View file

@ -2,6 +2,7 @@ import appleTouchIcon from "@assets/favicons/apple-touch-icon.png";
import favicon16 from "@assets/favicons/favicon-16x16.png"; import favicon16 from "@assets/favicons/favicon-16x16.png";
import favicon32 from "@assets/favicons/favicon-32x32.png"; import favicon32 from "@assets/favicons/favicon-32x32.png";
import safariPinnedTab from "@assets/favicons/safari-pinned-tab.svg"; import safariPinnedTab from "@assets/favicons/safari-pinned-tab.svg";
import { useAuth } from "@saleor/auth/AuthProvider";
import React from "react"; import React from "react";
import Helmet from "react-helmet"; import Helmet from "react-helmet";
@ -12,22 +13,31 @@ type ShopContext = ShopInfo_shop;
export const ShopContext = React.createContext<ShopContext>(undefined); export const ShopContext = React.createContext<ShopContext>(undefined);
export const ShopProvider: React.FC = ({ children }) => ( export const ShopProvider: React.FC = ({ children }) => {
<TypedShopInfoQuery> const { isAuthenticated } = useAuth();
{({ data }) => (
<> return (
<Helmet> <TypedShopInfoQuery skip={!isAuthenticated}>
<link rel="apple-touch-icon" sizes="180x180" href={appleTouchIcon} /> {({ data }) => (
<link rel="icon" type="image/png" sizes="32x32" href={favicon32} /> <>
<link rel="icon" type="image/png" sizes="16x16" href={favicon16} /> <Helmet>
<link rel="mask-icon" href={safariPinnedTab} /> <link
</Helmet> rel="apple-touch-icon"
<ShopContext.Provider value={data ? data.shop : undefined}> sizes="180x180"
{children} href={appleTouchIcon}
</ShopContext.Provider> />
</> <link rel="icon" type="image/png" sizes="32x32" href={favicon32} />
)} <link rel="icon" type="image/png" sizes="16x16" href={favicon16} />
</TypedShopInfoQuery> <link rel="mask-icon" href={safariPinnedTab} />
); </Helmet>
<ShopContext.Provider value={data ? data.shop : undefined}>
{children}
</ShopContext.Provider>
</>
)}
</TypedShopInfoQuery>
);
};
export const Shop = ShopContext.Consumer; export const Shop = ShopContext.Consumer;
export default Shop; export default Shop;

View file

@ -13,7 +13,6 @@ const shopInfo = gql`
country country
code code
} }
channelCurrencies
defaultCountry { defaultCountry {
code code
country country
@ -35,6 +34,7 @@ const shopInfo = gql`
code code
name name
} }
version
} }
} }
`; `;

View file

@ -42,7 +42,6 @@ export interface ShopInfo_shop_permissions {
export interface ShopInfo_shop { export interface ShopInfo_shop {
__typename: "Shop"; __typename: "Shop";
countries: ShopInfo_shop_countries[]; countries: ShopInfo_shop_countries[];
channelCurrencies: string[];
defaultCountry: ShopInfo_shop_defaultCountry | null; defaultCountry: ShopInfo_shop_defaultCountry | null;
defaultWeightUnit: WeightUnitsEnum | null; defaultWeightUnit: WeightUnitsEnum | null;
displayGrossPrices: boolean; displayGrossPrices: boolean;
@ -52,6 +51,7 @@ export interface ShopInfo_shop {
name: string; name: string;
trackInventoryByDefault: boolean | null; trackInventoryByDefault: boolean | null;
permissions: (ShopInfo_shop_permissions | null)[]; permissions: (ShopInfo_shop_permissions | null)[];
version: string;
} }
export interface ShopInfo { export interface ShopInfo {

View file

@ -125,15 +125,15 @@ const App: React.FC = () => (
<ServiceWorker /> <ServiceWorker />
<BackgroundTasksProvider> <BackgroundTasksProvider>
<AppStateProvider> <AppStateProvider>
<ShopProvider> <AuthProvider>
<AuthProvider> <ShopProvider>
<AppChannelProvider> <AppChannelProvider>
<ExternalAppProvider> <ExternalAppProvider>
<Routes /> <Routes />
</ExternalAppProvider> </ExternalAppProvider>
</AppChannelProvider> </AppChannelProvider>
</AuthProvider> </ShopProvider>
</ShopProvider> </AuthProvider>
</AppStateProvider> </AppStateProvider>
</BackgroundTasksProvider> </BackgroundTasksProvider>
</MessageManagerProvider> </MessageManagerProvider>

View file

@ -1,4 +1,3 @@
import { IS_CLOUD_INSTANCE } from "@saleor/config";
import { fragmentAddress } from "@saleor/fragments/address"; import { fragmentAddress } from "@saleor/fragments/address";
import { shopErrorFragment } from "@saleor/fragments/errors"; import { shopErrorFragment } from "@saleor/fragments/errors";
import { shopFragment } from "@saleor/fragments/shop"; import { shopFragment } from "@saleor/fragments/shop";
@ -18,6 +17,7 @@ const shopSettingsUpdate = gql`
$shopDomainInput: SiteDomainInput! $shopDomainInput: SiteDomainInput!
$shopSettingsInput: ShopSettingsInput! $shopSettingsInput: ShopSettingsInput!
$addressInput: AddressInput $addressInput: AddressInput
$isCloudInstance: Boolean!
) { ) {
shopSettingsUpdate(input: $shopSettingsInput) { shopSettingsUpdate(input: $shopSettingsInput) {
errors { errors {
@ -27,7 +27,7 @@ const shopSettingsUpdate = gql`
...ShopFragment ...ShopFragment
} }
} }
shopDomainUpdate(input: $shopDomainInput) @skip(if: ${IS_CLOUD_INSTANCE}) { shopDomainUpdate(input: $shopDomainInput) @skip(if: $isCloudInstance) {
errors { errors {
...ShopErrorFragment ...ShopErrorFragment
} }

View file

@ -138,4 +138,5 @@ export interface ShopSettingsUpdateVariables {
shopDomainInput: SiteDomainInput; shopDomainInput: SiteDomainInput;
shopSettingsInput: ShopSettingsInput; shopSettingsInput: ShopSettingsInput;
addressInput?: AddressInput | null; addressInput?: AddressInput | null;
isCloudInstance: boolean;
} }

View file

@ -1,4 +1,5 @@
import { WindowTitle } from "@saleor/components/WindowTitle"; import { WindowTitle } from "@saleor/components/WindowTitle";
import { IS_CLOUD_INSTANCE } from "@saleor/config";
import useNavigator from "@saleor/hooks/useNavigator"; import useNavigator from "@saleor/hooks/useNavigator";
import useNotifier from "@saleor/hooks/useNotifier"; import useNotifier from "@saleor/hooks/useNotifier";
import { commonMessages, sectionNames } from "@saleor/intl"; import { commonMessages, sectionNames } from "@saleor/intl";
@ -80,7 +81,8 @@ export const SiteSettings: React.FC<SiteSettingsProps> = () => {
}, },
shopSettingsInput: { shopSettingsInput: {
description: data.description description: data.description
} },
isCloudInstance: IS_CLOUD_INSTANCE
} }
}); });