机器人房
This commit is contained in:
parent
4d831bbdd6
commit
4af2c311bf
@ -145,12 +145,22 @@ export function useRobotRoomsPage() {
|
||||
};
|
||||
|
||||
const selectOwnerRobot = (robot) => {
|
||||
setForm((current) => ({ ...current, ownerRobotUserId: robot?.userId || "" }));
|
||||
const ownerRobotUserId = robot?.userId || "";
|
||||
setForm((current) => ({
|
||||
...current,
|
||||
ownerRobotUserId,
|
||||
candidateRobotUserIds: (current.candidateRobotUserIds || []).filter((userId) => String(userId) !== String(ownerRobotUserId)),
|
||||
}));
|
||||
};
|
||||
|
||||
const selectCandidateRobots = (robots) => {
|
||||
setCandidatesTouched(true);
|
||||
setForm((current) => ({ ...current, candidateRobotUserIds: robots.map((robot) => robot.userId).filter(Boolean) }));
|
||||
setForm((current) => ({
|
||||
...current,
|
||||
candidateRobotUserIds: robots
|
||||
.map((robot) => robot.userId)
|
||||
.filter((userId) => userId && String(userId) !== String(current.ownerRobotUserId)),
|
||||
}));
|
||||
};
|
||||
|
||||
const selectGiftIds = (key, gifts) => {
|
||||
@ -177,6 +187,10 @@ export function useRobotRoomsPage() {
|
||||
const selected = new Set((form.candidateRobotUserIds || []).map(String));
|
||||
return availableRobotsState.options.filter((item) => selected.has(String(item.userId)));
|
||||
}, [availableRobotsState.options, form.candidateRobotUserIds]);
|
||||
const candidateRobotOptions = useMemo(
|
||||
() => availableRobotsState.options.filter((item) => String(item.userId) !== String(form.ownerRobotUserId)),
|
||||
[availableRobotsState.options, form.ownerRobotUserId],
|
||||
);
|
||||
const selectedGiftOptions = useMemo(() => {
|
||||
const selected = new Set((form.giftIds || []).map(String));
|
||||
return giftOptionsState.options.filter((item) => selected.has(giftId(item)));
|
||||
@ -194,6 +208,7 @@ export function useRobotRoomsPage() {
|
||||
availableRobots: availableRobotsState.options,
|
||||
changeStatus,
|
||||
closeAction,
|
||||
candidateRobotOptions,
|
||||
data,
|
||||
error,
|
||||
form,
|
||||
|
||||
@ -184,7 +184,7 @@ export function RoomRobotPage() {
|
||||
isOptionEqualToValue={(option, value) => option.userId === value.userId}
|
||||
loading={page.availableRobotsLoading}
|
||||
noOptionsText="当前无数据"
|
||||
options={page.availableRobots}
|
||||
options={page.candidateRobotOptions}
|
||||
renderInput={(params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
|
||||
26
src/features/rooms/schema.test.ts
Normal file
26
src/features/rooms/schema.test.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import { describe, expect, test } from "vitest";
|
||||
|
||||
import { parseForm } from "@/shared/forms/validation";
|
||||
import { robotRoomCreateSchema } from "./schema";
|
||||
|
||||
describe("robot room form schema", () => {
|
||||
test("preserves int64 robot user ids as strings", () => {
|
||||
const payload = parseForm(robotRoomCreateSchema, {
|
||||
candidateRobotUserIds: ["325455441691676672"],
|
||||
giftIds: ["84"],
|
||||
luckyComboMax: "10000",
|
||||
luckyComboMin: "100",
|
||||
luckyGiftIds: ["28"],
|
||||
luckyPauseMaxMs: "20000",
|
||||
luckyPauseMinMs: "5000",
|
||||
maxRobotCount: "8",
|
||||
minRobotCount: "2",
|
||||
normalGiftIntervalMs: "10000",
|
||||
ownerRobotUserId: "325379237278126080",
|
||||
visibleRegionId: 0,
|
||||
});
|
||||
|
||||
expect(payload.ownerRobotUserId).toBe("325379237278126080");
|
||||
expect(payload.candidateRobotUserIds).toEqual(["325455441691676672"]);
|
||||
});
|
||||
});
|
||||
@ -2,6 +2,10 @@ import { z } from "zod";
|
||||
|
||||
const optionalText = (max: number, message: string) => z.string().trim().max(max, message).optional().default("");
|
||||
const roomSeatCandidates = [10, 15, 20, 25, 30] as const;
|
||||
const robotUserIdSchema = (message: string) => z
|
||||
.union([z.string(), z.number()])
|
||||
.transform((value) => String(value).trim())
|
||||
.refine((value) => /^[1-9]\d*$/.test(value), message);
|
||||
const pinTypeSchema = z
|
||||
.string()
|
||||
.trim()
|
||||
@ -72,7 +76,7 @@ export const roomPinCreateSchema = z
|
||||
|
||||
export const robotRoomCreateSchema = z
|
||||
.object({
|
||||
candidateRobotUserIds: z.array(z.coerce.number().int().positive()).min(1, "请选择候选机器人"),
|
||||
candidateRobotUserIds: z.array(robotUserIdSchema("请选择候选机器人")).min(1, "请选择候选机器人"),
|
||||
giftIds: z.array(z.string().trim().min(1)).min(1, "请选择普通礼物合集"),
|
||||
luckyComboMax: z.coerce.number().int().min(1, "幸运礼物连击范围不正确"),
|
||||
luckyComboMin: z.coerce.number().int().min(1, "幸运礼物连击范围不正确"),
|
||||
@ -82,7 +86,7 @@ export const robotRoomCreateSchema = z
|
||||
maxRobotCount: z.coerce.number().int().min(1, "机器人数量范围不正确"),
|
||||
minRobotCount: z.coerce.number().int().min(1, "机器人数量范围不正确"),
|
||||
normalGiftIntervalMs: z.coerce.number().int().min(1000, "普通礼物频次不正确"),
|
||||
ownerRobotUserId: z.coerce.number().int().positive("请选择房主机器人"),
|
||||
ownerRobotUserId: robotUserIdSchema("请选择房主机器人"),
|
||||
visibleRegionId: z.coerce.number().int().min(0, "区域 ID 不正确").default(0),
|
||||
})
|
||||
.refine((value) => value.maxRobotCount >= value.minRobotCount, {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user