Add shared empty states, customer product filters, and SSO handoff across dashboards.

Standardize list empty UI, searchable country fields, customer-products filter row, password/login polish, and one-time business dashboard handoff from the customer app.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-08-19 19:46:57 +03:30
co-authored by Cursor
parent 832ac32a09
commit f8a9a28346
55 changed files with 1264 additions and 907 deletions
+8 -16
View File
@@ -2,6 +2,7 @@ import { useEffect, useMemo, useRef, useState } from 'react'
import { useSearchParams } from 'react-router-dom'
import { Download, Loader2, Package, Plus, RotateCcw, Search, Upload } from 'lucide-react'
import { Breadcrumbs } from '../components/Breadcrumbs'
import { EmptyState } from '../components/EmptyState'
import { PageTitle } from '../components/PageTitle'
import { ConfirmDeleteModal } from '../components/ConfirmDeleteModal'
import { CreateStoreItemsModal } from '../components/CreateStoreItemsModal'
@@ -482,23 +483,14 @@ function StoreItemsPageContent() {
{isLoading ? (
<p className={styles.empty}>{t('storeItems.loading')}</p>
) : listings.length === 0 ? (
<div className={styles.emptyState}>
<div className={styles.emptyIcon} aria-hidden="true">
<Package size={28} strokeWidth={1.75} />
</div>
<h3 className={styles.emptyTitle}>{t('storeItems.empty')}</h3>
<p className={styles.emptyHint}>{t('storeItems.emptyHint')}</p>
<button
type="button"
className={styles.emptyCta}
onClick={() => setCreateOpen(true)}
>
<Plus size={18} strokeWidth={2.25} />
{t('storeItems.add')}
</button>
</div>
<EmptyState
icon={Package}
message={t('storeItems.empty')}
actionLabel={t('storeItems.add')}
onAction={() => setCreateOpen(true)}
/>
) : filteredListings.length === 0 ? (
<p className={styles.empty}>{t('storeItems.emptyFiltered')}</p>
<EmptyState icon={Search} message={t('storeItems.emptyFiltered')} />
) : (
<>
<div className={styles.grid}>