fix(GRO-1489): resolve 7 lint errors blocking dev CI
CI / Update Infra Image Tags (pull_request) Has been skipped
CI / Lint & Typecheck (pull_request) Failing after 19s
CI / Test (pull_request) Failing after 25s
CI / E2E Tests (pull_request) Has been skipped
CI / Build (pull_request) Has been skipped
CI / Build & Push Docker Images (pull_request) Has been skipped
CI / Web E2E (Dev) (pull_request) Has been cancelled
CI / Deploy PR to groombook-dev (pull_request) Has been cancelled

- Remove unused gte, lt, ne imports from cascade.ts
- Rename originalEndTime → _originalEndTime in detectAndCascadeOverrun params
- Rename originalStartTime/newStartTime → _originalStartTime/_newStartTime in isOverrun params
- Remove unused petCoatType assignment in book.ts availability route
- Align x-large → xlarge in Book.tsx size option value and duration display

Unblocks: GRO-1481 promotion (PR #428)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
2026-05-21 20:34:05 +00:00
parent 3aa7631519
commit a346ee787c
3 changed files with 9 additions and 10 deletions
+7 -7
View File
@@ -1,4 +1,4 @@
import { eq, and, gt, gte, lt, ne, or, asc } from "@groombook/db"; import { eq, and, gt, or, asc } from "@groombook/db";
import { appointments, clients, pets, services, staff, type Db } from "@groombook/db"; import { appointments, clients, pets, services, staff, type Db } from "@groombook/db";
import { resolveBufferMinutes } from "./buffer.js"; import { resolveBufferMinutes } from "./buffer.js";
import { sendEmail, buildRescheduleNotificationEmail } from "../services/email.js"; import { sendEmail, buildRescheduleNotificationEmail } from "../services/email.js";
@@ -53,12 +53,12 @@ export async function detectAndCascadeOverrun({
db, db,
overrunningAppointmentId, overrunningAppointmentId,
newEndTime, newEndTime,
originalEndTime, _originalEndTime,
}: { }: {
db: Db; db: Db;
overrunningAppointmentId: string; overrunningAppointmentId: string;
newEndTime: Date; newEndTime: Date;
originalEndTime: Date; _originalEndTime: Date;
}): Promise<CascadeResult> { }): Promise<CascadeResult> {
const result: CascadeResult = { shifted: [], flaggedForReview: [] }; const result: CascadeResult = { shifted: [], flaggedForReview: [] };
@@ -178,16 +178,16 @@ export async function detectAndCascadeOverrun({
export function isOverrun({ export function isOverrun({
originalEndTime, originalEndTime,
newEndTime, newEndTime,
originalStartTime, _originalStartTime,
newStartTime, _newStartTime,
status, status,
currentTime, currentTime,
bufferMinutes, bufferMinutes,
}: { }: {
originalEndTime: Date; originalEndTime: Date;
newEndTime: Date; newEndTime: Date;
originalStartTime: Date; _originalStartTime: Date;
newStartTime?: Date; _newStartTime?: Date;
status: string; status: string;
currentTime: Date; currentTime: Date;
bufferMinutes: number; bufferMinutes: number;
-1
View File
@@ -44,7 +44,6 @@ bookRouter.get("/availability", async (c) => {
const serviceId = c.req.query("serviceId"); const serviceId = c.req.query("serviceId");
const dateStr = c.req.query("date"); const dateStr = c.req.query("date");
const petSizeCategory = c.req.query("petSizeCategory") ?? undefined; const petSizeCategory = c.req.query("petSizeCategory") ?? undefined;
const petCoatType = c.req.query("petCoatType") ?? undefined;
if (!serviceId || !dateStr) { if (!serviceId || !dateStr) {
return c.json({ error: "serviceId and date are required" }, 400); return c.json({ error: "serviceId and date are required" }, 400);
+2 -2
View File
@@ -515,7 +515,7 @@ export function BookPage() {
<option value="small">Small (under 15 lbs)</option> <option value="small">Small (under 15 lbs)</option>
<option value="medium">Medium (1540 lbs)</option> <option value="medium">Medium (1540 lbs)</option>
<option value="large">Large (4080 lbs)</option> <option value="large">Large (4080 lbs)</option>
<option value="x-large">X-Large (over 80 lbs)</option> <option value="xlarge">X-Large (over 80 lbs)</option>
</select> </select>
</div> </div>
<div> <div>
@@ -568,7 +568,7 @@ export function BookPage() {
<div> <div>
<div style={{ color: "#9ca3af", fontSize: 12, fontWeight: 600, textTransform: "uppercase" }}>Service</div> <div style={{ color: "#9ca3af", fontSize: 12, fontWeight: 600, textTransform: "uppercase" }}>Service</div>
<div style={{ fontWeight: 600 }}>{selectedService.name}</div> <div style={{ fontWeight: 600 }}>{selectedService.name}</div>
<div style={{ color: "#6b7280" }}>{fmtPrice(selectedService.basePriceCents)} · {fmtDuration(selectedService.durationMinutes + ((form.petSizeCategory === "large" || form.petSizeCategory === "x-large") ? (selectedService.defaultBufferMinutes ?? 0) : 0))}</div> <div style={{ color: "#6b7280" }}>{fmtPrice(selectedService.basePriceCents)} · {fmtDuration(selectedService.durationMinutes + ((form.petSizeCategory === "large" || form.petSizeCategory === "xlarge") ? (selectedService.defaultBufferMinutes ?? 0) : 0))}</div>
</div> </div>
<div> <div>
<div style={{ color: "#9ca3af", fontSize: 12, fontWeight: 600, textTransform: "uppercase" }}>Date & Time</div> <div style={{ color: "#9ca3af", fontSize: 12, fontWeight: 600, textTransform: "uppercase" }}>Date & Time</div>