import { zodResolver } from "@hookform/resolvers/zod"; import { Button } from "@workspace/ui/components/button"; import { Card, CardContent, CardHeader, CardTitle, } from "@workspace/ui/components/card"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@workspace/ui/components/form"; import { Input } from "@workspace/ui/components/input"; import { Switch } from "@workspace/ui/components/switch"; import { EnhancedInput } from "@workspace/ui/composed/enhanced-input"; import { UploadImage } from "@workspace/ui/composed/upload-image"; import { updateUserBasicInfo } from "@workspace/ui/services/admin/user"; import { unitConversion } from "@workspace/ui/utils/unit-conversions"; import { useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { toast } from "sonner"; import * as z from "zod"; import { useGlobalStore } from "@/stores/global"; const basicInfoSchema = z.object({ avatar: z.string().optional(), balance: z.number().optional(), commission: z.number().optional(), gift_amount: z.number().optional(), refer_code: z.string().optional(), referer_id: z.number().optional(), referral_percentage: z.number().optional(), only_first_purchase: z.boolean().optional(), is_admin: z.boolean().optional(), password: z.string().optional(), enable: z.boolean(), }); type BasicInfoValues = z.infer; export function BasicInfoForm({ user, refetch, }: { user: API.User; refetch: () => void; }) { const { t } = useTranslation("user"); const { common } = useGlobalStore(); const { currency } = common; const form = useForm({ resolver: zodResolver(basicInfoSchema), defaultValues: { avatar: user.avatar, balance: user.balance, commission: user.commission, gift_amount: user.gift_amount, refer_code: user.refer_code, referer_id: user.referer_id, referral_percentage: user.referral_percentage, only_first_purchase: user.only_first_purchase, is_admin: user.is_admin, enable: user.enable, }, }); async function onSubmit(data: BasicInfoValues) { await updateUserBasicInfo({ user_id: user.id, telegram: user.telegram, ...data, } as API.UpdateUserBasiceInfoRequest); toast.success(t("updateSuccess", "Updated successfully")); refetch(); } return (
{t("basicInfoTitle", "Basic Info")} ( {t("accountEnable", "Account Enable")} )} /> ( {t("administrator", "Administrator")} )} />
( {t("balance", "Balance")} unitConversion("centsToDollars", value) } formatOutput={(value) => unitConversion("dollarsToCents", value) } min={0} onValueChange={(value) => { form.setValue(field.name, value as number); }} prefix={currency?.currency_symbol ?? "$"} type="number" value={field.value} /> )} /> ( {t("commission", "Commission")} unitConversion("centsToDollars", value) } formatOutput={(value) => unitConversion("dollarsToCents", value) } min={0} onValueChange={(value) => { form.setValue(field.name, value as number); }} prefix={currency?.currency_symbol ?? "$"} type="number" value={field.value} /> )} /> ( {t("giftAmount", "Gift Amount")} unitConversion("centsToDollars", value) } formatOutput={(value) => unitConversion("dollarsToCents", value) } min={0} onValueChange={(value) => { form.setValue(field.name, value as number); }} prefix={currency?.currency_symbol ?? "$"} type="number" value={field.value} /> )} />
( {t("referralCode", "Referral Code")} { form.setValue(field.name, value as string); }} value={field.value} /> )} /> ( {t("referrerUserId", "Referrer User ID")} { form.setValue(field.name, value as number); }} type="number" value={field.value} /> )} />
( {t("referralPercentage", "Referral Percentage")} { form.setValue(field.name, value as number); }} suffix="%" type="number" value={field.value} /> )} /> ( {t("onlyFirstPurchase", "First Purchase Only")} )} /> ( {t("avatar", "Avatar")} { form.setValue(field.name, value as string); }} suffix={ form.setValue("avatar", value as string) } returnType="base64" /> } value={field.value} /> )} /> ( {t("password", "Password")} )} />
); }