- Update default column indices to July 2026 layout (EmpCO_Compliant,
Comments, Categorisation Code, Ingredients added; PM Classification
removed; downstream columns shifted)
- Seed internal Categorisation Code from the new Excel column while
keeping app-side edits as the source of truth
- Guard legacy CPNP index-77 fallbacks: only trusted when the current
layout still holds CPNP there (new layout stores Item To Root Units)
- Use resolved column index for forced zero stock instead of static one
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Removed h-full and overflow-auto from the root grid div. h-full was
constraining the grid to the viewport height, causing CSS grid to
shrink rows to fit instead of overflowing. Parent <main> already has
overflow-auto, so removing the height constraint lets content expand
naturally and scroll correctly on small screens.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
The proxy was calling getAccessToken() but discarding the result, then
downloading via the public sharing link which is CDN-cached. Updated
data in Dropbox could take minutes/hours to propagate through the CDN,
causing all fields in the Matrix view to show stale values.
Now attempts download via /2/sharing/get_shared_link_file with Bearer
auth (no CDN cache), falling back to the sharing link if credentials
are not configured.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
- Show total record count and filtered count in subtitle
- Add #N global number to each history entry row
- Add # column index inside each change detail table
- Column header already shown via headers[i] — now labeled "Column"
Co-Authored-By: claude-flow <ruv@ruv.net>
- Add bc-proxy and bc-export serverless API handlers
- Add businessCentral service with updateCpnpNoInBC and downloadBusinessCentralItemsExcel
- Sync cpnpNo to BC on save (CosmeticItemsView and handleSaveAll)
- Parallelize handleSaveAll with Promise.all
- Fix array index key, a11y click/keyboard handlers, autoFocus
- Grant Change History and Pending Validation access to jingying.shi@craze-group.com
Co-Authored-By: claude-flow <ruv@ruv.net>
- saveRowToSupabase now accepts optional status param (default 'pending')
- CosmeticItemsView saves CPNP with status 'edited' so resetAllPendingRows
does not affect it and it survives the startup merge
- Re-added CPNP_NO to editableColumns so the merge restores it from Supabase
Co-Authored-By: claude-flow <ruv@ruv.net>
Bypasses the pending queue timing issue by calling saveRowToSupabase
directly after onSaveRow. Shows a spinner while saving. Alert on error.
Co-Authored-By: claude-flow <ruv@ruv.net>
Items with a CPNP number now display it in green. Empty cells still show
the dashed 'Click to fill...' button. Both are clickable to edit inline.
Co-Authored-By: claude-flow <ruv@ruv.net>
CPNP_NO re-added to COLUMN_PATTERNS so resolveColumnIndices maps it to
the real Excel column index. Removed it from VIRTUAL_COLS and editableColumns
in App.tsx since data comes from the spreadsheet, not Supabase-only storage.
Co-Authored-By: claude-flow <ruv@ruv.net>