From f327837d82149c563b07e1d42850356930f20e50 Mon Sep 17 00:00:00 2001 From: Meier Lukas Date: Fri, 9 Aug 2024 19:24:50 +0200 Subject: [PATCH] feat: add user setting for home board (#956) --- .../_components/_change-home-board.tsx | 68 +++++++++++++++++++ .../_components/_profile-language-change.tsx | 12 ---- .../manage/users/[userId]/general/page.tsx | 21 +++++- packages/api/src/router/user.ts | 34 ++++++++++ packages/translation/src/lang/en.ts | 21 ++++++ packages/validation/src/user.ts | 5 ++ 6 files changed, 147 insertions(+), 14 deletions(-) create mode 100644 apps/nextjs/src/app/[locale]/manage/users/[userId]/general/_components/_change-home-board.tsx delete mode 100644 apps/nextjs/src/app/[locale]/manage/users/[userId]/general/_components/_profile-language-change.tsx diff --git a/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/_components/_change-home-board.tsx b/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/_components/_change-home-board.tsx new file mode 100644 index 000000000..bbc8f308c --- /dev/null +++ b/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/_components/_change-home-board.tsx @@ -0,0 +1,68 @@ +"use client"; + +import { Button, Group, Select, Stack } from "@mantine/core"; + +import type { RouterOutputs } from "@homarr/api"; +import { clientApi } from "@homarr/api/client"; +import { useZodForm } from "@homarr/form"; +import { showErrorNotification, showSuccessNotification } from "@homarr/notifications"; +import { useI18n } from "@homarr/translation/client"; +import type { z } from "@homarr/validation"; +import { validation } from "@homarr/validation"; + +import { revalidatePathActionAsync } from "~/app/revalidatePathAction"; + +interface ChangeHomeBoardFormProps { + user: RouterOutputs["user"]["getById"]; + boardsData: { value: string; label: string }[]; +} + +export const ChangeHomeBoardForm = ({ user, boardsData }: ChangeHomeBoardFormProps) => { + const t = useI18n(); + const { mutate, isPending } = clientApi.user.changeHomeBoardId.useMutation({ + async onSettled() { + await revalidatePathActionAsync(`/manage/users/${user.id}`); + }, + onSuccess(_, variables) { + form.setInitialValues({ + homeBoardId: variables.homeBoardId, + }); + showSuccessNotification({ + message: t("user.action.changeHomeBoard.notification.success.message"), + }); + }, + onError() { + showErrorNotification({ + message: t("user.action.changeHomeBoard.notification.error.message"), + }); + }, + }); + const form = useZodForm(validation.user.changeHomeBoard, { + initialValues: { + homeBoardId: user.homeBoardId ?? "", + }, + }); + + const handleSubmit = (values: FormType) => { + mutate({ + userId: user.id, + ...values, + }); + }; + + return ( +
+ +