From d9c36c5ff0f16634e1967df0ad51842b0feff6ff Mon Sep 17 00:00:00 2001 From: Ardeman Date: Sat, 22 Feb 2025 17:14:33 +0800 Subject: [PATCH] feat: create AuthLayout component and refactor modal usage in forms --- app/components/popup/header-modal.tsx | 44 ------------------- app/components/popup/modal.tsx | 30 +++++++++++-- app/components/popup/succes-payment.tsx | 5 --- app/components/ui/button.tsx | 2 + app/components/ui/form-forgot-password.tsx | 5 --- app/components/ui/form-login.tsx | 43 ++++++++---------- .../{form-register .tsx => form-register.tsx} | 7 +-- app/components/ui/form-subscription.tsx | 8 ---- app/layouts/header-top.tsx | 34 +++++++++----- app/routes/_layout.auth.tsx | 23 ---------- app/routes/_layout.dashboard.auth.tsx | 10 +++++ 11 files changed, 80 insertions(+), 131 deletions(-) delete mode 100644 app/components/popup/header-modal.tsx rename app/components/ui/{form-register .tsx => form-register.tsx} (94%) delete mode 100644 app/routes/_layout.auth.tsx create mode 100644 app/routes/_layout.dashboard.auth.tsx diff --git a/app/components/popup/header-modal.tsx b/app/components/popup/header-modal.tsx deleted file mode 100644 index cc1f38f..0000000 --- a/app/components/popup/header-modal.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import type { ReactNode } from 'react' -import { Link } from 'react-router' - -import { LeftArrow } from '~/components/icons/left-arrow' -import { APP } from '~/data/meta' - -type THeaderModal = { - typeForm?: string - titleForm?: string - children: ReactNode -} -export default function HeaderModal({ typeForm, children }: THeaderModal) { - return ( - <> -
- - - -
-
-
- - {APP.title} - -
- -
- {children} -

{typeForm}

-
-
- - ) -} diff --git a/app/components/popup/modal.tsx b/app/components/popup/modal.tsx index c30ae76..fa40245 100644 --- a/app/components/popup/modal.tsx +++ b/app/components/popup/modal.tsx @@ -1,17 +1,27 @@ -import { Dialog, DialogBackdrop, DialogPanel } from '@headlessui/react' +import { + Description, + Dialog, + DialogBackdrop, + DialogPanel, + DialogTitle, +} from '@headlessui/react' import type { ReactNode } from 'react' +import { APP } from '~/data/meta' + type ModalProperties = { isOpen: boolean onClose: () => void children: ReactNode + description?: string } -export default function PopupModal({ +export const PopupModal = ({ isOpen, onClose, children, -}: ModalProperties) { + description, +}: ModalProperties) => { if (!isOpen) return return (
- + + + {APP.title} + + {description && ( + + {description} + + )}
{children}
diff --git a/app/components/popup/succes-payment.tsx b/app/components/popup/succes-payment.tsx index 00a0b9d..ee85d1c 100644 --- a/app/components/popup/succes-payment.tsx +++ b/app/components/popup/succes-payment.tsx @@ -1,16 +1,11 @@ import { Button } from '@headlessui/react' -import HeaderModal from '~/components/popup/header-modal' import { APP } from '~/data/meta' export default function PopupSuccessPayment() { return ( <>
- -

Selamat! Pembayaran anda berhasil!

-
-
- -

Selamat Datang, silakan masukkan akun Anda untuk melanjutkan!

-
-
{/* Input Email / No Telepon */} diff --git a/app/components/ui/form-login.tsx b/app/components/ui/form-login.tsx index 732e53c..9c84f0b 100644 --- a/app/components/ui/form-login.tsx +++ b/app/components/ui/form-login.tsx @@ -1,33 +1,23 @@ // import { EyeIcon, EyeOffIcon } from 'lucide-react' -import { Button } from '@headlessui/react' -import { useState } from 'react' +import { useState, type Dispatch, type SetStateAction } from 'react' import { Link } from 'react-router' import { EyeIcon } from '~/components/icons/eye' -import { APP } from '~/data/meta' -const FormLogin = () => { +import { Button } from './button' + +type TProperties = { + setIsRegisterOpen: Dispatch> + setIsLoginOpen: Dispatch> +} + +export const FormLogin = (properties: TProperties) => { + const { setIsRegisterOpen, setIsLoginOpen } = properties const [showPassword, setShowPassword] = useState(false) return (
-
- - {APP.title} - -
- -
-

- Selamat Datang, silakan daftarkan akun Anda untuk melanjutkan! -

-
- {/* Input Email / No Telepon */}
@@ -96,16 +86,19 @@ const FormLogin = () => { {/* Link Daftar */}
Belum punya akun?{' '} - { + setIsLoginOpen(false) + setIsRegisterOpen(true) + }} className="font-semibold text-[#2E2F7C]" + variant="link" + size="fit" > Daftar Disini - +
) } - -export default FormLogin diff --git a/app/components/ui/form-register .tsx b/app/components/ui/form-register.tsx similarity index 94% rename from app/components/ui/form-register .tsx rename to app/components/ui/form-register.tsx index f7c1dcd..aadb932 100644 --- a/app/components/ui/form-register .tsx +++ b/app/components/ui/form-register.tsx @@ -1,16 +1,11 @@ import { useState } from 'react' -import HeaderModal from '~/components/popup/header-modal' import { Button } from '~/components/ui/button' -export default function FormRegister() { +export const FormRegister = () => { const [showPassword, setShowPassword] = useState(false) return (
- -

Selamat Datang, silakan masukkan data Anda untuk melanjutkan!

-
-
{/* Input Email / No Telepon */} diff --git a/app/components/ui/form-subscription.tsx b/app/components/ui/form-subscription.tsx index 4af05ee..b65addf 100644 --- a/app/components/ui/form-subscription.tsx +++ b/app/components/ui/form-subscription.tsx @@ -1,16 +1,8 @@ import { Button } from '@headlessui/react' -import HeaderModal from '~/components/popup/header-modal' - export default function FormSubscription() { return (
- -

- Selamat Datang, silakan Pilih Subscription Anda untuk melanjutkan! -

-
-
{/* Subscribe*/} diff --git a/app/layouts/header-top.tsx b/app/layouts/header-top.tsx index 0e670ba..2a9c972 100644 --- a/app/layouts/header-top.tsx +++ b/app/layouts/header-top.tsx @@ -1,13 +1,16 @@ import { useState } from 'react' import { Link } from 'react-router' -import PopupModal from '~/components/popup/modal' +import { PopupModal } from '~/components/popup/modal' import { Button } from '~/components/ui/button' -import FormLogin from '~/components/ui/form-login' +import { FormLogin } from '~/components/ui/form-login' +import { FormRegister } from '~/components/ui/form-register' import { APP } from '~/data/meta' export const HeaderTop = () => { - const [isModalOpen, setModalOpen] = useState(false) + const [isLoginOpen, setIsLoginOpen] = useState(false) + const [isRegisterOpen, setIsRegisterOpen] = useState(false) + return ( <>
@@ -31,14 +34,11 @@ export const HeaderTop = () => { -
setModalOpen(true)} - > +
language {
setModalOpen(false)} + isOpen={isLoginOpen} + onClose={() => setIsLoginOpen(false)} + description="Selamat Datang, silakan daftarkan akun Anda untuk melanjutkan!" > - + + + + setIsRegisterOpen(false)} + description="Selamat Datang, silakan daftarkan akun Anda untuk melanjutkan!" + > + ) diff --git a/app/routes/_layout.auth.tsx b/app/routes/_layout.auth.tsx deleted file mode 100644 index b03debc..0000000 --- a/app/routes/_layout.auth.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { useState } from 'react' - -import PopupModal from '~/components/popup/modal' -import FormLogin from '~/components/ui/form-login' - -const AuthLayout = () => { - const [isModalOpen, setModalOpen] = useState(true) - - return ( -
-
- {/* Modal */} - setModalOpen(true)} - > - - -
-
- ) -} -export default AuthLayout diff --git a/app/routes/_layout.dashboard.auth.tsx b/app/routes/_layout.dashboard.auth.tsx new file mode 100644 index 0000000..e39568b --- /dev/null +++ b/app/routes/_layout.dashboard.auth.tsx @@ -0,0 +1,10 @@ +const AuthLayout = () => { + return ( +
+
+ Login +
+
+ ) +} +export default AuthLayout