refactor(guides) : consolidate duplicate guide and Stygian logic

This commit is contained in:
2026-10-07 01:41:13 +07:00 Unverified
parent 3c8f60433a
commit b35c1a4471
17 changed files with 268 additions and 171 deletions
@@ -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