From 2319ed72db53859c9bd2acafc26e4024cc2c43f4 Mon Sep 17 00:00:00 2001
From: Sol Irvine <sol@zenzen.io>
Date: Mon, 14 Aug 2023 14:33:42 +0900
Subject: [PATCH] wip: Saving work

---
 app/[lang]/favicon.ico           | Bin 15086 -> 0 bytes
 app/[lang]/layout.tsx            |  19 +++++++++-------
 app/[lang]/page.tsx              |   7 ++----
 app/context/language-context.tsx |   7 +++++-
 components/grid/three-items.tsx  |  18 +++++++--------
 components/grid/tile.tsx         |   2 +-
 components/icons/namemark.tsx    |  34 +++++++++++++++++++++++++++
 components/label.tsx             |  24 +++++++++++++------
 components/layout/menu/modal.tsx |  38 +++++++++++++++----------------
 dictionaries/en.json             |  12 +++++++---
 dictionaries/ja.json             |  12 +++++++---
 lib/shopify/fragments/product.ts |   3 +++
 lib/shopify/types.ts             |   3 +++
 tailwind.config.js               |   2 +-
 14 files changed, 124 insertions(+), 57 deletions(-)
 delete mode 100644 app/[lang]/favicon.ico
 create mode 100644 components/icons/namemark.tsx

diff --git a/app/[lang]/favicon.ico b/app/[lang]/favicon.ico
deleted file mode 100644
index dc7d8431e47ee24c71eebaffe30786769b348353..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 15086
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
Cr`cHm

diff --git a/app/[lang]/layout.tsx b/app/[lang]/layout.tsx
index 49c86e089..20fbbfd69 100644
--- a/app/[lang]/layout.tsx
+++ b/app/[lang]/layout.tsx
@@ -4,6 +4,7 @@ import localFont from 'next/font/local';
 import { ReactNode, Suspense } from 'react';
 
 import { LanguageProvider } from 'app/context/language-context';
+import { getDictionary } from 'dictionaries';
 import './globals.css';
 
 const { TWITTER_CREATOR, TWITTER_SITE, SITE_NAME } = process.env;
@@ -38,12 +39,6 @@ const cinzel = localFont({
   variable: '--font-cinzel'
 });
 
-const mincho = localFont({
-  src: '../fonts/A-OTF-A1MinchoStd-Bold.otf',
-  display: 'swap',
-  variable: '--font-cinzel'
-});
-
 const alpina = localFont({
   src: [
     {
@@ -60,6 +55,12 @@ const alpina = localFont({
   variable: '--font-alpina'
 });
 
+const mincho = localFont({
+  src: '../fonts/A-OTF-A1MinchoStd-Bold.otf',
+  display: 'swap',
+  variable: '--font-mincho'
+});
+
 export async function generateStaticParams() {
   return i18n.locales.map((locale) => ({ lang: locale }));
 }
@@ -69,13 +70,15 @@ export default async function RootLayout({
   params
 }: {
   children: ReactNode;
-  params: { lang: string };
+  params: { lang: Locale };
 }) {
+  const dictionary = await getDictionary(params?.lang);
+
   return (
     <html lang={params.lang} className={`${cinzel.variable} ${alpina.variable} ${mincho.variable}`}>
       <body className="bg-dark text-white selection:bg-green-800 selection:text-green-400">
         <div className="mx-auto max-w-screen-2xl">
-          <LanguageProvider language={params.lang as Locale}>
+          <LanguageProvider language={params.lang as Locale} dictionary={dictionary}>
             <Navbar />
             <Suspense>
               <main>{children}</main>
diff --git a/app/[lang]/page.tsx b/app/[lang]/page.tsx
index 3f6d51aa6..1db45240c 100644
--- a/app/[lang]/page.tsx
+++ b/app/[lang]/page.tsx
@@ -4,8 +4,7 @@ import Footer from 'components/layout/footer';
 import { LanguageControl } from 'components/layout/navbar/language-control';
 import type { Locale } from '../../i18n-config';
 
-import Image from 'next/image';
-import Namemark from 'public/assets/images/namemark.png';
+import LogoNamemark from 'components/icons/namemark';
 import { Suspense } from 'react';
 
 export const runtime = 'edge';
@@ -20,15 +19,13 @@ export const metadata = {
 };
 
 export default async function HomePage({ params: { lang } }: { params: { lang: Locale } }) {
-  // const dictionary = await getDictionary(lang);
-
   return (
     <>
       <div className="invisible absolute right-40 top-12 md:visible">
         <LanguageControl lang={lang} />
       </div>
       <div className="px-6 pb-12 pt-6 md:pb-48 md:pl-6 md:pt-12">
-        <Image src={Namemark} alt="suginomori brewery" className="max-w-[260px] md:max-w-[600px]" />
+        <LogoNamemark className="w-[260px] fill-current md:w-[600px]" />
       </div>
       <ThreeItemGrid lang={lang} />
       <Suspense>
diff --git a/app/context/language-context.tsx b/app/context/language-context.tsx
index 5f31007d7..fd80929d7 100644
--- a/app/context/language-context.tsx
+++ b/app/context/language-context.tsx
@@ -6,24 +6,29 @@ import { ReactNode, createContext, useContext, useState } from 'react';
 interface IContextProps {
   currentLanguage?: Locale;
   setCurrentLanguage: (language: Locale) => void;
+  currentDictionary?: any;
 }
 
 export const LanguageContext = createContext<IContextProps>({} as IContextProps);
 
 export function LanguageProvider({
   language,
+  dictionary,
   children
 }: {
   language: Locale;
+  dictionary?: any;
   children: ReactNode | ReactNode[] | string;
 }) {
   const [currentLanguage, setCurrentLanguage] = useState<Locale>(language || 'en');
+  const [currentDictionary] = useState<any | undefined>(dictionary);
 
   return (
     <LanguageContext.Provider
       value={{
         currentLanguage,
-        setCurrentLanguage
+        setCurrentLanguage,
+        currentDictionary
       }}
     >
       {children}
diff --git a/components/grid/three-items.tsx b/components/grid/three-items.tsx
index 04fac5b76..df539ed89 100644
--- a/components/grid/three-items.tsx
+++ b/components/grid/three-items.tsx
@@ -1,36 +1,35 @@
 import clsx from 'clsx';
-import { GridTileImage } from 'components/grid/tile';
 import { Locale } from 'i18n-config';
 import { getCollectionProducts } from 'lib/shopify';
 import type { Product } from 'lib/shopify/types';
 import Link from 'next/link';
 import Label from '../label';
+import { GridTileImage } from './tile';
 
 function ThreeItemGridItem({ item, priority }: { item: Product; priority?: boolean }) {
+  const size = item?.variants?.[0]?.selectedOptions?.find((option) => option.name === 'size');
   return (
-    <div className={clsx('md:col-span-2 md:row-span-1')}>
+    <div className={clsx('col-span-1 row-span-1 md:col-span-2 md:row-span-1')}>
       <Link
-        className="relative block aspect-bottle h-full w-full overflow-hidden bg-black/30"
+        className="relative block aspect-tall w-full overflow-hidden bg-black/30"
         href={`/product/${item.handle}`}
       >
         <GridTileImage
           src={item.featuredImage.url}
-          height={1690}
-          width={1192}
           fill
           sizes={'(min-width: 768px) 33vw, 100vw'}
           priority={priority}
           alt={item.title}
-          className="h-full w-full object-cover"
         />
       </Link>
-      <div className="font-multingual max-w-sm pt-4">
+      <div className="font-multilingual max-w-sm pt-4">
         <Label
           title={item.title as string}
           amount={item.priceRange.maxVariantPrice.amount}
           currencyCode={item.priceRange.maxVariantPrice.currencyCode}
+          size={size?.value}
         />
-        <div className="line-clamp-4 pt-2">{item?.description}</div>
+        <div className="font-regular line-clamp-4 pt-2">{item?.summary?.value}</div>
       </div>
     </div>
   );
@@ -52,7 +51,8 @@ export async function ThreeItemGrid({ lang }: { lang: Locale }) {
   return (
     <section
       className={clsx(
-        'mx-auto grid max-w-screen-2xl gap-6 px-4 pb-4 md:grid-cols-6',
+        'mx-auto grid max-w-screen-2xl gap-6 px-4 pb-4 ',
+        'grid-cols-1 md:grid-cols-6',
         'grid-rows-3 md:grid-rows-1'
       )}
     >
diff --git a/components/grid/tile.tsx b/components/grid/tile.tsx
index 1b24cb438..4729255bc 100644
--- a/components/grid/tile.tsx
+++ b/components/grid/tile.tsx
@@ -20,7 +20,7 @@ export function GridTileImage({
       {props.src ? (
         // eslint-disable-next-line jsx-a11y/alt-text -- `alt` is inherited from `props`, which is being enforced with TypeScript
         <Image
-          className={clsx('h-full w-full object-contain', {
+          className={clsx('h-full w-full object-cover', {
             'transition duration-300 ease-in-out hover:scale-105': isInteractive
           })}
           {...props}
diff --git a/components/icons/namemark.tsx b/components/icons/namemark.tsx
new file mode 100644
index 000000000..4eca417a3
--- /dev/null
+++ b/components/icons/namemark.tsx
@@ -0,0 +1,34 @@
+import clsx from 'clsx';
+
+export default function LogoNamemark(props: React.ComponentProps<'svg'>) {
+  return (
+    <svg
+      xmlns="http://www.w3.org/2000/svg"
+      xmlnsXlink="http://www.w3.org/1999/xlink"
+      fill="none"
+      viewBox="0 0 300 99"
+      className={clsx(props?.className || 'h-10 w-10 fill-current')}
+    >
+      <g clipPath="url(#clip0_1_7)">
+        <rect width="300" height="99" fill="url(#pattern0)" />
+      </g>
+      <defs>
+        <pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
+          <use
+            xlinkHref="#image0_1_7"
+            transform="matrix(0.00102848 0 0 0.0031173 -0.672667 -0.209479)"
+          />
+        </pattern>
+        <clipPath id="clip0_1_7">
+          <rect width="300" height="99" fill="white" />
+        </clipPath>
+        <image
+          id="image0_1_7"
+          width="1627"
+          height="418"
+          xlinkHref="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABlsAAAGiCAYAAABgaXC/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAF0mlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDEgNzkuYzAyMDRiMmRlZiwgMjAyMy8wMi8wMi0xMjoxNDoyNCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI0LjUgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDIzLTA2LTIyVDIyOjM0OjA2KzA5OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMy0wNi0yMlQyMzoxNDoyOSswOTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMy0wNi0yMlQyMzoxNDoyOSswOTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzQxODc1YTctNzRlMS00NzA4LThkM2UtYzA2NjNhNTk5NzgxIiB4bXBNTTpEb2N1bWVu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"
+        />
+      </defs>
+    </svg>
+  );
+}
diff --git a/components/label.tsx b/components/label.tsx
index 287a0fd41..3d92faf1d 100644
--- a/components/label.tsx
+++ b/components/label.tsx
@@ -4,22 +4,32 @@ import Price from './price';
 const Label = ({
   title,
   amount,
-  currencyCode
+  currencyCode,
+  size
 }: {
   title: string;
   amount: string;
   currencyCode: string;
+  size?: string;
 }) => {
   return (
     <div className={clsx('@container/label')}>
       <div className="font-multilingual flex flex-col space-y-2">
         <h3 className="mr-4 line-clamp-2 flex-grow text-3xl">{title}</h3>
-        <Price
-          className="flex-none"
-          amount={amount}
-          currencyCode={currencyCode}
-          currencyCodeClassName="hidden @[275px]/label:inline"
-        />
+        <div className="flex flex-row items-center space-x-2">
+          <Price
+            className="flex-none"
+            amount={amount}
+            currencyCode={currencyCode}
+            currencyCodeClassName="hidden @[275px]/label:inline"
+          />
+          {!!size && (
+            <>
+              <div>/</div>
+              <div>{size}</div>
+            </>
+          )}
+        </div>
       </div>
     </div>
   );
diff --git a/components/layout/menu/modal.tsx b/components/layout/menu/modal.tsx
index 7e869f570..78c4d4711 100644
--- a/components/layout/menu/modal.tsx
+++ b/components/layout/menu/modal.tsx
@@ -9,7 +9,7 @@ import { Fragment, useRef, useState } from 'react';
 import { LanguageControl } from '../navbar/language-control';
 
 export function MenuModal() {
-  const { currentLanguage } = useLanguage();
+  const { currentLanguage, currentDictionary } = useLanguage();
   let [isOpen, setIsOpen] = useState(false);
   let closeButtonRef = useRef(null);
 
@@ -43,17 +43,6 @@ export function MenuModal() {
           >
             <div className="fixed inset-0 z-20" />
           </Transition.Child>
-          <Transition.Child as={Fragment}>
-            <div className="fixed right-5 top-6 z-40 px-2 py-1 md:top-11">
-              <div className="flex flex-row space-x-6">
-                <LanguageControl lang={currentLanguage} />
-
-                <button ref={closeButtonRef} onClick={close} className="">
-                  <CloseIcon className="h-10 w-10 stroke-current transition-opacity duration-150 hover:opacity-50" />
-                </button>
-              </div>
-            </div>
-          </Transition.Child>
 
           <Transition.Child
             as={Fragment}
@@ -66,6 +55,16 @@ export function MenuModal() {
           >
             <div className="fixed inset-0 z-30 backdrop-blur-sm">
               <Dialog.Panel>
+                <div className="fixed right-5 top-6 z-40 px-2 py-1 md:top-11">
+                  <div className="flex flex-row space-x-6">
+                    <LanguageControl lang={currentLanguage} />
+
+                    <button ref={closeButtonRef} onClick={close} className="">
+                      <CloseIcon className="h-10 w-10 stroke-current transition-opacity duration-150 hover:opacity-50" />
+                    </button>
+                  </div>
+                </div>
+
                 <div className="fixed inset-0 grid grid-cols-1 place-content-center bg-dark/80">
                   <div className="flex flex-row justify-end">
                     <div className="flex flex-col space-y-4 px-6 text-right">
@@ -74,7 +73,7 @@ export function MenuModal() {
                           href="/products"
                           className="font-serif text-4xl font-normal transition-opacity duration-150 hover:opacity-50"
                         >
-                          products
+                          {currentDictionary?.menu?.products}
                         </Link>
                       </div>
 
@@ -83,7 +82,7 @@ export function MenuModal() {
                           href="/shops"
                           className="font-serif text-4xl font-normal transition-opacity duration-150 hover:opacity-50"
                         >
-                          shop list
+                          {currentDictionary?.menu?.shops}
                         </Link>
                       </div>
 
@@ -92,7 +91,7 @@ export function MenuModal() {
                           href="/about"
                           className="font-serif text-4xl font-normal transition-opacity duration-150 hover:opacity-50"
                         >
-                          about narai
+                          {currentDictionary?.menu?.about}
                         </Link>
                       </div>
 
@@ -101,7 +100,7 @@ export function MenuModal() {
                           href="/bar"
                           className="font-serif text-4xl font-normal transition-opacity duration-150 hover:opacity-50"
                         >
-                          sagyobar
+                          {currentDictionary?.menu?.bar}
                         </Link>
                       </div>
 
@@ -110,7 +109,7 @@ export function MenuModal() {
                           href="/concept"
                           className="font-serif text-4xl font-normal transition-opacity duration-150 hover:opacity-50"
                         >
-                          concept
+                          {currentDictionary?.menu?.concept}
                         </Link>
                       </div>
 
@@ -119,7 +118,7 @@ export function MenuModal() {
                           href="/stories"
                           className="font-serif text-4xl font-normal transition-opacity duration-150 hover:opacity-50"
                         >
-                          stories
+                          {currentDictionary?.menu?.stories}
                         </Link>
                       </div>
 
@@ -128,7 +127,7 @@ export function MenuModal() {
                           href="/company"
                           className="font-serif text-4xl font-normal transition-opacity duration-150 hover:opacity-50"
                         >
-                          company
+                          {currentDictionary?.menu?.company}
                         </Link>
                       </div>
 
@@ -137,6 +136,7 @@ export function MenuModal() {
                           href="/contact"
                           className="font-serif text-4xl font-normal transition-opacity duration-150 hover:opacity-50"
                         >
+                          {currentDictionary?.menu?.contact}
                           contact
                         </Link>
                       </div>
diff --git a/dictionaries/en.json b/dictionaries/en.json
index 250e9f084..ddb07fdf7 100644
--- a/dictionaries/en.json
+++ b/dictionaries/en.json
@@ -1,6 +1,12 @@
 {
-  "hello": {
-    "title": "Hello World",
-    "description": "This is a description"
+  "menu": {
+    "products": "products",
+    "shops": "shop list",
+    "about": "about narai",
+    "bar": "sagyobar",
+    "concept": "concept",
+    "stories": "stories",
+    "company": "company",
+    "contact": "contact"
   }
 }
diff --git a/dictionaries/ja.json b/dictionaries/ja.json
index 63ac1ad5f..d064af1de 100644
--- a/dictionaries/ja.json
+++ b/dictionaries/ja.json
@@ -1,6 +1,12 @@
 {
-  "hello": {
-    "title": "こんにちは",
-    "description": "これはせつめいですよ"
+  "menu": {
+    "products": "商品",
+    "shops": "取り扱い店",
+    "about": "naraiについて",
+    "bar": "sagyobar",
+    "concept": "コンセプト",
+    "stories": "ストーリー",
+    "company": "会社概要",
+    "contact": "contact"
   }
 }
diff --git a/lib/shopify/fragments/product.ts b/lib/shopify/fragments/product.ts
index be14dedca..0d37d1627 100644
--- a/lib/shopify/fragments/product.ts
+++ b/lib/shopify/fragments/product.ts
@@ -9,6 +9,9 @@ const productFragment = /* GraphQL */ `
     title
     description
     descriptionHtml
+    summary: metafield(namespace: "custom", key: "product_summary") {
+      value
+    }
     options {
       id
       name
diff --git a/lib/shopify/types.ts b/lib/shopify/types.ts
index b51ab3e30..2a7479067 100644
--- a/lib/shopify/types.ts
+++ b/lib/shopify/types.ts
@@ -115,6 +115,9 @@ export type ShopifyProduct = {
   title: string;
   description: string;
   descriptionHtml: string;
+  summary: {
+    value: string;
+  };
   options: ProductOption[];
   priceRange: {
     maxVariantPrice: Money;
diff --git a/tailwind.config.js b/tailwind.config.js
index b3297fe32..7f686e8df 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -15,7 +15,7 @@ module.exports = {
         japan: ['var(--font-mincho)', 'sans-serif']
       },
       aspectRatio: {
-        bottle: '1.11'
+        tall: '596 / 845'
       },
       keyframes: {
         fadeIn: {