Commit Graph
342 Commits
Author SHA1 Message Date
Christian Vidal Wolf 1d5f918a0a show all cosmetic items by cpnp filter 2026-05-20 15:02:48 +02:00
Christian Vidal Wolf 39a3588078 improve cpnp history restore 2026-05-20 15:00:26 +02:00
Christian Vidal Wolf cb913b9d72 restore cpnp values from history 2026-05-20 14:56:55 +02:00
Christian Vidal Wolf d17db2761b fix user validation fallback 2026-05-20 14:04:02 +02:00
Christian Vidal Wolf 396ff23d49 fix dropbox load fallback 2026-05-20 13:59:35 +02:00
Christian Vidal Wolf e8d05069f3 fix vercel load errors 2026-05-20 13:57:11 +02:00
Christian Vidal Wolf 88dc894050 fix(vercel): remove manual rewrites, rely on Vercel auto-detection of /api/ functions 2026-05-20 13:48:08 +02:00
Christian Vidal Wolf 4612f13968 feat(dev): support Vercel serverless API handlers locally in Vite dev server 2026-05-20 13:40:51 +02:00
Christian Vidal Wolf b2c6bce8eb fix(vercel): add leading slashes to rewrite destinations 2026-05-20 13:38:19 +02:00
Christian Vidal Wolf 47b9303202 feat: implement manual user validation and user deletion flow 2026-05-20 13:33:37 +02:00
Christian Vidal Wolf 1d105e19ae feat(topbar): add Discard button to BC sync queue dropdown 2026-05-15 13:52:47 +02:00
Christian Vidal Wolf 6d664c26f1 feat(history): add Discard selected button to cancel pending BC syncs 2026-05-15 13:45:44 +02:00
Christian Vidal Wolf 143f655f3c fix: commit all BC sync files missing from repo 2026-05-15 11:00:21 +02:00
Christian Vidal Wolf 85794b4b52 fix: add missing SyncStatusPill component to repo 2026-05-15 10:57:39 +02:00
Christian Vidal Wolf cf92b85d17 fix(ui): remove SyncStatusPill from ProductDescriptions SKU column 2026-05-15 10:53:46 +02:00
Christian Vidal Wolf 2944e6958c fix(history): paginate all records, number oldest=1 newest=N, display newest first 2026-05-15 10:51:01 +02:00
Christian Vidal Wolf f66295f07b feat: schedule 6h backup via GitHub Actions instead of Vercel cron 2026-05-15 08:10:39 +02:00
Christian Vidal Wolf b911ada50b feat: add 6h automated backup to Dropbox via Vercel cron 2026-05-15 08:06:54 +02:00
Christian Vidal Wolf cf531cfa40 fix(ui): remove yellow/red row backgrounds in PricingView 2026-05-14 20:27:53 +02:00
Christian Vidal Wolf e89f31d9b3 fix(ui): remove yellow/red row backgrounds, keep green only 2026-05-14 20:21:01 +02:00
Christian Vidal Wolf 008a10502b feat(history): add user filter dropdown 2026-05-14 20:15:34 +02:00
Christian Vidal Wolf 7dd899dae6 fix(history): number records oldest=1, newest=N 2026-05-14 18:37:07 +02:00
Christian Vidal Wolfandclaude-flow ca8a98c6c2 feat(history): add record numbering and column names to Change History
- 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>
2026-05-14 18:33:07 +02:00
Christian Vidal Wolfandclaude-flow 9b5932920e feat: add Business Central CPNP sync and expand history access
- 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>
2026-05-14 17:17:10 +02:00
Christian Vidal Wolfandclaude-flow 2961d3f86a fix: persist CPNP No. across refreshes by saving as 'edited' and restoring in merge
- 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>
2026-05-12 16:03:12 +02:00
Christian Vidal Wolfandclaude-flow a0b793b797 fix: save CPNP No. directly to Supabase on confirm, no Save All required
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>
2026-05-12 15:59:17 +02:00
Christian Vidal Wolfandclaude-flow 73118ea4c3 fix: show existing CPNP No. value in table cell, click to edit
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>
2026-05-12 12:27:00 +02:00
Christian Vidal Wolfandclaude-flow 9f3acd0631 fix: restore CPNP No. as Excel-resolved column, not virtual
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>
2026-05-12 12:22:14 +02:00
Christian Vidal Wolfandclaude-flow 1b4918a385 fix: prevent CPNP_NO from being overridden by dynamic column detection
CPNP_NO must stay hardcoded at index 107. Removed it from COLUMN_PATTERNS
and added guard to skip empty patterns in resolveColumnIndices.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-12 12:19:09 +02:00
Christian Vidal Wolfandclaude-flow 889e98b0ca fix: restore CPNP No. from Supabase and simplify column filter matching in Cosmetic Items
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-12 12:15:27 +02:00
Christian Vidal Wolfandclaude-flow 60224931bc fix: normalize filter comparison with trim and exact set match in Cosmetic Items tab
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-12 12:12:49 +02:00
Christian Vidal Wolfandclaude-flow d69acd5872 fix: skip column filter when all values selected in Cosmetic Items tab
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-12 12:08:21 +02:00
Christian Vidal Wolfandclaude-flow 19b02812bd feat: enable sorting and filtering on CPNP No. column in Cosmetic Items tab
Show all cosmetic products regardless of CPNP status. Column filter on
CPNP No. lets user isolate items with empty value.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-12 11:53:54 +02:00
Christian Vidal Wolfandclaude-flow 7d37d4777b fix: ensure saved changes persist across app refreshes by updating status logic and merge check
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-12 11:51:39 +02:00
Christian Vidal Wolf 311d74b783 fix: ensure saved changes persist across app refreshes by updating status logic and merge check 2026-05-11 11:48:11 +02:00
Christian Vidal Wolf b182ef6037 feat: enable sorting and filtering on CPNP No. column in Cosmetic Items tab 2026-05-11 08:48:32 +02:00
Christian Vidal Wolfandclaude-flow e303c759d7 feat: remove Classification column from Cosmetic Items tab
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-08 13:30:59 +02:00
Christian Vidal Wolfandclaude-flow 1556aea081 feat: add Cosmetic Items tab with inline CPNP No. editing
New sidebar tab for cosmetic product lines (INKEE, BATH FUN, TOP FASHION,
SENSES, BODYNESS) filtered to items with empty CPNP No. Column filters on
Item Available allow toggling zero/non-zero stock. CPNP_NO added as virtual
column (index 107) stored in Supabase.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-08 13:28:39 +02:00
Christian Vidal Wolf d9b9664a9d feat: implement auto-resize textareas in EditPanel for descriptions and details 2026-05-07 08:55:18 +02:00
Christian Vidal Wolfandclaude-flow e7b954ecb4 feat: apply check via header checkbox after drag-selecting rows
After dragging to select rows, checkboxes appear in the Check Ying
and Check Anna column headers showing the count of selected rows.
Clicking one marks or unmarks that column for all selected rows,
then clears the selection. Footer shows a hint with a cancel button.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-28 09:34:42 +02:00
Christian Vidal Wolf 1c68e35ec4 feat: standardize Weight Issues filter to use ColumnFilterPopover 2026-04-28 09:34:12 +02:00
Christian Vidal Wolfandclaude-flow 8e1a533ea2 feat: drag-to-check rows in PricingView (Excel-style)
Dragging the mouse over rows now directly toggles Check Ying on all
covered rows on mouseup. The check value (on/off) is determined by
the state of the first row touched, so dragging over unchecked rows
marks them and vice versa. Rows light up blue during the drag to
show what will be affected.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-28 09:26:48 +02:00
Christian Vidal Wolf d1074f78de chore: remove temporary lint file 2026-04-28 09:22:53 +02:00
Christian Vidal Wolf db35c0233f feat: add Excel-style filters to Check columns and fix TS lint errors 2026-04-28 09:22:34 +02:00
Christian Vidal Wolf 3d89b2538a fix: add missing column patterns to types 2026-04-28 09:22:03 +02:00
Christian Vidal Wolf 69f9773410 feat: add MOQ filtering and sorting in PricingView 2026-04-28 09:21:24 +02:00
Christian Vidal Wolf 712a9dac16 feat: add MOQ column to PricingView positioned after container columns 2026-04-28 09:18:43 +02:00
Christian Vidal Wolf d23f4e625a fix: refactor tooltips to use global state to prevent crash and duplicate function error 2026-04-27 14:54:09 +02:00
Christian Vidal Wolf 601a02117f fix: use Portal for hover tooltips to prevent table container overflow clipping 2026-04-27 14:50:13 +02:00
Christian Vidal Wolf 557cb537a9 fix: render check ying and check anna hover tooltips downwards to prevent header clipping 2026-04-27 14:46:57 +02:00