Skip to content

Commit

Permalink
[WIP]
Browse files Browse the repository at this point in the history
  • Loading branch information
Zwyx committed Jul 9, 2024
1 parent 3d37fec commit 1073840
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 30 deletions.
24 changes: 15 additions & 9 deletions app/root.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
Scripts,
ScrollRestoration,
isRouteErrorResponse,
useFetcher,
useLoaderData,
useMatches,
useRouteError,
Expand All @@ -17,6 +18,7 @@ import {
type LoaderFunctionArgs,
type SerializeFrom,
} from '@shopify/remix-oxygen';
import {useEffect, useRef} from 'react';
import {Layout} from '~/components/Layout';
import favicon from './assets/favicon.svg';
import appStyles from './styles/app.css?url';
Expand Down Expand Up @@ -97,10 +99,6 @@ export async function loader({context}: LoaderFunctionArgs) {
header: await headerPromise,
isLoggedIn: isLoggedInPromise,
publicStoreDomain,
okendoProviderData: await getOkendoProviderData({
context,
subscriberId: '<your-okendo-subscriber-id>',
}),
},
{
headers: {
Expand All @@ -113,6 +111,15 @@ export async function loader({context}: LoaderFunctionArgs) {
export default function App() {
const nonce = useNonce();
const data = useLoaderData<typeof loader>();
const fetcher = useFetcher<typeof getOkendoProviderData>();
const isFirstRender = useRef<boolean>(true);

useEffect(() => {
if (isFirstRender.current) {
isFirstRender.current = false;
fetcher.load('/okendo-data');
}
}, [fetcher]);

return (
<html lang="en">
Expand All @@ -124,12 +131,11 @@ export default function App() {
<Links />
</head>
<body>
<OkendoProvider
nonce={nonce}
okendoProviderData={data.okendoProviderData}
/>
{fetcher.data && (
<OkendoProvider nonce={nonce} okendoProviderData={fetcher.data} />
)}
<Layout {...data}>
<Outlet />
<Outlet context={{okendoDataLoaded: !!fetcher.data}} />
</Layout>
<ScrollRestoration nonce={nonce} />
<Scripts nonce={nonce} />
Expand Down
19 changes: 14 additions & 5 deletions app/routes/_index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@ import {
OkendoStarRating,
type WithOkendoStarRatingSnippet,
} from '@okendo/shopify-hydrogen';
import {Await, Link, useLoaderData, type MetaFunction} from '@remix-run/react';
import {
Await,
Link,
useLoaderData,
useOutletContext,
type MetaFunction,
} from '@remix-run/react';
import {Image, Money} from '@shopify/hydrogen';
import {defer, type LoaderFunctionArgs} from '@shopify/remix-oxygen';
import {Suspense} from 'react';
Expand Down Expand Up @@ -66,6 +72,7 @@ function RecommendedProducts({
};
}>;
}) {
const {okendoDataLoaded} = useOutletContext();
return (
<div className="recommended-products">
<h2>Recommended Products</h2>
Expand All @@ -85,10 +92,12 @@ function RecommendedProducts({
sizes="(min-width: 45em) 20vw, 50vw"
/>
<h4>{product.title}</h4>
<OkendoStarRating
productId={product.id}
okendoStarRatingSnippet={product.okendoStarRatingSnippet}
/>
{okendoDataLoaded && (
<OkendoStarRating
productId={product.id}
okendoStarRatingSnippet={product.okendoStarRatingSnippet}
/>
)}
<small>
<Money data={product.priceRange.minVariantPrice} />
</small>
Expand Down
24 changes: 18 additions & 6 deletions app/routes/collections.all.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
import { OkendoStarRating, WithOkendoStarRatingSnippet } from '@okendo/shopify-hydrogen';
import {Link, useLoaderData, type MetaFunction} from '@remix-run/react';
import {
OkendoStarRating,
type WithOkendoStarRatingSnippet,
} from '@okendo/shopify-hydrogen';
import {
Link,
useLoaderData,
useOutletContext,
type MetaFunction,
} from '@remix-run/react';
import {
Image,
Money,
Expand Down Expand Up @@ -76,6 +84,8 @@ function ProductItem({
}) {
const variant = product.variants.nodes[0];
const variantUrl = useVariantUrl(product.handle, variant.selectedOptions);
const {okendoDataLoaded} = useOutletContext();

return (
<Link
className="product-item"
Expand All @@ -93,10 +103,12 @@ function ProductItem({
/>
)}
<h4>{product.title}</h4>
<OkendoStarRating
productId={product.id}
okendoStarRatingSnippet={product.okendoStarRatingSnippet}
/>
{okendoDataLoaded && (
<OkendoStarRating
productId={product.id}
okendoStarRatingSnippet={product.okendoStarRatingSnippet}
/>
)}
<small>
<Money data={product.priceRange.minVariantPrice} />
</small>
Expand Down
11 changes: 11 additions & 0 deletions app/routes/okendo-data.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import {getOkendoProviderData} from '@okendo/shopify-hydrogen';
import {json, type LoaderFunctionArgs} from '@remix-run/server-runtime';

export async function loader({context}: LoaderFunctionArgs) {
return json(
await getOkendoProviderData({
context,
subscriberId: '<your-okendo-subscriber-id>',
}),
);
}
35 changes: 26 additions & 9 deletions app/routes/products.$handle.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
Await,
Link,
useLoaderData,
useOutletContext,
type FetcherWithComponents,
type MetaFunction,
} from '@remix-run/react';
Expand All @@ -24,7 +25,7 @@ import type {
SelectedOption,
} from '@shopify/hydrogen/storefront-api-types';
import {defer, redirect, type LoaderFunctionArgs} from '@shopify/remix-oxygen';
import {Suspense} from 'react';
import {Suspense, useEffect, useState} from 'react';
import type {
ProductFragment,
ProductVariantFragment,
Expand Down Expand Up @@ -121,6 +122,17 @@ function redirectToFirstVariant({
export default function Product() {
const {product, variants} = useLoaderData<typeof loader>();
const {selectedVariant} = product;
const {okendoDataLoaded} = useOutletContext();
const [go, setGo] = useState<boolean>(false);

useEffect(() => {
if (okendoDataLoaded) {
setTimeout(() => {
setGo(true);
}, 2000);
}
}, [okendoDataLoaded]);

return (
<>
<div className="product">
Expand All @@ -132,10 +144,12 @@ export default function Product() {
/>
</div>

<OkendoReviews
productId={product.id}
okendoReviewsSnippet={product.okendoReviewsSnippet}
/>
{go && (
<OkendoReviews
productId={product.id}
okendoReviewsSnippet={product.okendoReviewsSnippet}
/>
)}
</>
);
}
Expand Down Expand Up @@ -169,13 +183,16 @@ function ProductMain({
variants: Promise<ProductVariantsQuery>;
}) {
const {title, descriptionHtml} = product;
const {okendoDataLoaded} = useOutletContext();
return (
<div className="product-main">
<h1>{title}</h1>
<OkendoStarRating
productId={product.id}
okendoStarRatingSnippet={product.okendoStarRatingSnippet}
/>
{okendoDataLoaded && (
<OkendoStarRating
productId={product.id}
okendoStarRatingSnippet={product.okendoStarRatingSnippet}
/>
)}
<ProductPrice selectedVariant={selectedVariant} />
<br />
<Suspense
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"shopify-template-version": "1.0.7",
"type": "module",
"scripts": {
"prebuild": "sed -i \"s/<your-okendo-subscriber-id>/$OKENDO_SUBSCRIBER_ID/g\" app/root.tsx",
"prebuild": "sed -i \"s/<your-okendo-subscriber-id>/$OKENDO_SUBSCRIBER_ID/g\" app/root.tsx app/routes/okendo-data.tsx",
"build": "shopify hydrogen build --codegen",
"dev": "shopify hydrogen dev --codegen",
"preview": "npm run build && shopify hydrogen preview",
Expand Down

0 comments on commit 1073840

Please sign in to comment.