From 2783561cfbc293182e1371b977fde3758c186170 Mon Sep 17 00:00:00 2001 From: Khairul Hidayat Date: Wed, 17 Jan 2024 01:55:25 +0000 Subject: [PATCH] feat: new homepage --- .../1705455990_created_wallpapers.js | 43 ++++ .../1705456227_updated_wallpapers.js | 18 ++ package.json | 1 + src/Router.tsx | 32 ++- src/components/containers/AppBar.tsx | 7 +- src/components/containers/PageMetadata.tsx | 6 +- src/pages/home/icons/facebook.svg | 1 + src/pages/home/icons/furinamains.webp | Bin 0 -> 9266 bytes src/pages/home/icons/index.ts | 13 + src/pages/home/icons/pat-furina.webp | Bin 0 -> 18784 bytes src/pages/home/icons/treasures.webp | Bin 0 -> 20494 bytes src/pages/home/icons/twitter.jpg | Bin 0 -> 2477 bytes src/pages/home/page.tsx | 236 ++++++++++++------ src/pages/{home => pat-pat}/game.ts | 0 src/pages/pat-pat/page.tsx | 91 +++++++ src/pages/{home => pat-pat}/stateMachine.ts | 0 src/pages/{home => pat-pat}/store.ts | 0 src/pages/{home => pat-pat}/style.module.css | 0 yarn.lock | 5 + 19 files changed, 363 insertions(+), 90 deletions(-) create mode 100644 backend/pb_migrations/1705455990_created_wallpapers.js create mode 100644 backend/pb_migrations/1705456227_updated_wallpapers.js create mode 100644 src/pages/home/icons/facebook.svg create mode 100644 src/pages/home/icons/furinamains.webp create mode 100644 src/pages/home/icons/index.ts create mode 100644 src/pages/home/icons/pat-furina.webp create mode 100644 src/pages/home/icons/treasures.webp create mode 100644 src/pages/home/icons/twitter.jpg rename src/pages/{home => pat-pat}/game.ts (100%) create mode 100644 src/pages/pat-pat/page.tsx rename src/pages/{home => pat-pat}/stateMachine.ts (100%) rename src/pages/{home => pat-pat}/store.ts (100%) rename src/pages/{home => pat-pat}/style.module.css (100%) diff --git a/backend/pb_migrations/1705455990_created_wallpapers.js b/backend/pb_migrations/1705455990_created_wallpapers.js new file mode 100644 index 0000000..c375b70 --- /dev/null +++ b/backend/pb_migrations/1705455990_created_wallpapers.js @@ -0,0 +1,43 @@ +/// +migrate((db) => { + const collection = new Collection({ + "id": "ogs3cfy8l3jo32k", + "created": "2024-01-17 01:46:30.155Z", + "updated": "2024-01-17 01:46:30.155Z", + "name": "wallpapers", + "type": "base", + "system": false, + "schema": [ + { + "system": false, + "id": "kxurmv6q", + "name": "artwork", + "type": "relation", + "required": false, + "presentable": false, + "unique": false, + "options": { + "collectionId": "eo6iaxf4pkeqynf", + "cascadeDelete": false, + "minSelect": null, + "maxSelect": 1, + "displayFields": null + } + } + ], + "indexes": [], + "listRule": null, + "viewRule": null, + "createRule": null, + "updateRule": null, + "deleteRule": null, + "options": {} + }); + + return Dao(db).saveCollection(collection); +}, (db) => { + const dao = new Dao(db); + const collection = dao.findCollectionByNameOrId("ogs3cfy8l3jo32k"); + + return dao.deleteCollection(collection); +}) diff --git a/backend/pb_migrations/1705456227_updated_wallpapers.js b/backend/pb_migrations/1705456227_updated_wallpapers.js new file mode 100644 index 0000000..23dc19a --- /dev/null +++ b/backend/pb_migrations/1705456227_updated_wallpapers.js @@ -0,0 +1,18 @@ +/// +migrate((db) => { + const dao = new Dao(db) + const collection = dao.findCollectionByNameOrId("ogs3cfy8l3jo32k") + + collection.listRule = "" + collection.viewRule = "" + + return dao.saveCollection(collection) +}, (db) => { + const dao = new Dao(db) + const collection = dao.findCollectionByNameOrId("ogs3cfy8l3jo32k") + + collection.listRule = null + collection.viewRule = null + + return dao.saveCollection(collection) +}) diff --git a/package.json b/package.json index ea149f4..1763608 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", + "dayjs": "^1.11.10", "howler": "^2.2.4", "lucide-react": "^0.306.0", "pixi.js": "^7.3.3", diff --git a/src/Router.tsx b/src/Router.tsx index 559b309..115068f 100644 --- a/src/Router.tsx +++ b/src/Router.tsx @@ -4,29 +4,35 @@ import MainLayout from "./components/layouts/MainLayout"; import ErrorBoundaryPage from "./pages/errors/error-boundary/page"; const HomePage = lazy(() => import("./pages/home/page")); +const PatPatPage = lazy(() => import("./pages/pat-pat/page")); const MyFurinaPage = lazy(() => import("./pages/my-furina/page")); const ArtworksPage = lazy(() => import("./pages/artworks/page")); const router = createBrowserRouter([ { - Component: MainLayout, children: [ { index: true, Component: HomePage }, - { path: "/toodle", Component: MyFurinaPage }, { - path: "/treasures", - Component: ArtworksPage, - }, - { - path: "/treasures/:id", - Component: ArtworksPage, + Component: MainLayout, + children: [ + { path: "/pat-pat", Component: PatPatPage }, + { path: "/toodle", Component: MyFurinaPage }, + { + path: "/treasures", + Component: ArtworksPage, + }, + { + path: "/treasures/:id", + Component: ArtworksPage, + }, + ], + ErrorBoundary: () => ( + + + + ), }, ], - ErrorBoundary: () => ( - - - - ), }, ]); diff --git a/src/components/containers/AppBar.tsx b/src/components/containers/AppBar.tsx index e419b92..9568eeb 100644 --- a/src/components/containers/AppBar.tsx +++ b/src/components/containers/AppBar.tsx @@ -23,7 +23,8 @@ const AppBar = () => { - + + @@ -53,7 +54,7 @@ const NavbarItem = ({ path, title, isExact = true }: NavbarItemProps) => { return ( {

diff --git a/src/components/containers/PageMetadata.tsx b/src/components/containers/PageMetadata.tsx index 19dc9eb..30597d0 100644 --- a/src/components/containers/PageMetadata.tsx +++ b/src/components/containers/PageMetadata.tsx @@ -10,7 +10,11 @@ type PageMetadataProps = { const PageMetadata = (props: PageMetadataProps) => { return ( - {[props.title, "Furina.id"].filter((i) => !!i).join(" - ")} + + {props.title + ? [props.title, "Furina.id"].join(" - ") + : "Welcome to Furina.id"} + \ No newline at end of file diff --git a/src/pages/home/icons/furinamains.webp b/src/pages/home/icons/furinamains.webp new file mode 100644 index 0000000000000000000000000000000000000000..055ec14b4c017de7eb1572185abc28d2b9959b45 GIT binary patch literal 9266 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 U4(!V0G046O-qld!0+ZkX0EYYonE(I) literal 0 HcmV?d00001 diff --git a/src/pages/home/icons/index.ts b/src/pages/home/icons/index.ts new file mode 100644 index 0000000..61a3447 --- /dev/null +++ b/src/pages/home/icons/index.ts @@ -0,0 +1,13 @@ +import patFurina from "./pat-furina.webp"; +import treasures from "./treasures.webp"; +import facebook from "./facebook.svg"; +import twitter from "./twitter.jpg"; +import furinamains from "./furinamains.webp"; + +export const icons = { + patFurina, + treasures, + facebook, + twitter, + furinamains, +}; diff --git a/src/pages/home/icons/pat-furina.webp b/src/pages/home/icons/pat-furina.webp new file mode 100644 index 0000000000000000000000000000000000000000..aad4ec64cdaaedbd65902a7f91b88c70b8c65dd7 GIT binary patch literal 18784 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� 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 literal 0 HcmV?d00001 diff --git a/src/pages/home/icons/twitter.jpg b/src/pages/home/icons/twitter.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ab659e1d9b463613301ed24a7866b5302239500 GIT binary patch literal 2477 zcmcIk2~?9;7QXqDkgz8q6edCli#SxO1du_?0J0M!ghgZ*5*8gnA%Q9qwF*VRq7bQq zfWs<9p#n01A{3Qn5G)|44vVdzbUh05}*Xh$k194Crm)t9$}9I32`!< zjWAuXJ3Ip6a)eEVC_#h=WP1Jzo|NI}75rR=g}&a70GJBGtmqYND#QF0EISKJuv-|5 zY+?{Lij7G`ImktJ5|zk(JABZrBY#EU4X)q-EZ{>T?130afcMb64{`S2{mkWl9PDN1`vUupoDjWdfW2toET>w%6 z!14*H^v6=Ebh!)wKMc^GyXwC`7tuM3^x3OAqapzH6oAIIRUN+qpb2rT{dHWpFkHS5 z9*tO36u`4e0M!5h4aBul(Eq!>!Z(U7iw|Z00Psx);NAtuKM!Dx_EQg*j)5Z(@dN?^ zPecQeNK_!HkV#0?m6a7$sOmHtRh>%Jct=M|gU-;TQnmH98M?Z9dU_gK21W)R#1j`f^3cc zA8Pr!bQDzZIKU`)3MyZhT&MVHNMY}zP5zj~^=ni zK*A{Bod1MGC*->w6jzsV=f}3!I$l0?J3wiSTkUO^6UFxGU2M-RI&s0#P(dChR4_Xt#{h6dEC=s?;jeqZ0;W1G$aVEtF2}X{rDNp zj4xE(flcMRU$JB?R9JPj3if=Gx$e77Rkat*__aq#7aWaaI&YkRF>_loFt4H4CF6)$O4#P-9qT=faI1CR2B9*40Z@}K_MQ0f~gi|!l%)JdQ z?45W%@uFj|`B1RKUWE$OT6$k*X(cOHcr~1%jyw?TkF^}NNuU(AOpzsrgGX(dp?2SV z5EGDEXEKIlyBAi|@PHAgdJ+AC^eOi_hzJ2Mhd3o{u;}v~2ZILfeaJb2;V}zDS z{GG4=$aaA)jDNs^ulM$wv&EasuxR+dgQXl zh+j{Lv?mX}BBs$d%nHG;#xk-qDx`9$(^A5Y7UZuh(otG&YM;Bu49#8ofs^Po%`I{b z3@QkjS)VmMEL{A)Ag|)o3@tmtd_vc9XmgUzKi!v1(>nt^!ZOo>J!a}dy03R6UE-Q^ zgLdJ?*Tp{1M?4vv`b$NpZm3U70oBKZ0ysP#BPhrlSyllYQ1ub-;qff9V|A30!HKzf zd*01AchFA%Rqb(t4%JSg_(QaPL^s519_qXZ2t zi*J|aVl|A{lucjx@(fS!+7k~pUq8xdL)u86*tl$`(jnnlUE}k!rC(VdXNG{e>$>_(5{~A(@)Y(aqHZ|IoxA9{vfHV zgfLD`(CT)dWDB#5D);6K24*vf#KN<@ha^pcNpn)V6Rp`{c4(HLz!0`@sx9g7K`CpZI9VM)1Rq$5# zejvm1)6Y3~o>x7N>1pe{DS4Ueu3<>`D*WQ(2^Vo?Y6Fp#a9YXYBf@NJP+4ufIB>A4 zv?Zv5-CniUt*HDd<8J-L_*VN|`>eT6M)3TObJM#oZ70|@50x{S^bBRQ;?cA#PgJ9B z*_x{i6_2FoovHJsJ?LB3@6qeOTpZY-<6QIZdh1)|T9GA{A^+}}$DIqC{phKK1ecLl zbwE|GxS~;9bM*SglikMb*;dO)$$(DaJ$FCfYoR9d!L;^kjjErWFcxB*u)n$JmOlgw zw>vaXufwMWQz}h!gwo?#Cwb-vZ+qG9TucbFU2}C%+3mF8*0Y}CI=;{L3U=3mo5VSj ZN>`iW#9OoXH&#nby6jw~Bdp&+egZ&S^#A|> literal 0 HcmV?d00001 diff --git a/src/pages/home/page.tsx b/src/pages/home/page.tsx index b54139f..f647f61 100644 --- a/src/pages/home/page.tsx +++ b/src/pages/home/page.tsx @@ -1,92 +1,182 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import { useEffect, useRef, useState } from "react"; -import styles from "./style.module.css"; -import { cn } from "@/utility/utils"; -import LoadingPage from "../misc/loading-page"; +import titleImg from "@/assets/images/title-img.svg"; import PageMetadata from "@/components/containers/PageMetadata"; -import Modal from "@/components/ui/Modal"; -import useModal from "@/hooks/useModal"; -import Button from "@/components/ui/Button"; +import { cn } from "@/utility/utils"; +import dayjs from "dayjs"; +import { ComponentProps, useEffect, useMemo, useState } from "react"; +import { Link } from "react-router-dom"; +import { icons } from "./icons"; +import { useQuery } from "react-query"; +import pb from "@/utility/api"; const HomePage = () => { - const appRef = useRef(); - const cleanRef = useRef(); - const targetRef = useRef(null); - const [isReady, setReady] = useState(false); - - useEffect(() => { - if (!appRef.current) { - appRef.current = true; - - const init = async () => { - const { default: game } = await import("./game"); - const { app, clean } = await game(); - targetRef.current?.appendChild(app.view as never); - - appRef.current = app; - cleanRef.current = clean; - setReady(true); - }; - - init(); - } - - return () => { - if (cleanRef.current) { - cleanRef.current(); - } - }; - }, [setReady]); - return ( -

- +
+ + - {!isReady ? : null} - -
- - +
); }; -const Credits = () => { - const modal = useModal(); +const BackgroundSlideshow = () => { + const { data: wallpapers } = useQuery({ + queryKey: ["wallpapers"], + queryFn: async () => { + const items = await pb.collection("wallpapers").getFullList({ + sort: "@random", + expand: "artwork", + }); + + return items.map((item) => { + const artwork = item.expand?.artwork; + return pb.files.getUrl(artwork, artwork?.image); + }); + }, + }); return ( -
- + <> + title - -
-          {`
-Furina Stickers:
-Guido_ (https://risibank.fr/media/297778-genshin-archon-hydro-c6-r5-soutine)
-Coll5 (https://risibank.fr/media/317061-furina-focalor-genshin)
+      {wallpapers && wallpapers?.length > 0 ? (
+        
+      ) : null}
+    
+  );
+};
 
-Music:
-Kururin Furina Cover by Ariyutta (https://facebook.com/arbi.yudatama)
-pet the peepo by NitroiF (https://www.youtube.com/shorts/ll2Au3CdV2k)
+type BackgroundImageProps = {
+  src: string;
+};
 
-Hand Sprite:
-@soapmangraylace2752 (https://www.youtube.com/shorts/HEguW7Gmu2w)
-Fijiwaterhelp (https://jailbreak.fandom.com/wiki/User_blog:Fijiwaterhelp/hand_petting)
-        `.trim()}
-        
-
+const BackgroundImage = ({ src }: BackgroundImageProps) => { + const [isLoaded, setLoaded] = useState(false); + return ( + <> + img setTimeout(() => setLoaded(true), 100)} + /> + +
+ + ); +}; + +const DateTime = () => { + const [time, setTime] = useState(new Date()); + + useEffect(() => { + const intv = setInterval(() => { + setTime(new Date()); + }, 1000); + return () => { + clearInterval(intv); + }; + }, [setTime]); + + const message = useMemo(() => { + const hours = time.getHours(); + let msg = "Day"; + + if (hours >= 18 && hours <= 2) { + msg = "Night"; + } else if (hours > 2 && hours <= 9) { + msg = "Morning"; + } else if (hours > 9 && hours <= 15) { + msg = "Day"; + } else if (hours > 15 && hours < 18) { + msg = "Evening"; + } + + return `Good ${msg}~ 💧✨`; + }, [time]); + + return ( +
+

{message}

+

+ {dayjs(time).format("HH:mm")} +

+

+ {dayjs(time).format("dddd, DD MMM YYYY")} +

+ +
); }; +const AppNav = ({ className }: ComponentProps<"div">) => { + return ( +
+ + + + + +
+ ); +}; + +type AppNavItemProps = { + title: string; + icon: string; + path?: string; + iconClassName?: string; +}; + +const AppNavItem = ({ title, icon, path, iconClassName }: AppNavItemProps) => { + return ( + +
+ {title} +
+

{title}

+ + ); +}; + export default HomePage; diff --git a/src/pages/home/game.ts b/src/pages/pat-pat/game.ts similarity index 100% rename from src/pages/home/game.ts rename to src/pages/pat-pat/game.ts diff --git a/src/pages/pat-pat/page.tsx b/src/pages/pat-pat/page.tsx new file mode 100644 index 0000000..c006cb9 --- /dev/null +++ b/src/pages/pat-pat/page.tsx @@ -0,0 +1,91 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { useEffect, useRef, useState } from "react"; +import styles from "./style.module.css"; +import { cn } from "@/utility/utils"; +import LoadingPage from "../misc/loading-page"; +import PageMetadata from "@/components/containers/PageMetadata"; +import Modal from "@/components/ui/Modal"; +import useModal from "@/hooks/useModal"; +import Button from "@/components/ui/Button"; + +const PatPatPage = () => { + const appRef = useRef(); + const cleanRef = useRef(); + const targetRef = useRef(null); + const [isReady, setReady] = useState(false); + + useEffect(() => { + if (!appRef.current) { + appRef.current = true; + + const init = async () => { + const { default: game } = await import("./game"); + const { app, clean } = await game(); + targetRef.current?.appendChild(app.view as never); + + appRef.current = app; + cleanRef.current = clean; + setReady(true); + }; + + init(); + } + + return () => { + if (cleanRef.current) { + cleanRef.current(); + } + }; + }, [setReady]); + + return ( +
+ + + {!isReady ? : null} + +
+ + +
+ ); +}; + +const Credits = () => { + const modal = useModal(); + + return ( +
+ + + +
+          {`
+Furina Stickers:
+Guido_ (https://risibank.fr/media/297778-genshin-archon-hydro-c6-r5-soutine)
+Coll5 (https://risibank.fr/media/317061-furina-focalor-genshin)
+
+Music:
+Kururin Furina Cover by Ariyutta (https://facebook.com/arbi.yudatama)
+
+Hand Sprite:
+@soapmangraylace2752 (https://www.youtube.com/shorts/HEguW7Gmu2w)
+Fijiwaterhelp (https://jailbreak.fandom.com/wiki/User_blog:Fijiwaterhelp/hand_petting)
+        `.trim()}
+        
+
+
+ ); +}; + +export default PatPatPage; diff --git a/src/pages/home/stateMachine.ts b/src/pages/pat-pat/stateMachine.ts similarity index 100% rename from src/pages/home/stateMachine.ts rename to src/pages/pat-pat/stateMachine.ts diff --git a/src/pages/home/store.ts b/src/pages/pat-pat/store.ts similarity index 100% rename from src/pages/home/store.ts rename to src/pages/pat-pat/store.ts diff --git a/src/pages/home/style.module.css b/src/pages/pat-pat/style.module.css similarity index 100% rename from src/pages/home/style.module.css rename to src/pages/pat-pat/style.module.css diff --git a/yarn.lock b/yarn.lock index b593cf0..2e532be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1408,6 +1408,11 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== +dayjs@^1.11.10: + version "1.11.10" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" + integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== + debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"