refactor(guides) : consolidate duplicate guide and Stygian logic
This commit is contained in:
@@ -36,6 +36,7 @@ import { Field, FieldGroup, FieldLabel } from "@/components/ui/field";
|
||||
import { Input } from "@/components/ui/input";
|
||||
import { Switch } from "@/components/ui/switch";
|
||||
import { Textarea } from "@/components/ui/textarea";
|
||||
import { isValidPercent } from "@/lib/guides/percent-input";
|
||||
|
||||
const rowSchema = z.object({
|
||||
level: z.number().int().min(1).max(6),
|
||||
@@ -69,11 +70,6 @@ const parseConstellationDraft = (value: unknown): ConstellationDraft | null => {
|
||||
return parsed.success ? parsed.data : null;
|
||||
};
|
||||
|
||||
function validPercent(value: string): boolean {
|
||||
const number = Number(value);
|
||||
return value.trim().length > 0 && Number.isFinite(number) && number >= -9999 && number <= 9999;
|
||||
}
|
||||
|
||||
export function ConstellationImageGenerator({
|
||||
characters,
|
||||
}: {
|
||||
@@ -85,7 +81,7 @@ export function ConstellationImageGenerator({
|
||||
parseConstellationDraft,
|
||||
);
|
||||
const character = characters.find((item) => item.key === draft.characterKey);
|
||||
const valid = Boolean(character && draft.rows.every((row) => validPercent(row.cumulativePercent)));
|
||||
const valid = Boolean(character && draft.rows.every((row) => isValidPercent(row.cumulativePercent)));
|
||||
|
||||
const guide = useMemo<ConstellationImageGuide>(() => ({
|
||||
coverUrl: character?.imageUrl ?? "",
|
||||
@@ -153,7 +149,7 @@ export function ConstellationImageGenerator({
|
||||
|
||||
<FieldGroup>
|
||||
{draft.rows.map((row, index) => (
|
||||
<Field key={row.level} data-invalid={!validPercent(row.cumulativePercent)}>
|
||||
<Field key={row.level} data-invalid={!isValidPercent(row.cumulativePercent)}>
|
||||
<div className="grid grid-cols-[3rem_minmax(0,1fr)_auto] items-center gap-3">
|
||||
<FieldLabel htmlFor={`constellation-image-c${row.level}`}>
|
||||
C{row.level}
|
||||
@@ -163,7 +159,7 @@ export function ConstellationImageGenerator({
|
||||
type="number"
|
||||
step="0.01"
|
||||
value={row.cumulativePercent}
|
||||
aria-invalid={!validPercent(row.cumulativePercent)}
|
||||
aria-invalid={!isValidPercent(row.cumulativePercent)}
|
||||
onChange={(event) => setDraft((current) => ({
|
||||
...current,
|
||||
rows: current.rows.map((item, rowIndex) => rowIndex === index
|
||||
|
||||
Reference in New Issue
Block a user