From 6eac16630416d6bca6bc2673d4a6d6d42f19dda0 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Fri, 10 Feb 2023 20:22:51 +0100 Subject: [PATCH] feat: improved SettingsForm --- .../GlobalSettingsRoute/SettingForm.tsx | 92 ----- .../GlobalSettingsRoute/SettingsForm.tsx | 363 ++++++++++++++++++ 2 files changed, 363 insertions(+), 92 deletions(-) delete mode 100644 src/route-widgets/GlobalSettingsRoute/SettingForm.tsx create mode 100644 src/route-widgets/GlobalSettingsRoute/SettingsForm.tsx diff --git a/src/route-widgets/GlobalSettingsRoute/SettingForm.tsx b/src/route-widgets/GlobalSettingsRoute/SettingForm.tsx deleted file mode 100644 index 4b643c1..0000000 --- a/src/route-widgets/GlobalSettingsRoute/SettingForm.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import * as yup from "yup" -import {AdminSettings} from "~/server-types" -import {useTranslation} from "react-i18next" -import {useFormik} from "formik" -import {SimpleForm} from "~/components" -import {TextField} from "@mui/material" - -export interface SettingsFormProps { - settings: AdminSettings -} - -export default function SettingsForm({settings}: SettingsFormProps) { - const {t} = useTranslation() - - const validationSchema = yup.object().shape({ - randomEmailIdMinLength: yup - .number() - .min(1) - .max(1_023) - .label(t("routes.AdminRoute.forms.settings.randomEmailIdMinLength.label")), - randomEmailIdChars: yup - .string() - .label(t("routes.AdminRoute.forms.settings.randomEmailIdChars.label")), - randomEmailLengthIncreaseOnPercentage: yup - .number() - .label( - t("routes.AdminRoute.forms.settings.randomEmailLengthIncreaseOnPercentage.label"), - ), - imageProxyStorageLifeTimeInHours: yup - .number() - .label(t("routes.AdminRoute.forms.settings.imageProxyStorageLifeTimeInHours.label")), - customEmailSuffixLength: yup - .number() - .min(1) - .max(1_023) - .label(t("routes.AdminRoute.forms.settings.customEmailSuffixLength-label")), - customEmailSuffixChars: yup - .string() - .label(t("routes.AdminRoute.forms.settings.customEmailSuffixChars.label")), - userEmailEnableDisposableEmails: yup - .boolean() - .label(t("routes.AdminRoute.forms.settings.userEmailEnableDisposableEmails.label")), - userEmailEnableOtherRelays: yup - .boolean() - .label(t("routes.AdminRoute.forms.settings.userEmailEnableOtherRelays.label")), - enableImageProxy: yup - .boolean() - .label(t("routes.AdminRoute.forms.settings.enableImageProxy.label")), - allowStatistics: yup - .boolean() - .label(t("routes.AdminRoute.forms.settings.allowStatistics.label")), - }) - - const formik = useFormik({ - validationSchema, - onSubmit: console.log, - initialValues: settings, - }) - - return ( -
- - {[ - , - ]} - -
- ) -} diff --git a/src/route-widgets/GlobalSettingsRoute/SettingsForm.tsx b/src/route-widgets/GlobalSettingsRoute/SettingsForm.tsx new file mode 100644 index 0000000..d89ab24 --- /dev/null +++ b/src/route-widgets/GlobalSettingsRoute/SettingsForm.tsx @@ -0,0 +1,363 @@ +import * as yup from "yup" +import {useFormik} from "formik" +import {TbCursorText} from "react-icons/tb" +import {useTranslation} from "react-i18next" + +import { + Checkbox, + FormControlLabel, + FormGroup, + FormHelperText, + InputAdornment, + TextField, +} from "@mui/material" + +import {AdminSettings} from "~/server-types" +import {SimpleForm, StringPoolField, createPool} from "~/components" +import {MdOutlineChangeCircle, MdTextFormat} from "react-icons/md" +import {BsImage} from "react-icons/bs" + +export interface SettingsFormProps { + settings: AdminSettings +} + +const DEFAULT_POOLS = createPool({ + abcdefghijklmnopqrstuvwxyz: "a-z", + ABCDEFGHIJKLMNOPQRSTUVWXYZ: "A-Z", + "0123456789": "0-9", +}) + +export default function SettingsForm({settings}: SettingsFormProps) { + const {t} = useTranslation() + + const validationSchema = yup.object().shape({ + randomEmailIdMinLength: yup + .number() + .min(1) + .max(1_023) + .label(t("routes.AdminRoute.forms.settings.randomEmailIdMinLength.label")), + randomEmailIdChars: yup + .string() + .label(t("routes.AdminRoute.forms.settings.randomEmailIdChars.label")), + randomEmailLengthIncreaseOnPercentage: yup + .number() + .min(0) + .max(1) + .label( + t("routes.AdminRoute.forms.settings.randomEmailLengthIncreaseOnPercentage.label"), + ), + imageProxyStorageLifeTimeInHours: yup + .number() + .label(t("routes.AdminRoute.forms.settings.imageProxyStorageLifeTimeInHours.label")), + customEmailSuffixLength: yup + .number() + .min(1) + .max(1_023) + .label(t("routes.AdminRoute.forms.settings.customEmailSuffixLength-label")), + customEmailSuffixChars: yup + .string() + .label(t("routes.AdminRoute.forms.settings.customEmailSuffixChars.label")), + userEmailEnableDisposableEmails: yup + .boolean() + .label(t("routes.AdminRoute.forms.settings.userEmailEnableDisposableEmails.label")), + userEmailEnableOtherRelays: yup + .boolean() + .label(t("routes.AdminRoute.forms.settings.userEmailEnableOtherRelays.label")), + enableImageProxy: yup + .boolean() + .label(t("routes.AdminRoute.forms.settings.enableImageProxy.label")), + allowStatistics: yup + .boolean() + .label(t("routes.AdminRoute.forms.settings.allowStatistics.label")), + }) + + const formik = useFormik({ + validationSchema, + onSubmit: console.log, + initialValues: settings, + }) + + return ( +
+ + {[ + + + + ), + }} + />, + + + + } + />, + + + + ), + }} + />, + + + + ), + }} + />, + + + + ), + }} + />, + + + + ), + }} + />, + + + } + label={t("routes.AdminRoute.forms.settings.enableImageProxy.label")} + /> + + {(formik.touched.enableImageProxy && formik.errors.enableImageProxy) || + t("routes.AdminRoute.forms.settings.enableImageProxy.description")} + + , + + + } + label={t( + "routes.AdminRoute.forms.settings.userEmailEnableDisposableEmails.label", + )} + /> + + {(formik.touched.userEmailEnableDisposableEmails && + formik.errors.userEmailEnableDisposableEmails) || + t( + "routes.AdminRoute.forms.settings.userEmailEnableDisposableEmails.description", + )} + + , + + + } + label={t( + "routes.AdminRoute.forms.settings.userEmailEnableOtherRelays.label", + )} + /> + + {(formik.touched.userEmailEnableOtherRelays && + formik.errors.userEmailEnableOtherRelays) || + t( + "routes.AdminRoute.forms.settings.userEmailEnableOtherRelays.description", + )} + + , + + + } + label={t("routes.AdminRoute.forms.settings.allowStatistics.label")} + /> + + {(formik.touched.allowStatistics && formik.errors.allowStatistics) || + t("routes.AdminRoute.forms.settings.allowStatistics.description")} + + , + ]} + +
+ ) +}