style: clean up code formatting and remove trailing whitespace
refactor: reorganize imports and fix type imports
This commit is contained in:
1 parent
d3704602fd
commit
47c04de6fe
232 files changed
+7140
-4798
No files matched your search
@@ -1,6 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { useState } from "react";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import {
|
||||
Dialog,
|
||||
DialogContent,
|
||||
@@ -8,7 +9,6 @@ import {
|
||||
DialogHeader,
|
||||
DialogTitle,
|
||||
} from "@/components/ui/dialog";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Input } from "@/components/ui/input";
|
||||
import { Label } from "@/components/ui/label";
|
||||
import { useSession } from "@/lib/hooks/use-session";
|
||||
@@ -58,7 +58,7 @@ export function LoginDialog({ open, onOpenChange }: LoginDialogProps) {
|
||||
} else {
|
||||
setError(data.error || "Erro ao fazer login");
|
||||
}
|
||||
} catch (err) {
|
||||
} catch (_err) {
|
||||
setError("Erro ao conectar com o servidor");
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
@@ -116,4 +116,3 @@ export function LoginDialog({ open, onOpenChange }: LoginDialogProps) {
|
||||
</Dialog>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
"use client";
|
||||
|
||||
import { useState, useEffect, useMemo } from "react";
|
||||
import { ChevronDown, X } from "lucide-react";
|
||||
import { useTranslations } from "next-intl";
|
||||
import { useEffect, useMemo, useState } from "react";
|
||||
import { Badge } from "@/components/ui/badge";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import {
|
||||
Dialog,
|
||||
DialogContent,
|
||||
@@ -8,22 +12,29 @@ import {
|
||||
DialogHeader,
|
||||
DialogTitle,
|
||||
} from "@/components/ui/dialog";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Input } from "@/components/ui/input";
|
||||
import { Label } from "@/components/ui/label";
|
||||
import { Badge } from "@/components/ui/badge";
|
||||
import { useSession } from "@/lib/hooks/use-session";
|
||||
import { useServers } from "@/lib/hooks/use-servers";
|
||||
import { useTranslations } from "next-intl";
|
||||
import { formatPhone, formatInternationalPhone, unformatPhone, combinePhoneWithDialCode, getPhonePlaceholder, checkPasswordStrength, validatePasswordRequirements } from "@/lib/utils/formatters";
|
||||
import { COUNTRIES, DEFAULT_COUNTRY, type Country } from "@/lib/utils/countries";
|
||||
import {
|
||||
DropdownMenu,
|
||||
DropdownMenuContent,
|
||||
DropdownMenuItem,
|
||||
DropdownMenuTrigger,
|
||||
} from "@/components/ui/dropdown-menu";
|
||||
import { X, Plus, Check, XCircle, ChevronDown } from "lucide-react";
|
||||
import { Input } from "@/components/ui/input";
|
||||
import { Label } from "@/components/ui/label";
|
||||
import { useServers } from "@/lib/hooks/use-servers";
|
||||
import { useSession } from "@/lib/hooks/use-session";
|
||||
import {
|
||||
COUNTRIES,
|
||||
type Country,
|
||||
DEFAULT_COUNTRY,
|
||||
} from "@/lib/utils/countries";
|
||||
import {
|
||||
checkPasswordStrength,
|
||||
combinePhoneWithDialCode,
|
||||
formatInternationalPhone,
|
||||
getPhonePlaceholder,
|
||||
unformatPhone,
|
||||
validatePasswordRequirements,
|
||||
} from "@/lib/utils/formatters";
|
||||
|
||||
interface RegisterDialogProps {
|
||||
open: boolean;
|
||||
@@ -39,7 +50,11 @@ interface ServerSelection {
|
||||
export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
const t = useTranslations("auth.register");
|
||||
const { refreshSession } = useSession();
|
||||
const { servers, isLoading: serversLoading, error: serversError } = useServers();
|
||||
const {
|
||||
servers,
|
||||
isLoading: serversLoading,
|
||||
error: serversError,
|
||||
} = useServers();
|
||||
|
||||
// Form fields
|
||||
const [username, setUsername] = useState("");
|
||||
@@ -49,7 +64,8 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
const [firstName, setFirstName] = useState("");
|
||||
const [lastName, setLastName] = useState("");
|
||||
const [phone, setPhone] = useState("");
|
||||
const [selectedCountry, setSelectedCountry] = useState<Country>(DEFAULT_COUNTRY);
|
||||
const [selectedCountry, setSelectedCountry] =
|
||||
useState<Country>(DEFAULT_COUNTRY);
|
||||
const [countrySearch, setCountrySearch] = useState("");
|
||||
|
||||
// Servers selection
|
||||
@@ -61,7 +77,9 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
const [fieldErrors, setFieldErrors] = useState<Record<string, string>>({});
|
||||
const [passwordStrength, setPasswordStrength] = useState<"weak" | "medium" | "strong">("weak");
|
||||
const [passwordStrength, setPasswordStrength] = useState<
|
||||
"weak" | "medium" | "strong"
|
||||
>("weak");
|
||||
|
||||
// Filtered servers based on search
|
||||
const filteredServers = useMemo(() => {
|
||||
@@ -70,7 +88,7 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
return servers.filter(
|
||||
(s) =>
|
||||
s.serverName.toLowerCase().includes(searchLower) &&
|
||||
!selectedServers.some((sel) => sel.serverName === s.serverName)
|
||||
!selectedServers.some((sel) => sel.serverName === s.serverName),
|
||||
);
|
||||
}, [serverSearch, servers, selectedServers]);
|
||||
|
||||
@@ -145,7 +163,11 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
};
|
||||
|
||||
const handlePhoneChange = (value: string) => {
|
||||
const formatted = formatInternationalPhone(value, selectedCountry.dialCode, selectedCountry.code);
|
||||
const formatted = formatInternationalPhone(
|
||||
value,
|
||||
selectedCountry.dialCode,
|
||||
selectedCountry.code,
|
||||
);
|
||||
setPhone(formatted);
|
||||
};
|
||||
|
||||
@@ -157,7 +179,7 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
(c) =>
|
||||
c.name.toLowerCase().includes(searchLower) ||
|
||||
c.dialCode.includes(searchLower) ||
|
||||
c.code.toLowerCase().includes(searchLower)
|
||||
c.code.toLowerCase().includes(searchLower),
|
||||
);
|
||||
}, [countrySearch]);
|
||||
|
||||
@@ -233,7 +255,9 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
password,
|
||||
firstName: firstName.trim(),
|
||||
lastName: lastName.trim(),
|
||||
phone: phone ? combinePhoneWithDialCode(selectedCountry.dialCode, phone) : undefined,
|
||||
phone: phone
|
||||
? combinePhoneWithDialCode(selectedCountry.dialCode, phone)
|
||||
: undefined,
|
||||
servers: selectedServers.map((s) => ({
|
||||
serverName: s.serverName,
|
||||
characterName: s.characterName.trim(),
|
||||
@@ -246,7 +270,10 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
const contentType = response.headers.get("content-type");
|
||||
if (!contentType || !contentType.includes("application/json")) {
|
||||
const text = await response.text();
|
||||
console.error("Resposta não é JSON do registro:", text.substring(0, 200));
|
||||
console.error(
|
||||
"Resposta não é JSON do registro:",
|
||||
text.substring(0, 200),
|
||||
);
|
||||
setError("Erro: resposta inválida do servidor");
|
||||
setIsLoading(false);
|
||||
return;
|
||||
@@ -270,7 +297,7 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
setError(data.error || "Erro ao criar conta");
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
} catch (_err) {
|
||||
setError("Erro ao conectar com o servidor");
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
@@ -313,7 +340,9 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
className={fieldErrors.username ? "border-destructive" : ""}
|
||||
/>
|
||||
{fieldErrors.username && (
|
||||
<p className="text-sm text-destructive">{fieldErrors.username}</p>
|
||||
<p className="text-sm text-destructive">
|
||||
{fieldErrors.username}
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -351,7 +380,12 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
<div
|
||||
className={`h-full ${getPasswordStrengthColor()} transition-all`}
|
||||
style={{
|
||||
width: passwordStrength === "weak" ? "33%" : passwordStrength === "medium" ? "66%" : "100%",
|
||||
width:
|
||||
passwordStrength === "weak"
|
||||
? "33%"
|
||||
: passwordStrength === "medium"
|
||||
? "66%"
|
||||
: "100%",
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
@@ -362,7 +396,9 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
</div>
|
||||
)}
|
||||
{fieldErrors.password && (
|
||||
<p className="text-sm text-destructive">{fieldErrors.password}</p>
|
||||
<p className="text-sm text-destructive">
|
||||
{fieldErrors.password}
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -375,10 +411,14 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
value={confirmPassword}
|
||||
onChange={(e) => setConfirmPassword(e.target.value)}
|
||||
disabled={isLoading}
|
||||
className={fieldErrors.confirmPassword ? "border-destructive" : ""}
|
||||
className={
|
||||
fieldErrors.confirmPassword ? "border-destructive" : ""
|
||||
}
|
||||
/>
|
||||
{fieldErrors.confirmPassword && (
|
||||
<p className="text-sm text-destructive">{fieldErrors.confirmPassword}</p>
|
||||
<p className="text-sm text-destructive">
|
||||
{fieldErrors.confirmPassword}
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
@@ -400,7 +440,9 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
className={fieldErrors.firstName ? "border-destructive" : ""}
|
||||
/>
|
||||
{fieldErrors.firstName && (
|
||||
<p className="text-sm text-destructive">{fieldErrors.firstName}</p>
|
||||
<p className="text-sm text-destructive">
|
||||
{fieldErrors.firstName}
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -416,7 +458,9 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
className={fieldErrors.lastName ? "border-destructive" : ""}
|
||||
/>
|
||||
{fieldErrors.lastName && (
|
||||
<p className="text-sm text-destructive">{fieldErrors.lastName}</p>
|
||||
<p className="text-sm text-destructive">
|
||||
{fieldErrors.lastName}
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
@@ -435,12 +479,17 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
>
|
||||
<span className="flex items-center gap-2">
|
||||
<span>{selectedCountry.flag}</span>
|
||||
<span className="text-sm">{selectedCountry.dialCode}</span>
|
||||
<span className="text-sm">
|
||||
{selectedCountry.dialCode}
|
||||
</span>
|
||||
</span>
|
||||
<ChevronDown className="h-4 w-4 opacity-50" />
|
||||
</Button>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent align="start" className="w-[300px] max-h-[300px] overflow-y-auto">
|
||||
<DropdownMenuContent
|
||||
align="start"
|
||||
className="w-[300px] max-h-[300px] overflow-y-auto"
|
||||
>
|
||||
<div className="p-2">
|
||||
<Input
|
||||
type="text"
|
||||
@@ -463,7 +512,7 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
const reformatted = formatInternationalPhone(
|
||||
unformatted,
|
||||
country.dialCode,
|
||||
country.code
|
||||
country.code,
|
||||
);
|
||||
setPhone(reformatted);
|
||||
}
|
||||
@@ -473,7 +522,9 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
<span className="flex items-center gap-2 w-full">
|
||||
<span>{country.flag}</span>
|
||||
<span className="flex-1">{country.name}</span>
|
||||
<span className="text-muted-foreground text-sm">{country.dialCode}</span>
|
||||
<span className="text-muted-foreground text-sm">
|
||||
{country.dialCode}
|
||||
</span>
|
||||
</span>
|
||||
</DropdownMenuItem>
|
||||
))}
|
||||
@@ -504,7 +555,9 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<h3 className="text-sm font-semibold">{t("servers")}</h3>
|
||||
<p className="text-xs text-muted-foreground">{t("serversDescription")}</p>
|
||||
<p className="text-xs text-muted-foreground">
|
||||
{t("serversDescription")}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -587,15 +640,23 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
</div>
|
||||
</div>
|
||||
<div className="space-y-2">
|
||||
<Label htmlFor={`character-${index}`}>{t("characterName")}</Label>
|
||||
<Label htmlFor={`character-${index}`}>
|
||||
{t("characterName")}
|
||||
</Label>
|
||||
<Input
|
||||
id={`character-${index}`}
|
||||
type="text"
|
||||
placeholder={t("characterNamePlaceholder")}
|
||||
value={server.characterName}
|
||||
onChange={(e) => updateServerCharacter(index, e.target.value)}
|
||||
onChange={(e) =>
|
||||
updateServerCharacter(index, e.target.value)
|
||||
}
|
||||
disabled={isLoading}
|
||||
className={fieldErrors[`server_${index}`] ? "border-destructive" : ""}
|
||||
className={
|
||||
fieldErrors[`server_${index}`]
|
||||
? "border-destructive"
|
||||
: ""
|
||||
}
|
||||
/>
|
||||
{fieldErrors[`server_${index}`] && (
|
||||
<p className="text-sm text-destructive">
|
||||
@@ -624,7 +685,11 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
</div>
|
||||
)}
|
||||
|
||||
<Button type="submit" className="w-full" disabled={isLoading || serversLoading}>
|
||||
<Button
|
||||
type="submit"
|
||||
className="w-full"
|
||||
disabled={isLoading || serversLoading}
|
||||
>
|
||||
{isLoading ? t("submitting") : t("submit")}
|
||||
</Button>
|
||||
</form>
|
||||
@@ -632,4 +697,3 @@ export function RegisterDialog({ open, onOpenChange }: RegisterDialogProps) {
|
||||
</Dialog>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user