Vitron-Front/app/routes
fazli 0b18438a97 fix(notif+auth): camelCase badge fields, seller push prompt, only 401 signs out
- app/components/MyLayout.tsx / app/components/home/HomePageTopBar.tsx /
  app/routes/profile._index.tsx: the BadgeCounts type was declared with
  snake_case fields (order_updates, seller_orders) while the API's global
  camelCase renderer sends orderUpdates / sellerOrders on the wire — every
  read went to undefined, so the "buyer activity" dot on the profile icon
  and the order-badge on the store dashboard were silently stuck at 0.
  Fixed by renaming the interface to match the wire and adding sellerChat
  (per-store roll-up) so the store dashboard sidebar reads
  badges.sellerChat[storeId] instead of the buyer-side chat count.
- app/hooks/useBadgeCounts.ts: interface + EMPTY constant updated to
  camelCase + new sellerChat map.
- app/utils/api-error-handler.ts: 403 no longer force-redirects to /logout.
  It used to force-log-out on ANY 403/401, so an approved-but-unbadged
  owner (Ehsan / Noelabel) whose store dashboard fired the Instagram-tab
  query got a 403 → forced logout → the store page vanished mid-load
  and the seller landed on the home screen convinced they'd been kicked
  off their own store. Only 401 signs the session out now.
- app/components/store/StorePushPromptCard.tsx: new dashboard-level card
  that nudges the store owner/staff to enable browser push. Unlike the
  global buyer banner it's not dismissible-forever; "بعداً یادآوری کن"
  hides for 24h and it comes back until the user actually subscribes.
  Handles the permission="denied" path with an in-browser-settings hint.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-18 13:18:08 +00:00
..
_index.tsx feat(discounts): full تخفیف‌ها page with infinite scroll 2026-07-08 14:00:44 +03:30
$.tsx first 2026-04-29 01:44:16 +03:30
cart._index.tsx feat(cart): mockup-style item rows + separate-shipping note 2026-06-27 23:16:42 +03:30
cart.$cartId.tsx Desktop: cart checkout two-column + profile account grid 2026-06-16 11:19:55 +03:30
collection.$id.tsx fix(pwa): apply top safe-area inset to page headers (iOS notch) 2026-07-13 13:21:23 +03:30
collections.tsx fix(pwa): apply top safe-area inset to page headers (iOS notch) 2026-07-13 13:21:23 +03:30
discounts.tsx fix(pwa): apply top safe-area inset to page headers (iOS notch) 2026-07-13 13:21:23 +03:30
explore.tsx Desktop: explore page (category grid + contained layout) 2026-06-16 11:11:46 +03:30
login.tsx Login: 6-digit OTP + desktop layout 2026-06-14 21:36:42 +03:30
logout.tsx first 2026-04-29 01:44:16 +03:30
product.$id.tsx Security fixes: session hardening, open redirect, SSR path injection 2026-06-14 19:02:11 +03:30
profile._index.tsx fix(notif+auth): camelCase badge fields, seller push prompt, only 401 signs out 2026-07-18 13:18:08 +00:00
profile.about.tsx Desktop header: login/profile state + theme toggle; hide about/faq header 2026-06-16 13:59:34 +03:30
profile.bookmarks.tsx fix(desktop): constrain profile sub-pages so they don't stretch on desktop 2026-07-09 11:53:28 +03:30
profile.faq.tsx Desktop header: login/profile state + theme toggle; hide about/faq header 2026-06-16 13:59:34 +03:30
profile.following.tsx fix(desktop): constrain profile sub-pages so they don't stretch on desktop 2026-07-09 11:53:28 +03:30
profile.location._index.tsx fix(desktop): constrain profile sub-pages so they don't stretch on desktop 2026-07-09 11:53:28 +03:30
profile.location.add.tsx fix(desktop): lay out dashboard sub-pages + form pages for wide screens 2026-07-09 12:06:13 +03:30
profile.location.edit.$id.tsx fix(desktop): lay out dashboard sub-pages + form pages for wide screens 2026-07-09 12:06:13 +03:30
profile.orders.tsx fix(desktop): constrain profile sub-pages so they don't stretch on desktop 2026-07-09 11:53:28 +03:30
profile.sets._index.tsx fix(desktop): constrain profile sub-pages so they don't stretch on desktop 2026-07-09 11:53:28 +03:30
profile.sets.$id.tsx fix(desktop): lay out dashboard sub-pages + form pages for wide screens 2026-07-09 12:06:13 +03:30
profile.setting.tsx fix(desktop): constrain profile sub-pages so they don't stretch on desktop 2026-07-09 11:53:28 +03:30
profile.threads._index.tsx first 2026-04-29 01:44:16 +03:30
profile.threads.$threadId.tsx first 2026-04-29 01:44:16 +03:30
profile.tsx feat(notifications): web push opt-in + unread nav badges 2026-06-17 14:02:56 +03:30
profile.wallet._index.tsx fix(desktop): constrain profile sub-pages so they don't stretch on desktop 2026-07-09 11:53:28 +03:30
profile.wallet.payment.tsx fix(desktop): lay out dashboard sub-pages + form pages for wide screens 2026-07-09 12:06:13 +03:30
resources.manifest[.]webmanifest.ts first 2026-04-29 01:44:16 +03:30
robots[.]txt.tsx first 2026-04-29 01:44:16 +03:30
search.$query.tsx feat(search): show sellers and collections in search results 2026-07-09 10:44:52 +03:30
seller.$sellerId._index.tsx feat(seller): customizable profile banner + seller page polish 2026-07-01 12:00:23 +03:30
sellers.tsx fix(pwa): apply top safe-area inset to page headers (iOS notch) 2026-07-13 13:21:23 +03:30
sitemap[.]xml.tsx first 2026-04-29 01:44:16 +03:30
store.$storeId._index.tsx fix(pwa): apply top safe-area inset to page headers (iOS notch) 2026-07-13 13:21:23 +03:30
store.$storeId.edit.tsx first 2026-04-29 01:44:16 +03:30
store.$storeId.financial-dashboard._index.tsx fix(seller-team): guard owner-only routes + robust useMyStores 2026-07-01 17:04:06 +03:30
store.$storeId.financial-dashboard.cash-funds.tsx fix(desktop): lay out dashboard sub-pages + form pages for wide screens 2026-07-09 12:06:13 +03:30
store.$storeId.financial-dashboard.reports.tsx fix(desktop): lay out dashboard sub-pages + form pages for wide screens 2026-07-09 12:06:13 +03:30
store.$storeId.financial-dashboard.transactions.tsx fix(pwa): apply top safe-area inset to page headers (iOS notch) 2026-07-13 13:21:23 +03:30
store.$storeId.orders._index.tsx feat(seller-dashboard): desktop-friendly layouts for list and hub pages 2026-06-17 13:00:18 +03:30
store.$storeId.orders.$orderId.tsx fix(desktop): lay out dashboard sub-pages + form pages for wide screens 2026-07-09 12:06:13 +03:30
store.$storeId.product.$id.tsx Security fixes: session hardening, open redirect, SSR path injection 2026-06-14 19:02:11 +03:30
store.$storeId.products.tsx fix(pwa): top safe-area inset on products page + owner product carousel 2026-07-13 15:16:28 +03:30
store.$storeId.setting.tsx feat(seller-team): multi-user dashboard — store switcher, role gating, team UI 2026-07-01 16:43:53 +03:30
store.$storeId.shipping-method.tsx fix(desktop): lay out dashboard sub-pages + form pages for wide screens 2026-07-09 12:06:13 +03:30
store.$storeId.team.tsx feat(seller-team): multi-user dashboard — store switcher, role gating, team UI 2026-07-01 16:43:53 +03:30
store.$storeId.threads._index.tsx first 2026-04-29 01:44:16 +03:30
store.$storeId.threads.$threadId.tsx first 2026-04-29 01:44:16 +03:30
store.$storeId.tsx feat(notifications): web push opt-in + unread nav badges 2026-06-17 14:02:56 +03:30
store.add.manual.$storeId.tsx feat(seller): size chart editor + buyer size guide (راهنمای سایز) 2026-07-13 13:21:23 +03:30
store.authenticate.instagram.$storeId.tsx fix(desktop): lay out dashboard sub-pages + form pages for wide screens 2026-07-09 12:06:13 +03:30
store.create.tsx first 2026-04-29 01:44:16 +03:30