Added support for UI translation and other fields
This commit is contained in:
		
							parent
							
								
									ee8be64ce3
								
							
						
					
					
						commit
						75da366216
					
				| @ -21,13 +21,17 @@ export default function ThumbnailHeader( | ||||
|     <> | ||||
|       <div className="grid place-items-center gap-12  mb-12"> | ||||
|         <div className="drop-shadow-dark-lg"> | ||||
|           <Image | ||||
|             className=" rounded-xl" | ||||
|             src={getAssetURL(content.thumbnail.data.attributes.url)} | ||||
|             alt={content.thumbnail.data.attributes.alternativeText} | ||||
|             width={content.thumbnail.data.attributes.width} | ||||
|             height={content.thumbnail.data.attributes.height} | ||||
|           /> | ||||
|           {content.thumbnail.data ? ( | ||||
|             <Image | ||||
|               className=" rounded-xl" | ||||
|               src={getAssetURL(content.thumbnail.data.attributes.url)} | ||||
|               alt={content.thumbnail.data.attributes.alternativeText} | ||||
|               width={content.thumbnail.data.attributes.width} | ||||
|               height={content.thumbnail.data.attributes.height} | ||||
|             /> | ||||
|           ) : ( | ||||
|             <div className="w-full aspect-[4/3] bg-light rounded-xl"></div> | ||||
|           )} | ||||
|         </div> | ||||
|         <div className="grid place-items-center"> | ||||
|           <p className="text-2xl">{content.titles[0].pre_title}</p> | ||||
| @ -40,7 +44,7 @@ export default function ThumbnailHeader( | ||||
|         {content.type ? ( | ||||
|           <div className="grid place-items-center place-content-start gap-2"> | ||||
|             <h3 className="text-xl">Type</h3> | ||||
|             <Button>{prettySlug(content.type.data.attributes.slug)}</Button> | ||||
|             <Button>{content.type.data.attributes.titles[0].title}</Button> | ||||
|           </div> | ||||
|         ) : ( | ||||
|           "" | ||||
|  | ||||
| @ -32,7 +32,7 @@ export default function LibraryItemComponent( | ||||
|         ) : ( | ||||
|           <div className="w-full aspect-[21/29.7] bg-light rounded-lg"></div> | ||||
|         )} | ||||
|         <div className="linearbg-1 shadow-[0_0_1em_rgb(0,0,0,0.2)] absolute bottom-0 left-0 right-0 h-auto opacity-[var(--cover-opacity)] transition-opacity z-20 grid p-4 gap-4 text-left"> | ||||
|         <div className="linearbg-1 drop-shadow-dark-lg absolute bottom-2 inset-x-[-0.15rem] opacity-[var(--cover-opacity)] transition-opacity z-20 grid p-4 gap-4 text-left"> | ||||
|           <div> | ||||
|             <h2 className="text-lg leading-7">{item.title}</h2> | ||||
|             <h3 className="leading-3">{item.subtitle}</h3> | ||||
|  | ||||
| @ -1,10 +1,12 @@ | ||||
| import Button from "components/Button"; | ||||
| import { GetWebsiteInterfaceQuery } from "graphql/operations-types"; | ||||
| 
 | ||||
| type ReturnButtonProps = { | ||||
|   href: string; | ||||
|   title: string; | ||||
|   langui: GetWebsiteInterfaceQuery["websiteInterfaces"]["data"][number]["attributes"]; | ||||
| }; | ||||
| 
 | ||||
| export default function ReturnButton(props: ReturnButtonProps): JSX.Element { | ||||
|   return <Button href={props.href}>❮ Return to {props.title}</Button>; | ||||
|   return <Button href={props.href}>❮ {props.langui.global_return_label} {props.title}</Button>; | ||||
| } | ||||
|  | ||||
| @ -4,8 +4,15 @@ import SVG from "components/SVG"; | ||||
| import { useRouter } from "next/router"; | ||||
| import Button from "components/Button"; | ||||
| import HorizontalLine from "components/HorizontalLine"; | ||||
| import { GetWebsiteInterfaceQuery } from "graphql/operations-types"; | ||||
| import Markdown from "markdown-to-jsx"; | ||||
| 
 | ||||
| export default function MainPanel(): JSX.Element { | ||||
| type Props = { | ||||
|   langui: GetWebsiteInterfaceQuery["websiteInterfaces"]["data"][number]["attributes"]; | ||||
| }; | ||||
| 
 | ||||
| export default function MainPanel(props: Props): JSX.Element { | ||||
|   const langui = props.langui; | ||||
|   const router = useRouter(); | ||||
|   return ( | ||||
|     <div className="grid webkit-scrollbar:w-0 [scrollbar-width:none] overflow-y-scroll border-r-[1px] border-black max-h-screen h-screen justify-center content-start p-8 gap-y-2 justify-items-center text-center"> | ||||
| @ -37,39 +44,50 @@ export default function MainPanel(): JSX.Element { | ||||
|       <NavOption | ||||
|         url="/library" | ||||
|         icon="library_books" | ||||
|         title="Library" | ||||
|         subtitle="Browse all physical and digital media" | ||||
|         title={langui.main_library} | ||||
|         subtitle={langui.main_library_description} | ||||
|       /> | ||||
| 
 | ||||
|       <NavOption | ||||
|         url="/hubs" | ||||
|         icon="workspaces" | ||||
|         title="Hubs" | ||||
|         subtitle="Explore all content of a specific game/series" | ||||
|         title={langui.main_hub} | ||||
|         subtitle={langui.main_hub_description} | ||||
|       /> | ||||
| 
 | ||||
|       <NavOption | ||||
|         url="/chronology" | ||||
|         icon="watch_later" | ||||
|         title="Chronology" | ||||
|         subtitle="Follow all events in chronological order" | ||||
|         title={langui.main_chronology} | ||||
|         subtitle={langui.main_chronology_description} | ||||
|       /> | ||||
| 
 | ||||
|       <HorizontalLine /> | ||||
| 
 | ||||
|       <NavOption url="/news" icon="feed" title="News" /> | ||||
|       <NavOption url="/data" icon="travel_explore" title="Data" /> | ||||
|       <NavOption url="/gallery" icon="collections" title="Gallery" /> | ||||
|       <NavOption url="/archive" icon="inventory" title="Archive" /> | ||||
|       <NavOption url="/about-us" icon="info" title="About us" /> | ||||
|       <NavOption url="/news" icon="feed" title={langui.main_news} /> | ||||
|       <NavOption url="/data" icon="travel_explore" title={langui.main_data} /> | ||||
|       <NavOption url="/merch" icon="store" title={langui.main_merch} /> | ||||
|       <NavOption | ||||
|         url="/gallery" | ||||
|         icon="collections" | ||||
|         title={langui.main_gallery} | ||||
|       /> | ||||
|       <NavOption | ||||
|         url="/archives" | ||||
|         icon="inventory" | ||||
|         title={langui.main_archives} | ||||
|       /> | ||||
|       <NavOption url="/about-us" icon="info" title={langui.main_about_us} /> | ||||
| 
 | ||||
|       <HorizontalLine /> | ||||
| 
 | ||||
|       <div className="text-center"> | ||||
|         <p> | ||||
|           This website’s content is made available under{" "} | ||||
|           <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC-BY-SA</a>{" "} | ||||
|           unless otherwise noted. | ||||
|           {langui.main_licensing ? ( | ||||
|             <Markdown>{langui.main_licensing}</Markdown> | ||||
|           ) : ( | ||||
|             "" | ||||
|           )} | ||||
|         </p> | ||||
|         <a | ||||
|           className="transition-[filter] hover:colorize-dark" | ||||
| @ -94,9 +112,11 @@ export default function MainPanel(): JSX.Element { | ||||
|           </div> | ||||
|         </a> | ||||
|         <p> | ||||
|           Accord’s Library is not affiliated with or endorsed by SQUARE | ||||
|           ENIX CO. LTD. All game assets and promotional materials belongs to | ||||
|           © SQUARE ENIX CO. LTD. | ||||
|           {langui.main_copyright ? ( | ||||
|             <Markdown>{langui.main_copyright}</Markdown> | ||||
|           ) : ( | ||||
|             "" | ||||
|           )} | ||||
|         </p> | ||||
|         <div className="mt-12 mb-4 grid h-4 grid-flow-col place-content-center gap-8"> | ||||
|           <a | ||||
|  | ||||
| @ -1,3 +1,56 @@ | ||||
| query getWebsiteInterface($language_code: String) { | ||||
|   websiteInterfaces(filters: { language: { code: { eq: $language_code } } }) { | ||||
|     data { | ||||
|       attributes { | ||||
|         main_library | ||||
|         main_library_description | ||||
|         main_hub | ||||
|         main_hub_description | ||||
|         main_chronology | ||||
|         main_chronology_description | ||||
|         main_news | ||||
|         main_data | ||||
|         main_merch | ||||
|         main_gallery | ||||
|         main_archives | ||||
|         main_about_us | ||||
|         main_licensing | ||||
|         main_copyright | ||||
|         library_description | ||||
|         library_item_summary | ||||
|         library_item_gallery | ||||
|         library_item_details | ||||
|         library_item_subitems | ||||
|         library_item_variants | ||||
|         library_item_content | ||||
|         global_return_label | ||||
|         global_subitem_of | ||||
|         global_type | ||||
|         global_width | ||||
|         global_height | ||||
|         global_thickness | ||||
|         global_binding | ||||
|         global_language | ||||
|         global_languages | ||||
|         global_page | ||||
|         global_pages | ||||
|         global_page_order | ||||
|         global_release_date | ||||
|         global_price | ||||
|         library_item_physical_size | ||||
|         library_item_type_information | ||||
|         chronology_description | ||||
|         chronology_timelines | ||||
|         chronology_timelines_description | ||||
|         chronology_overview | ||||
|         chronology_overview_description | ||||
|         chronology_walkthrough | ||||
|         chronology_walkthrough_description | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| query getEras($language_code: String) { | ||||
|   chronologyEras { | ||||
|     data { | ||||
| @ -176,6 +229,11 @@ query getLibraryItem($slug: String, $language_code: String) { | ||||
|               data { | ||||
|                 attributes { | ||||
|                   slug | ||||
|                   titles( | ||||
|                     filters: { language: { code: { eq: $language_code } } } | ||||
|                   ) { | ||||
|                     title | ||||
|                   } | ||||
|                 } | ||||
|               } | ||||
|             } | ||||
| @ -240,6 +298,11 @@ query getLibraryItem($slug: String, $language_code: String) { | ||||
|               data { | ||||
|                 attributes { | ||||
|                   slug | ||||
|                   titles( | ||||
|                     filters: { language: { code: { eq: $language_code } } } | ||||
|                   ) { | ||||
|                     title | ||||
|                   } | ||||
|                 } | ||||
|               } | ||||
|             } | ||||
| @ -252,20 +315,16 @@ query getLibraryItem($slug: String, $language_code: String) { | ||||
|               } | ||||
|             } | ||||
|           } | ||||
|           ... on ComponentMetadataMerch { | ||||
|             merch_item { | ||||
|               data { | ||||
|                 attributes { | ||||
|                   slug | ||||
|                 } | ||||
|               } | ||||
|             } | ||||
|           } | ||||
|           ... on ComponentMetadataOther { | ||||
|             subtype { | ||||
|               data { | ||||
|                 attributes { | ||||
|                   slug | ||||
|                   titles( | ||||
|                     filters: { language: { code: { eq: $language_code } } } | ||||
|                   ) { | ||||
|                     title | ||||
|                   } | ||||
|                 } | ||||
|               } | ||||
|             } | ||||
| @ -303,6 +362,28 @@ query getLibraryItem($slug: String, $language_code: String) { | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|         submerchs { | ||||
|           data { | ||||
|             id | ||||
|             attributes { | ||||
|               slug | ||||
|               title | ||||
|               subtitle | ||||
|               thumbnail { | ||||
|                 data { | ||||
|                   attributes { | ||||
|                     name | ||||
|                     alternativeText | ||||
|                     caption | ||||
|                     width | ||||
|                     height | ||||
|                     url | ||||
|                   } | ||||
|                 } | ||||
|               } | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|         contents(pagination: { limit: -1 }) { | ||||
|           data { | ||||
|             id | ||||
| @ -338,6 +419,13 @@ query getLibraryItem($slug: String, $language_code: String) { | ||||
|                       data { | ||||
|                         attributes { | ||||
|                           slug | ||||
|                           titles( | ||||
|                             filters: { | ||||
|                               language: { code: { eq: $language_code } } | ||||
|                             } | ||||
|                           ) { | ||||
|                             title | ||||
|                           } | ||||
|                         } | ||||
|                       } | ||||
|                     } | ||||
| @ -401,6 +489,9 @@ query getContent($slug: String, $language_code: String) { | ||||
|           data { | ||||
|             attributes { | ||||
|               slug | ||||
|               titles(filters: { language: { code: { eq: $language_code } } }) { | ||||
|                 title | ||||
|               } | ||||
|             } | ||||
|           } | ||||
|         } | ||||
| @ -485,6 +576,9 @@ query getContentText($slug: String, $language_code: String) { | ||||
|           data { | ||||
|             attributes { | ||||
|               slug | ||||
|               titles(filters: { language: { code: { eq: $language_code } } }) { | ||||
|                 title | ||||
|               } | ||||
|             } | ||||
|           } | ||||
|         } | ||||
| @ -595,7 +689,6 @@ query getContentText($slug: String, $language_code: String) { | ||||
|           } | ||||
|           notes | ||||
|         } | ||||
| 
 | ||||
|         thumbnail { | ||||
|           data { | ||||
|             attributes { | ||||
|  | ||||
| @ -29,7 +29,6 @@ export type Scalars = { | ||||
|   But to make the type easier to work with, it went through the following transformation: | ||||
|     - Removed ? | ||||
|     - Removed | null | ||||
|     - Removed | undefined | ||||
| */ | ||||
| 
 | ||||
| export enum Enum_Componentmetadatabooks_Binding_Type { | ||||
| @ -65,6 +64,67 @@ export enum Enum_Componentsetstextset_Status { | ||||
| 
 | ||||
| // __________________________________________________________________
 | ||||
| 
 | ||||
| export type GetWebsiteInterfaceQueryVariables = Exact<{ | ||||
|   language_code: InputMaybe<Scalars["String"]>; | ||||
| }>; | ||||
| 
 | ||||
| export type GetWebsiteInterfaceQuery = { | ||||
|   __typename: "Query"; | ||||
|   websiteInterfaces: { | ||||
|     __typename: "WebsiteInterfaceEntityResponseCollection"; | ||||
|     data: Array<{ | ||||
|       __typename: "WebsiteInterfaceEntity"; | ||||
|       attributes: { | ||||
|         __typename: "WebsiteInterface"; | ||||
|         main_library: string; | ||||
|         main_library_description: string; | ||||
|         main_hub: string; | ||||
|         main_hub_description: string; | ||||
|         main_chronology: string; | ||||
|         main_chronology_description: string; | ||||
|         main_news: string; | ||||
|         main_data: string; | ||||
|         main_merch: string; | ||||
|         main_gallery: string; | ||||
|         main_archives: string; | ||||
|         main_about_us: string; | ||||
|         main_licensing: string; | ||||
|         main_copyright: string; | ||||
|         library_description: string; | ||||
|         library_item_summary: string; | ||||
|         library_item_gallery: string; | ||||
|         library_item_details: string; | ||||
|         library_item_subitems: string; | ||||
|         library_item_variants: string; | ||||
|         library_item_content: string; | ||||
|         global_return_label: string; | ||||
|         global_subitem_of: string; | ||||
|         global_type: string; | ||||
|         global_width: string; | ||||
|         global_height: string; | ||||
|         global_thickness: string; | ||||
|         global_binding: string; | ||||
|         global_language: string; | ||||
|         global_languages: string; | ||||
|         global_page: string; | ||||
|         global_pages: string; | ||||
|         global_page_order: string; | ||||
|         global_release_date: string; | ||||
|         global_price: string; | ||||
|         library_item_physical_size: string; | ||||
|         library_item_type_information: string; | ||||
|         chronology_description: string; | ||||
|         chronology_timelines: string; | ||||
|         chronology_timelines_description: string; | ||||
|         chronology_overview: string; | ||||
|         chronology_overview_description: string; | ||||
|         chronology_walkthrough: string; | ||||
|         chronology_walkthrough_description: string; | ||||
|       }; | ||||
|     }>; | ||||
|   }; | ||||
| }; | ||||
| 
 | ||||
| export type GetErasQueryVariables = Exact<{ | ||||
|   language_code: InputMaybe<Scalars["String"]>; | ||||
| }>; | ||||
| @ -304,6 +364,10 @@ export type GetLibraryItemQuery = { | ||||
|                   attributes: { | ||||
|                     __typename: "TextualSubtype"; | ||||
|                     slug: string; | ||||
|                     titles: Array<{ | ||||
|                       __typename: "ComponentTranslationsSimpleTitle"; | ||||
|                       title: string; | ||||
|                     }>; | ||||
|                   }; | ||||
|                 }; | ||||
|               }; | ||||
| @ -389,6 +453,10 @@ export type GetLibraryItemQuery = { | ||||
|                   attributes: { | ||||
|                     __typename: "AudioSubtype"; | ||||
|                     slug: string; | ||||
|                     titles: Array<{ | ||||
|                       __typename: "ComponentTranslationsSimpleTitle"; | ||||
|                       title: string; | ||||
|                     }>; | ||||
|                   }; | ||||
|                 }; | ||||
|               }; | ||||
| @ -404,19 +472,6 @@ export type GetLibraryItemQuery = { | ||||
|                 }>; | ||||
|               }; | ||||
|             } | ||||
|           | { | ||||
|               __typename: "ComponentMetadataMerch"; | ||||
|               merch_item: { | ||||
|                 __typename: "MerchItemEntityResponse"; | ||||
|                 data: { | ||||
|                   __typename: "MerchItemEntity"; | ||||
|                   attributes: { | ||||
|                     __typename: "MerchItem"; | ||||
|                     slug: string; | ||||
|                   }; | ||||
|                 }; | ||||
|               }; | ||||
|             } | ||||
|           | { | ||||
|               __typename: "ComponentMetadataOther"; | ||||
|               subtype: { | ||||
| @ -426,6 +481,10 @@ export type GetLibraryItemQuery = { | ||||
|                   attributes: { | ||||
|                     __typename: "OtherSubtype"; | ||||
|                     slug: string; | ||||
|                     titles: Array<{ | ||||
|                       __typename: "ComponentTranslationsSimpleTitle"; | ||||
|                       title: string; | ||||
|                     }>; | ||||
|                   }; | ||||
|                 }; | ||||
|               }; | ||||
| @ -473,6 +532,34 @@ export type GetLibraryItemQuery = { | ||||
|             }; | ||||
|           }>; | ||||
|         }; | ||||
|         submerchs: { | ||||
|           __typename: "MerchItemRelationResponseCollection"; | ||||
|           data: Array<{ | ||||
|             __typename: "MerchItemEntity"; | ||||
|             id: string; | ||||
|             attributes: { | ||||
|               __typename: "MerchItem"; | ||||
|               slug: string; | ||||
|               title: string; | ||||
|               subtitle: string; | ||||
|               thumbnail: { | ||||
|                 __typename: "UploadFileEntityResponse"; | ||||
|                 data: { | ||||
|                   __typename: "UploadFileEntity"; | ||||
|                   attributes: { | ||||
|                     __typename: "UploadFile"; | ||||
|                     name: string; | ||||
|                     alternativeText: string; | ||||
|                     caption: string; | ||||
|                     width: number; | ||||
|                     height: number; | ||||
|                     url: string; | ||||
|                   }; | ||||
|                 }; | ||||
|               }; | ||||
|             }; | ||||
|           }>; | ||||
|         }; | ||||
|         contents: { | ||||
|           __typename: "RangedContentRelationResponseCollection"; | ||||
|           data: Array<{ | ||||
| @ -524,6 +611,10 @@ export type GetLibraryItemQuery = { | ||||
|                         attributes: { | ||||
|                           __typename: "ContentType"; | ||||
|                           slug: string; | ||||
|                           titles: Array<{ | ||||
|                             __typename: "ComponentTranslationsSimpleTitle"; | ||||
|                             title: string; | ||||
|                           }>; | ||||
|                         }; | ||||
|                       }; | ||||
|                     }; | ||||
| @ -605,7 +696,14 @@ export type GetContentQuery = { | ||||
|           __typename: "ContentTypeEntityResponse"; | ||||
|           data: { | ||||
|             __typename: "ContentTypeEntity"; | ||||
|             attributes: { __typename: "ContentType"; slug: string }; | ||||
|             attributes: { | ||||
|               __typename: "ContentType"; | ||||
|               slug: string; | ||||
|               titles: Array<{ | ||||
|                 __typename: "ComponentTranslationsSimpleTitle"; | ||||
|                 title: string; | ||||
|               }>; | ||||
|             }; | ||||
|           }; | ||||
|         }; | ||||
|         ranged_contents: { | ||||
| @ -698,41 +796,48 @@ export type GetContentTextQuery = { | ||||
|         slug: string; | ||||
|         titles: Array<{ | ||||
|           __typename: "ComponentTranslationsTitle"; | ||||
|           pre_title: string ; | ||||
|           pre_title: string; | ||||
|           title: string; | ||||
|           subtitle: string ; | ||||
|         } > ; | ||||
|           subtitle: string; | ||||
|         }>; | ||||
|         categories: { | ||||
|           __typename: "CategoryRelationResponseCollection"; | ||||
|           data: Array<{ | ||||
|             __typename: "CategoryEntity"; | ||||
|             id: string ; | ||||
|             id: string; | ||||
|             attributes: { | ||||
|               __typename: "Category"; | ||||
|               name: string; | ||||
|               short: string; | ||||
|             } ; | ||||
|             }; | ||||
|           }>; | ||||
|         } ; | ||||
|         }; | ||||
|         type: { | ||||
|           __typename: "ContentTypeEntityResponse"; | ||||
|           data: { | ||||
|             __typename: "ContentTypeEntity"; | ||||
|             attributes: { __typename: "ContentType"; slug: string } ; | ||||
|           } ; | ||||
|         } ; | ||||
|             attributes: { | ||||
|               __typename: "ContentType"; | ||||
|               slug: string; | ||||
|               titles: Array<{ | ||||
|                 __typename: "ComponentTranslationsSimpleTitle"; | ||||
|                 title: string; | ||||
|               }>; | ||||
|             }; | ||||
|           }; | ||||
|         }; | ||||
|         ranged_contents: { | ||||
|           __typename: "RangedContentRelationResponseCollection"; | ||||
|           data: Array<{ | ||||
|             __typename: "RangedContentEntity"; | ||||
|             id: string ; | ||||
|             id: string; | ||||
|             attributes: { | ||||
|               __typename: "RangedContent"; | ||||
|               slug: string; | ||||
|               scan_set: Array<{ | ||||
|                 __typename: "ComponentSetsScanSet"; | ||||
|                 id: string; | ||||
|               } > ; | ||||
|               }>; | ||||
|               library_item: { | ||||
|                 __typename: "LibraryItemEntityResponse"; | ||||
|                 data: { | ||||
| @ -741,7 +846,7 @@ export type GetContentTextQuery = { | ||||
|                     __typename: "LibraryItem"; | ||||
|                     slug: string; | ||||
|                     title: string; | ||||
|                     subtitle: string ; | ||||
|                     subtitle: string; | ||||
|                     thumbnail: { | ||||
|                       __typename: "UploadFileEntityResponse"; | ||||
|                       data: { | ||||
| @ -749,32 +854,32 @@ export type GetContentTextQuery = { | ||||
|                         attributes: { | ||||
|                           __typename: "UploadFile"; | ||||
|                           name: string; | ||||
|                           alternativeText: string ; | ||||
|                           caption: string ; | ||||
|                           width: number ; | ||||
|                           height: number ; | ||||
|                           alternativeText: string; | ||||
|                           caption: string; | ||||
|                           width: number; | ||||
|                           height: number; | ||||
|                           url: string; | ||||
|                         } ; | ||||
|                       } ; | ||||
|                     } ; | ||||
|                   } ; | ||||
|                 } ; | ||||
|               } ; | ||||
|             } ; | ||||
|                         }; | ||||
|                       }; | ||||
|                     }; | ||||
|                   }; | ||||
|                 }; | ||||
|               }; | ||||
|             }; | ||||
|           }>; | ||||
|         } ; | ||||
|         }; | ||||
|         text_set: Array<{ | ||||
|           __typename: "ComponentSetsTextSet"; | ||||
|           status: Enum_Componentsetstextset_Status; | ||||
|           text: string ; | ||||
|           notes: string ; | ||||
|           text: string; | ||||
|           notes: string; | ||||
|           source_language: { | ||||
|             __typename: "LanguageEntityResponse"; | ||||
|             data: { | ||||
|               __typename: "LanguageEntity"; | ||||
|               attributes: { __typename: "Language"; name: string } ; | ||||
|             } ; | ||||
|           } ; | ||||
|               attributes: { __typename: "Language"; name: string }; | ||||
|             }; | ||||
|           }; | ||||
|           transcribers: { | ||||
|             __typename: "RecorderRelationResponseCollection"; | ||||
|             data: Array<{ | ||||
| @ -791,17 +896,17 @@ export type GetContentTextQuery = { | ||||
|                     attributes: { | ||||
|                       __typename: "UploadFile"; | ||||
|                       name: string; | ||||
|                       alternativeText: string ; | ||||
|                       caption: string ; | ||||
|                       width: number ; | ||||
|                       height: number ; | ||||
|                       alternativeText: string; | ||||
|                       caption: string; | ||||
|                       width: number; | ||||
|                       height: number; | ||||
|                       url: string; | ||||
|                     } ; | ||||
|                   } ; | ||||
|                 } ; | ||||
|               } ; | ||||
|                     }; | ||||
|                   }; | ||||
|                 }; | ||||
|               }; | ||||
|             }>; | ||||
|           } ; | ||||
|           }; | ||||
|           translators: { | ||||
|             __typename: "RecorderRelationResponseCollection"; | ||||
|             data: Array<{ | ||||
| @ -818,17 +923,17 @@ export type GetContentTextQuery = { | ||||
|                     attributes: { | ||||
|                       __typename: "UploadFile"; | ||||
|                       name: string; | ||||
|                       alternativeText: string ; | ||||
|                       caption: string ; | ||||
|                       width: number ; | ||||
|                       height: number ; | ||||
|                       alternativeText: string; | ||||
|                       caption: string; | ||||
|                       width: number; | ||||
|                       height: number; | ||||
|                       url: string; | ||||
|                     } ; | ||||
|                   } ; | ||||
|                 } ; | ||||
|               } ; | ||||
|                     }; | ||||
|                   }; | ||||
|                 }; | ||||
|               }; | ||||
|             }>; | ||||
|           } ; | ||||
|           }; | ||||
|           proofreaders: { | ||||
|             __typename: "RecorderRelationResponseCollection"; | ||||
|             data: Array<{ | ||||
| @ -845,18 +950,18 @@ export type GetContentTextQuery = { | ||||
|                     attributes: { | ||||
|                       __typename: "UploadFile"; | ||||
|                       name: string; | ||||
|                       alternativeText: string ; | ||||
|                       caption: string ; | ||||
|                       width: number ; | ||||
|                       height: number ; | ||||
|                       alternativeText: string; | ||||
|                       caption: string; | ||||
|                       width: number; | ||||
|                       height: number; | ||||
|                       url: string; | ||||
|                     } ; | ||||
|                   } ; | ||||
|                 } ; | ||||
|               } ; | ||||
|                     }; | ||||
|                   }; | ||||
|                 }; | ||||
|               }; | ||||
|             }>; | ||||
|           } ; | ||||
|         } > ; | ||||
|           }; | ||||
|         }>; | ||||
|         thumbnail: { | ||||
|           __typename: "UploadFileEntityResponse"; | ||||
|           data: { | ||||
| @ -864,15 +969,15 @@ export type GetContentTextQuery = { | ||||
|             attributes: { | ||||
|               __typename: "UploadFile"; | ||||
|               name: string; | ||||
|               alternativeText: string ; | ||||
|               caption: string ; | ||||
|               width: number ; | ||||
|               height: number ; | ||||
|               alternativeText: string; | ||||
|               caption: string; | ||||
|               width: number; | ||||
|               height: number; | ||||
|               url: string; | ||||
|             } ; | ||||
|           } ; | ||||
|         } ; | ||||
|       } ; | ||||
|             }; | ||||
|           }; | ||||
|         }; | ||||
|       }; | ||||
|     }>; | ||||
|   } ; | ||||
|   }; | ||||
| }; | ||||
|  | ||||
| @ -17,6 +17,8 @@ import { | ||||
|   GetLibraryItemsPreviewQueryVariables, | ||||
|   GetLibraryItemsSlugsQuery, | ||||
|   GetLibraryItemsSlugsQueryVariables, | ||||
|   GetWebsiteInterfaceQuery, | ||||
|   GetWebsiteInterfaceQueryVariables, | ||||
| } from "graphql/operations-types"; | ||||
| 
 | ||||
| const graphQL = async (query: string, variables?: string) => { | ||||
| @ -50,6 +52,13 @@ function getQueryFromOperations(queryName: string): string { | ||||
|   return lines.slice(startingIndex, endingIndex).join("\n"); | ||||
| } | ||||
| 
 | ||||
| export async function getWebsiteInterface( | ||||
|   variables: GetWebsiteInterfaceQueryVariables | ||||
| ): Promise<GetWebsiteInterfaceQuery> { | ||||
|   const query = getQueryFromOperations("getWebsiteInterface"); | ||||
|   return await graphQL(query, JSON.stringify(variables)); | ||||
| } | ||||
| 
 | ||||
| export async function getEras( | ||||
|   variables: GetErasQueryVariables | ||||
| ): Promise<GetErasQuery> { | ||||
|  | ||||
| @ -995,6 +995,26 @@ type ComponentTranslationsScanSet { | ||||
|   credits: ComponentBasicsCredits! | ||||
| } | ||||
| 
 | ||||
| input ComponentTranslationsSimpleTitleFiltersInput { | ||||
|   language: LanguageFiltersInput | ||||
|   title: StringFilterInput | ||||
|   and: [ComponentTranslationsSimpleTitleFiltersInput] | ||||
|   or: [ComponentTranslationsSimpleTitleFiltersInput] | ||||
|   not: ComponentTranslationsSimpleTitleFiltersInput | ||||
| } | ||||
| 
 | ||||
| input ComponentTranslationsSimpleTitleInput { | ||||
|   id: ID | ||||
|   language: ID | ||||
|   title: String | ||||
| } | ||||
| 
 | ||||
| type ComponentTranslationsSimpleTitle { | ||||
|   id: ID! | ||||
|   language: LanguageEntityResponse | ||||
|   title: String! | ||||
| } | ||||
| 
 | ||||
| enum ENUM_COMPONENTTRANSLATIONSTEXTSET_STATUS { | ||||
|   Incomplete | ||||
|   Draft | ||||
| @ -1225,10 +1245,16 @@ input AudioSubtypeFiltersInput { | ||||
| 
 | ||||
| input AudioSubtypeInput { | ||||
|   slug: String | ||||
|   titles: [ComponentTranslationsSimpleTitleInput] | ||||
| } | ||||
| 
 | ||||
| type AudioSubtype { | ||||
|   slug: String! | ||||
|   titles( | ||||
|     filters: ComponentTranslationsSimpleTitleFiltersInput | ||||
|     pagination: PaginationArg = {} | ||||
|     sort: [String] = [] | ||||
|   ): [ComponentTranslationsSimpleTitle] | ||||
|   createdAt: DateTime | ||||
|   updatedAt: DateTime | ||||
| } | ||||
| @ -1481,10 +1507,16 @@ input ContentTypeFiltersInput { | ||||
| 
 | ||||
| input ContentTypeInput { | ||||
|   slug: String | ||||
|   titles: [ComponentTranslationsSimpleTitleInput] | ||||
| } | ||||
| 
 | ||||
| type ContentType { | ||||
|   slug: String! | ||||
|   titles( | ||||
|     filters: ComponentTranslationsSimpleTitleFiltersInput | ||||
|     pagination: PaginationArg = {} | ||||
|     sort: [String] = [] | ||||
|   ): [ComponentTranslationsSimpleTitle] | ||||
|   createdAt: DateTime | ||||
|   updatedAt: DateTime | ||||
| } | ||||
| @ -1711,7 +1743,6 @@ union LibraryItemMetadataDynamicZone = | ||||
|   | ComponentMetadataVideo | ||||
|   | ComponentMetadataGame | ||||
|   | ComponentMetadataAudio | ||||
|   | ComponentMetadataMerch | ||||
|   | ComponentMetadataOther | ||||
|   | Error | ||||
| 
 | ||||
| @ -1725,8 +1756,10 @@ input LibraryItemFiltersInput { | ||||
|   subitems: LibraryItemFiltersInput | ||||
|   subitem_of: LibraryItemFiltersInput | ||||
|   root_item: BooleanFilterInput | ||||
|   variants: LibraryVariantFiltersInput | ||||
|   contents: RangedContentFiltersInput | ||||
|   digital: BooleanFilterInput | ||||
|   primary: BooleanFilterInput | ||||
|   submerchs: MerchItemFiltersInput | ||||
|   createdAt: DateTimeFilterInput | ||||
|   updatedAt: DateTimeFilterInput | ||||
|   and: [LibraryItemFiltersInput] | ||||
| @ -1743,7 +1776,6 @@ input LibraryItemInput { | ||||
|   subitem_of: [ID] | ||||
|   root_item: Boolean | ||||
|   price: ComponentBasicsPriceInput | ||||
|   variants: ID | ||||
|   metadata: [LibraryItemMetadataDynamicZoneInput!] | ||||
|   size: ComponentBasicsSizeInput | ||||
|   release_date: ComponentBasicsDatepickerInput | ||||
| @ -1751,6 +1783,9 @@ input LibraryItemInput { | ||||
|   gallery: [ID] | ||||
|   contents: [ID] | ||||
|   images: ComponentCollectionsComponentLibraryImagesInput | ||||
|   digital: Boolean | ||||
|   primary: Boolean | ||||
|   submerchs: [ID] | ||||
| } | ||||
| 
 | ||||
| type LibraryItem { | ||||
| @ -1770,7 +1805,6 @@ type LibraryItem { | ||||
|   ): LibraryItemRelationResponseCollection | ||||
|   root_item: Boolean! | ||||
|   price: ComponentBasicsPrice | ||||
|   variants: LibraryVariantEntityResponse | ||||
|   metadata: [LibraryItemMetadataDynamicZone] | ||||
|   size: ComponentBasicsSize | ||||
|   release_date: ComponentBasicsDatepicker | ||||
| @ -1790,6 +1824,13 @@ type LibraryItem { | ||||
|     sort: [String] = [] | ||||
|   ): RangedContentRelationResponseCollection | ||||
|   images: ComponentCollectionsComponentLibraryImages | ||||
|   digital: Boolean! | ||||
|   primary: Boolean! | ||||
|   submerchs( | ||||
|     filters: MerchItemFiltersInput | ||||
|     pagination: PaginationArg = {} | ||||
|     sort: [String] = [] | ||||
|   ): MerchItemRelationResponseCollection | ||||
|   createdAt: DateTime | ||||
|   updatedAt: DateTime | ||||
| } | ||||
| @ -1812,47 +1853,12 @@ type LibraryItemRelationResponseCollection { | ||||
|   data: [LibraryItemEntity!]! | ||||
| } | ||||
| 
 | ||||
| input LibraryVariantFiltersInput { | ||||
|   id: IDFilterInput | ||||
|   items: LibraryItemFiltersInput | ||||
|   createdAt: DateTimeFilterInput | ||||
|   updatedAt: DateTimeFilterInput | ||||
|   and: [LibraryVariantFiltersInput] | ||||
|   or: [LibraryVariantFiltersInput] | ||||
|   not: LibraryVariantFiltersInput | ||||
| } | ||||
| 
 | ||||
| input LibraryVariantInput { | ||||
|   items: [ID] | ||||
| } | ||||
| 
 | ||||
| type LibraryVariant { | ||||
|   items( | ||||
|     filters: LibraryItemFiltersInput | ||||
|     pagination: PaginationArg = {} | ||||
|     sort: [String] = [] | ||||
|   ): LibraryItemRelationResponseCollection | ||||
|   createdAt: DateTime | ||||
|   updatedAt: DateTime | ||||
| } | ||||
| 
 | ||||
| type LibraryVariantEntity { | ||||
|   id: ID | ||||
|   attributes: LibraryVariant | ||||
| } | ||||
| 
 | ||||
| type LibraryVariantEntityResponse { | ||||
|   data: LibraryVariantEntity | ||||
| } | ||||
| 
 | ||||
| type LibraryVariantEntityResponseCollection { | ||||
|   data: [LibraryVariantEntity!]! | ||||
|   meta: ResponseCollectionMeta! | ||||
| } | ||||
| 
 | ||||
| input MerchItemFiltersInput { | ||||
|   id: IDFilterInput | ||||
|   slug: StringFilterInput | ||||
|   library_items: LibraryItemFiltersInput | ||||
|   title: StringFilterInput | ||||
|   subtitle: StringFilterInput | ||||
|   createdAt: DateTimeFilterInput | ||||
|   updatedAt: DateTimeFilterInput | ||||
|   and: [MerchItemFiltersInput] | ||||
| @ -1862,10 +1868,22 @@ input MerchItemFiltersInput { | ||||
| 
 | ||||
| input MerchItemInput { | ||||
|   slug: String | ||||
|   library_items: [ID] | ||||
|   title: String | ||||
|   subtitle: String | ||||
|   thumbnail: ID | ||||
| } | ||||
| 
 | ||||
| type MerchItem { | ||||
|   slug: String! | ||||
|   library_items( | ||||
|     filters: LibraryItemFiltersInput | ||||
|     pagination: PaginationArg = {} | ||||
|     sort: [String] = [] | ||||
|   ): LibraryItemRelationResponseCollection | ||||
|   title: String! | ||||
|   subtitle: String | ||||
|   thumbnail: UploadFileEntityResponse | ||||
|   createdAt: DateTime | ||||
|   updatedAt: DateTime | ||||
| } | ||||
| @ -1884,6 +1902,10 @@ type MerchItemEntityResponseCollection { | ||||
|   meta: ResponseCollectionMeta! | ||||
| } | ||||
| 
 | ||||
| type MerchItemRelationResponseCollection { | ||||
|   data: [MerchItemEntity!]! | ||||
| } | ||||
| 
 | ||||
| input OtherSubtypeFiltersInput { | ||||
|   id: IDFilterInput | ||||
|   slug: StringFilterInput | ||||
| @ -1896,10 +1918,16 @@ input OtherSubtypeFiltersInput { | ||||
| 
 | ||||
| input OtherSubtypeInput { | ||||
|   slug: String | ||||
|   titles: [ComponentTranslationsSimpleTitleInput] | ||||
| } | ||||
| 
 | ||||
| type OtherSubtype { | ||||
|   slug: String! | ||||
|   titles( | ||||
|     filters: ComponentTranslationsSimpleTitleFiltersInput | ||||
|     pagination: PaginationArg = {} | ||||
|     sort: [String] = [] | ||||
|   ): [ComponentTranslationsSimpleTitle] | ||||
|   createdAt: DateTime | ||||
|   updatedAt: DateTime | ||||
| } | ||||
| @ -2137,10 +2165,16 @@ input TextualSubtypeFiltersInput { | ||||
| 
 | ||||
| input TextualSubtypeInput { | ||||
|   slug: String | ||||
|   titles: [ComponentTranslationsSimpleTitleInput] | ||||
| } | ||||
| 
 | ||||
| type TextualSubtype { | ||||
|   slug: String! | ||||
|   titles( | ||||
|     filters: ComponentTranslationsSimpleTitleFiltersInput | ||||
|     pagination: PaginationArg = {} | ||||
|     sort: [String] = [] | ||||
|   ): [ComponentTranslationsSimpleTitle] | ||||
|   createdAt: DateTime | ||||
|   updatedAt: DateTime | ||||
| } | ||||
| @ -2298,6 +2332,172 @@ type WeaponStoryTypeEntityResponseCollection { | ||||
|   meta: ResponseCollectionMeta! | ||||
| } | ||||
| 
 | ||||
| input WebsiteInterfaceFiltersInput { | ||||
|   id: IDFilterInput | ||||
|   language: LanguageFiltersInput | ||||
|   main_library: StringFilterInput | ||||
|   main_library_description: StringFilterInput | ||||
|   main_hub: StringFilterInput | ||||
|   main_hub_description: StringFilterInput | ||||
|   main_chronology: StringFilterInput | ||||
|   main_chronology_description: StringFilterInput | ||||
|   main_news: StringFilterInput | ||||
|   main_data: StringFilterInput | ||||
|   main_merch: StringFilterInput | ||||
|   main_gallery: StringFilterInput | ||||
|   main_archives: StringFilterInput | ||||
|   main_about_us: StringFilterInput | ||||
|   main_licensing: StringFilterInput | ||||
|   main_copyright: StringFilterInput | ||||
|   library_description: StringFilterInput | ||||
|   library_item_summary: StringFilterInput | ||||
|   library_item_gallery: StringFilterInput | ||||
|   library_item_details: StringFilterInput | ||||
|   library_item_subitems: StringFilterInput | ||||
|   library_item_variants: StringFilterInput | ||||
|   library_item_content: StringFilterInput | ||||
|   global_return_label: StringFilterInput | ||||
|   global_subitem_of: StringFilterInput | ||||
|   global_type: StringFilterInput | ||||
|   global_width: StringFilterInput | ||||
|   global_height: StringFilterInput | ||||
|   global_thickness: StringFilterInput | ||||
|   global_binding: StringFilterInput | ||||
|   global_language: StringFilterInput | ||||
|   global_languages: StringFilterInput | ||||
|   global_page: StringFilterInput | ||||
|   global_pages: StringFilterInput | ||||
|   global_page_order: StringFilterInput | ||||
|   global_release_date: StringFilterInput | ||||
|   global_price: StringFilterInput | ||||
|   library_item_physical_size: StringFilterInput | ||||
|   library_item_type_information: StringFilterInput | ||||
|   chronology_description: StringFilterInput | ||||
|   chronology_timelines: StringFilterInput | ||||
|   chronology_timelines_description: StringFilterInput | ||||
|   chronology_overview: StringFilterInput | ||||
|   chronology_overview_description: StringFilterInput | ||||
|   chronology_walkthrough: StringFilterInput | ||||
|   chronology_walkthrough_description: StringFilterInput | ||||
|   createdAt: DateTimeFilterInput | ||||
|   updatedAt: DateTimeFilterInput | ||||
|   and: [WebsiteInterfaceFiltersInput] | ||||
|   or: [WebsiteInterfaceFiltersInput] | ||||
|   not: WebsiteInterfaceFiltersInput | ||||
| } | ||||
| 
 | ||||
| input WebsiteInterfaceInput { | ||||
|   language: ID | ||||
|   main_library: String | ||||
|   main_library_description: String | ||||
|   main_hub: String | ||||
|   main_hub_description: String | ||||
|   main_chronology: String | ||||
|   main_chronology_description: String | ||||
|   main_news: String | ||||
|   main_data: String | ||||
|   main_merch: String | ||||
|   main_gallery: String | ||||
|   main_archives: String | ||||
|   main_about_us: String | ||||
|   main_licensing: String | ||||
|   main_copyright: String | ||||
|   library_description: String | ||||
|   library_item_summary: String | ||||
|   library_item_gallery: String | ||||
|   library_item_details: String | ||||
|   library_item_subitems: String | ||||
|   library_item_variants: String | ||||
|   library_item_content: String | ||||
|   global_return_label: String | ||||
|   global_subitem_of: String | ||||
|   global_type: String | ||||
|   global_width: String | ||||
|   global_height: String | ||||
|   global_thickness: String | ||||
|   global_binding: String | ||||
|   global_language: String | ||||
|   global_languages: String | ||||
|   global_page: String | ||||
|   global_pages: String | ||||
|   global_page_order: String | ||||
|   global_release_date: String | ||||
|   global_price: String | ||||
|   library_item_physical_size: String | ||||
|   library_item_type_information: String | ||||
|   chronology_description: String | ||||
|   chronology_timelines: String | ||||
|   chronology_timelines_description: String | ||||
|   chronology_overview: String | ||||
|   chronology_overview_description: String | ||||
|   chronology_walkthrough: String | ||||
|   chronology_walkthrough_description: String | ||||
| } | ||||
| 
 | ||||
| type WebsiteInterface { | ||||
|   language: LanguageEntityResponse | ||||
|   main_library: String | ||||
|   main_library_description: String | ||||
|   main_hub: String | ||||
|   main_hub_description: String | ||||
|   main_chronology: String | ||||
|   main_chronology_description: String | ||||
|   main_news: String | ||||
|   main_data: String | ||||
|   main_merch: String | ||||
|   main_gallery: String | ||||
|   main_archives: String | ||||
|   main_about_us: String | ||||
|   main_licensing: String | ||||
|   main_copyright: String | ||||
|   library_description: String | ||||
|   library_item_summary: String | ||||
|   library_item_gallery: String | ||||
|   library_item_details: String | ||||
|   library_item_subitems: String | ||||
|   library_item_variants: String | ||||
|   library_item_content: String | ||||
|   global_return_label: String | ||||
|   global_subitem_of: String | ||||
|   global_type: String | ||||
|   global_width: String | ||||
|   global_height: String | ||||
|   global_thickness: String | ||||
|   global_binding: String | ||||
|   global_language: String | ||||
|   global_languages: String | ||||
|   global_page: String | ||||
|   global_pages: String | ||||
|   global_page_order: String | ||||
|   global_release_date: String | ||||
|   global_price: String | ||||
|   library_item_physical_size: String | ||||
|   library_item_type_information: String | ||||
|   chronology_description: String | ||||
|   chronology_timelines: String | ||||
|   chronology_timelines_description: String | ||||
|   chronology_overview: String | ||||
|   chronology_overview_description: String | ||||
|   chronology_walkthrough: String | ||||
|   chronology_walkthrough_description: String | ||||
|   createdAt: DateTime | ||||
|   updatedAt: DateTime | ||||
| } | ||||
| 
 | ||||
| type WebsiteInterfaceEntity { | ||||
|   id: ID | ||||
|   attributes: WebsiteInterface | ||||
| } | ||||
| 
 | ||||
| type WebsiteInterfaceEntityResponse { | ||||
|   data: WebsiteInterfaceEntity | ||||
| } | ||||
| 
 | ||||
| type WebsiteInterfaceEntityResponseCollection { | ||||
|   data: [WebsiteInterfaceEntity!]! | ||||
|   meta: ResponseCollectionMeta! | ||||
| } | ||||
| 
 | ||||
| union GenericMorph = | ||||
|     ComponentBasicsCredits | ||||
|   | ComponentBasicsDatepicker | ||||
| @ -2340,6 +2540,7 @@ union GenericMorph = | ||||
|   | ComponentTranslationsLibraryItems | ||||
|   | ComponentTranslationsPosts | ||||
|   | ComponentTranslationsScanSet | ||||
|   | ComponentTranslationsSimpleTitle | ||||
|   | ComponentTranslationsTextSet | ||||
|   | ComponentTranslationsTitle | ||||
|   | ComponentTranslationsVideoSets | ||||
| @ -2359,7 +2560,6 @@ union GenericMorph = | ||||
|   | GlossaryItemType | ||||
|   | Language | ||||
|   | LibraryItem | ||||
|   | LibraryVariant | ||||
|   | MerchItem | ||||
|   | OtherSubtype | ||||
|   | Post | ||||
| @ -2370,6 +2570,7 @@ union GenericMorph = | ||||
|   | WeaponStory | ||||
|   | WeaponStoryGroup | ||||
|   | WeaponStoryType | ||||
|   | WebsiteInterface | ||||
| 
 | ||||
| input FileInfoInput { | ||||
|   name: String | ||||
| @ -2463,12 +2664,6 @@ type Query { | ||||
|     pagination: PaginationArg = {} | ||||
|     sort: [String] = [] | ||||
|   ): LibraryItemEntityResponseCollection | ||||
|   libraryVariant(id: ID): LibraryVariantEntityResponse | ||||
|   libraryVariants( | ||||
|     filters: LibraryVariantFiltersInput | ||||
|     pagination: PaginationArg = {} | ||||
|     sort: [String] = [] | ||||
|   ): LibraryVariantEntityResponseCollection | ||||
|   merchItem(id: ID): MerchItemEntityResponse | ||||
|   merchItems( | ||||
|     filters: MerchItemFiltersInput | ||||
| @ -2530,6 +2725,12 @@ type Query { | ||||
|     pagination: PaginationArg = {} | ||||
|     sort: [String] = [] | ||||
|   ): WeaponStoryTypeEntityResponseCollection | ||||
|   websiteInterface(id: ID): WebsiteInterfaceEntityResponse | ||||
|   websiteInterfaces( | ||||
|     filters: WebsiteInterfaceFiltersInput | ||||
|     pagination: PaginationArg = {} | ||||
|     sort: [String] = [] | ||||
|   ): WebsiteInterfaceEntityResponseCollection | ||||
| } | ||||
| 
 | ||||
| type Mutation { | ||||
| @ -2592,12 +2793,6 @@ type Mutation { | ||||
|   createLibraryItem(data: LibraryItemInput!): LibraryItemEntityResponse | ||||
|   updateLibraryItem(id: ID!, data: LibraryItemInput!): LibraryItemEntityResponse | ||||
|   deleteLibraryItem(id: ID!): LibraryItemEntityResponse | ||||
|   createLibraryVariant(data: LibraryVariantInput!): LibraryVariantEntityResponse | ||||
|   updateLibraryVariant( | ||||
|     id: ID! | ||||
|     data: LibraryVariantInput! | ||||
|   ): LibraryVariantEntityResponse | ||||
|   deleteLibraryVariant(id: ID!): LibraryVariantEntityResponse | ||||
|   createMerchItem(data: MerchItemInput!): MerchItemEntityResponse | ||||
|   updateMerchItem(id: ID!, data: MerchItemInput!): MerchItemEntityResponse | ||||
|   deleteMerchItem(id: ID!): MerchItemEntityResponse | ||||
| @ -2647,6 +2842,14 @@ type Mutation { | ||||
|     data: WeaponStoryTypeInput! | ||||
|   ): WeaponStoryTypeEntityResponse | ||||
|   deleteWeaponStoryType(id: ID!): WeaponStoryTypeEntityResponse | ||||
|   createWebsiteInterface( | ||||
|     data: WebsiteInterfaceInput! | ||||
|   ): WebsiteInterfaceEntityResponse | ||||
|   updateWebsiteInterface( | ||||
|     id: ID! | ||||
|     data: WebsiteInterfaceInput! | ||||
|   ): WebsiteInterfaceEntityResponse | ||||
|   deleteWebsiteInterface(id: ID!): WebsiteInterfaceEntityResponse | ||||
|   upload( | ||||
|     refId: ID | ||||
|     ref: String | ||||
|  | ||||
| @ -2,18 +2,28 @@ import Link from "next/link"; | ||||
| import ContentPanel from "components/Panels/ContentPanel"; | ||||
| import { applyCustomAppProps } from "./_app"; | ||||
| import Head from "next/head"; | ||||
| import { getWebsiteInterface } from "graphql/operations"; | ||||
| import { GetStaticProps } from "next"; | ||||
| import { GetWebsiteInterfaceQuery } from "graphql/operations-types"; | ||||
| import MainPanel from "components/Panels/MainPanel"; | ||||
| 
 | ||||
| applyCustomAppProps(FourOhFour, { | ||||
|   useSubPanel: false, | ||||
|   useContentPanel: true, | ||||
| }); | ||||
| 
 | ||||
| export default function FourOhFour(): JSX.Element { | ||||
| type Props = { | ||||
|   langui: GetWebsiteInterfaceQuery; | ||||
| }; | ||||
| 
 | ||||
| export default function FourOhFour(props: Props): JSX.Element { | ||||
|   const langui = props.langui.websiteInterfaces.data[0].attributes; | ||||
|   return ( | ||||
|     <> | ||||
|       <Head> | ||||
|         <title>Accord’s Library - 404</title> | ||||
|       </Head> | ||||
|       <MainPanel langui={langui} /> | ||||
|       <ContentPanel> | ||||
|         <h1>404 - Page Not Found</h1> | ||||
|         <Link href="/"> | ||||
| @ -23,3 +33,17 @@ export default function FourOhFour(): JSX.Element { | ||||
|     </> | ||||
|   ); | ||||
| } | ||||
| 
 | ||||
| export const getStaticProps: GetStaticProps = async (context) => { | ||||
|   if (context.locale) { | ||||
|     const props: Props = { | ||||
|       langui: await getWebsiteInterface({ | ||||
|         language_code: context.locale, | ||||
|       }), | ||||
|     }; | ||||
|     return { | ||||
|       props: props, | ||||
|     }; | ||||
|   } | ||||
|   return { props: {} }; | ||||
| }; | ||||
|  | ||||
| @ -31,7 +31,6 @@ export default function AccordsLibraryApp(appProps: AppProps) { | ||||
|           : "grid grid-cols-[20rem]" | ||||
|       } | ||||
|     > | ||||
|       <MainPanel /> | ||||
|       <appProps.Component {...appProps.pageProps} /> | ||||
|     </div> | ||||
|   ); | ||||
|  | ||||
| @ -2,43 +2,67 @@ import SubPanel from "components/Panels/SubPanel"; | ||||
| import NavOption from "components/PanelComponents/NavOption"; | ||||
| import { applyCustomAppProps } from "pages/_app"; | ||||
| import PanelHeader from "components/PanelComponents/PanelHeader"; | ||||
| import MainPanel from "components/Panels/MainPanel"; | ||||
| import { GetWebsiteInterfaceQuery } from "graphql/operations-types"; | ||||
| import { GetStaticProps } from "next"; | ||||
| import { getWebsiteInterface } from "graphql/operations"; | ||||
| 
 | ||||
| applyCustomAppProps(Chronology, { | ||||
|   useSubPanel: true, | ||||
|   useContentPanel: false, | ||||
| }); | ||||
| 
 | ||||
| export default function Chronology(): JSX.Element { | ||||
| type Props = { | ||||
|   langui: GetWebsiteInterfaceQuery; | ||||
| }; | ||||
| 
 | ||||
| export default function Chronology(props: Props): JSX.Element { | ||||
|   const langui = props.langui.websiteInterfaces.data[0].attributes; | ||||
|   return ( | ||||
|     <> | ||||
|       <MainPanel langui={langui} /> | ||||
|       <SubPanel> | ||||
|         <PanelHeader | ||||
|           icon="watch_later" | ||||
|           title="Chronology" | ||||
|           description="Follow all events in chronological order. Here we can write more about this section of the website, whatever we like in fact." | ||||
|           title={langui.main_chronology} | ||||
|           description={langui.chronology_description} | ||||
|         /> | ||||
| 
 | ||||
|         <NavOption | ||||
|           url="/chronology/timelines" | ||||
|           title="Timelines" | ||||
|           subtitle="Diagram of how the games connect to each other" | ||||
|           title={langui.chronology_timelines} | ||||
|           subtitle={langui.chronology_timelines_description} | ||||
|           border={true} | ||||
|         /> | ||||
| 
 | ||||
|         <NavOption | ||||
|           url="/chronology/overview" | ||||
|           title="Chronology Overview" | ||||
|           subtitle="List of all the events from the main timeline" | ||||
|           title={langui.chronology_overview} | ||||
|           subtitle={langui.chronology_overview_description} | ||||
|           border={true} | ||||
|         /> | ||||
| 
 | ||||
|         <NavOption | ||||
|           url="/chronology/walkthrough" | ||||
|           title="Chronology Walkthrough" | ||||
|           subtitle="Chronological exploration of the lore and stories" | ||||
|           title={langui.chronology_walkthrough} | ||||
|           subtitle={langui.chronology_walkthrough_description} | ||||
|           border={true} | ||||
|         /> | ||||
|       </SubPanel> | ||||
|     </> | ||||
|   ); | ||||
| } | ||||
| 
 | ||||
| export const getStaticProps: GetStaticProps = async (context) => { | ||||
|   if (context.locale) { | ||||
|     const props: Props = { | ||||
|       langui: await getWebsiteInterface({ | ||||
|         language_code: context.locale, | ||||
|       }), | ||||
|     }; | ||||
|     return { | ||||
|       props: props, | ||||
|     }; | ||||
|   } | ||||
|   return { props: {} }; | ||||
| }; | ||||
|  | ||||
| @ -6,15 +6,22 @@ import { applyCustomAppProps } from "pages/_app"; | ||||
| import { | ||||
|   GetChronologyItemsQuery, | ||||
|   GetErasQuery, | ||||
|   GetWebsiteInterfaceQuery, | ||||
| } from "graphql/operations-types"; | ||||
| import { getEras, getChronologyItems } from "graphql/operations"; | ||||
| import { | ||||
|   getEras, | ||||
|   getChronologyItems, | ||||
|   getWebsiteInterface, | ||||
| } from "graphql/operations"; | ||||
| import NavOption from "components/PanelComponents/NavOption"; | ||||
| import ReturnButton from "components/PanelComponents/ReturnButton"; | ||||
| import HorizontalLine from "components/HorizontalLine"; | ||||
| import MainPanel from "components/Panels/MainPanel"; | ||||
| 
 | ||||
| interface Props { | ||||
|   chronologyItems: GetChronologyItemsQuery; | ||||
|   chronologyEras: GetErasQuery; | ||||
|   langui: GetWebsiteInterfaceQuery; | ||||
| } | ||||
| 
 | ||||
| applyCustomAppProps(ChronologyOverview, { | ||||
| @ -24,7 +31,7 @@ applyCustomAppProps(ChronologyOverview, { | ||||
| 
 | ||||
| export default function ChronologyOverview(props: Props): JSX.Element { | ||||
|   // Group by year the Chronology items
 | ||||
| 
 | ||||
|   const langui = props.langui.websiteInterfaces.data[0].attributes; | ||||
|   let chronologyItemYearGroups: GetChronologyItemsQuery["chronologyItems"]["data"][number][][] = | ||||
|     []; | ||||
| 
 | ||||
| @ -40,8 +47,9 @@ export default function ChronologyOverview(props: Props): JSX.Element { | ||||
| 
 | ||||
|   return ( | ||||
|     <> | ||||
|       <MainPanel langui={langui} /> | ||||
|       <SubPanel> | ||||
|         <ReturnButton href="/chronology" title="Chronology" /> | ||||
|         <ReturnButton href="/chronology" title="Chronology" langui={langui} /> | ||||
|         <HorizontalLine /> | ||||
| 
 | ||||
|         {props.chronologyEras.chronologyEras.data.map((era) => ( | ||||
| @ -75,16 +83,19 @@ export default function ChronologyOverview(props: Props): JSX.Element { | ||||
| } | ||||
| 
 | ||||
| export const getStaticProps: GetStaticProps = async (context) => { | ||||
|   if (context.locale) | ||||
|     return { | ||||
|       props: { | ||||
|         chronologyItems: await getChronologyItems({ | ||||
|           language_code: context.locale, | ||||
|         }), | ||||
|         chronologyEras: await getEras({ language_code: context.locale }), | ||||
|       }, | ||||
|   if (context.locale) { | ||||
|     const props: Props = { | ||||
|       chronologyItems: await getChronologyItems({ | ||||
|         language_code: context.locale, | ||||
|       }), | ||||
|       chronologyEras: await getEras({ language_code: context.locale }), | ||||
|       langui: await getWebsiteInterface({ | ||||
|         language_code: context.locale, | ||||
|       }), | ||||
|     }; | ||||
|     return { | ||||
|       props: props, | ||||
|     }; | ||||
|   else { | ||||
|     return { props: {} }; | ||||
|   } | ||||
|   return { props: {} }; | ||||
| }; | ||||
|  | ||||
| @ -1,16 +1,25 @@ | ||||
| import { GetStaticPaths, GetStaticProps } from "next"; | ||||
| import { applyCustomAppProps } from "pages/_app"; | ||||
| import { getContent, getContentsSlugs } from "graphql/operations"; | ||||
| import { GetContentQuery } from "graphql/operations-types"; | ||||
| import { | ||||
|   getContent, | ||||
|   getContentsSlugs, | ||||
|   getWebsiteInterface, | ||||
| } from "graphql/operations"; | ||||
| import { | ||||
|   GetContentQuery, | ||||
|   GetWebsiteInterfaceQuery, | ||||
| } from "graphql/operations-types"; | ||||
| import ContentPanel from "components/Panels/ContentPanel"; | ||||
| import Image from "next/image"; | ||||
| import { getAssetURL, prettySlug } from "queries/helpers"; | ||||
| import Button from "components/Button"; | ||||
| import HorizontalLine from "components/HorizontalLine"; | ||||
| import ThumbnailHeader from "components/Content/ThumbnailHeader"; | ||||
| import MainPanel from "components/Panels/MainPanel"; | ||||
| 
 | ||||
| type Props = { | ||||
|   content: GetContentQuery; | ||||
|   langui: GetWebsiteInterfaceQuery; | ||||
| }; | ||||
| 
 | ||||
| applyCustomAppProps(Library, { | ||||
| @ -20,9 +29,11 @@ applyCustomAppProps(Library, { | ||||
| 
 | ||||
| export default function Library(props: Props): JSX.Element { | ||||
|   const content = props.content.contents.data[0].attributes; | ||||
|   const langui = props.langui.websiteInterfaces.data[0].attributes; | ||||
| 
 | ||||
|   return ( | ||||
|     <> | ||||
|       <MainPanel langui={langui} /> | ||||
|       <ContentPanel> | ||||
|         <div className="grid place-items-center"> | ||||
|           <ThumbnailHeader content={content} /> | ||||
| @ -63,30 +74,38 @@ export const getStaticProps: GetStaticProps = async (context) => { | ||||
|     if (context.params.slug && context.locale) { | ||||
|       if (context.params.slug instanceof Array) | ||||
|         context.params.slug = context.params.slug.join(""); | ||||
| 
 | ||||
|       const props: Props = { | ||||
|         content: await getContent({ | ||||
|           slug: context.params.slug, | ||||
|           language_code: context.locale, | ||||
|         }), | ||||
|         langui: await getWebsiteInterface({ | ||||
|           language_code: context.locale, | ||||
|         }), | ||||
|       }; | ||||
|       return { | ||||
|         props: { | ||||
|           content: await getContent({ | ||||
|             slug: context.params.slug, | ||||
|             language_code: context.locale, | ||||
|           }), | ||||
|         }, | ||||
|         props: props, | ||||
|       }; | ||||
|     } | ||||
|   } | ||||
|   return { props: {} }; | ||||
| }; | ||||
| 
 | ||||
| export const getStaticPaths: GetStaticPaths = async () => { | ||||
| export const getStaticPaths: GetStaticPaths = async (context) => { | ||||
|   type Path = { | ||||
|     params: { | ||||
|       slug: string; | ||||
|     }; | ||||
|     locale: string; | ||||
|   }; | ||||
| 
 | ||||
|   const data = await getContentsSlugs({}); | ||||
|   const paths: Path[] = []; | ||||
|   data.contents.data.map((item) => { | ||||
|     paths.push({ params: { slug: item.attributes.slug } }); | ||||
|     context.locales?.map((local) => { | ||||
|       paths.push({ params: { slug: item.attributes.slug }, locale: local }); | ||||
|     }); | ||||
|   }); | ||||
|   return { | ||||
|     paths, | ||||
|  | ||||
| @ -1,7 +1,14 @@ | ||||
| import { GetStaticPaths, GetStaticProps } from "next"; | ||||
| import { applyCustomAppProps } from "pages/_app"; | ||||
| import { getContentsSlugs, getContentText } from "graphql/operations"; | ||||
| import { GetContentTextQuery } from "graphql/operations-types"; | ||||
| import { | ||||
|   getContentsSlugs, | ||||
|   getContentText, | ||||
|   getWebsiteInterface, | ||||
| } from "graphql/operations"; | ||||
| import { | ||||
|   GetContentTextQuery, | ||||
|   GetWebsiteInterfaceQuery, | ||||
| } from "graphql/operations-types"; | ||||
| import ContentPanel from "components/Panels/ContentPanel"; | ||||
| import Image from "next/image"; | ||||
| import { getAssetURL, prettySlug } from "queries/helpers"; | ||||
| @ -12,9 +19,11 @@ import SubPanel from "components/Panels/SubPanel"; | ||||
| import ReturnButton from "components/PanelComponents/ReturnButton"; | ||||
| import SceneBreak from "components/Markdown/SceneBreak"; | ||||
| import ThumbnailHeader from "components/Content/ThumbnailHeader"; | ||||
| import MainPanel from "components/Panels/MainPanel"; | ||||
| 
 | ||||
| type Props = { | ||||
|   content: GetContentTextQuery; | ||||
|   langui: GetWebsiteInterfaceQuery; | ||||
| }; | ||||
| 
 | ||||
| applyCustomAppProps(Library, { | ||||
| @ -24,11 +33,13 @@ applyCustomAppProps(Library, { | ||||
| 
 | ||||
| export default function Library(props: Props): JSX.Element { | ||||
|   const content = props.content.contents.data[0].attributes; | ||||
|   const langui = props.langui.websiteInterfaces.data[0].attributes; | ||||
| 
 | ||||
|   return ( | ||||
|     <> | ||||
|       <MainPanel langui={langui} /> | ||||
|       <SubPanel> | ||||
|         <ReturnButton href={`/content/${content.slug}`} title="Content" /> | ||||
|         <ReturnButton href={`/content/${content.slug}`} title={"Content"} langui={langui} /> | ||||
|       </SubPanel> | ||||
|       <ContentPanel> | ||||
|         <div className="grid place-items-center"> | ||||
| @ -54,33 +65,41 @@ export default function Library(props: Props): JSX.Element { | ||||
| 
 | ||||
| export const getStaticProps: GetStaticProps = async (context) => { | ||||
|   if (context.params) { | ||||
|     if (context.params.slug instanceof Array) | ||||
|       context.params.slug = context.params.slug.join(""); | ||||
|     if (context.params.slug && context.locale) { | ||||
|       if (context.params.slug instanceof Array) | ||||
|         context.params.slug = context.params.slug.join(""); | ||||
| 
 | ||||
|       const props: Props = { | ||||
|         content: await getContentText({ | ||||
|           slug: context.params.slug, | ||||
|           language_code: context.locale, | ||||
|         }), | ||||
|         langui: await getWebsiteInterface({ | ||||
|           language_code: context.locale, | ||||
|         }), | ||||
|       }; | ||||
|       return { | ||||
|         props: { | ||||
|           content: await getContentText({ | ||||
|             slug: context.params.slug, | ||||
|             language_code: context.locale, | ||||
|           }), | ||||
|         }, | ||||
|         props: props, | ||||
|       }; | ||||
|     } | ||||
|   } | ||||
|   return { props: {} }; | ||||
| }; | ||||
| 
 | ||||
| export const getStaticPaths: GetStaticPaths = async () => { | ||||
| export const getStaticPaths: GetStaticPaths = async (context) => { | ||||
|   type Path = { | ||||
|     params: { | ||||
|       slug: string; | ||||
|     }; | ||||
|     locale: string; | ||||
|   }; | ||||
| 
 | ||||
|   const data = await getContentsSlugs({}); | ||||
|   const paths: Path[] = []; | ||||
|   data.contents.data.map((item) => { | ||||
|     paths.push({ params: { slug: item.attributes.slug } }); | ||||
|     context.locales?.map((local) => { | ||||
|       paths.push({ params: { slug: item.attributes.slug }, locale: local }); | ||||
|     }); | ||||
|   }); | ||||
|   return { | ||||
|     paths, | ||||
|  | ||||
| @ -1,13 +1,23 @@ | ||||
| import MainPanel from "components/Panels/MainPanel"; | ||||
| import { getWebsiteInterface } from "graphql/operations"; | ||||
| import { GetWebsiteInterfaceQuery } from "graphql/operations-types"; | ||||
| import { GetStaticProps } from "next"; | ||||
| import { applyCustomAppProps } from "pages/_app"; | ||||
| 
 | ||||
| applyCustomAppProps(Chronology, { | ||||
| applyCustomAppProps(Gallery, { | ||||
|   useSubPanel: false, | ||||
|   useContentPanel: true, | ||||
| }); | ||||
| 
 | ||||
| export default function Chronology(): JSX.Element { | ||||
| type Props = { | ||||
|   langui: GetWebsiteInterfaceQuery; | ||||
| }; | ||||
| 
 | ||||
| export default function Gallery(props: Props): JSX.Element { | ||||
|   const langui = props.langui.websiteInterfaces.data[0].attributes; | ||||
|   return ( | ||||
|     <> | ||||
|       <MainPanel langui={langui} /> | ||||
|       <iframe | ||||
|         className="w-full h-screen" | ||||
|         src="https://gallery.accords-library.com/posts" | ||||
| @ -15,3 +25,17 @@ export default function Chronology(): JSX.Element { | ||||
|     </> | ||||
|   ); | ||||
| } | ||||
| 
 | ||||
| export const getStaticProps: GetStaticProps = async (context) => { | ||||
|   if (context.locale) { | ||||
|     const props: Props = { | ||||
|       langui: await getWebsiteInterface({ | ||||
|         language_code: context.locale, | ||||
|       }), | ||||
|     }; | ||||
|     return { | ||||
|       props: props, | ||||
|     }; | ||||
|   } | ||||
|   return { props: {} }; | ||||
| }; | ||||
|  | ||||
| @ -1,4 +1,8 @@ | ||||
| import ContentPanel from "components/Panels/ContentPanel"; | ||||
| import MainPanel from "components/Panels/MainPanel"; | ||||
| import { getWebsiteInterface } from "graphql/operations"; | ||||
| import { GetWebsiteInterfaceQuery } from "graphql/operations-types"; | ||||
| import { GetStaticProps } from "next"; | ||||
| import Head from "next/head"; | ||||
| import { applyCustomAppProps } from "./_app"; | ||||
| 
 | ||||
| @ -7,12 +11,20 @@ applyCustomAppProps(Home, { | ||||
|   useContentPanel: true, | ||||
| }); | ||||
| 
 | ||||
| export default function Home(): JSX.Element { | ||||
| type Props = { | ||||
|   langui: GetWebsiteInterfaceQuery; | ||||
| }; | ||||
| 
 | ||||
| export default function Home(props: Props): JSX.Element { | ||||
|   const langui = props.langui.websiteInterfaces.data[0].attributes; | ||||
|   return ( | ||||
|     <> | ||||
|       <Head> | ||||
|         <title>Accord’s Library - Home</title> | ||||
|       </Head> | ||||
| 
 | ||||
|       <MainPanel langui={langui} /> | ||||
| 
 | ||||
|       <ContentPanel autoformat={true}> | ||||
|         <h2>Discover • Analyse • Translate • Archive</h2> | ||||
|         <h2>What is this?</h2> | ||||
| @ -139,3 +151,18 @@ export default function Home(): JSX.Element { | ||||
|     </> | ||||
|   ); | ||||
| } | ||||
| 
 | ||||
| export const getStaticProps: GetStaticProps = async (context) => { | ||||
|   if (context.locale) { | ||||
|     const props: Props = { | ||||
|       langui: await getWebsiteInterface({ | ||||
|         language_code: context.locale, | ||||
|       }), | ||||
|     }; | ||||
|     return { | ||||
|       props: props, | ||||
|     }; | ||||
|   } else { | ||||
|     return { props: {} }; | ||||
|   } | ||||
| }; | ||||
|  | ||||
| @ -4,8 +4,15 @@ import ContentPanel, { | ||||
| import Image from "next/image"; | ||||
| import { GetStaticPaths, GetStaticProps } from "next"; | ||||
| import { applyCustomAppProps } from "pages/_app"; | ||||
| import { getLibraryItem, getLibraryItemsSlugs } from "graphql/operations"; | ||||
| import { GetLibraryItemQuery } from "graphql/operations-types"; | ||||
| import { | ||||
|   getLibraryItem, | ||||
|   getLibraryItemsSlugs, | ||||
|   getWebsiteInterface, | ||||
| } from "graphql/operations"; | ||||
| import { | ||||
|   GetLibraryItemQuery, | ||||
|   GetWebsiteInterfaceQuery, | ||||
| } from "graphql/operations-types"; | ||||
| import { | ||||
|   convertMmToInch, | ||||
|   getAssetURL, | ||||
| @ -21,9 +28,11 @@ import LibraryItemComponent from "components/Library/LibraryItemComponent"; | ||||
| import Chip from "components/Chip"; | ||||
| import Button from "components/Button"; | ||||
| import HorizontalLine from "components/HorizontalLine"; | ||||
| import MainPanel from "components/Panels/MainPanel"; | ||||
| 
 | ||||
| type Props = { | ||||
|   libraryItem: GetLibraryItemQuery; | ||||
|   langui: GetWebsiteInterfaceQuery; | ||||
| }; | ||||
| 
 | ||||
| applyCustomAppProps(Library, { | ||||
| @ -33,6 +42,7 @@ applyCustomAppProps(Library, { | ||||
| 
 | ||||
| export default function Library(props: Props): JSX.Element { | ||||
|   const item = props.libraryItem.libraryItems.data[0].attributes; | ||||
|   const langui = props.langui.websiteInterfaces.data[0].attributes; | ||||
| 
 | ||||
|   item.contents.data.sort((a, b) => { | ||||
|     if ( | ||||
| @ -49,28 +59,62 @@ export default function Library(props: Props): JSX.Element { | ||||
| 
 | ||||
|   return ( | ||||
|     <> | ||||
|       <MainPanel langui={langui} /> | ||||
|       <SubPanel> | ||||
|         <ReturnButton title="Library" href="/library" /> | ||||
|         <ReturnButton | ||||
|           title={langui.main_library} | ||||
|           href="/library" | ||||
|           langui={langui} | ||||
|         /> | ||||
|         <HorizontalLine /> | ||||
| 
 | ||||
|         <NavOption title="Summary" url="#summary" border={true} /> | ||||
|         <NavOption | ||||
|           title={langui.library_item_summary} | ||||
|           url="#summary" | ||||
|           border={true} | ||||
|         /> | ||||
| 
 | ||||
|         {item.gallery.data.length > 0 ? ( | ||||
|           <NavOption title="Gallery" url="#gallery" border={true} /> | ||||
|           <NavOption | ||||
|             title={langui.library_item_gallery} | ||||
|             url="#gallery" | ||||
|             border={true} | ||||
|           /> | ||||
|         ) : ( | ||||
|           "" | ||||
|         )} | ||||
| 
 | ||||
|         <NavOption title="Details" url="#details" border={true} /> | ||||
|         <NavOption | ||||
|           title={langui.library_item_details} | ||||
|           url="#details" | ||||
|           border={true} | ||||
|         /> | ||||
| 
 | ||||
|         {item.subitems.data.length > 0 ? ( | ||||
|           <NavOption title="Subitems" url="#subitems" border={true} /> | ||||
|           item.metadata[0].__typename === "ComponentMetadataOther" && | ||||
|           item.metadata[0].subtype.data.attributes.slug === "variant-set" ? ( | ||||
|             <NavOption | ||||
|               title={langui.library_item_variants} | ||||
|               url="#variants" | ||||
|               border={true} | ||||
|             /> | ||||
|           ) : ( | ||||
|             <NavOption | ||||
|               title={langui.library_item_subitems} | ||||
|               url="#subitems" | ||||
|               border={true} | ||||
|             /> | ||||
|           ) | ||||
|         ) : ( | ||||
|           "" | ||||
|         )} | ||||
| 
 | ||||
|         {item.contents.data.length > 0 ? ( | ||||
|           <NavOption title="Content" url="#content" border={true} /> | ||||
|           <NavOption | ||||
|             title={langui.library_item_content} | ||||
|             url="#content" | ||||
|             border={true} | ||||
|           /> | ||||
|         ) : ( | ||||
|           "" | ||||
|         )} | ||||
| @ -86,7 +130,7 @@ export default function Library(props: Props): JSX.Element { | ||||
|                 height={item.thumbnail.data.attributes.height} | ||||
|               /> | ||||
|             ) : ( | ||||
|               <div className="w-full aspect-[21/29.7]"></div> | ||||
|               <div className="w-full aspect-[21/29.7] bg-light rounded-xl"></div> | ||||
|             )} | ||||
|           </div> | ||||
| 
 | ||||
| @ -97,7 +141,7 @@ export default function Library(props: Props): JSX.Element { | ||||
|             <div className="w-[clamp(0px,100%,42rem)] grid place-items-center gap-8"> | ||||
|               {item.subitem_of.data.length > 0 ? ( | ||||
|                 <div className="grid place-items-center"> | ||||
|                   <p>Subitem of</p> | ||||
|                   <p>{langui.global_subitem_of}</p> | ||||
|                   <Button | ||||
|                     href={`/library/${item.subitem_of.data[0].attributes.slug}`} | ||||
|                   > | ||||
| @ -129,8 +173,8 @@ export default function Library(props: Props): JSX.Element { | ||||
| 
 | ||||
|           {item.gallery.data.length > 0 ? ( | ||||
|             <div id="gallery" className="grid place-items-center gap-8  w-full"> | ||||
|               <h2 className="text-2xl">Gallery</h2> | ||||
|               <div className="grid w-full gap-8 items-end grid-cols-[repeat(auto-fit,_minmax(15rem,1fr))]"> | ||||
|               <h2 className="text-2xl">{langui.library_item_gallery}</h2> | ||||
|               <div className="grid w-full gap-8 items-end grid-cols-[repeat(auto-fill,_minmax(15rem,1fr))]"> | ||||
|                 {item.gallery.data.map((galleryItem) => ( | ||||
|                   <div | ||||
|                     key={galleryItem.id} | ||||
| @ -159,11 +203,13 @@ export default function Library(props: Props): JSX.Element { | ||||
|             className="bg-mid w-full grid place-items-center p-8 rounded-2xl" | ||||
|           > | ||||
|             <div className="w-[clamp(0px,100%,42rem)] grid place-items gap-8"> | ||||
|               <h2 className="text-2xl text-center">Details</h2> | ||||
|               <h2 className="text-2xl text-center"> | ||||
|                 {langui.library_item_details} | ||||
|               </h2> | ||||
|               <div className="grid grid-flow-col w-full place-content-between"> | ||||
|                 {item.metadata.length > 0 ? ( | ||||
|                   <div className="grid place-items-center"> | ||||
|                     <h3 className="text-xl">Type</h3> | ||||
|                     <h3 className="text-xl">{langui.global_type}</h3> | ||||
|                     <Button> | ||||
|                       {item.metadata[0].__typename.substring( | ||||
|                         "ComponentMetadata".length | ||||
| @ -176,7 +222,7 @@ export default function Library(props: Props): JSX.Element { | ||||
| 
 | ||||
|                 {item.release_date ? ( | ||||
|                   <div className="grid place-items-center"> | ||||
|                     <h3 className="text-xl">Release date</h3> | ||||
|                     <h3 className="text-xl">{langui.global_release_date}</h3> | ||||
|                     <p>{prettyDate(item.release_date)}</p> | ||||
|                   </div> | ||||
|                 ) : ( | ||||
| @ -185,7 +231,7 @@ export default function Library(props: Props): JSX.Element { | ||||
| 
 | ||||
|                 {item.release_date ? ( | ||||
|                   <div className="grid place-items-center"> | ||||
|                     <h3 className="text-xl">Price</h3> | ||||
|                     <h3 className="text-xl">{langui.global_price}</h3> | ||||
|                     <p>{prettyPrice(item.price)}</p> | ||||
|                   </div> | ||||
|                 ) : ( | ||||
| @ -194,17 +240,19 @@ export default function Library(props: Props): JSX.Element { | ||||
|               </div> | ||||
|               {item.size ? ( | ||||
|                 <> | ||||
|                   <h3 className="text-xl">Physical Size</h3> | ||||
|                   <h3 className="text-xl"> | ||||
|                     {langui.library_item_physical_size} | ||||
|                   </h3> | ||||
|                   <div className="grid grid-flow-col w-full place-content-between"> | ||||
|                     <div className="grid place-items-start grid-flow-col gap-4"> | ||||
|                       <p className="font-bold">Width:</p> | ||||
|                       <p className="font-bold">{langui.global_width}:</p> | ||||
|                       <div> | ||||
|                         <p>{item.size.width} mm</p> | ||||
|                         <p>{convertMmToInch(item.size.width)} in</p> | ||||
|                       </div> | ||||
|                     </div> | ||||
|                     <div className="grid place-items-start grid-flow-col gap-4"> | ||||
|                       <p className="font-bold">Height:</p> | ||||
|                       <p className="font-bold">{langui.global_height}:</p> | ||||
|                       <div> | ||||
|                         <p>{item.size.height} mm</p> | ||||
|                         <p>{convertMmToInch(item.size.height)} in</p> | ||||
| @ -212,7 +260,7 @@ export default function Library(props: Props): JSX.Element { | ||||
|                     </div> | ||||
|                     {item.size.thickness ? ( | ||||
|                       <div className="grid place-items-start grid-flow-col gap-4"> | ||||
|                         <p className="font-bold">Thickness:</p> | ||||
|                         <p className="font-bold">{langui.global_thickness}:</p> | ||||
|                         <div> | ||||
|                           <p>{item.size.thickness} mm</p> | ||||
|                           <p>{convertMmToInch(item.size.thickness)} in</p> | ||||
| @ -229,37 +277,47 @@ export default function Library(props: Props): JSX.Element { | ||||
| 
 | ||||
|               {item.metadata.length > 0 ? ( | ||||
|                 <> | ||||
|                   <h3 className="text-xl">Type Information</h3> | ||||
|                   <h3 className="text-xl"> | ||||
|                     {langui.library_item_type_information} | ||||
|                   </h3> | ||||
|                   <div className="grid grid-cols-2 w-full place-content-between"> | ||||
|                     {item.metadata[0].__typename === | ||||
|                     "ComponentMetadataBooks" ? ( | ||||
|                       <> | ||||
|                         <div className="grid place-content-start grid-flow-col gap-4"> | ||||
|                           <p className="font-bold">Type:</p> | ||||
|                           <p className="font-bold">{langui.global_type}:</p> | ||||
|                           <Chip> | ||||
|                             {prettySlug( | ||||
|                               item.metadata[0].subtype.data.attributes.slug | ||||
|                             )} | ||||
|                             {item.metadata[0].subtype.data.attributes.titles | ||||
|                               .length > 0 | ||||
|                               ? item.metadata[0].subtype.data.attributes | ||||
|                                   .titles[0].title | ||||
|                               : prettySlug( | ||||
|                                   item.metadata[0].subtype.data.attributes.slug | ||||
|                                 )} | ||||
|                           </Chip> | ||||
|                         </div> | ||||
| 
 | ||||
|                         <div className="grid place-content-start grid-flow-col gap-4"> | ||||
|                           <p className="font-bold">Pages:</p> | ||||
|                           <p className="font-bold">{langui.global_pages}:</p> | ||||
|                           <p>{item.metadata[0].page_count}</p> | ||||
|                         </div> | ||||
| 
 | ||||
|                         <div className="grid place-content-start grid-flow-col gap-4"> | ||||
|                           <p className="font-bold">Binding:</p> | ||||
|                           <p className="font-bold">{langui.global_binding}:</p> | ||||
|                           <p>{item.metadata[0].binding_type}</p> | ||||
|                         </div> | ||||
| 
 | ||||
|                         <div className="grid place-content-start grid-flow-col gap-4"> | ||||
|                           <p className="font-bold">Page order:</p> | ||||
|                           <p className="font-bold"> | ||||
|                             {langui.global_page_order}: | ||||
|                           </p> | ||||
|                           <p>{prettySlug(item.metadata[0].page_order)}</p> | ||||
|                         </div> | ||||
| 
 | ||||
|                         <div className="grid place-content-start grid-flow-col gap-4"> | ||||
|                           <p className="font-bold">Languages:</p> | ||||
|                           <p className="font-bold"> | ||||
|                             {langui.global_languages}: | ||||
|                           </p> | ||||
|                           {item.metadata[0].languages.data.map((lang) => ( | ||||
|                             <p key={lang.attributes.code}> | ||||
|                               {lang.attributes.name} | ||||
| @ -276,18 +334,19 @@ export default function Library(props: Props): JSX.Element { | ||||
|                     ) : item.metadata[0].__typename === | ||||
|                       "ComponentMetadataGame" ? ( | ||||
|                       <></> | ||||
|                     ) : item.metadata[0].__typename === | ||||
|                       "ComponentMetadataMerch" ? ( | ||||
|                       <></> | ||||
|                     ) : item.metadata[0].__typename === | ||||
|                       "ComponentMetadataOther" ? ( | ||||
|                       <> | ||||
|                         <div className="grid place-content-start grid-flow-col gap-4"> | ||||
|                           <p className="font-bold">Type:</p> | ||||
|                           <p className="font-bold">{langui.global_type}:</p> | ||||
|                           <Chip> | ||||
|                             {prettySlug( | ||||
|                               item.metadata[0].subtype.data.attributes.slug | ||||
|                             )} | ||||
|                             {item.metadata[0].subtype.data.attributes.titles | ||||
|                               .length > 0 | ||||
|                               ? item.metadata[0].subtype.data.attributes | ||||
|                                   .titles[0].title | ||||
|                               : prettySlug( | ||||
|                                   item.metadata[0].subtype.data.attributes.slug | ||||
|                                 )} | ||||
|                           </Chip> | ||||
|                         </div> | ||||
|                       </> | ||||
| @ -303,24 +362,45 @@ export default function Library(props: Props): JSX.Element { | ||||
|           </div> | ||||
| 
 | ||||
|           {item.subitems.data.length > 0 ? ( | ||||
|             <div id="subitems" className="grid place-items-center gap-8 w-full"> | ||||
|               <h2 className="text-2xl">Subitems</h2> | ||||
|               <div className="grid gap-8 items-end grid-cols-[repeat(auto-fill,minmax(15rem,1fr))] w-full"> | ||||
|                 {item.subitems.data.map((subitem) => ( | ||||
|                   <LibraryItemComponent | ||||
|                     key={subitem.id} | ||||
|                     item={subitem.attributes} | ||||
|                   /> | ||||
|                 ))} | ||||
|             item.metadata[0].__typename === "ComponentMetadataOther" && | ||||
|             item.metadata[0].subtype.data.attributes.slug === "variant-set" ? ( | ||||
|               <div | ||||
|                 id="variants" | ||||
|                 className="grid place-items-center gap-8 w-full" | ||||
|               > | ||||
|                 <h2 className="text-2xl">{langui.library_item_variants}</h2> | ||||
|                 <div className="grid gap-8 items-end grid-cols-[repeat(auto-fill,minmax(15rem,1fr))] w-full"> | ||||
|                   {item.subitems.data.map((variant) => ( | ||||
|                     <LibraryItemComponent | ||||
|                       key={variant.id} | ||||
|                       item={variant.attributes} | ||||
|                     /> | ||||
|                   ))} | ||||
|                 </div> | ||||
|               </div> | ||||
|             </div> | ||||
|             ) : ( | ||||
|               <div | ||||
|                 id="subitems" | ||||
|                 className="grid place-items-center gap-8 w-full" | ||||
|               > | ||||
|                 <h2 className="text-2xl">{langui.library_item_subitems}</h2> | ||||
|                 <div className="grid gap-8 items-end grid-cols-[repeat(auto-fill,minmax(15rem,1fr))] w-full"> | ||||
|                   {item.subitems.data.map((subitem) => ( | ||||
|                     <LibraryItemComponent | ||||
|                       key={subitem.id} | ||||
|                       item={subitem.attributes} | ||||
|                     /> | ||||
|                   ))} | ||||
|                 </div> | ||||
|               </div> | ||||
|             ) | ||||
|           ) : ( | ||||
|             "" | ||||
|           )} | ||||
| 
 | ||||
|           {item.contents.data.length > 0 ? ( | ||||
|             <div id="content" className="w-full grid place-items-center gap-8"> | ||||
|               <h2 className="text-2xl">Content</h2> | ||||
|               <h2 className="text-2xl">{langui.library_item_content}</h2> | ||||
|               <div className="grid gap-4 w-full"> | ||||
|                 {item.contents.data.map((content) => ( | ||||
|                   <div | ||||
| @ -363,10 +443,14 @@ export default function Library(props: Props): JSX.Element { | ||||
|                       </p> | ||||
|                       {content.attributes.content.data ? ( | ||||
|                         <Chip className="place-self-end"> | ||||
|                           {prettySlug( | ||||
|                             content.attributes.content.data.attributes.type.data | ||||
|                               .attributes.slug | ||||
|                           )} | ||||
|                           {content.attributes.content.data.attributes.type.data | ||||
|                             .attributes.titles.length > 0 | ||||
|                             ? content.attributes.content.data.attributes.type | ||||
|                                 .data.attributes.titles[0].title | ||||
|                             : prettySlug( | ||||
|                                 content.attributes.content.data.attributes.type | ||||
|                                   .data.attributes.slug | ||||
|                               )} | ||||
|                         </Chip> | ||||
|                       ) : ( | ||||
|                         "" | ||||
| @ -420,31 +504,38 @@ export const getStaticProps: GetStaticProps = async (context) => { | ||||
|     if (context.params.slug && context.locale) { | ||||
|       if (context.params.slug instanceof Array) | ||||
|         context.params.slug = context.params.slug.join(""); | ||||
| 
 | ||||
|       const props: Props = { | ||||
|         libraryItem: await getLibraryItem({ | ||||
|           slug: context.params.slug, | ||||
|           language_code: context.locale, | ||||
|         }), | ||||
|         langui: await getWebsiteInterface({ | ||||
|           language_code: context.locale, | ||||
|         }), | ||||
|       }; | ||||
|       return { | ||||
|         props: { | ||||
|           libraryItem: await getLibraryItem({ | ||||
|             slug: context.params.slug, | ||||
|             language_code: context.locale, | ||||
|           }), | ||||
|         }, | ||||
|         props: props, | ||||
|       }; | ||||
|     } | ||||
|   } | ||||
|   return { props: {} }; | ||||
| }; | ||||
| 
 | ||||
| export const getStaticPaths: GetStaticPaths = async () => { | ||||
| export const getStaticPaths: GetStaticPaths = async (context) => { | ||||
|   type Path = { | ||||
|     params: { | ||||
|       slug: string; | ||||
|     }; | ||||
|     locale: string; | ||||
|   }; | ||||
| 
 | ||||
|   const data = await getLibraryItemsSlugs({}); | ||||
|   const paths: Path[] = []; | ||||
|   data.libraryItems.data.map((item) => { | ||||
|     console.log(item.attributes.slug); | ||||
|     paths.push({ params: { slug: item.attributes.slug } }); | ||||
|     context.locales?.map((local) => { | ||||
|       paths.push({ params: { slug: item.attributes.slug }, locale: local }); | ||||
|     }); | ||||
|   }); | ||||
|   return { | ||||
|     paths, | ||||
|  | ||||
| @ -5,12 +5,21 @@ import ContentPanel, { | ||||
| } from "components/Panels/ContentPanel"; | ||||
| import LibraryItemComponent from "components/Library/LibraryItemComponent"; | ||||
| import { applyCustomAppProps } from "pages/_app"; | ||||
| import { GetLibraryItemsPreviewQuery } from "graphql/operations-types"; | ||||
| import { getLibraryItemsPreview } from "graphql/operations"; | ||||
| import { | ||||
|   GetLibraryItemsPreviewQuery, | ||||
|   GetWebsiteInterfaceQuery, | ||||
| } from "graphql/operations-types"; | ||||
| import { | ||||
|   getLibraryItemsPreview, | ||||
|   getWebsiteInterface, | ||||
| } from "graphql/operations"; | ||||
| import PanelHeader from "components/PanelComponents/PanelHeader"; | ||||
| import MainPanel from "components/Panels/MainPanel"; | ||||
| import Head from "next/head"; | ||||
| 
 | ||||
| type Props = { | ||||
|   libraryItems: GetLibraryItemsPreviewQuery; | ||||
|   langui: GetWebsiteInterfaceQuery; | ||||
| }; | ||||
| 
 | ||||
| applyCustomAppProps(Library, { | ||||
| @ -19,13 +28,18 @@ applyCustomAppProps(Library, { | ||||
| }); | ||||
| 
 | ||||
| export default function Library(props: Props): JSX.Element { | ||||
|   const langui = props.langui.websiteInterfaces.data[0].attributes; | ||||
|   return ( | ||||
|     <> | ||||
|       <Head> | ||||
|         <title>Accord’s Library - Library</title> | ||||
|       </Head> | ||||
|       <MainPanel langui={langui} /> | ||||
|       <SubPanel> | ||||
|         <PanelHeader | ||||
|           icon="library_books" | ||||
|           title="Library" | ||||
|           description="A comprehensive list of all Yokoverse’s side materials (books, novellas, artbooks, stage plays, manga, drama CDs, and comics). For each, we provide photos and/or scans of the content, information about what it is, when and how it was released, size, initial price…" | ||||
|           title={langui.main_library} | ||||
|           description={langui.library_description} | ||||
|         /> | ||||
|       </SubPanel> | ||||
| 
 | ||||
| @ -41,15 +55,19 @@ export default function Library(props: Props): JSX.Element { | ||||
| } | ||||
| 
 | ||||
| export const getStaticProps: GetStaticProps = async (context) => { | ||||
|   if (context.locale) | ||||
|     return { | ||||
|       props: { | ||||
|         libraryItems: await getLibraryItemsPreview({ | ||||
|           language_code: context.locale, | ||||
|         }), | ||||
|       }, | ||||
|   if (context.locale) { | ||||
|     const props: Props = { | ||||
|       libraryItems: await getLibraryItemsPreview({ | ||||
|         language_code: context.locale, | ||||
|       }), | ||||
|       langui: await getWebsiteInterface({ | ||||
|         language_code: context.locale, | ||||
|       }), | ||||
|     }; | ||||
|   else { | ||||
|     return { | ||||
|       props: props, | ||||
|     }; | ||||
|   } else { | ||||
|     return { props: {} }; | ||||
|   } | ||||
| }; | ||||
|  | ||||
| @ -1,7 +1,4 @@ | ||||
| import { | ||||
|   GetLibraryItemQuery, | ||||
|   GetLibraryItemsPreviewQuery, | ||||
| } from "graphql/operations-types"; | ||||
| import { GetLibraryItemsPreviewQuery } from "graphql/operations-types"; | ||||
| 
 | ||||
| export function getAssetURL(url: string): string { | ||||
|   return process.env.NEXT_PUBLIC_URL_CMS + url; | ||||
| @ -60,4 +57,4 @@ export function capitalizeString(string: string): string { | ||||
| 
 | ||||
| export function convertMmToInch(mm: number): string { | ||||
|   return (mm * 0.03937008).toPrecision(3); | ||||
| } | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 DrMint
						DrMint