@rovela-ai/sdk 0.5.17 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/api/customer-groups.d.ts +61 -0
- package/dist/admin/api/customer-groups.d.ts.map +1 -0
- package/dist/admin/api/customer-groups.js +147 -0
- package/dist/admin/api/customer-groups.js.map +1 -0
- package/dist/admin/api/customers.d.ts.map +1 -1
- package/dist/admin/api/customers.js +28 -9
- package/dist/admin/api/customers.js.map +1 -1
- package/dist/admin/api/index.d.ts +2 -0
- package/dist/admin/api/index.d.ts.map +1 -1
- package/dist/admin/api/index.js +4 -0
- package/dist/admin/api/index.js.map +1 -1
- package/dist/admin/api/payment-methods.d.ts +56 -0
- package/dist/admin/api/payment-methods.d.ts.map +1 -0
- package/dist/admin/api/payment-methods.js +150 -0
- package/dist/admin/api/payment-methods.js.map +1 -0
- package/dist/admin/components/CustomerDetails.d.ts.map +1 -1
- package/dist/admin/components/CustomerDetails.js +9 -3
- package/dist/admin/components/CustomerDetails.js.map +1 -1
- package/dist/admin/components/CustomerGroupsManager.d.ts +7 -0
- package/dist/admin/components/CustomerGroupsManager.d.ts.map +1 -0
- package/dist/admin/components/CustomerGroupsManager.js +86 -0
- package/dist/admin/components/CustomerGroupsManager.js.map +1 -0
- package/dist/admin/components/CustomerTable.d.ts.map +1 -1
- package/dist/admin/components/CustomerTable.js +21 -8
- package/dist/admin/components/CustomerTable.js.map +1 -1
- package/dist/admin/components/OrderDetails.d.ts.map +1 -1
- package/dist/admin/components/OrderDetails.js +7 -2
- package/dist/admin/components/OrderDetails.js.map +1 -1
- package/dist/admin/components/PaymentMethodsManager.d.ts +5 -0
- package/dist/admin/components/PaymentMethodsManager.d.ts.map +1 -0
- package/dist/admin/components/PaymentMethodsManager.js +92 -0
- package/dist/admin/components/PaymentMethodsManager.js.map +1 -0
- package/dist/admin/components/PaymentSettings.d.ts.map +1 -1
- package/dist/admin/components/PaymentSettings.js +2 -1
- package/dist/admin/components/PaymentSettings.js.map +1 -1
- package/dist/admin/components/index.d.ts +4 -0
- package/dist/admin/components/index.d.ts.map +1 -1
- package/dist/admin/components/index.js +2 -0
- package/dist/admin/components/index.js.map +1 -1
- package/dist/admin/hooks/index.d.ts +4 -0
- package/dist/admin/hooks/index.d.ts.map +1 -1
- package/dist/admin/hooks/index.js +2 -0
- package/dist/admin/hooks/index.js.map +1 -1
- package/dist/admin/hooks/useAdminCustomerGroups.d.ts +12 -0
- package/dist/admin/hooks/useAdminCustomerGroups.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminCustomerGroups.js +79 -0
- package/dist/admin/hooks/useAdminCustomerGroups.js.map +1 -0
- package/dist/admin/hooks/useAdminCustomers.d.ts.map +1 -1
- package/dist/admin/hooks/useAdminCustomers.js +5 -1
- package/dist/admin/hooks/useAdminCustomers.js.map +1 -1
- package/dist/admin/hooks/useAdminPaymentMethods.d.ts +12 -0
- package/dist/admin/hooks/useAdminPaymentMethods.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminPaymentMethods.js +78 -0
- package/dist/admin/hooks/useAdminPaymentMethods.js.map +1 -0
- package/dist/admin/index.d.ts +3 -3
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +3 -3
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/types.d.ts +53 -0
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/auth/server/customer-service.d.ts.map +1 -1
- package/dist/auth/server/customer-service.js +7 -1
- package/dist/auth/server/customer-service.js.map +1 -1
- package/dist/checkout/api/index.d.ts +2 -0
- package/dist/checkout/api/index.d.ts.map +1 -1
- package/dist/checkout/api/index.js +2 -0
- package/dist/checkout/api/index.js.map +1 -1
- package/dist/checkout/api/manual.d.ts +36 -0
- package/dist/checkout/api/manual.d.ts.map +1 -0
- package/dist/checkout/api/manual.js +289 -0
- package/dist/checkout/api/manual.js.map +1 -0
- package/dist/checkout/api/payment-methods.d.ts +25 -0
- package/dist/checkout/api/payment-methods.d.ts.map +1 -0
- package/dist/checkout/api/payment-methods.js +36 -0
- package/dist/checkout/api/payment-methods.js.map +1 -0
- package/dist/checkout/components/CheckoutFlow.d.ts.map +1 -1
- package/dist/checkout/components/CheckoutFlow.js +33 -4
- package/dist/checkout/components/CheckoutFlow.js.map +1 -1
- package/dist/checkout/hooks/useCheckout.d.ts.map +1 -1
- package/dist/checkout/hooks/useCheckout.js +76 -0
- package/dist/checkout/hooks/useCheckout.js.map +1 -1
- package/dist/checkout/server/order-service.d.ts.map +1 -1
- package/dist/checkout/server/order-service.js +17 -7
- package/dist/checkout/server/order-service.js.map +1 -1
- package/dist/checkout/types.d.ts +24 -2
- package/dist/checkout/types.d.ts.map +1 -1
- package/dist/core/db/index.d.ts +3 -3
- package/dist/core/db/index.d.ts.map +1 -1
- package/dist/core/db/index.js +4 -0
- package/dist/core/db/index.js.map +1 -1
- package/dist/core/db/queries.d.ts +194 -10
- package/dist/core/db/queries.d.ts.map +1 -1
- package/dist/core/db/queries.js +300 -2
- package/dist/core/db/queries.js.map +1 -1
- package/dist/core/db/schema.d.ts +376 -0
- package/dist/core/db/schema.d.ts.map +1 -1
- package/dist/core/db/schema.js +70 -1
- package/dist/core/db/schema.js.map +1 -1
- package/dist/core/server/index.d.ts +2 -2
- package/dist/core/server/index.d.ts.map +1 -1
- package/dist/core/server/index.js +4 -0
- package/dist/core/server/index.js.map +1 -1
- package/dist/emails/send/orders.d.ts +2 -0
- package/dist/emails/send/orders.d.ts.map +1 -1
- package/dist/emails/send/orders.js +1 -0
- package/dist/emails/send/orders.js.map +1 -1
- package/dist/emails/templates/order-confirmation.d.ts.map +1 -1
- package/dist/emails/templates/order-confirmation.js +9 -0
- package/dist/emails/templates/order-confirmation.js.map +1 -1
- package/dist/emails/types.d.ts +2 -0
- package/dist/emails/types.d.ts.map +1 -1
- package/package.json +9 -1
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela/sdk/admin/api/payment-methods
|
|
3
|
+
*
|
|
4
|
+
* API route handlers for merchant-managed payment methods (the registry
|
|
5
|
+
* behind checkout's non-Stripe options). v1 manages `kind='manual'` methods
|
|
6
|
+
* (cash on delivery, wire transfer…); `kind='external'` rows are reserved for
|
|
7
|
+
* provider integrations that plug into the same registry.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // app/api/admin/payment-methods/route.ts
|
|
12
|
+
* import { getPaymentMethods, createPaymentMethodHandler } from '@rovela-ai/sdk/admin/api'
|
|
13
|
+
* export { getPaymentMethods as GET, createPaymentMethodHandler as POST }
|
|
14
|
+
*
|
|
15
|
+
* // app/api/admin/payment-methods/[id]/route.ts
|
|
16
|
+
* import { updatePaymentMethodHandler, deletePaymentMethodHandler } from '@rovela-ai/sdk/admin/api'
|
|
17
|
+
* export { updatePaymentMethodHandler as PUT, deletePaymentMethodHandler as DELETE }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
import { NextResponse } from 'next/server';
|
|
21
|
+
import { requireAdmin } from '../server/admin-session';
|
|
22
|
+
import { findPaymentMethods, findPaymentMethodById, createPaymentMethod, updatePaymentMethod, deletePaymentMethod, } from '../../core/db/queries';
|
|
23
|
+
const MAX_INSTRUCTIONS = 4000;
|
|
24
|
+
function parseMethodBody(body, { requireName }) {
|
|
25
|
+
if (!body || typeof body !== 'object')
|
|
26
|
+
return { error: 'Invalid request body' };
|
|
27
|
+
const b = body;
|
|
28
|
+
const out = {};
|
|
29
|
+
if (b.name !== undefined) {
|
|
30
|
+
if (typeof b.name !== 'string' || !b.name.trim())
|
|
31
|
+
return { error: 'Name is required' };
|
|
32
|
+
out.name = b.name.trim().slice(0, 100);
|
|
33
|
+
}
|
|
34
|
+
else if (requireName) {
|
|
35
|
+
return { error: 'Name is required' };
|
|
36
|
+
}
|
|
37
|
+
if (b.instructions !== undefined) {
|
|
38
|
+
if (b.instructions !== null && typeof b.instructions !== 'string') {
|
|
39
|
+
return { error: 'Instructions must be a string' };
|
|
40
|
+
}
|
|
41
|
+
out.instructions =
|
|
42
|
+
typeof b.instructions === 'string'
|
|
43
|
+
? b.instructions.trim().slice(0, MAX_INSTRUCTIONS) || null
|
|
44
|
+
: null;
|
|
45
|
+
}
|
|
46
|
+
if (b.enabled !== undefined) {
|
|
47
|
+
if (typeof b.enabled !== 'boolean')
|
|
48
|
+
return { error: 'enabled must be a boolean' };
|
|
49
|
+
out.enabled = b.enabled;
|
|
50
|
+
}
|
|
51
|
+
if (b.sortOrder !== undefined) {
|
|
52
|
+
const n = Number(b.sortOrder);
|
|
53
|
+
if (!Number.isInteger(n))
|
|
54
|
+
return { error: 'sortOrder must be an integer' };
|
|
55
|
+
out.sortOrder = n;
|
|
56
|
+
}
|
|
57
|
+
// v1 admin CRUD only manages manual methods; external rows are created by
|
|
58
|
+
// provider integrations, not this form. Force the kind.
|
|
59
|
+
out.kind = 'manual';
|
|
60
|
+
return { data: out };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* GET /api/admin/payment-methods — all methods, admin view.
|
|
64
|
+
*/
|
|
65
|
+
export async function getPaymentMethods() {
|
|
66
|
+
const guard = await requireAdmin({ permission: 'settings.read' });
|
|
67
|
+
if (!guard.ok)
|
|
68
|
+
return guard.response;
|
|
69
|
+
try {
|
|
70
|
+
const methods = await findPaymentMethods();
|
|
71
|
+
return NextResponse.json({ data: methods });
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
console.error('[Admin Payment Methods API] list error:', error);
|
|
75
|
+
return NextResponse.json({ error: 'Failed to load payment methods', code: 'INTERNAL_ERROR' }, { status: 500 });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* POST /api/admin/payment-methods — create a manual method.
|
|
80
|
+
* Body: { name, instructions?, enabled?, sortOrder? }
|
|
81
|
+
*/
|
|
82
|
+
export async function createPaymentMethodHandler(request) {
|
|
83
|
+
const guard = await requireAdmin({ permission: 'settings.write' });
|
|
84
|
+
if (!guard.ok)
|
|
85
|
+
return guard.response;
|
|
86
|
+
try {
|
|
87
|
+
const parsed = parseMethodBody(await request.json(), { requireName: true });
|
|
88
|
+
if ('error' in parsed) {
|
|
89
|
+
return NextResponse.json({ error: parsed.error, code: 'VALIDATION_ERROR' }, { status: 400 });
|
|
90
|
+
}
|
|
91
|
+
const method = await createPaymentMethod(parsed.data);
|
|
92
|
+
return NextResponse.json({ data: method }, { status: 201 });
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
console.error('[Admin Payment Methods API] create error:', error);
|
|
96
|
+
return NextResponse.json({ error: 'Failed to create payment method', code: 'INTERNAL_ERROR' }, { status: 500 });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* PUT /api/admin/payment-methods/[id] — update fields (partial).
|
|
101
|
+
*/
|
|
102
|
+
export async function updatePaymentMethodHandler(request, { params }) {
|
|
103
|
+
const guard = await requireAdmin({ permission: 'settings.write' });
|
|
104
|
+
if (!guard.ok)
|
|
105
|
+
return guard.response;
|
|
106
|
+
try {
|
|
107
|
+
const { id } = await params;
|
|
108
|
+
const parsed = parseMethodBody(await request.json(), { requireName: false });
|
|
109
|
+
if ('error' in parsed) {
|
|
110
|
+
return NextResponse.json({ error: parsed.error, code: 'VALIDATION_ERROR' }, { status: 400 });
|
|
111
|
+
}
|
|
112
|
+
// `kind` is forced by the parser; a name-less, field-less body is a no-op.
|
|
113
|
+
const { kind: _kind, ...fields } = parsed.data;
|
|
114
|
+
if (Object.keys(fields).length === 0) {
|
|
115
|
+
return NextResponse.json({ error: 'At least one field is required', code: 'VALIDATION_ERROR' }, { status: 400 });
|
|
116
|
+
}
|
|
117
|
+
const method = await updatePaymentMethod(id, fields);
|
|
118
|
+
if (!method) {
|
|
119
|
+
return NextResponse.json({ error: 'Payment method not found', code: 'NOT_FOUND' }, { status: 404 });
|
|
120
|
+
}
|
|
121
|
+
return NextResponse.json({ data: method });
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.error('[Admin Payment Methods API] update error:', error);
|
|
125
|
+
return NextResponse.json({ error: 'Failed to update payment method', code: 'INTERNAL_ERROR' }, { status: 500 });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* DELETE /api/admin/payment-methods/[id] — remove a method. Existing orders
|
|
130
|
+
* keep their snapshotted method label, so history stays intact.
|
|
131
|
+
*/
|
|
132
|
+
export async function deletePaymentMethodHandler(_request, { params }) {
|
|
133
|
+
const guard = await requireAdmin({ permission: 'settings.write' });
|
|
134
|
+
if (!guard.ok)
|
|
135
|
+
return guard.response;
|
|
136
|
+
try {
|
|
137
|
+
const { id } = await params;
|
|
138
|
+
const existing = await findPaymentMethodById(id);
|
|
139
|
+
if (!existing) {
|
|
140
|
+
return NextResponse.json({ error: 'Payment method not found', code: 'NOT_FOUND' }, { status: 404 });
|
|
141
|
+
}
|
|
142
|
+
await deletePaymentMethod(id);
|
|
143
|
+
return NextResponse.json({ success: true });
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
console.error('[Admin Payment Methods API] delete error:', error);
|
|
147
|
+
return NextResponse.json({ error: 'Failed to delete payment method', code: 'INTERNAL_ERROR' }, { status: 500 });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=payment-methods.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-methods.js","sourceRoot":"","sources":["../../../src/admin/api/payment-methods.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomerDetails.d.ts","sourceRoot":"","sources":["../../../src/admin/components/CustomerDetails.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CustomerDetails.d.ts","sourceRoot":"","sources":["../../../src/admin/components/CustomerDetails.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,oBAAoB,EAAuB,MAAM,UAAU,CAAA;AA+DzE;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,EAC9B,UAAU,EACV,MAAM,EACN,QAAQ,EACR,SAAc,GACf,EAAE,oBAAoB,2CA6etB"}
|
|
@@ -7,10 +7,11 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
7
7
|
*/
|
|
8
8
|
import { useState, useEffect, useCallback } from 'react';
|
|
9
9
|
import { useAdminCustomers } from '../hooks/useAdminCustomers';
|
|
10
|
+
import { useAdminCustomerGroups } from '../hooks/useAdminCustomerGroups';
|
|
10
11
|
import { useStoreSettingsOptional } from '../../core/StoreSettingsProvider';
|
|
11
12
|
import { DeleteConfirmDialog } from './DeleteConfirmDialog';
|
|
12
13
|
import { CustomerAddressPanel } from './CustomerAddressPanel';
|
|
13
|
-
import { ArrowLeft, Mail, User, Phone, Calendar, CheckCircle, Clock, CreditCard, ShoppingBag, DollarSign, Pencil, Trash2, X, Check, } from 'lucide-react';
|
|
14
|
+
import { ArrowLeft, Mail, User, Phone, Tags, Calendar, CheckCircle, Clock, CreditCard, ShoppingBag, DollarSign, Pencil, Trash2, X, Check, } from 'lucide-react';
|
|
14
15
|
// =============================================================================
|
|
15
16
|
// Status Badges - Pure CSS Classes
|
|
16
17
|
// =============================================================================
|
|
@@ -49,6 +50,7 @@ function OrderStatusBadge({ status }) {
|
|
|
49
50
|
*/
|
|
50
51
|
export function CustomerDetails({ customerId, onBack, onDelete, className = '', }) {
|
|
51
52
|
const { getCustomer, updateCustomer, deleteCustomer, createCustomerAddress, updateCustomerAddress, deleteCustomerAddress, } = useAdminCustomers();
|
|
53
|
+
const { groups } = useAdminCustomerGroups();
|
|
52
54
|
const [customer, setCustomer] = useState(null);
|
|
53
55
|
const [isLoading, setIsLoading] = useState(true);
|
|
54
56
|
// Edit state
|
|
@@ -56,6 +58,7 @@ export function CustomerDetails({ customerId, onBack, onDelete, className = '',
|
|
|
56
58
|
const [editName, setEditName] = useState('');
|
|
57
59
|
const [editEmail, setEditEmail] = useState('');
|
|
58
60
|
const [editPhone, setEditPhone] = useState('');
|
|
61
|
+
const [editGroupId, setEditGroupId] = useState(''); // '' = no group
|
|
59
62
|
const [isSaving, setIsSaving] = useState(false);
|
|
60
63
|
const [editError, setEditError] = useState(null);
|
|
61
64
|
// Delete state
|
|
@@ -109,6 +112,7 @@ export function CustomerDetails({ customerId, onBack, onDelete, className = '',
|
|
|
109
112
|
setEditName(customer.name || '');
|
|
110
113
|
setEditEmail(customer.email);
|
|
111
114
|
setEditPhone(customer.phone || '');
|
|
115
|
+
setEditGroupId(customer.groupId || '');
|
|
112
116
|
setEditError(null);
|
|
113
117
|
setIsEditing(true);
|
|
114
118
|
}
|
|
@@ -126,6 +130,7 @@ export function CustomerDetails({ customerId, onBack, onDelete, className = '',
|
|
|
126
130
|
name: editName || undefined,
|
|
127
131
|
email: editEmail,
|
|
128
132
|
phone: editPhone.trim() || null,
|
|
133
|
+
groupId: editGroupId || null,
|
|
129
134
|
});
|
|
130
135
|
setIsSaving(false);
|
|
131
136
|
if (result.success && result.data) {
|
|
@@ -135,6 +140,7 @@ export function CustomerDetails({ customerId, onBack, onDelete, className = '',
|
|
|
135
140
|
name: result.data.name,
|
|
136
141
|
email: result.data.email,
|
|
137
142
|
phone: result.data.phone ?? null,
|
|
143
|
+
groupId: result.data.groupId ?? null,
|
|
138
144
|
}
|
|
139
145
|
: null);
|
|
140
146
|
setIsEditing(false);
|
|
@@ -142,7 +148,7 @@ export function CustomerDetails({ customerId, onBack, onDelete, className = '',
|
|
|
142
148
|
else {
|
|
143
149
|
setEditError(result.error || 'Failed to update customer');
|
|
144
150
|
}
|
|
145
|
-
}, [customer, editName, editEmail, editPhone, updateCustomer]);
|
|
151
|
+
}, [customer, editName, editEmail, editPhone, editGroupId, updateCustomer]);
|
|
146
152
|
// Delete handlers
|
|
147
153
|
const handleDeleteClick = useCallback(() => {
|
|
148
154
|
setDeleteError(null);
|
|
@@ -177,6 +183,6 @@ export function CustomerDetails({ customerId, onBack, onDelete, className = '',
|
|
|
177
183
|
if (!customer) {
|
|
178
184
|
return (_jsxs("div", { className: `admin-card p-12 text-center ${className}`, children: [_jsx(User, { className: "mx-auto h-12 w-12 admin-empty-icon" }), _jsx("p", { className: "mt-4 admin-empty-text", children: "Customer not found" }), onBack && (_jsx("button", { onClick: onBack, className: "mt-4 admin-link-primary text-sm", children: "Go back" }))] }));
|
|
179
185
|
}
|
|
180
|
-
return (_jsxs("div", { className: `space-y-6 ${className}`, children: [onBack && (_jsx("div", { className: "flex items-center justify-between", children: _jsxs("div", { className: "flex items-center gap-4", children: [_jsx("button", { onClick: onBack, className: "admin-btn admin-btn-secondary p-2", children: _jsx(ArrowLeft, { className: "h-4 w-4" }) }), _jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("h1", { className: "admin-page-title", children: customer.name || 'Unnamed Customer' }), _jsx(VerificationBadge, { verified: !!customer.emailVerified })] }), _jsx("p", { className: "admin-page-subtitle", children: customer.email })] })] }) })), _jsxs("div", { className: "grid gap-6 lg:grid-cols-3", children: [_jsxs("div", { className: "lg:col-span-2 space-y-6", children: [_jsxs("div", { className: "admin-card overflow-hidden", children: [_jsxs("div", { className: "admin-card-header flex items-center justify-between", children: [_jsx("h2", { className: "admin-card-title", children: "Customer Information" }), !isEditing && (_jsxs("button", { onClick: handleEditStart, className: "admin-action-link inline-flex items-center gap-1", children: [_jsx(Pencil, { className: "h-3 w-3" }), "Edit"] }))] }), _jsx("div", { className: "p-6", children: isEditing ? (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsx("label", { className: "admin-label", children: "Name" }), _jsx("input", { type: "text", value: editName, onChange: (e) => setEditName(e.target.value), placeholder: "Customer name", className: "admin-input w-full" })] }), _jsxs("div", { children: [_jsx("label", { className: "admin-label", children: "Email" }), _jsx("input", { type: "email", value: editEmail, onChange: (e) => setEditEmail(e.target.value), placeholder: "customer@example.com", className: "admin-input w-full" })] }), _jsxs("div", { children: [_jsx("label", { className: "admin-label", children: "Phone" }), _jsx("input", { type: "tel", value: editPhone, onChange: (e) => setEditPhone(e.target.value), placeholder: "Customer phone", className: "admin-input w-full", maxLength: 40 })] }), editError && (_jsx("p", { className: "admin-error-text text-sm", children: editError })), _jsxs("div", { className: "flex gap-2", children: [_jsxs("button", { onClick: handleEditSave, disabled: isSaving, className: "admin-btn admin-btn-primary admin-btn-sm inline-flex items-center gap-1 disabled:opacity-50", children: [_jsx(Check, { className: "h-3 w-3" }), isSaving ? 'Saving...' : 'Save'] }), _jsxs("button", { onClick: handleEditCancel, disabled: isSaving, className: "admin-btn admin-btn-secondary admin-btn-sm inline-flex items-center gap-1 disabled:opacity-50", children: [_jsx(X, { className: "h-3 w-3" }), "Cancel"] })] })] })) : (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Mail, { className: "h-4 w-4 admin-text-muted" }), _jsxs("div", { children: [_jsx("p", { className: "text-sm admin-text-muted", children: "Email" }), _jsx("p", { children: customer.email })] })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx(User, { className: "h-4 w-4 admin-text-muted" }), _jsxs("div", { children: [_jsx("p", { className: "text-sm admin-text-muted", children: "Name" }), _jsx("p", { children: customer.name || 'Not provided' })] })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Phone, { className: "h-4 w-4 admin-text-muted" }), _jsxs("div", { children: [_jsx("p", { className: "text-sm admin-text-muted", children: "Phone" }), _jsx("p", { children: customer.phone || 'Not provided' })] })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Calendar, { className: "h-4 w-4 admin-text-muted" }), _jsxs("div", { children: [_jsx("p", { className: "text-sm admin-text-muted", children: "Joined" }), _jsx("p", { children: formatDate(customer.createdAt) })] })] }), customer.stripeCustomerId && (_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(CreditCard, { className: "h-4 w-4 admin-text-muted" }), _jsxs("div", { children: [_jsx("p", { className: "text-sm admin-text-muted", children: "Stripe Customer ID" }), _jsx("p", { className: "font-mono text-sm", children: customer.stripeCustomerId })] })] }))] })) })] }), _jsxs("div", { className: "admin-card overflow-hidden", children: [_jsx("div", { className: "admin-card-header", children: _jsx("h2", { className: "admin-card-title", children: "Order History" }) }), customer.orders && customer.orders.length > 0 ? (_jsx("div", { className: "admin-card-divider-y", children: customer.orders.map((order) => (_jsxs("a", { href: `/admin/orders/${order.id}`, className: "admin-inventory-item flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-4", children: [_jsx("div", { className: "admin-image-placeholder h-10 w-10 rounded", children: _jsx(ShoppingBag, { className: "h-5 w-5" }) }), _jsxs("div", { children: [_jsxs("p", { className: "admin-inventory-item-link", children: ["Order #", order.id.slice(-8).toUpperCase()] }), _jsx("p", { className: "text-sm admin-text-muted", children: formatDateTime(order.createdAt) })] })] }), _jsxs("div", { className: "flex items-center gap-4", children: [_jsx(OrderStatusBadge, { status: order.status }), _jsx("span", { className: "font-medium", children: formatCurrency(order.total) })] })] }, order.id))) })) : (_jsxs("div", { className: "admin-empty-state py-12", children: [_jsx(ShoppingBag, { className: "mx-auto h-8 w-8 admin-empty-icon" }), _jsx("p", { className: "mt-2 admin-empty-text text-sm", children: "No orders yet" })] }))] }), _jsx(CustomerAddressPanel, { customerId: customer.id, addresses: customer.addresses || [], onCreate: createCustomerAddress, onUpdate: updateCustomerAddress, onDelete: deleteCustomerAddress })] }), _jsxs("div", { className: "space-y-6", children: [_jsxs("div", { className: "admin-card p-6", children: [_jsx("h2", { className: "admin-card-title mb-4", children: "Customer Stats" }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2 admin-text-muted", children: [_jsx(ShoppingBag, { className: "h-4 w-4" }), _jsx("span", { className: "text-sm", children: "Total Orders" })] }), _jsx("span", { className: "font-medium", children: customer.stats?.totalOrders ?? 0 })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2 admin-text-muted", children: [_jsx(DollarSign, { className: "h-4 w-4" }), _jsx("span", { className: "text-sm", children: "Total Spent" })] }), _jsx("span", { className: "font-medium", children: formatCurrency(customer.stats?.totalSpent ?? 0) })] })] })] }), _jsxs("div", { className: "admin-card p-6", children: [_jsx("h2", { className: "admin-card-title mb-4", children: "Actions" }), _jsxs("div", { className: "space-y-3", children: [_jsxs("button", { onClick: handleDeleteClick, className: "admin-btn admin-btn-destructive w-full inline-flex items-center justify-center gap-2", children: [_jsx(Trash2, { className: "h-4 w-4" }), "Delete Customer"] }), _jsx("p", { className: "text-xs admin-text-muted", children: "Deleting a customer anonymizes their data while preserving order history." })] })] })] })] }), _jsx(DeleteConfirmDialog, { isOpen: showDeleteDialog, title: "Delete Customer", itemName: customer.name || customer.email, itemType: "customer", isDeleting: isDeleting, error: deleteError, onConfirm: handleDeleteConfirm, onCancel: handleDeleteCancel })] }));
|
|
186
|
+
return (_jsxs("div", { className: `space-y-6 ${className}`, children: [onBack && (_jsx("div", { className: "flex items-center justify-between", children: _jsxs("div", { className: "flex items-center gap-4", children: [_jsx("button", { onClick: onBack, className: "admin-btn admin-btn-secondary p-2", children: _jsx(ArrowLeft, { className: "h-4 w-4" }) }), _jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("h1", { className: "admin-page-title", children: customer.name || 'Unnamed Customer' }), _jsx(VerificationBadge, { verified: !!customer.emailVerified })] }), _jsx("p", { className: "admin-page-subtitle", children: customer.email })] })] }) })), _jsxs("div", { className: "grid gap-6 lg:grid-cols-3", children: [_jsxs("div", { className: "lg:col-span-2 space-y-6", children: [_jsxs("div", { className: "admin-card overflow-hidden", children: [_jsxs("div", { className: "admin-card-header flex items-center justify-between", children: [_jsx("h2", { className: "admin-card-title", children: "Customer Information" }), !isEditing && (_jsxs("button", { onClick: handleEditStart, className: "admin-action-link inline-flex items-center gap-1", children: [_jsx(Pencil, { className: "h-3 w-3" }), "Edit"] }))] }), _jsx("div", { className: "p-6", children: isEditing ? (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsx("label", { className: "admin-label", children: "Name" }), _jsx("input", { type: "text", value: editName, onChange: (e) => setEditName(e.target.value), placeholder: "Customer name", className: "admin-input w-full" })] }), _jsxs("div", { children: [_jsx("label", { className: "admin-label", children: "Email" }), _jsx("input", { type: "email", value: editEmail, onChange: (e) => setEditEmail(e.target.value), placeholder: "customer@example.com", className: "admin-input w-full" })] }), _jsxs("div", { children: [_jsx("label", { className: "admin-label", children: "Phone" }), _jsx("input", { type: "tel", value: editPhone, onChange: (e) => setEditPhone(e.target.value), placeholder: "Customer phone", className: "admin-input w-full", maxLength: 40 })] }), _jsxs("div", { children: [_jsx("label", { className: "admin-label", children: "Group" }), _jsxs("select", { value: editGroupId, onChange: (e) => setEditGroupId(e.target.value), className: "admin-input w-full", children: [_jsx("option", { value: "", children: "No group" }), groups.map((g) => (_jsx("option", { value: g.id, children: g.name }, g.id)))] })] }), editError && (_jsx("p", { className: "admin-error-text text-sm", children: editError })), _jsxs("div", { className: "flex gap-2", children: [_jsxs("button", { onClick: handleEditSave, disabled: isSaving, className: "admin-btn admin-btn-primary admin-btn-sm inline-flex items-center gap-1 disabled:opacity-50", children: [_jsx(Check, { className: "h-3 w-3" }), isSaving ? 'Saving...' : 'Save'] }), _jsxs("button", { onClick: handleEditCancel, disabled: isSaving, className: "admin-btn admin-btn-secondary admin-btn-sm inline-flex items-center gap-1 disabled:opacity-50", children: [_jsx(X, { className: "h-3 w-3" }), "Cancel"] })] })] })) : (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Mail, { className: "h-4 w-4 admin-text-muted" }), _jsxs("div", { children: [_jsx("p", { className: "text-sm admin-text-muted", children: "Email" }), _jsx("p", { children: customer.email })] })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx(User, { className: "h-4 w-4 admin-text-muted" }), _jsxs("div", { children: [_jsx("p", { className: "text-sm admin-text-muted", children: "Name" }), _jsx("p", { children: customer.name || 'Not provided' })] })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Phone, { className: "h-4 w-4 admin-text-muted" }), _jsxs("div", { children: [_jsx("p", { className: "text-sm admin-text-muted", children: "Phone" }), _jsx("p", { children: customer.phone || 'Not provided' })] })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Tags, { className: "h-4 w-4 admin-text-muted" }), _jsxs("div", { children: [_jsx("p", { className: "text-sm admin-text-muted", children: "Group" }), customer.groupId ? (_jsx("span", { className: "admin-badge admin-badge-neutral", children: groups.find((g) => g.id === customer.groupId)?.name || 'Unknown group' })) : (_jsx("p", { className: "admin-text-muted", children: "No group" }))] })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Calendar, { className: "h-4 w-4 admin-text-muted" }), _jsxs("div", { children: [_jsx("p", { className: "text-sm admin-text-muted", children: "Joined" }), _jsx("p", { children: formatDate(customer.createdAt) })] })] }), customer.stripeCustomerId && (_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(CreditCard, { className: "h-4 w-4 admin-text-muted" }), _jsxs("div", { children: [_jsx("p", { className: "text-sm admin-text-muted", children: "Stripe Customer ID" }), _jsx("p", { className: "font-mono text-sm", children: customer.stripeCustomerId })] })] }))] })) })] }), _jsxs("div", { className: "admin-card overflow-hidden", children: [_jsx("div", { className: "admin-card-header", children: _jsx("h2", { className: "admin-card-title", children: "Order History" }) }), customer.orders && customer.orders.length > 0 ? (_jsx("div", { className: "admin-card-divider-y", children: customer.orders.map((order) => (_jsxs("a", { href: `/admin/orders/${order.id}`, className: "admin-inventory-item flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-4", children: [_jsx("div", { className: "admin-image-placeholder h-10 w-10 rounded", children: _jsx(ShoppingBag, { className: "h-5 w-5" }) }), _jsxs("div", { children: [_jsxs("p", { className: "admin-inventory-item-link", children: ["Order #", order.id.slice(-8).toUpperCase()] }), _jsx("p", { className: "text-sm admin-text-muted", children: formatDateTime(order.createdAt) })] })] }), _jsxs("div", { className: "flex items-center gap-4", children: [_jsx(OrderStatusBadge, { status: order.status }), _jsx("span", { className: "font-medium", children: formatCurrency(order.total) })] })] }, order.id))) })) : (_jsxs("div", { className: "admin-empty-state py-12", children: [_jsx(ShoppingBag, { className: "mx-auto h-8 w-8 admin-empty-icon" }), _jsx("p", { className: "mt-2 admin-empty-text text-sm", children: "No orders yet" })] }))] }), _jsx(CustomerAddressPanel, { customerId: customer.id, addresses: customer.addresses || [], onCreate: createCustomerAddress, onUpdate: updateCustomerAddress, onDelete: deleteCustomerAddress })] }), _jsxs("div", { className: "space-y-6", children: [_jsxs("div", { className: "admin-card p-6", children: [_jsx("h2", { className: "admin-card-title mb-4", children: "Customer Stats" }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2 admin-text-muted", children: [_jsx(ShoppingBag, { className: "h-4 w-4" }), _jsx("span", { className: "text-sm", children: "Total Orders" })] }), _jsx("span", { className: "font-medium", children: customer.stats?.totalOrders ?? 0 })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2 admin-text-muted", children: [_jsx(DollarSign, { className: "h-4 w-4" }), _jsx("span", { className: "text-sm", children: "Total Spent" })] }), _jsx("span", { className: "font-medium", children: formatCurrency(customer.stats?.totalSpent ?? 0) })] })] })] }), _jsxs("div", { className: "admin-card p-6", children: [_jsx("h2", { className: "admin-card-title mb-4", children: "Actions" }), _jsxs("div", { className: "space-y-3", children: [_jsxs("button", { onClick: handleDeleteClick, className: "admin-btn admin-btn-destructive w-full inline-flex items-center justify-center gap-2", children: [_jsx(Trash2, { className: "h-4 w-4" }), "Delete Customer"] }), _jsx("p", { className: "text-xs admin-text-muted", children: "Deleting a customer anonymizes their data while preserving order history." })] })] })] })] }), _jsx(DeleteConfirmDialog, { isOpen: showDeleteDialog, title: "Delete Customer", itemName: customer.name || customer.email, itemType: "customer", isDeleting: isDeleting, error: deleteError, onConfirm: handleDeleteConfirm, onCancel: handleDeleteCancel })] }));
|
|
181
187
|
}
|
|
182
188
|
//# sourceMappingURL=CustomerDetails.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomerDetails.js","sourceRoot":"","sources":["../../../src/admin/components/CustomerDetails.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CustomerDetails.js","sourceRoot":"","sources":["../../../src/admin/components/CustomerDetails.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface CustomerGroupsManagerProps {
|
|
2
|
+
className?: string;
|
|
3
|
+
/** Called after any create/update/delete so the parent can refresh badges. */
|
|
4
|
+
onChanged?: () => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function CustomerGroupsManager({ className, onChanged }: CustomerGroupsManagerProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=CustomerGroupsManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomerGroupsManager.d.ts","sourceRoot":"","sources":["../../../src/admin/components/CustomerGroupsManager.tsx"],"names":[],"mappings":"AAgBA,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB;AAID,wBAAgB,qBAAqB,CAAC,EAAE,SAAc,EAAE,SAAS,EAAE,EAAE,0BAA0B,2CAyN9F"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* @rovela/sdk/admin/components/CustomerGroupsManager
|
|
5
|
+
*
|
|
6
|
+
* Lightweight manager for merchant-defined customer groups (Company,
|
|
7
|
+
* Individual, VIP…). Rendered as a collapsible panel from the Customers page —
|
|
8
|
+
* groups are a short list a merchant rarely edits, so no dedicated nav page.
|
|
9
|
+
* Deleting a group ungroups its members (they are never deleted).
|
|
10
|
+
*/
|
|
11
|
+
import { useState } from 'react';
|
|
12
|
+
import { Tags, Plus, Pencil, Trash2, Check, X } from 'lucide-react';
|
|
13
|
+
import { useAdminCustomerGroups } from '../hooks/useAdminCustomerGroups';
|
|
14
|
+
export function CustomerGroupsManager({ className = '', onChanged }) {
|
|
15
|
+
const { groups, isLoading, error, createGroup, updateGroup, deleteGroup } = useAdminCustomerGroups();
|
|
16
|
+
const [newName, setNewName] = useState('');
|
|
17
|
+
const [newDescription, setNewDescription] = useState('');
|
|
18
|
+
const [isCreating, setIsCreating] = useState(false);
|
|
19
|
+
const [editing, setEditing] = useState(null);
|
|
20
|
+
const [isSavingEdit, setIsSavingEdit] = useState(false);
|
|
21
|
+
const [pendingDelete, setPendingDelete] = useState(null);
|
|
22
|
+
const [isDeletingId, setIsDeletingId] = useState(null);
|
|
23
|
+
const [actionError, setActionError] = useState(null);
|
|
24
|
+
async function handleCreate() {
|
|
25
|
+
if (!newName.trim())
|
|
26
|
+
return;
|
|
27
|
+
setIsCreating(true);
|
|
28
|
+
setActionError(null);
|
|
29
|
+
const res = await createGroup({
|
|
30
|
+
name: newName.trim(),
|
|
31
|
+
description: newDescription.trim() || null,
|
|
32
|
+
});
|
|
33
|
+
setIsCreating(false);
|
|
34
|
+
if (res.success) {
|
|
35
|
+
setNewName('');
|
|
36
|
+
setNewDescription('');
|
|
37
|
+
onChanged?.();
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
setActionError(res.error || 'Failed to create group');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async function handleSaveEdit() {
|
|
44
|
+
if (!editing || !editing.name.trim())
|
|
45
|
+
return;
|
|
46
|
+
setIsSavingEdit(true);
|
|
47
|
+
setActionError(null);
|
|
48
|
+
const res = await updateGroup(editing.id, {
|
|
49
|
+
name: editing.name.trim(),
|
|
50
|
+
description: editing.description.trim() || null,
|
|
51
|
+
});
|
|
52
|
+
setIsSavingEdit(false);
|
|
53
|
+
if (res.success) {
|
|
54
|
+
setEditing(null);
|
|
55
|
+
onChanged?.();
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
setActionError(res.error || 'Failed to update group');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async function handleToggleActive(group) {
|
|
62
|
+
setActionError(null);
|
|
63
|
+
const res = await updateGroup(group.id, { isActive: !group.isActive });
|
|
64
|
+
if (!res.success)
|
|
65
|
+
setActionError(res.error || 'Failed to update group');
|
|
66
|
+
else
|
|
67
|
+
onChanged?.();
|
|
68
|
+
}
|
|
69
|
+
async function handleDelete(id) {
|
|
70
|
+
setIsDeletingId(id);
|
|
71
|
+
setActionError(null);
|
|
72
|
+
const res = await deleteGroup(id);
|
|
73
|
+
setIsDeletingId(null);
|
|
74
|
+
setPendingDelete(null);
|
|
75
|
+
if (!res.success)
|
|
76
|
+
setActionError(res.error || 'Failed to delete group');
|
|
77
|
+
else
|
|
78
|
+
onChanged?.();
|
|
79
|
+
}
|
|
80
|
+
return (_jsxs("div", { className: `admin-card overflow-hidden ${className}`, children: [_jsxs("div", { className: "admin-card-header flex items-center gap-2", children: [_jsx(Tags, { className: "h-4 w-4 admin-text-muted" }), _jsx("h2", { className: "admin-card-title", children: "Customer groups" })] }), _jsxs("div", { className: "p-4", children: [_jsx("p", { className: "mb-4 text-sm admin-text-muted", children: "Group your customers by type (Company, Individual, VIP\u2026). Groups show as a tag on the customer profile and can be used to filter the list. Deleting a group never deletes its customers \u2014 they just become ungrouped." }), (error || actionError) && (_jsx("div", { className: "admin-alert-inline admin-alert-inline-error mb-4", children: actionError || error })), isLoading ? (_jsx("div", { className: "space-y-2", children: Array.from({ length: 2 }).map((_, i) => (_jsx("div", { className: "admin-skeleton admin-skeleton-lg w-full rounded" }, i))) })) : groups.length === 0 ? (_jsx("p", { className: "mb-4 text-sm admin-text-muted", children: "No groups yet \u2014 create your first below." })) : (_jsx("ul", { className: "mb-4 divide-y divide-[hsl(var(--admin-border))]", children: groups.map((group) => (_jsx("li", { className: "flex items-center gap-3 py-2.5", children: editing?.id === group.id ? (_jsxs(_Fragment, { children: [_jsx("input", { className: "admin-input flex-1", value: editing.name, onChange: (e) => setEditing({ ...editing, name: e.target.value }), placeholder: "Group name", maxLength: 100 }), _jsx("input", { className: "admin-input flex-1", value: editing.description, onChange: (e) => setEditing({ ...editing, description: e.target.value }), placeholder: "Description (optional)", maxLength: 255 }), _jsxs("button", { onClick: handleSaveEdit, disabled: isSavingEdit || !editing.name.trim(), className: "admin-btn admin-btn-primary admin-btn-sm inline-flex items-center gap-1 disabled:opacity-50", children: [_jsx(Check, { className: "h-3 w-3" }), "Save"] }), _jsx("button", { onClick: () => setEditing(null), disabled: isSavingEdit, className: "admin-btn admin-btn-secondary admin-btn-sm inline-flex items-center gap-1", children: _jsx(X, { className: "h-3 w-3" }) })] })) : (_jsxs(_Fragment, { children: [_jsx("span", { className: "admin-badge admin-badge-neutral", children: group.name }), _jsx("span", { className: "flex-1 truncate text-sm admin-text-muted", children: group.description || '' }), _jsxs("span", { className: "text-xs admin-text-muted", children: [group.customerCount ?? 0, " customer", (group.customerCount ?? 0) !== 1 ? 's' : ''] }), _jsxs("label", { className: "flex items-center gap-1.5 text-xs admin-text-muted", children: [_jsx("input", { type: "checkbox", checked: group.isActive, onChange: () => handleToggleActive(group) }), "Active"] }), _jsxs("button", { onClick: () => setEditing({
|
|
81
|
+
id: group.id,
|
|
82
|
+
name: group.name,
|
|
83
|
+
description: group.description || '',
|
|
84
|
+
}), className: "admin-action-link inline-flex items-center gap-1", children: [_jsx(Pencil, { className: "h-3 w-3" }), "Edit"] }), pendingDelete === group.id ? (_jsxs("span", { className: "inline-flex items-center gap-2 text-xs", children: [_jsx("span", { className: "admin-text-muted", children: "Delete?" }), _jsx("button", { onClick: () => handleDelete(group.id), disabled: isDeletingId === group.id, className: "admin-error-text font-medium disabled:opacity-50", children: isDeletingId === group.id ? 'Deleting…' : 'Yes' }), _jsx("button", { onClick: () => setPendingDelete(null), className: "admin-text-muted", children: "No" })] })) : (_jsxs("button", { onClick: () => setPendingDelete(group.id), className: "admin-action-link inline-flex items-center gap-1", children: [_jsx(Trash2, { className: "h-3 w-3" }), "Delete"] }))] })) }, group.id))) })), _jsxs("div", { className: "flex flex-wrap items-center gap-2 border-t border-[hsl(var(--admin-border))] pt-4", children: [_jsx("input", { className: "admin-input flex-1 min-w-[160px]", value: newName, onChange: (e) => setNewName(e.target.value), placeholder: "New group name (e.g. Company)", maxLength: 100 }), _jsx("input", { className: "admin-input flex-1 min-w-[200px]", value: newDescription, onChange: (e) => setNewDescription(e.target.value), placeholder: "Description (optional)", maxLength: 255 }), _jsxs("button", { onClick: handleCreate, disabled: isCreating || !newName.trim(), className: "admin-btn admin-btn-primary admin-btn-sm inline-flex items-center gap-1 disabled:opacity-50", children: [_jsx(Plus, { className: "h-3 w-3" }), isCreating ? 'Adding…' : 'Add group'] })] })] })] }));
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=CustomerGroupsManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomerGroupsManager.js","sourceRoot":"","sources":["../../../src/admin/components/CustomerGroupsManager.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomerTable.d.ts","sourceRoot":"","sources":["../../../src/admin/components/CustomerTable.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CustomerTable.d.ts","sourceRoot":"","sources":["../../../src/admin/components/CustomerTable.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,kBAAkB,EAAyB,MAAM,UAAU,CAAA;AA8FzE;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAa,EACb,eAAe,EACf,SAAc,GACf,EAAE,kBAAkB,2CAiQpB"}
|
|
@@ -6,11 +6,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
6
6
|
* Customers data table with search and pagination.
|
|
7
7
|
* Styled with Rovela admin theme - uses pure CSS for hover states.
|
|
8
8
|
*/
|
|
9
|
-
import { useState, useEffect, useCallback } from 'react';
|
|
10
|
-
import { Search, Users, Mail, Calendar, CheckCircle, Clock, Trash2 } from 'lucide-react';
|
|
9
|
+
import { useState, useEffect, useCallback, useMemo } from 'react';
|
|
10
|
+
import { Search, Users, Mail, Calendar, CheckCircle, Clock, Trash2, Tags } from 'lucide-react';
|
|
11
11
|
import { useAdminCustomers } from '../hooks/useAdminCustomers';
|
|
12
|
+
import { useAdminCustomerGroups } from '../hooks/useAdminCustomerGroups';
|
|
12
13
|
import { useStoreSettingsOptional } from '../../core/StoreSettingsProvider';
|
|
13
14
|
import { DeleteConfirmDialog } from './DeleteConfirmDialog';
|
|
15
|
+
import { CustomerGroupsManager } from './CustomerGroupsManager';
|
|
14
16
|
// =============================================================================
|
|
15
17
|
// Verification Badge - Pure CSS Classes
|
|
16
18
|
// =============================================================================
|
|
@@ -20,8 +22,8 @@ function VerificationBadge({ verified }) {
|
|
|
20
22
|
}
|
|
21
23
|
return (_jsxs("span", { className: "admin-badge admin-badge-unverified inline-flex items-center gap-1", children: [_jsx(Clock, { className: "h-3 w-3" }), "Pending"] }));
|
|
22
24
|
}
|
|
23
|
-
function CustomerRow({ customer, onCustomerClick, onDeleteClick, formatDate }) {
|
|
24
|
-
return (_jsxs("tr", { onClick: () => onCustomerClick?.(customer.id), className: `admin-table-row ${onCustomerClick ? 'cursor-pointer' : ''}`, children: [_jsx("td", { className: "px-4 py-3", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "admin-customer-avatar h-9 w-9 text-sm font-medium", children: (customer.name || customer.email).charAt(0).toUpperCase() }), _jsx("span", { className: "font-medium", children: customer.name || 'Unnamed' })] }) }), _jsx("td", { className: "px-4 py-3", children: _jsxs("div", { className: "flex items-center gap-2 text-sm admin-text-muted", children: [_jsx(Mail, { className: "h-4 w-4" }), customer.email] }) }), _jsx("td", { className: "px-4 py-3", children: _jsx(VerificationBadge, { verified: !!customer.emailVerified }) }), _jsx("td", { className: "px-4 py-3", children: _jsxs("div", { className: "flex items-center gap-2 text-sm admin-text-muted", children: [_jsx(Calendar, { className: "h-4 w-4" }), formatDate(customer.createdAt)] }) }), _jsx("td", { className: "px-4 py-3", children: _jsx("div", { className: "flex items-center justify-end gap-2", children: _jsx("button", { type: "button", onClick: (e) => onDeleteClick(customer.id, customer.name || customer.email, e), className: "p-2 rounded-md hover:bg-[hsl(var(--admin-destructive)/0.1)] text-[hsl(var(--admin-foreground-muted))] hover:text-[hsl(var(--admin-destructive))] transition-colors", title: "Delete customer", children: _jsx(Trash2, { className: "h-4 w-4" }) }) }) })] }));
|
|
25
|
+
function CustomerRow({ customer, groupName, onCustomerClick, onDeleteClick, formatDate }) {
|
|
26
|
+
return (_jsxs("tr", { onClick: () => onCustomerClick?.(customer.id), className: `admin-table-row ${onCustomerClick ? 'cursor-pointer' : ''}`, children: [_jsx("td", { className: "px-4 py-3", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "admin-customer-avatar h-9 w-9 text-sm font-medium", children: (customer.name || customer.email).charAt(0).toUpperCase() }), _jsx("span", { className: "font-medium", children: customer.name || 'Unnamed' })] }) }), _jsx("td", { className: "px-4 py-3", children: _jsxs("div", { className: "flex items-center gap-2 text-sm admin-text-muted", children: [_jsx(Mail, { className: "h-4 w-4" }), customer.email] }) }), _jsx("td", { className: "px-4 py-3", children: groupName ? (_jsx("span", { className: "admin-badge admin-badge-neutral", children: groupName })) : (_jsx("span", { className: "text-sm admin-text-muted", children: "\u2014" })) }), _jsx("td", { className: "px-4 py-3", children: _jsx(VerificationBadge, { verified: !!customer.emailVerified }) }), _jsx("td", { className: "px-4 py-3", children: _jsxs("div", { className: "flex items-center gap-2 text-sm admin-text-muted", children: [_jsx(Calendar, { className: "h-4 w-4" }), formatDate(customer.createdAt)] }) }), _jsx("td", { className: "px-4 py-3", children: _jsx("div", { className: "flex items-center justify-end gap-2", children: _jsx("button", { type: "button", onClick: (e) => onDeleteClick(customer.id, customer.name || customer.email, e), className: "p-2 rounded-md hover:bg-[hsl(var(--admin-destructive)/0.1)] text-[hsl(var(--admin-foreground-muted))] hover:text-[hsl(var(--admin-destructive))] transition-colors", title: "Delete customer", children: _jsx(Trash2, { className: "h-4 w-4" }) }) }) })] }));
|
|
25
27
|
}
|
|
26
28
|
// =============================================================================
|
|
27
29
|
// Component
|
|
@@ -38,11 +40,20 @@ function CustomerRow({ customer, onCustomerClick, onDeleteClick, formatDate }) {
|
|
|
38
40
|
*/
|
|
39
41
|
export function CustomerTable({ pageSize = 20, onCustomerClick, className = '', }) {
|
|
40
42
|
const { customers, total, page, isLoading, error, fetchCustomers, deleteCustomer } = useAdminCustomers();
|
|
43
|
+
const { groups, fetchGroups } = useAdminCustomerGroups();
|
|
41
44
|
// Get locale from context
|
|
42
45
|
const storeSettings = useStoreSettingsOptional();
|
|
43
46
|
const resolvedLocale = storeSettings?.locale ?? 'en-US';
|
|
44
47
|
const [search, setSearch] = useState('');
|
|
45
48
|
const [debouncedSearch, setDebouncedSearch] = useState('');
|
|
49
|
+
const [groupFilter, setGroupFilter] = useState(''); // '' = all groups
|
|
50
|
+
const [showGroupsManager, setShowGroupsManager] = useState(false);
|
|
51
|
+
const groupNameById = useMemo(() => {
|
|
52
|
+
const map = new Map();
|
|
53
|
+
for (const g of groups)
|
|
54
|
+
map.set(g.id, g.name);
|
|
55
|
+
return map;
|
|
56
|
+
}, [groups]);
|
|
46
57
|
// Delete confirmation state
|
|
47
58
|
const [deleteTarget, setDeleteTarget] = useState(null);
|
|
48
59
|
const [isDeleting, setIsDeleting] = useState(false);
|
|
@@ -58,17 +69,19 @@ export function CustomerTable({ pageSize = 20, onCustomerClick, className = '',
|
|
|
58
69
|
useEffect(() => {
|
|
59
70
|
fetchCustomers({
|
|
60
71
|
search: debouncedSearch || undefined,
|
|
72
|
+
group: groupFilter || undefined,
|
|
61
73
|
page: 1,
|
|
62
74
|
limit: pageSize,
|
|
63
75
|
});
|
|
64
|
-
}, [debouncedSearch, pageSize, fetchCustomers]);
|
|
76
|
+
}, [debouncedSearch, groupFilter, pageSize, fetchCustomers]);
|
|
65
77
|
const handlePageChange = useCallback((newPage) => {
|
|
66
78
|
fetchCustomers({
|
|
67
79
|
search: debouncedSearch || undefined,
|
|
80
|
+
group: groupFilter || undefined,
|
|
68
81
|
page: newPage,
|
|
69
82
|
limit: pageSize,
|
|
70
83
|
});
|
|
71
|
-
}, [debouncedSearch, pageSize, fetchCustomers]);
|
|
84
|
+
}, [debouncedSearch, groupFilter, pageSize, fetchCustomers]);
|
|
72
85
|
// Delete handlers
|
|
73
86
|
const handleDeleteClick = useCallback((id, name, e) => {
|
|
74
87
|
e.stopPropagation(); // Prevent row click navigation
|
|
@@ -105,8 +118,8 @@ export function CustomerTable({ pageSize = 20, onCustomerClick, className = '',
|
|
|
105
118
|
});
|
|
106
119
|
};
|
|
107
120
|
const totalPages = Math.ceil(total / pageSize);
|
|
108
|
-
return (_jsxs("div", { className: `space-y-4 ${className}`, children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4", children: [_jsxs("div", { className: "admin-input-with-icon flex-1 max-w-sm", children: [_jsx(Search, { className: "admin-input-with-icon-left h-4 w-4" }), _jsx("input", { type: "text", value: search, onChange: (e) => setSearch(e.target.value), placeholder: "Search by email or name...", className: "admin-input w-full" })] }), _jsxs("div", { className: "flex items-center gap-2 text-sm admin-text-muted", children: [_jsx(Users, { className: "h-4 w-4" }), _jsxs("span", { children: [total, " customer", total !== 1 ? 's' : ''] })] })] }), error && (_jsx("div", { className: "admin-alert-inline admin-alert-inline-error", children: error })), _jsx("div", { className: "admin-card overflow-hidden", children: _jsxs("table", { className: "admin-table w-full", children: [_jsx("thead", { children: _jsxs("tr", { className: "admin-table-header", children: [_jsx("th", { className: "px-4 py-3 text-left", children: "Customer" }), _jsx("th", { className: "px-4 py-3 text-left", children: "Email" }), _jsx("th", { className: "px-4 py-3 text-left", children: "Status" }), _jsx("th", { className: "px-4 py-3 text-left", children: "Joined" }), _jsx("th", { className: "px-4 py-3 text-right", children: "Actions" })] }) }), _jsx("tbody", { children: isLoading ? (
|
|
121
|
+
return (_jsxs("div", { className: `space-y-4 ${className}`, children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4", children: [_jsxs("div", { className: "admin-input-with-icon flex-1 max-w-sm", children: [_jsx(Search, { className: "admin-input-with-icon-left h-4 w-4" }), _jsx("input", { type: "text", value: search, onChange: (e) => setSearch(e.target.value), placeholder: "Search by email or name...", className: "admin-input w-full" })] }), _jsxs("select", { value: groupFilter, onChange: (e) => setGroupFilter(e.target.value), className: "admin-input w-auto", "aria-label": "Filter by group", children: [_jsx("option", { value: "", children: "All groups" }), groups.map((g) => (_jsx("option", { value: g.id, children: g.name }, g.id)))] }), _jsxs("button", { type: "button", onClick: () => setShowGroupsManager((v) => !v), className: "admin-btn admin-btn-secondary admin-btn-sm inline-flex items-center gap-1.5", children: [_jsx(Tags, { className: "h-4 w-4" }), showGroupsManager ? 'Hide groups' : 'Manage groups'] }), _jsxs("div", { className: "flex items-center gap-2 text-sm admin-text-muted", children: [_jsx(Users, { className: "h-4 w-4" }), _jsxs("span", { children: [total, " customer", total !== 1 ? 's' : ''] })] })] }), showGroupsManager && _jsx(CustomerGroupsManager, { onChanged: fetchGroups }), error && (_jsx("div", { className: "admin-alert-inline admin-alert-inline-error", children: error })), _jsx("div", { className: "admin-card overflow-hidden", children: _jsxs("table", { className: "admin-table w-full", children: [_jsx("thead", { children: _jsxs("tr", { className: "admin-table-header", children: [_jsx("th", { className: "px-4 py-3 text-left", children: "Customer" }), _jsx("th", { className: "px-4 py-3 text-left", children: "Email" }), _jsx("th", { className: "px-4 py-3 text-left", children: "Group" }), _jsx("th", { className: "px-4 py-3 text-left", children: "Status" }), _jsx("th", { className: "px-4 py-3 text-left", children: "Joined" }), _jsx("th", { className: "px-4 py-3 text-right", children: "Actions" })] }) }), _jsx("tbody", { children: isLoading ? (
|
|
109
122
|
// Loading skeleton
|
|
110
|
-
Array.from({ length: 5 }).map((_, i) => (_jsxs("tr", { className: "admin-table-row", children: [_jsx("td", { className: "px-4 py-3", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "admin-skeleton admin-skeleton-xl w-9 rounded-full" }), _jsx("div", { className: "admin-skeleton admin-skeleton-md w-24 rounded" })] }) }), _jsx("td", { className: "px-4 py-3", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-48 rounded" }) }), _jsx("td", { className: "px-4 py-3", children: _jsx("div", { className: "admin-skeleton admin-skeleton-lg w-20 rounded" }) }), _jsx("td", { className: "px-4 py-3", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-24 rounded" }) }), _jsx("td", { className: "px-4 py-3", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-8 rounded ml-auto" }) })] }, i)))) : customers.length === 0 ? (_jsx("tr", { children: _jsxs("td", { colSpan:
|
|
123
|
+
Array.from({ length: 5 }).map((_, i) => (_jsxs("tr", { className: "admin-table-row", children: [_jsx("td", { className: "px-4 py-3", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "admin-skeleton admin-skeleton-xl w-9 rounded-full" }), _jsx("div", { className: "admin-skeleton admin-skeleton-md w-24 rounded" })] }) }), _jsx("td", { className: "px-4 py-3", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-48 rounded" }) }), _jsx("td", { className: "px-4 py-3", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-16 rounded" }) }), _jsx("td", { className: "px-4 py-3", children: _jsx("div", { className: "admin-skeleton admin-skeleton-lg w-20 rounded" }) }), _jsx("td", { className: "px-4 py-3", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-24 rounded" }) }), _jsx("td", { className: "px-4 py-3", children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-8 rounded ml-auto" }) })] }, i)))) : customers.length === 0 ? (_jsx("tr", { children: _jsxs("td", { colSpan: 6, className: "px-4 py-12 text-center", children: [_jsx(Users, { className: "mx-auto h-12 w-12 admin-empty-icon" }), _jsx("p", { className: "mt-2 text-sm admin-empty-text", children: debouncedSearch ? 'No customers found matching your search' : 'No customers yet' })] }) })) : (customers.map((customer) => (_jsx(CustomerRow, { customer: customer, groupName: customer.groupId ? groupNameById.get(customer.groupId) ?? null : null, onCustomerClick: onCustomerClick, onDeleteClick: handleDeleteClick, formatDate: formatDate }, customer.id)))) })] }) }), _jsx(DeleteConfirmDialog, { isOpen: !!deleteTarget, title: "Delete Customer", itemName: deleteTarget?.name || '', itemType: "customer", isDeleting: isDeleting, error: deleteError, onConfirm: handleDeleteConfirm, onCancel: handleDeleteCancel }), totalPages > 1 && (_jsxs("div", { className: "admin-pagination", children: [_jsxs("p", { className: "admin-pagination-info", children: ["Showing ", (page - 1) * pageSize + 1, " to", ' ', Math.min(page * pageSize, total), " of ", total, " customers"] }), _jsxs("div", { className: "admin-pagination-controls", children: [_jsx("button", { onClick: () => handlePageChange(page - 1), disabled: page <= 1, className: "admin-btn admin-btn-secondary admin-btn-sm disabled:opacity-50", children: "Previous" }), _jsx("button", { onClick: () => handlePageChange(page + 1), disabled: page >= totalPages, className: "admin-btn admin-btn-secondary admin-btn-sm disabled:opacity-50", children: "Next" })] })] }))] }));
|
|
111
124
|
}
|
|
112
125
|
//# sourceMappingURL=CustomerTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomerTable.js","sourceRoot":"","sources":["../../../src/admin/components/CustomerTable.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"CustomerTable.js","sourceRoot":"","sources":["../../../src/admin/components/CustomerTable.tsx"],"names":[],"mappings":"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"}
|