Christian Vidal Wolf
528d859742
restore cosmetic cpnp merge logic
2026-05-20 15:06:12 +02:00
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 Wolf and claude-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 Wolf and claude-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 Wolf and claude-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 Wolf and claude-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 Wolf and claude-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 Wolf and claude-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 Wolf and claude-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 Wolf and claude-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 Wolf and claude-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 Wolf and claude-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 Wolf and claude-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 Wolf and claude-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 Wolf and claude-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 Wolf and claude-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 Wolf and claude-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 Wolf and claude-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
Christian Vidal Wolf
5e9ab45191
refactor: use React Portals for note modals to ensure foreground visibility
2026-04-27 14:40:39 +02:00
Christian Vidal Wolf
0fa845e814
fix: increase z-index for modals and popups in PricingView to ensure foreground visibility
2026-04-27 14:37:05 +02:00
Christian Vidal Wolf
a2bb2f2307
fix: improve filter popover positioning and reliability across all views
2026-04-25 09:14:25 +02:00
Christian Vidal Wolf
f0f78a6126
fix: resolve Uncaught TypeError: Cannot read properties of undefined (reading 'key') by ensuring usePersistentState handles functional updates safely
2026-04-24 20:31:32 +02:00
Christian Vidal Wolf
cd621de5d3
fix: implement exhaustive safety checks for filters and sorting to prevent white screen crashes
2026-04-24 20:26:36 +02:00
Christian Vidal Wolf
a452283fbb
fix: resolve JSX syntax error (unclosed span tag) in PricingView
2026-04-24 20:22:55 +02:00
Christian Vidal Wolf
d50ecc9506
fix: add Item to Logistic filter and apply missing safety checks to dimension filters
2026-04-24 20:21:45 +02:00
Christian Vidal Wolf
dcbaaea055
fix: resolve white screen crash in PricingView filters by adding comprehensive safety checks
2026-04-24 20:19:01 +02:00
Christian Vidal Wolf
127363a308
refactor: remove AI Settings button and modal from TopBar
2026-04-24 17:33:47 +02:00
Christian Vidal Wolf
4b7c1a2dad
fix: hardcode Gemini API key for all users and disable personal overrides
2026-04-24 17:29:17 +02:00
Christian Vidal Wolf
9655da8164
refactor: eliminate automatic 'End of Life' (EOL) logic and yellow highlighting for OOC products with no stock
2026-04-24 17:24:47 +02:00
Christian Vidal Wolf
91fe855434
feat: allow applying filters with Enter key
2026-04-24 17:20:47 +02:00
Christian Vidal Wolf
ef9cd53558
fix: resolve crash by adding missing second argument to createPortal
2026-04-24 17:15:08 +02:00
Christian Vidal Wolf
d06285ddaa
fix: portal all filter popovers to prevent occlusion by sticky columns
2026-04-24 17:13:12 +02:00
Christian Vidal Wolf
e96d245f59
fix: ensure filter dropdowns are not covered by pinned columns
2026-04-24 17:08:23 +02:00
Christian Vidal Wolf
6057a16229
fix: remove overflow-hidden from pinned td cells to allow filter popover visibility
2026-04-24 16:21:56 +02:00
Christian Vidal Wolf
37aeee0dc7
fix: ensure filter popover z-index above pinned columns
2026-04-24 16:16:37 +02:00
Christian Vidal Wolf
92183dd942
fix: z-index filters above pinned columns
2026-04-24 16:13:30 +02:00
Christian Vidal Wolf
8d00b7372f
feat: make search filters independent per tab while maintaining persistence
2026-04-24 16:09:49 +02:00
Christian Vidal Wolf and claude-flow
f2ed303fed
fix: apply getHeaderStickyRank to outerH pinned column header
...
Completes the fix where pinned column filter popovers were hidden
behind sticky body cells. The outerH <th> was missed in the batch
and still used the lower body-level stacking rank.
Co-Authored-By: claude-flow <ruv@ruv.net >
2026-04-24 14:21:07 +02:00
Christian Vidal Wolf
917bb08d9f
feat: persistent search and filters across all tabs via FilterContext
2026-04-24 14:19:09 +02:00
Christian Vidal Wolf
29d5994d6a
fix: ensure filter popovers appear above pinned columns
...
- Add zIndex prop to ColumnFilterPopover and TextFilterPopover
- Pass higher zIndex to popovers when column is pinned (zIndex + 100)
- Filter popovers now display correctly over sticky columns
2026-04-24 14:06:32 +02:00
Christian Vidal Wolf
b5e8c2fe22
feat: upgrade Gemini models to 3.1 and 2.5 series (April 2026)
2026-04-24 13:54:45 +02:00
Christian Vidal Wolf
96c37f92e2
security: restrict AI settings to authorized admin email
2026-04-24 13:47:31 +02:00
Christian Vidal Wolf
13890af125
feat: add AI Settings modal to manage API keys from the UI
2026-04-24 13:45:38 +02:00
Christian Vidal Wolf
43f94b3902
fix: include dynamic columns in sticky position/z-index calculation
...
- Include pricingEditableCols and containerCols in column order for pinned calculation
- Fix z-index stacking so all pinned columns stay visible while scrolling
2026-04-24 13:35:43 +02:00
Christian Vidal Wolf
1c76544e47
fix: update CSP to allow Gemini API
2026-04-24 13:31:49 +02:00
Christian Vidal Wolf
05f9f0ef10
fix: improve column pinning with proper z-index stacking
...
- Add getStickyRank() function for layered z-index on pinned columns
- Higher z-index for rightmost pinned columns so they stack correctly
- Apply z-index dynamically based on column order in pinned list
- All pinned columns now stay visible while scrolling
2026-04-24 13:31:36 +02:00
Christian Vidal Wolf
3bc2753bec
debug: add API key source logging
2026-04-24 13:28:01 +02:00
Christian Vidal Wolf
2c1efc44d6
fix: rename Gemini API key to VITE_GEMINI_API_KEY and improve logging
2026-04-24 13:27:34 +02:00
Christian Vidal Wolf
e6207dff64
feat: add column pinning (freeze) functionality in Pricing Units tab
...
- Add Pin Columns button to select columns to freeze
- Implement sticky columns with left positioning for pinned columns
- Support pinning dynamic pricing and container columns
- Add Pin icon indicator on pinned columns
- Include reset and unpin all options in pin panel
2026-04-24 13:23:18 +02:00
Christian Vidal Wolf
b8a960e3e5
fix: enable real-time filtering for global search and fix selection bug
2026-04-24 12:43:27 +02:00
Christian Vidal Wolf
a0a9fbeb2e
fix: resolve syntax error in global search ternary operator
2026-04-24 12:39:47 +02:00
Christian Vidal Wolf
c5d083e011
feat: implement advanced 5-term global search in PricingView
2026-04-24 12:38:11 +02:00
Christian Vidal Wolf
64babee90d
feat: upgrade column filters to support up to 5 dynamic terms with AND/OR logic
2026-04-24 12:34:00 +02:00
Christian Vidal Wolf
dbc47d95cb
feat: implement advanced Excel-style Custom Filter for SKU and Name columns and fix search clear bug
2026-04-24 12:27:30 +02:00
Christian Vidal Wolf
6a258c3fb6
docs: clarify multi-word search in UI and apply AND logic to column name filters
2026-04-24 12:23:48 +02:00
Christian Vidal Wolf
97fe06eedd
feat: implement multi-word AND search in all views and initialize RuFlo V3
2026-04-24 12:20:14 +02:00
Christian Vidal Wolf
b662acddd7
fix: date formatting for Dropbox data imports
2026-04-23 21:44:26 +02:00
Christian Vidal Wolf
8ffcae5eef
fix: prefer history data over synced data for internal columns
2026-04-23 19:28:25 +02:00
Christian Vidal Wolf
a987a5b750
debug: add immediate log after getHistoryDataForMerge
2026-04-23 19:25:52 +02:00
Christian Vidal Wolf
cf602fe9a2
debug: add detailed safeFetch and getHistoryDataForMerge logging
2026-04-23 19:23:29 +02:00
Christian Vidal Wolf
3892b9f256
debug: log processedRow[103] for 59272EN
2026-04-23 19:20:43 +02:00
Christian Vidal Wolf
f15c9fa853
fix: pad rows to match extendedHeaders length so internal cols are readable
2026-04-23 19:17:03 +02:00
Christian Vidal Wolf
7ef9f62497
debug: add diagnostic logs to trace history merge for 59272EN
2026-04-23 19:14:10 +02:00
Christian Vidal Wolf
c1e3960a20
fix: merge history data into rows when products table is empty
2026-04-23 19:07:38 +02:00
Christian Vidal Wolf
ee94926d04
fix: HistoryEntry.id type changed from number to string (Supabase returns UUID)
2026-04-23 18:58:52 +02:00
Christian Vidal Wolf
be2adbfe68
debug: add detailed logging to trace history loading
2026-04-23 18:51:07 +02:00
Christian Vidal Wolf
0eeeeb480c
fix: always load history on mount and reload on data change
2026-04-23 18:47:32 +02:00