Extension: per-machine default tablet, skip asking unless busy

- Options page gains a 'Default tablet for this machine' picker,
  populated from the device list once base URL + terminal key are
  configured, auto-saved on change (small enough setting not to warrant
  its own Save button).
- Popup pre-selects the default in its device dropdown but still shows
  the full picker — opening the popup is already a deliberate action, so
  staff can still override it there.
- Injected buttons (row + banner) skip the dropdown entirely when a
  default is configured — one click pushes straight to it. Only falls
  back to the full picker if that specific push comes back busy (409),
  with a note explaining why it's asking despite a default being set.
  background.js's pushBooking() now returns the HTTP status alongside
  ok/error so this can be detected reliably rather than string-matching
  the error message.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
jtricerolph 2026-09-01 20:42:35 +00:00
parent 67def8ac19
commit a37654cdc4
5 changed files with 139 additions and 21 deletions

View file

@ -103,8 +103,11 @@ async function pushBooking(bookingId, deviceId) {
body: JSON.stringify({ booking_id: bookingId, device_id: deviceId }),
});
const body = await res.json().catch(() => ({}));
if (!res.ok) return { ok: false, error: body.error || `HTTP ${res.status}` };
return { ok: true };
// status included so callers can reliably tell "device busy" (409) apart
// from other failures — used by content-script.js's default-tablet
// fast-path to decide whether to fall back to the device picker.
if (!res.ok) return { ok: false, status: res.status, error: body.error || `HTTP ${res.status}` };
return { ok: true, status: res.status };
} catch (err) {
return { ok: false, error: err.message };
}