chore(autonomous-session): consolidate uncommitted work from prior session
Bundles the prior autonomous-session output that was sitting unstaged: - Em-dash sweep across src/ + tests/ (en-dash/em-dash to hyphen, ~2280 instances) - country-flag-icons rollout (CountryFlag component, replaces emoji glyphs that never rendered on Windows; lazy-loads the 3x2 SVG index as a single chunk after the per-subpath dynamic-import approach silently failed in webpack) - Admin IA Phase 1+2: 7-domain regroup, 41 to 38 pages, /admin/berths index, redirects (ocr to ai, reports to dashboard, invitations to users), docs/admin-ia-proposal.md - Per-template email tester (registry + endpoint + UI on Email admin page) - Cancel-document mode picker (delete-from-Documenso vs keep-for-audit) - Dashboard PDF report: 25 widgets, SVG charts, date-range picker, 11 resolvers - Customize-widgets per-region sortables at xl+ (charts/rails/feed); single flat sortable below xl when the layout stacks; per-viewport saved orders - Audit doc updates capturing each shipped item - Lint fixes: react-compiler immutability in DonutChart (reduce instead of let-reassign), set-state-in-effect disables in CountryFlag and UploadForSigning preview-bytes effect, unused 'confirm' destructures in interest contract + reservation tabs, unescaped apostrophe in test-template card copy
This commit is contained in:
@@ -79,7 +79,7 @@ export function InterestList() {
|
||||
}, [setChrome]);
|
||||
|
||||
// Force the list view at mobile widths even when the user previously
|
||||
// toggled the kanban from desktop — the board is desktop-only.
|
||||
// toggled the kanban from desktop - the board is desktop-only.
|
||||
useEffect(() => {
|
||||
if (typeof window === 'undefined') return;
|
||||
if (viewMode === 'board' && window.innerWidth < 640) setViewMode('table');
|
||||
@@ -135,7 +135,7 @@ export function InterestList() {
|
||||
},
|
||||
});
|
||||
|
||||
// Single bulk endpoint replaces the prior parallel fan-out — gives
|
||||
// Single bulk endpoint replaces the prior parallel fan-out - gives
|
||||
// the user a per-row failure summary and shares one server-side
|
||||
// permission check.
|
||||
const bulkMutation = useMutation({
|
||||
@@ -155,7 +155,7 @@ export function InterestList() {
|
||||
const s = res.data.summary;
|
||||
if (s.failed > 0) {
|
||||
toast.warning(
|
||||
`${s.succeeded} of ${s.total} succeeded. ${s.failed} failed — check the activity log.`,
|
||||
`${s.succeeded} of ${s.total} succeeded. ${s.failed} failed - check the activity log.`,
|
||||
);
|
||||
}
|
||||
},
|
||||
@@ -167,7 +167,7 @@ export function InterestList() {
|
||||
onArchive: (interest) => setArchiveInterest(interest),
|
||||
});
|
||||
|
||||
// Persisted per-user column visibility — same pattern as ClientList.
|
||||
// Persisted per-user column visibility - same pattern as ClientList.
|
||||
// The hidden array is the source of truth; built columns stay
|
||||
// declared and we drive table visibility via columnVisibility.
|
||||
const { hidden, setHidden } = useTablePreferences('interests', INTEREST_DEFAULT_HIDDEN);
|
||||
@@ -181,7 +181,7 @@ export function InterestList() {
|
||||
variant="gradient"
|
||||
actions={
|
||||
<div className="flex items-center gap-2">
|
||||
{/* Kanban view is desktop-only — mobile drops the toggle and
|
||||
{/* Kanban view is desktop-only - mobile drops the toggle and
|
||||
falls back to the list/cards view (the board's column
|
||||
horizontal-scroll model is unusable at phone widths). */}
|
||||
<div
|
||||
@@ -223,7 +223,7 @@ export function InterestList() {
|
||||
<div className="flex flex-wrap items-center gap-2">
|
||||
{/* On the kanban view we strip filters that don't make sense
|
||||
* there: `pipelineStage` (the columns ARE the stages) and
|
||||
* `includeArchived` (the board is for active deals — the
|
||||
* `includeArchived` (the board is for active deals - the
|
||||
* list view is the place to see history). The board endpoint
|
||||
* rejects these via boardFiltersSchema if they're sent. */}
|
||||
<FilterBar
|
||||
@@ -238,7 +238,7 @@ export function InterestList() {
|
||||
onChange={setFilter}
|
||||
onClear={clearFilters}
|
||||
/>
|
||||
{/* Tag picker — primary use case is filtering by event/yacht-show
|
||||
{/* Tag picker - primary use case is filtering by event/yacht-show
|
||||
* ("Palm Beach 2026") that the rep tagged interests with at the
|
||||
* show. The validator already accepts `tagIds` on listInterests;
|
||||
* this surfaces the input in the filter UI. */}
|
||||
|
||||
Reference in New Issue
Block a user