Files
EpicNext-Cms/src/features/housekeeping/domains/hotel/pages/room-furni.tsx
T
Simo 43470ebf82
CI / check (pull_request) Failing after 10s
CI / deploy (pull_request) Skipped
CI / release (pull_request) Skipped
feat(housekeeping): unify complete rebuild in gated preview
2026-08-31 20:37:51 +02:00

106 lines
2.6 KiB
TypeScript

import { PERMS } from "@/lib/permission-slugs";
import type { HousekeepingPageInput } from "../../../route-handlers";
import { hotelQuery } from "../queries/rooms";
import { HotelCommandForm } from "./hotel-command-form";
import {
HotelPageFrame,
type HotelPageProps,
parseHotelListInput,
} from "./hotel-page-frame";
export function HotelRoomFurniPage(props: HotelPageProps) {
return (
<HotelPageFrame
title="Room furniture"
description="Inspect and safely edit furniture scoped to this room."
result={props.result}
forms={
props.context.has(PERMS.ROOMS_EDIT) ? (
<div className="grid gap-3 lg:grid-cols-2">
<HotelCommandForm
commandId="hotel.rooms.furni.update"
buttonLabel="Save furniture"
input={{}}
fields={[
{
name: "roomId",
label: "Room ID",
type: "number",
required: true,
},
{
name: "itemId",
label: "Item ID",
type: "number",
required: true,
},
{ name: "x", label: "X", type: "number" },
{ name: "y", label: "Y", type: "number" },
{ name: "z", label: "Z", type: "number" },
{ name: "rot", label: "Rotation", type: "number" },
{ name: "wallPos", label: "Wall position", type: "text" },
{ name: "extraData", label: "Extra data", type: "textarea" },
]}
/>
<HotelCommandForm
commandId="hotel.rooms.furni.delete"
buttonLabel="Delete furniture"
input={{}}
requiresReason
fields={[
{
name: "roomId",
label: "Room ID",
type: "number",
required: true,
},
{
name: "itemId",
label: "Item ID",
type: "number",
required: true,
},
]}
/>
<HotelCommandForm
commandId="hotel.rooms.furni.bulk-delete"
buttonLabel="Delete selected furniture"
input={{}}
requiresReason
fields={[
{
name: "roomId",
label: "Room ID",
type: "number",
required: true,
},
{
name: "itemIds",
label: "Item IDs (comma separated)",
type: "id-list",
required: true,
},
]}
/>
</div>
) : null
}
/>
);
}
export async function renderHotelRoomFurniPage(input: HousekeepingPageInput) {
const result = await hotelQuery.run(input.context, {
routeId: "hotel.room-furni",
params: input.match.params,
list: parseHotelListInput(input.searchParams ?? {}),
});
return (
<HotelRoomFurniPage
context={input.context}
result={result}
routeId="hotel.room-furni"
/>
);
}