diff --git a/public/firebase-messaging-sw.js b/public/firebase-messaging-sw.js index ef27238..7e965b7 100644 --- a/public/firebase-messaging-sw.js +++ b/public/firebase-messaging-sw.js @@ -14,3 +14,28 @@ firebase.initializeApp({ }); const messaging = firebase.messaging(); + +self.addEventListener("notificationclick", (event) => { + event.notification.close(); + + const urlToOpen = event.notification.data.url || "/"; + + event.waitUntil( + clients + .matchAll({ + type: "window", + includeUncontrolled: true, + }) + .then((clientList) => { + for (const client of clientList) { + if (client.url === urlToOpen && "focus" in client) { + return client.focus(); + } + } + + if (clients.openWindow) { + return clients.openWindow(urlToOpen); + } + }), + ); +}); diff --git a/src/app/forms/form-layout/_components/contact-form.tsx b/src/app/forms/form-layout/_components/contact-form.tsx index 710eeb8..76d126a 100644 --- a/src/app/forms/form-layout/_components/contact-form.tsx +++ b/src/app/forms/form-layout/_components/contact-form.tsx @@ -1,6 +1,3 @@ -import InputGroup from "@/components/FormElements/InputGroup"; -import { TextAreaGroup } from "@/components/FormElements/InputGroup/text-area"; -import { Select } from "@/components/FormElements/select"; import { ShowcaseSection } from "@/components/Layouts/showcase-section"; export function ContactForm() { diff --git a/src/app/pages/settings/page.tsx b/src/app/pages/settings/page.tsx index 81eb6ab..d54a818 100644 --- a/src/app/pages/settings/page.tsx +++ b/src/app/pages/settings/page.tsx @@ -1,23 +1,165 @@ -import type { Metadata } from "next"; -import { PersonalInfoForm } from "./_components/personal-info"; -import { UploadPhotoForm } from "./_components/upload-photo"; - -export const metadata: Metadata = { - title: "Settings Page", -}; +"use client"; +import Loading from "@/app/loading"; +import InputGroup from "@/components/FormElements/InputGroup"; +import { Select } from "@/components/FormElements/select"; +import { ShowcaseSection } from "@/components/Layouts/showcase-section"; +import FormFooter from "@/components/ui/FormFooter"; +import { AdminRoles } from "@/constants/enums"; +import { REGEX } from "@/constants/regex"; +import { FormErrorMessages } from "@/constants/Texts"; +import { useProfileQuery, useUpdateProfileQuery } from "@/hooks/queries"; +import { TUpdateProfileCredentials, UpdateProfileCredentials } from "@/lib/api"; +import { getEnumAsArray } from "@/utils/shared"; +import { useEffect } from "react"; +import { useForm } from "react-hook-form"; +import { ZodSafeParseResult } from "zod"; export default function SettingsPage() { + const { data, isLoading } = useProfileQuery(); + const { mutate } = useUpdateProfileQuery(); + const { register, reset, handleSubmit } = useForm({ + mode: "onChange", + defaultValues: data, + }); + + useEffect(() => { + if (data) { + reset(data); + } + }, [data, reset]); + const updateUser = (data: TUpdateProfileCredentials) => { + const validation: ZodSafeParseResult = + UpdateProfileCredentials.safeParse(data); + if (validation.success) { + mutate({ credentials: validation.data }); + } else { + console.error(validation.error); + } + }; + if (isLoading) return ; return ( -
Settings
- //
- //
- //
- // - //
- //
- // - //
- //
- //
+ +
+ + + + + + +