Use compact unlabeled filter rows across Super Admin lists.
Also ship pending add-customer name flexibility, store-gated e-payment settings, and logo-only customer login branding. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
co-authored by
Cursor
parent
29a190f02a
commit
15aad9f9d8
@@ -1,5 +1,5 @@
|
||||
.filtersPanel {
|
||||
padding: 14px 16px;
|
||||
padding: 10px 14px;
|
||||
background: var(--glass-bg);
|
||||
backdrop-filter: blur(var(--blur-glass));
|
||||
-webkit-backdrop-filter: blur(var(--blur-glass));
|
||||
@@ -15,8 +15,8 @@
|
||||
.filtersGrid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 10px 12px;
|
||||
align-items: end;
|
||||
gap: 8px 12px;
|
||||
align-items: center;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: none;
|
||||
@@ -26,8 +26,9 @@
|
||||
display: flex;
|
||||
flex: 1;
|
||||
flex-wrap: wrap;
|
||||
gap: 10px 12px;
|
||||
gap: 8px 12px;
|
||||
min-width: 0;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
/* Equal width fields; same 12px gap as field→action buttons.
|
||||
@@ -36,6 +37,16 @@
|
||||
flex: 1 1 160px;
|
||||
max-width: 280px;
|
||||
min-width: 0;
|
||||
gap: 0;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.filtersInputs > .field + .field {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.filtersPanel .field label {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.filterActions {
|
||||
@@ -369,8 +380,8 @@
|
||||
}
|
||||
|
||||
.iconActionBtn {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
width: var(--field-height);
|
||||
height: var(--field-height);
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
@@ -1472,37 +1472,35 @@ export function BusinessesPage() {
|
||||
</div>
|
||||
|
||||
<div className={styles.filtersPanel}>
|
||||
<div className={styles.filtersTitle}>Filters</div>
|
||||
|
||||
<form className={styles.filtersGrid} onSubmit={(e) => { e.preventDefault(); applyFilters() }}>
|
||||
<div className={styles.filtersInputs}>
|
||||
<div className={styles.field}>
|
||||
<label htmlFor="filter-name">Name</label>
|
||||
<input
|
||||
id="filter-name"
|
||||
value={draftName}
|
||||
onChange={(e) => setDraftName(e.target.value)}
|
||||
placeholder="Search by business name"
|
||||
placeholder="Name"
|
||||
aria-label="Name"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className={styles.field}>
|
||||
<label htmlFor="filter-domain">Domain</label>
|
||||
<input
|
||||
id="filter-domain"
|
||||
value={draftDomain}
|
||||
onChange={(e) => setDraftDomain(e.target.value)}
|
||||
placeholder="shop-a.local"
|
||||
placeholder="Domain"
|
||||
aria-label="Domain"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className={styles.field}>
|
||||
<label htmlFor="filter-category">Category</label>
|
||||
<input
|
||||
id="filter-category"
|
||||
value={draftCategory}
|
||||
onChange={(e) => setDraftCategory(e.target.value)}
|
||||
placeholder="e.g. electronics / phones"
|
||||
placeholder="Category"
|
||||
aria-label="Category"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -202,7 +202,6 @@ export function SmsTemplatesPage() {
|
||||
{error ? <p className={styles.alertError}>{error}</p> : null}
|
||||
|
||||
<div className={tableStyles.filtersPanel}>
|
||||
<div className={tableStyles.filtersTitle}>Filters</div>
|
||||
<form
|
||||
className={tableStyles.filtersGrid}
|
||||
onSubmit={(e) => {
|
||||
@@ -212,31 +211,31 @@ export function SmsTemplatesPage() {
|
||||
>
|
||||
<div className={tableStyles.filtersInputs}>
|
||||
<div className={tableStyles.field}>
|
||||
<label htmlFor="sms-template-name">Name</label>
|
||||
<input
|
||||
id="sms-template-name"
|
||||
value={draftName}
|
||||
onChange={(e) => setDraftName(e.target.value)}
|
||||
placeholder="Search by name"
|
||||
placeholder="Name"
|
||||
aria-label="Name"
|
||||
disabled={loading}
|
||||
/>
|
||||
</div>
|
||||
<div className={tableStyles.field}>
|
||||
<label htmlFor="sms-template-business">Business</label>
|
||||
<input
|
||||
id="sms-template-business"
|
||||
value={draftBusiness}
|
||||
onChange={(e) => setDraftBusiness(e.target.value)}
|
||||
placeholder="Search by business"
|
||||
placeholder="Business"
|
||||
aria-label="Business"
|
||||
disabled={loading}
|
||||
/>
|
||||
</div>
|
||||
<div className={tableStyles.field}>
|
||||
<label htmlFor="sms-template-status">Status</label>
|
||||
<select
|
||||
id="sms-template-status"
|
||||
value={draftStatus}
|
||||
onChange={(e) => setDraftStatus(e.target.value as StatusFilter)}
|
||||
aria-label="Status"
|
||||
disabled={loading}
|
||||
>
|
||||
<option value="all">All (pending + verified)</option>
|
||||
|
||||
@@ -576,34 +576,33 @@ export function UsersPage() {
|
||||
)}
|
||||
|
||||
<div className={tableStyles.filtersPanel}>
|
||||
<div className={tableStyles.filtersTitle}>Filters</div>
|
||||
<form className={tableStyles.filtersGrid} onSubmit={(e) => { e.preventDefault(); applyFilters() }}>
|
||||
<div className={tableStyles.filtersInputs}>
|
||||
<div className={tableStyles.field}>
|
||||
<label htmlFor="filter-user-name">Name</label>
|
||||
<input
|
||||
id="filter-user-name"
|
||||
value={draftName}
|
||||
onChange={(e) => setDraftName(e.target.value)}
|
||||
placeholder="Search by name"
|
||||
placeholder="Name"
|
||||
aria-label="Name"
|
||||
/>
|
||||
</div>
|
||||
<div className={tableStyles.field}>
|
||||
<label htmlFor="filter-user-cell">Cell number</label>
|
||||
<input
|
||||
id="filter-user-cell"
|
||||
value={draftCell}
|
||||
onChange={(e) => setDraftCell(e.target.value)}
|
||||
placeholder="0912..."
|
||||
placeholder="Cell number"
|
||||
aria-label="Cell number"
|
||||
autoComplete="off"
|
||||
/>
|
||||
</div>
|
||||
<div className={tableStyles.field}>
|
||||
<label htmlFor="filter-user-role">Role</label>
|
||||
<select
|
||||
id="filter-user-role"
|
||||
value={draftRole}
|
||||
onChange={(e) => setDraftRole(e.target.value)}
|
||||
aria-label="Role"
|
||||
>
|
||||
<option value="">All roles</option>
|
||||
{roles.map((role) => (
|
||||
|
||||
@@ -515,16 +515,15 @@ export function WebsitesPage() {
|
||||
</div>
|
||||
|
||||
<div className={tableStyles.filtersPanel}>
|
||||
<div className={tableStyles.filtersTitle}>Filters</div>
|
||||
<form className={tableStyles.filtersGrid} onSubmit={(e) => { e.preventDefault(); applyFilters() }}>
|
||||
<div className={tableStyles.filtersInputs}>
|
||||
<div className={tableStyles.field}>
|
||||
<label htmlFor="filter-domain-name">Name</label>
|
||||
<input
|
||||
id="filter-domain-name"
|
||||
value={draftName}
|
||||
onChange={(e) => setDraftName(e.target.value)}
|
||||
placeholder="shop-a.local"
|
||||
placeholder="Name / domain"
|
||||
aria-label="Name / domain"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user