dfd6b63888
The mobile `/water` worker experience (Tuxedo-only, matching the
existing water flow) now exposes a "Time" tab alongside "Headgates"
so irrigators can clock in/out from the same phone they use for
water entries — no second PIN.
- MobileWaterApp: new `activeTab` state, sticky TabBar rendered only
after PIN, screen='time' case embeds <TimeTrackingFieldClient>
with hardcoded Tuxedo brand constants.
- handlePinSubmit best-effort calls `verifyTimeTrackingPin` after
the water PIN succeeds, so the Time tab never re-prompts a worker
who is also set up in `time_tracking_workers`.
- handleLogout clears BOTH `wl_session` and `time_tracking_session`
cookies in independent try/catch blocks.
- Tab switching to Time drops in-flight water flow state; switching
back to Headgates restores the list without reload.
- i18n: added `tab.{headgates,time,logout}` strings (en + es); lifted
Tuxedo brand display constants into @/lib/water-log/brand so the
standalone /tuxedo/time-clock page and the embedded Time tab share
one source of truth.
26 lines
725 B
TypeScript
26 lines
725 B
TypeScript
import TimeTrackingFieldClient from "@/components/time-tracking/TimeTrackingFieldClient";
|
|
import { getBrandSettingsPublic } from "@/actions/brand-settings";
|
|
import {
|
|
TUXEDO_BRAND_ID,
|
|
TUXEDO_BRAND_NAME,
|
|
TUXEDO_BRAND_ACCENT,
|
|
} from "@/lib/water-log/brand";
|
|
|
|
export const metadata = {
|
|
title: `Worker Clock — ${TUXEDO_BRAND_NAME}`,
|
|
};
|
|
|
|
export default async function TuxedoTimeClockPage() {
|
|
const settings = await getBrandSettingsPublic("tuxedo");
|
|
const logoUrl = settings.success ? (settings.settings?.logo_url ?? null) : null;
|
|
|
|
return (
|
|
<TimeTrackingFieldClient
|
|
brandId={TUXEDO_BRAND_ID}
|
|
brandName={TUXEDO_BRAND_NAME}
|
|
brandAccent={TUXEDO_BRAND_ACCENT}
|
|
logoUrl={logoUrl}
|
|
/>
|
|
);
|
|
}
|