From 386efce0a78b79d35106c35c36a44b925b03c58f Mon Sep 17 00:00:00 2001
From: DrMint <thomas@barillot.net>
Date: Mon, 7 Mar 2022 16:27:38 +0100
Subject: [PATCH 1/3] Fixed small visual problem with buttons

---
 src/components/Button.tsx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/components/Button.tsx b/src/components/Button.tsx
index 73eda2b..a968847 100644
--- a/src/components/Button.tsx
+++ b/src/components/Button.tsx
@@ -21,7 +21,7 @@ export default function Button(props: ButtonProps): JSX.Element {
       } ${
         props.active
           ? "text-light bg-black drop-shadow-black-lg !border-black cursor-not-allowed"
-          : "cursor-pointer hover:text-light hover:bg-dark hover:drop-shadow-shade-lg active:bg-black active:drop-shadow-black-lg active:border-black"
+          : "cursor-pointer hover:text-light hover:bg-dark hover:drop-shadow-shade-lg active:bg-black active:text-light active:drop-shadow-black-lg active:border-black"
       }`}
     >
       {props.children}

From 1b25bcc22d6100b3bc62736b9b9d3eac23a6fb36 Mon Sep 17 00:00:00 2001
From: DrMint <thomas@barillot.net>
Date: Mon, 7 Mar 2022 21:43:51 +0100
Subject: [PATCH 2/3] Prices can now be properly compared between currencies

---
 src/pages/library/index.tsx | 20 +++++++++++++-------
 src/queries/helpers.ts      | 15 +++++++++++----
 2 files changed, 24 insertions(+), 11 deletions(-)

diff --git a/src/pages/library/index.tsx b/src/pages/library/index.tsx
index 4dec60f..cba6882 100644
--- a/src/pages/library/index.tsx
+++ b/src/pages/library/index.tsx
@@ -4,6 +4,7 @@ import ContentPanel, {
   ContentPanelWidthSizes,
 } from "components/Panels/ContentPanel";
 import {
+  GetCurrenciesQuery,
   GetLibraryItemsPreviewQuery,
   GetWebsiteInterfaceQuery,
 } from "graphql/operations-types";
@@ -13,7 +14,7 @@ import AppLayout from "components/AppLayout";
 import LibraryItemsPreview from "components/Library/LibraryItemsPreview";
 import Select from "components/Select";
 import { useEffect, useState } from "react";
-import { prettyDate, prettyinlineTitle } from "queries/helpers";
+import { convertPrice, prettyDate, prettyinlineTitle } from "queries/helpers";
 import Switch from "components/Switch";
 import { AppStaticProps, getAppStaticProps } from "queries/getAppStaticProps";
 
@@ -27,7 +28,7 @@ type GroupLibraryItems = Map<
 >;
 
 export default function Library(props: LibraryProps): JSX.Element {
-  const { langui, items } = props;
+  const { langui, items, currencies } = props;
 
   const [showSubitems, setShowSubitems] = useState<boolean>(false);
   const [showPrimaryItems, setShowPrimaryItems] = useState<boolean>(true);
@@ -40,7 +41,7 @@ export default function Library(props: LibraryProps): JSX.Element {
   );
 
   const [sortedItems, setSortedItem] = useState<LibraryProps["items"]>(
-    sortBy(groupingMethod, filteredItems)
+    sortBy(groupingMethod, filteredItems, currencies)
   );
 
   const [groups, setGroups] = useState<GroupLibraryItems>(
@@ -54,7 +55,7 @@ export default function Library(props: LibraryProps): JSX.Element {
   }, [showSubitems, items, showPrimaryItems, showSecondaryItems]);
 
   useEffect(() => {
-    setSortedItem(sortBy(sortingMethod, filteredItems));
+    setSortedItem(sortBy(sortingMethod, filteredItems, currencies));
   }, [filteredItems, sortingMethod]);
 
   useEffect(() => {
@@ -278,7 +279,8 @@ function filterItems(
 
 function sortBy(
   orderByType: number,
-  items: LibraryProps["items"]
+  items: LibraryProps["items"],
+  currencies: GetCurrenciesQuery["currencies"]["data"]
 ): LibraryProps["items"] {
   switch (orderByType) {
     case 0:
@@ -297,8 +299,12 @@ function sortBy(
       });
     case 1:
       return [...items].sort((a, b) => {
-        const priceA = a.attributes.price ? a.attributes.price.amount : 99999;
-        const priceB = b.attributes.price ? b.attributes.price.amount : 99999;
+        const priceA = a.attributes.price
+          ? convertPrice(a.attributes.price, currencies[0])
+          : 99999;
+        const priceB = b.attributes.price
+          ? convertPrice(b.attributes.price, currencies[0])
+          : 99999;
         return priceA - priceB;
       });
     case 2:
diff --git a/src/queries/helpers.ts b/src/queries/helpers.ts
index c475860..6e30470 100644
--- a/src/queries/helpers.ts
+++ b/src/queries/helpers.ts
@@ -33,10 +33,7 @@ export function prettyPrice(
   let result = "";
   currencies.map((currency) => {
     if (currency.attributes.code === targetCurrencyCode) {
-      let amountInUSD =
-        pricePicker.amount * pricePicker.currency.data.attributes.rate_to_usd;
-      let amountInTargetCurrency =
-        amountInUSD / currency.attributes.rate_to_usd;
+      const amountInTargetCurrency = convertPrice(pricePicker, currency);
       result =
         currency.attributes.symbol +
         amountInTargetCurrency.toLocaleString(undefined, {
@@ -48,6 +45,16 @@ export function prettyPrice(
   return result;
 }
 
+export function convertPrice(
+  pricePicker: GetLibraryItemsPreviewQuery["libraryItems"]["data"][number]["attributes"]["price"],
+  targetCurrency: GetCurrenciesQuery["currencies"]["data"][number]
+): number {
+  return (
+    (pricePicker.amount * pricePicker.currency.data.attributes.rate_to_usd) /
+    targetCurrency.attributes.rate_to_usd
+  );
+}
+
 export function prettySlug(slug?: string, parentSlug?: string): string {
   if (slug) {
     if (parentSlug && slug.startsWith(parentSlug))

From 6de9302306da035cadc9b3be5e37fd661614de89 Mon Sep 17 00:00:00 2001
From: DrMint <thomas@barillot.net>
Date: Mon, 7 Mar 2022 21:57:56 +0100
Subject: [PATCH 3/3] Upadated REAME

---
 README.md | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/README.md b/README.md
index 6b245ca..66573d1 100644
--- a/README.md
+++ b/README.md
@@ -9,6 +9,13 @@
   - Multilanguage support
   - Markdown format for the rich text fields
 
+#### [Image Processor](https://github.com/Accords-Library/img.accords-library.com)
+- Convert the images from the CMS to 4 formats
+  - Small: 512x512, quality 60, .webp
+  - Medium: 1024x1024, quality 75, .webp
+  - Large: 2048x2048, quality 80, .webp
+  - Og: 512x512, quality 60, .jpg
+
 #### [Front](https://github.com/Accords-Library/accords-library.com) (this repository)
 
 - Language: [TypeScript](https://www.typescriptlang.org/)
@@ -29,6 +36,12 @@
 - State Management: [React Context](https://reactjs.org/docs/context.html)
   - Persistent app state using LocalStorage
 - Support for many screen sizes and resolutions
+- SSG (Static Site Generation):
+  - The website is built before running in production
+  - Performances are great, and possibility to deploy the app using a CDN
+- OpenGraph and Metadata
+  - Good defaults for the metadate and OpenGraph properties
+  - Each page can provide the thumbnail, title, description to be used
 - Data quality testing
   - Data from the CMS is subject to a battery of tests (about 20 warning types and 40 error types) at build time
   - Each warning/error comes with a front-end link to the incriminating element, as well as a link to the CMS to fix it.