{ "version": 3, "sources": ["../../../app/components/FeaturedSection.tsx", "../../../app/components/GenericError.tsx", "../../../app/components/NotFound.tsx", "../../../app/hooks/useAnalytics.tsx", "../../../app/root.tsx"], "sourcesContent": ["import {useEffect} from 'react';\nimport {useFetcher} from '@remix-run/react';\nimport type {Collection, Product} from '@shopify/hydrogen/storefront-api-types';\nimport {FeaturedCollections} from './FeaturedCollections';\nimport {ProductSwimlane} from './ProductSwimlane';\nimport {usePrefixPathWithLocale} from '~/lib/utils';\n\nexport interface FeaturedData {\n featuredCollections: Collection[];\n featuredProducts: Product[];\n}\n\nexport function FeaturedSection() {\n const {load, data} = useFetcher();\n const path = usePrefixPathWithLocale('/featured-products');\n\n useEffect(() => {\n load(path);\n }, [load, path]);\n\n if (!data) return null;\n\n const {featuredCollections, featuredProducts} = data as FeaturedData;\n\n return (\n <>\n {featuredCollections.length < 2 && (\n \n )}\n \n \n );\n}\n", "import {Button} from './Button';\nimport {FeaturedSection} from './FeaturedSection';\nimport {PageHeader, Text} from './Text';\n\nexport function GenericError({\n error,\n}: {\n error?: {message: string; stack?: string};\n}) {\n const heading = `Something\u2019s wrong here.`;\n let description = `We found an error while loading this page.`;\n\n // TODO hide error in prod?\n if (error) {\n description += `\\n${error.message}`;\n // eslint-disable-next-line no-console\n console.error(error);\n }\n\n return (\n <>\n \n \n {description}\n \n {error?.stack && (\n \n )}\n \n \n \n \n );\n}\n\nfunction addLinksToStackTrace(stackTrace: string) {\n return stackTrace?.replace(\n /^\\s*at\\s?.*?[(\\s]((\\/|\\w\\:).+)\\)\\n/gim,\n (all, m1) =>\n all.replace(\n m1,\n `${m1}`,\n ),\n );\n}\n", "import {Button} from './Button';\nimport {FeaturedSection} from './FeaturedSection';\nimport {PageHeader, Text} from './Text';\n\nexport function NotFound({type = 'page'}: {type?: string}) {\n const heading = `We\u2019ve lost this ${type}`;\n const description = `We couldn\u2019t find the ${type} you\u2019re looking for. Try checking the URL or heading back to the home page.`;\n\n return (\n <>\n \n \n {description}\n \n \n \n \n \n );\n}\n", "import {useLocation, useFetchers, useMatches} from '@remix-run/react';\nimport {\n AnalyticsEventName,\n getClientBrowserParameters,\n sendShopifyAnalytics,\n ShopifyAddToCartPayload,\n ShopifyPageViewPayload,\n useShopifyCookies,\n} from '@shopify/hydrogen';\nimport {useEffect} from 'react';\nimport {CartAction, I18nLocale} from '../lib/type';\n\nexport function useAnalytics(hasUserConsent: boolean, locale: I18nLocale) {\n useShopifyCookies({hasUserConsent});\n const location = useLocation();\n const analyticsFromMatches = useDataFromMatches(\n 'analytics',\n ) as unknown as ShopifyPageViewPayload;\n\n const pageAnalytics = {\n ...analyticsFromMatches,\n currency: locale.currency,\n acceptedLanguage: locale.language,\n hasUserConsent,\n };\n\n // Page view analytics\n // We want useEffect to execute only when location changes\n // which represents a page view\n useEffect(() => {\n const payload: ShopifyPageViewPayload = {\n ...getClientBrowserParameters(),\n ...pageAnalytics,\n };\n\n sendShopifyAnalytics({\n eventName: AnalyticsEventName.PAGE_VIEW,\n payload,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [location]);\n\n // Add to cart analytics\n const cartData = useDataFromFetchers({\n formDataKey: 'cartAction',\n formDataValue: CartAction.ADD_TO_CART,\n dataKey: 'analytics',\n }) as unknown as ShopifyAddToCartPayload;\n if (cartData) {\n const addToCartPayload: ShopifyAddToCartPayload = {\n ...getClientBrowserParameters(),\n ...pageAnalytics,\n ...cartData,\n };\n\n sendShopifyAnalytics({\n eventName: AnalyticsEventName.ADD_TO_CART,\n payload: addToCartPayload,\n });\n }\n}\n\n/**\n * Collects data under a certain key from useMatches\n * @param dataKey - The key in `event.data` to collect data from\n * @returns A merged object of the specified key\n *\n * @example\n * ```tsx\n * import {\n * useDataFromMatches\n * } from '@shopify/hydrogen';\n *\n * export async function loader({request, context}: LoaderArgs) {\n * return defer({\n * analytics: {\n * shopId: 'gid://shopify/Shop/1',\n * },\n * });\n * }\n *\n * export default function App() {\n * const analytics = useDataFromMatches('analytics');\n *\n * console.log(analytics);\n * // {\n * // shopId: 'gid://shopify/Shop/1',\n * // }\n * ```\n **/\nfunction useDataFromMatches(dataKey: string): Record {\n const matches = useMatches();\n const data: Record = {};\n\n matches.forEach((event) => {\n const eventData = event?.data;\n if (eventData && eventData[dataKey]) {\n Object.assign(data, eventData[dataKey]);\n }\n });\n\n return data;\n}\n\n/**\n * Collects data under a certain key from useFetches.\n *\n * @param formDataKey - The form data key\n * @param formDataValue - The value of formDataKey\n * @param dataKey - the key in `fetcher.data` to collect data from\n * @returns A merged object of the specified key\n *\n * @example\n * ```tsx\n * // In routes/cart.tsx\n * import {\n * useDataFromFetchers\n * } from '@shopify/hydrogen';\n *\n * export async function action({request, context}: ActionArgs) {\n * const cartId = await session.get('cartId');\n * ...\n * return json({\n * analytics: {\n * cartId,\n * },\n * });\n * }\n *\n * // Anywhere when an action can be requested, make sure there is a form input and value\n * // to identify the fetcher\n * export function AddToCartButton({\n * ...\n * return (\n * \n * \n *\n * // You can add additional data as hidden form inputs and it will also be collected\n * // As long as it is JSON parse-able.\n * export function AddToCartButton({\n *\n * const analytics = {\n * products: [product]\n * };\n *\n * return (\n * \n * \n * \n *\n * // In root.tsx\n * export default function App() {\n * const cartData = useDataFromFetchers({\n * formDataKey: 'cartAction',\n * formDataValue: CartAction.ADD_TO_CART,\n * dataKey: 'analytics',\n * });\n *\n * console.log(cartData);\n * // {\n * // cartId: 'gid://shopify/Cart/abc123',\n * // products: [...]\n * // }\n * ```\n **/\nfunction useDataFromFetchers({\n formDataKey,\n formDataValue,\n dataKey,\n}: {\n formDataKey: string;\n formDataValue: unknown;\n dataKey: string;\n}): Record | undefined {\n const fetchers = useFetchers();\n const data: Record = {};\n\n for (const fetcher of fetchers) {\n const formData = fetcher.submission?.formData;\n const fetcherData = fetcher.data;\n if (\n formData &&\n formData.get(formDataKey) === formDataValue &&\n fetcherData &&\n fetcherData[dataKey]\n ) {\n Object.assign(data, fetcherData[dataKey]);\n\n try {\n if (formData.get(dataKey)) {\n const dataInForm: unknown = JSON.parse(String(formData.get(dataKey)));\n Object.assign(data, dataInForm);\n }\n } catch {\n // do nothing\n }\n }\n }\n return Object.keys(data).length ? data : undefined;\n}\n", "import {\n defer,\n type LinksFunction,\n type MetaFunction,\n type LoaderArgs,\n type AppLoadContext,\n} from '@shopify/remix-oxygen';\nimport {\n Links,\n Meta,\n Outlet,\n Scripts,\n ScrollRestoration,\n useCatch,\n useLoaderData,\n useMatches,\n} from '@remix-run/react';\nimport {\n ShopifySalesChannel,\n Seo,\n type SeoHandleFunction,\n} from '@shopify/hydrogen';\nimport { Layout } from '~/components';\nimport { GenericError } from './components/GenericError';\nimport { NotFound } from './components/NotFound';\n\nimport styles from './styles/app.css';\nimport favicon from '../public/favicon.png';\n\nimport { DEFAULT_LOCALE, parseMenu, type EnhancedMenu } from './lib/utils';\nimport invariant from 'tiny-invariant';\nimport {\n Shop,\n Cart,\n Metaobject\n} from '@shopify/hydrogen/storefront-api-types';\nimport { useAnalytics } from './hooks/useAnalytics';\nimport type { StorefrontContext } from './lib/type';\nimport {\n MEDIAIMAGE_FRAGMENT,\n} from '~/data/fragments';\n\nconst seo: SeoHandleFunction = ({ data, pathname }) => ({\n title: data?.layout?.shop?.name,\n titleTemplate: '%s',\n description: data?.layout?.shop?.description,\n handle: '@shopify',\n url: `https://steelpowershelving.com.au${pathname}`,\n});\n\nexport const handle = {\n seo,\n};\n\nexport const links: LinksFunction = () => {\n return [\n { rel: 'stylesheet', href: styles },\n {\n rel: 'preconnect',\n href: 'https://cdn.shopify.com',\n },\n {\n rel: 'preconnect',\n href: 'https://shop.app',\n },\n { rel: 'icon', type: 'image/svg+xml', href: favicon },\n ];\n};\n\nexport const meta: MetaFunction = () => ({\n charset: 'utf-8',\n viewport: 'width=device-width,initial-scale=1',\n \"google-site-verification\": \"mpi3NM3VE6E3_kTvsfdtPBFakvvJa6fRRzuCgYAiBVU\"\n});\n\nexport async function loader({ context }: LoaderArgs) {\n const [cartId, layout] = await Promise.all([\n context.session.get('cartId'),\n getLayoutData(context),\n ]);\n return defer({\n layout,\n selectedLocale: context.storefront.i18n,\n cart: cartId ? getCart(context, cartId) : undefined,\n analytics: {\n shopifySalesChannel: ShopifySalesChannel.hydrogen,\n shopId: layout.shop.id,\n },\n });\n}\n\nexport default function App() {\n const data = useLoaderData();\n const locale = data.selectedLocale ?? DEFAULT_LOCALE;\n const hasUserConsent = true;\n\n useAnalytics(hasUserConsent, locale);\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport function CatchBoundary() {\n const [root] = useMatches();\n const caught = useCatch();\n const isNotFound = caught.status === 404;\n const locale = root.data?.selectedLocale ?? DEFAULT_LOCALE;\n\n return (\n \n \n {isNotFound ? 'Not found' : 'Error'}\n \n \n \n \n \n {isNotFound ? (\n \n ) : (\n \n )}\n \n \n \n \n );\n}\n\nexport function ErrorBoundary({ error }: { error: Error }) {\n const [root] = useMatches();\n const locale = root?.data?.selectedLocale ?? DEFAULT_LOCALE;\n\n return (\n \n \n Error\n \n \n \n \n \n \n \n \n \n \n );\n}\n\nconst LAYOUT_QUERY = `#graphql\n ${MEDIAIMAGE_FRAGMENT}\n query layoutMenus(\n $language: LanguageCode\n $headerMenuHandle: String!\n $footerMenuHandle: String!\n $SteelPowerHeaderMenuHandle: String!\n $layoutMetaHandle: MetaobjectHandleInput\n ) @inContext(language: $language) {\n shop {\n id\n name\n description\n }\n headerMenu: menu(handle: $headerMenuHandle) {\n id\n items {\n ...MenuItem\n items {\n ...MenuItem\n }\n }\n }\n footerMenu: menu(handle: $footerMenuHandle) {\n id\n items {\n ...MenuItem\n items {\n ...MenuItem\n }\n }\n }\n steelPowerHeaderMenu: menu(handle: $SteelPowerHeaderMenuHandle) {\n id\n items {\n ...MenuItem\n items {\n ...MenuItem\n }\n }\n }\n promotion: metaobject(\n handle: $layoutMetaHandle\n ) {\n id \n type\n updatedAt\n handle\n fields {\n key\n value\n type\n references(first: 10) {\n nodes {\n ...MediaImage\n }\n }\n }\n }\n }\n fragment MenuItem on MenuItem {\n id\n resourceId\n tags\n title\n type\n url\n }\n`;\n\nexport interface LayoutData {\n headerMenu: EnhancedMenu;\n footerMenu: EnhancedMenu;\n steelPowerHeaderMenu: EnhancedMenu;\n promotion: Metaobject\n shop: Shop;\n cart?: Promise;\n}\n\nasync function getLayoutData({ storefront }: AppLoadContext) {\n const HEADER_MENU_HANDLE = 'main-menu';\n const FOOTER_MENU_HANDLE = 'hydrogen-footer-menu';\n const STEEL_POWER_HEADER_HANDLE = 'hydrogen-main-menu';\n\n const data = await storefront.query(LAYOUT_QUERY, {\n variables: {\n headerMenuHandle: HEADER_MENU_HANDLE,\n footerMenuHandle: FOOTER_MENU_HANDLE,\n SteelPowerHeaderMenuHandle: STEEL_POWER_HEADER_HANDLE,\n layoutMetaHandle: {\n handle: \"layout-lxl09lqp\",\n type: 'layout',\n },\n language: storefront.i18n.language,\n },\n });\n\n invariant(data, 'No data returned from Shopify API');\n\n /*\n Modify specific links/routes (optional)\n @see: https://shopify.dev/api/storefront/unstable/enums/MenuItemType\n e.g here we map:\n - /blogs/news -> /news\n - /blog/news/blog-post -> /news/blog-post\n - /collections/all -> /products\n */\n const customPrefixes = { BLOG: '', CATALOG: 'products' };\n\n const steelPowerHeaderMenu = data?.steelPowerHeaderMenu\n ? parseMenu(data.steelPowerHeaderMenu, customPrefixes)\n : undefined;\n const headerMenu = data?.headerMenu\n ? parseMenu(data.headerMenu, customPrefixes)\n : undefined;\n const footerMenu = data?.footerMenu\n ? parseMenu(data.footerMenu, customPrefixes)\n : undefined;\n return {\n shop: data.shop,\n headerMenu: steelPowerHeaderMenu || headerMenu,\n footerMenu,\n promotion: data.promotion\n };\n}\n\nconst CART_QUERY = `#graphql\n query CartQuery($cartId: ID!, $country: CountryCode, $language: LanguageCode)\n @inContext(country: $country, language: $language) {\n cart(id: $cartId) {\n ...CartFragment\n }\n }\n\n fragment CartFragment on Cart {\n id\n checkoutUrl\n totalQuantity\n buyerIdentity {\n countryCode\n customer {\n id\n email\n firstName\n lastName\n displayName\n }\n email\n phone\n }\n lines(first: 100) {\n edges {\n node {\n id\n quantity\n attributes {\n key\n value\n }\n cost {\n totalAmount {\n amount\n currencyCode\n }\n amountPerQuantity {\n amount\n currencyCode\n }\n compareAtAmountPerQuantity {\n amount\n currencyCode\n }\n }\n merchandise {\n ... on ProductVariant {\n id\n availableForSale\n compareAtPrice {\n ...MoneyFragment\n }\n price {\n ...MoneyFragment\n }\n requiresShipping\n title\n image {\n ...ImageFragment\n }\n product {\n handle\n title\n id\n }\n selectedOptions {\n name\n value\n }\n }\n }\n }\n }\n }\n cost {\n subtotalAmount {\n ...MoneyFragment\n }\n totalAmount {\n ...MoneyFragment\n }\n totalDutyAmount {\n ...MoneyFragment\n }\n totalTaxAmount {\n ...MoneyFragment\n }\n }\n note\n attributes {\n key\n value\n }\n discountCodes {\n code\n }\n }\n\n fragment MoneyFragment on MoneyV2 {\n currencyCode\n amount\n }\n\n fragment ImageFragment on Image {\n id\n url\n altText\n width\n height\n }\n`;\n\nexport async function getCart({ storefront }: StorefrontContext, cartId: string) {\n invariant(storefront, 'missing storefront client in cart query');\n\n const { cart } = await storefront.query<{ cart?: Cart }>(CART_QUERY, {\n variables: {\n cartId,\n country: storefront.i18n.country,\n language: storefront.i18n.language,\n },\n cache: storefront.CacheNone(),\n });\n\n return cart;\n}\n"], "mappings": "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", "names": ["import_react", "import_jsx_runtime", "FeaturedSection", "load", "data", "useFetcher", "path", "usePrefixPathWithLocale", "featuredCollections", "featuredProducts", "FeaturedCollections", "ProductSwimlane", "import_jsx_runtime", "GenericError", "error", "heading", "description", "PageHeader", "Text", "addLinksToStackTrace", "Button", "FeaturedSection", "stackTrace", "all", "m1", "import_jsx_runtime", "NotFound", "type", "heading", "description", "PageHeader", "Text", "Button", "FeaturedSection", "import_react", "useAnalytics", "hasUserConsent", "locale", "useShopifyCookies", "location", "useLocation", "pageAnalytics", "useDataFromMatches", "payload", "getClientBrowserParameters", "sendShopifyAnalytics", "AnalyticsEventName", "cartData", "useDataFromFetchers", "addToCartPayload", "dataKey", "matches", "useMatches", "data", "event", "eventData", "formDataKey", "formDataValue", "fetchers", "useFetchers", "fetcher", "formData", "fetcherData", "dataInForm", "import_jsx_runtime", "seo", "data", "pathname", "handle", "links", "app_default", "favicon_default", "meta", "App", "data", "useLoaderData", "locale", "DEFAULT_LOCALE", "useAnalytics", "It", "Meta", "Links", "Layout", "Outlet", "ScrollRestoration", "Scripts", "CatchBoundary", "root", "useMatches", "caught", "useCatch", "isNotFound", "NotFound", "GenericError", "ErrorBoundary", "error", "LAYOUT_QUERY", "MEDIAIMAGE_FRAGMENT"] }