@rovela-ai/sdk 0.2.1 → 0.3.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/accept-invite.d.ts +65 -0
- package/dist/admin/api/accept-invite.d.ts.map +1 -0
- package/dist/admin/api/accept-invite.js +115 -0
- package/dist/admin/api/accept-invite.js.map +1 -0
- package/dist/admin/api/categories.d.ts.map +1 -1
- package/dist/admin/api/categories.js +21 -28
- package/dist/admin/api/categories.js.map +1 -1
- package/dist/admin/api/customers.d.ts.map +1 -1
- package/dist/admin/api/customers.js +17 -25
- package/dist/admin/api/customers.js.map +1 -1
- package/dist/admin/api/forgot-password.d.ts +39 -0
- package/dist/admin/api/forgot-password.d.ts.map +1 -0
- package/dist/admin/api/forgot-password.js +66 -0
- package/dist/admin/api/forgot-password.js.map +1 -0
- package/dist/admin/api/index.d.ts +6 -0
- package/dist/admin/api/index.d.ts.map +1 -1
- package/dist/admin/api/index.js +9 -0
- package/dist/admin/api/index.js.map +1 -1
- package/dist/admin/api/me.d.ts +72 -0
- package/dist/admin/api/me.d.ts.map +1 -0
- package/dist/admin/api/me.js +177 -0
- package/dist/admin/api/me.js.map +1 -0
- package/dist/admin/api/orders.d.ts.map +1 -1
- package/dist/admin/api/orders.js +21 -28
- package/dist/admin/api/orders.js.map +1 -1
- package/dist/admin/api/products.d.ts.map +1 -1
- package/dist/admin/api/products.js +33 -37
- package/dist/admin/api/products.js.map +1 -1
- package/dist/admin/api/refund.d.ts.map +1 -1
- package/dist/admin/api/refund.js +5 -7
- package/dist/admin/api/refund.js.map +1 -1
- package/dist/admin/api/reset-password.d.ts +49 -0
- package/dist/admin/api/reset-password.d.ts.map +1 -0
- package/dist/admin/api/reset-password.js +99 -0
- package/dist/admin/api/reset-password.js.map +1 -0
- package/dist/admin/api/return.d.ts.map +1 -1
- package/dist/admin/api/return.js +9 -12
- package/dist/admin/api/return.js.map +1 -1
- package/dist/admin/api/settings.d.ts.map +1 -1
- package/dist/admin/api/settings.js +9 -12
- package/dist/admin/api/settings.js.map +1 -1
- package/dist/admin/api/shipping.d.ts.map +1 -1
- package/dist/admin/api/shipping.js +65 -61
- package/dist/admin/api/shipping.js.map +1 -1
- package/dist/admin/api/stats.d.ts.map +1 -1
- package/dist/admin/api/stats.js +5 -7
- package/dist/admin/api/stats.js.map +1 -1
- package/dist/admin/api/stripe-status.d.ts.map +1 -1
- package/dist/admin/api/stripe-status.js +5 -7
- package/dist/admin/api/stripe-status.js.map +1 -1
- package/dist/admin/api/tax-zones.d.ts.map +1 -1
- package/dist/admin/api/tax-zones.js +21 -28
- package/dist/admin/api/tax-zones.js.map +1 -1
- package/dist/admin/api/users.d.ts +142 -0
- package/dist/admin/api/users.d.ts.map +1 -0
- package/dist/admin/api/users.js +356 -0
- package/dist/admin/api/users.js.map +1 -0
- package/dist/admin/components/AdminAcceptInviteForm.d.ts +3 -0
- package/dist/admin/components/AdminAcceptInviteForm.d.ts.map +1 -0
- package/dist/admin/components/AdminAcceptInviteForm.js +137 -0
- package/dist/admin/components/AdminAcceptInviteForm.js.map +1 -0
- package/dist/admin/components/AdminAccountPage.d.ts +10 -0
- package/dist/admin/components/AdminAccountPage.d.ts.map +1 -0
- package/dist/admin/components/AdminAccountPage.js +123 -0
- package/dist/admin/components/AdminAccountPage.js.map +1 -0
- package/dist/admin/components/AdminForgotPasswordForm.d.ts +8 -0
- package/dist/admin/components/AdminForgotPasswordForm.d.ts.map +1 -0
- package/dist/admin/components/AdminForgotPasswordForm.js +59 -0
- package/dist/admin/components/AdminForgotPasswordForm.js.map +1 -0
- package/dist/admin/components/AdminNav.d.ts.map +1 -1
- package/dist/admin/components/AdminNav.js +32 -4
- package/dist/admin/components/AdminNav.js.map +1 -1
- package/dist/admin/components/AdminResetPasswordForm.d.ts +12 -0
- package/dist/admin/components/AdminResetPasswordForm.d.ts.map +1 -0
- package/dist/admin/components/AdminResetPasswordForm.js +134 -0
- package/dist/admin/components/AdminResetPasswordForm.js.map +1 -0
- package/dist/admin/components/AdminUserMenu.d.ts.map +1 -1
- package/dist/admin/components/AdminUserMenu.js +2 -2
- package/dist/admin/components/AdminUserMenu.js.map +1 -1
- package/dist/admin/components/InviteUserDialog.d.ts +3 -0
- package/dist/admin/components/InviteUserDialog.d.ts.map +1 -0
- package/dist/admin/components/InviteUserDialog.js +127 -0
- package/dist/admin/components/InviteUserDialog.js.map +1 -0
- package/dist/admin/components/UsersTable.d.ts +3 -0
- package/dist/admin/components/UsersTable.d.ts.map +1 -0
- package/dist/admin/components/UsersTable.js +399 -0
- package/dist/admin/components/UsersTable.js.map +1 -0
- package/dist/admin/components/index.d.ts +9 -0
- package/dist/admin/components/index.d.ts.map +1 -1
- package/dist/admin/components/index.js +9 -0
- package/dist/admin/components/index.js.map +1 -1
- package/dist/admin/config.d.ts +15 -10
- package/dist/admin/config.d.ts.map +1 -1
- package/dist/admin/config.js +38 -11
- package/dist/admin/config.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 +3 -0
- package/dist/admin/hooks/index.js.map +1 -1
- package/dist/admin/hooks/useAdminMe.d.ts +31 -0
- package/dist/admin/hooks/useAdminMe.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminMe.js +103 -0
- package/dist/admin/hooks/useAdminMe.js.map +1 -0
- package/dist/admin/hooks/useAdminPermissions.d.ts +3 -0
- package/dist/admin/hooks/useAdminPermissions.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminPermissions.js +51 -0
- package/dist/admin/hooks/useAdminPermissions.js.map +1 -0
- package/dist/admin/hooks/useAdminUsers.d.ts +3 -0
- package/dist/admin/hooks/useAdminUsers.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminUsers.js +240 -0
- package/dist/admin/hooks/useAdminUsers.js.map +1 -0
- package/dist/admin/index.d.ts +4 -4
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +20 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/permissions.d.ts +92 -0
- package/dist/admin/permissions.d.ts.map +1 -0
- package/dist/admin/permissions.js +201 -0
- package/dist/admin/permissions.js.map +1 -0
- package/dist/admin/server/admin-invite.d.ts +122 -0
- package/dist/admin/server/admin-invite.d.ts.map +1 -0
- package/dist/admin/server/admin-invite.js +235 -0
- package/dist/admin/server/admin-invite.js.map +1 -0
- package/dist/admin/server/admin-password-reset.d.ts +87 -0
- package/dist/admin/server/admin-password-reset.d.ts.map +1 -0
- package/dist/admin/server/admin-password-reset.js +220 -0
- package/dist/admin/server/admin-password-reset.js.map +1 -0
- package/dist/admin/server/admin-self-service.d.ts +86 -0
- package/dist/admin/server/admin-self-service.d.ts.map +1 -0
- package/dist/admin/server/admin-self-service.js +188 -0
- package/dist/admin/server/admin-self-service.js.map +1 -0
- package/dist/admin/server/admin-service.d.ts.map +1 -1
- package/dist/admin/server/admin-service.js +21 -2
- package/dist/admin/server/admin-service.js.map +1 -1
- package/dist/admin/server/admin-session.d.ts +137 -0
- package/dist/admin/server/admin-session.d.ts.map +1 -0
- package/dist/admin/server/admin-session.js +229 -0
- package/dist/admin/server/admin-session.js.map +1 -0
- package/dist/admin/server/index.d.ts +7 -0
- package/dist/admin/server/index.d.ts.map +1 -1
- package/dist/admin/server/index.js +20 -0
- package/dist/admin/server/index.js.map +1 -1
- package/dist/admin/server/user-management.d.ts +223 -0
- package/dist/admin/server/user-management.d.ts.map +1 -0
- package/dist/admin/server/user-management.js +846 -0
- package/dist/admin/server/user-management.js.map +1 -0
- package/dist/admin/types.d.ts +153 -2
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/auth/config.d.ts.map +1 -1
- package/dist/auth/config.js +11 -2
- package/dist/auth/config.js.map +1 -1
- package/dist/core/db/queries.d.ts +19 -13
- package/dist/core/db/queries.d.ts.map +1 -1
- package/dist/core/db/schema.d.ts +327 -9
- package/dist/core/db/schema.d.ts.map +1 -1
- package/dist/core/db/schema.js +80 -3
- package/dist/core/db/schema.js.map +1 -1
- package/dist/core/types.d.ts +19 -3
- package/dist/core/types.d.ts.map +1 -1
- package/dist/emails/index.d.ts +2 -2
- package/dist/emails/index.d.ts.map +1 -1
- package/dist/emails/index.js +3 -1
- package/dist/emails/index.js.map +1 -1
- package/dist/emails/send/admin-auth.d.ts +94 -0
- package/dist/emails/send/admin-auth.d.ts.map +1 -0
- package/dist/emails/send/admin-auth.js +118 -0
- package/dist/emails/send/admin-auth.js.map +1 -0
- package/dist/emails/send/index.d.ts +2 -0
- package/dist/emails/send/index.d.ts.map +1 -1
- package/dist/emails/send/index.js +4 -0
- package/dist/emails/send/index.js.map +1 -1
- package/dist/emails/templates/admin-invite.d.ts +40 -0
- package/dist/emails/templates/admin-invite.d.ts.map +1 -0
- package/dist/emails/templates/admin-invite.js +62 -0
- package/dist/emails/templates/admin-invite.js.map +1 -0
- package/dist/emails/templates/index.d.ts +1 -0
- package/dist/emails/templates/index.d.ts.map +1 -1
- package/dist/emails/templates/index.js +4 -0
- package/dist/emails/templates/index.js.map +1 -1
- package/dist/emails/types.d.ts +22 -1
- package/dist/emails/types.d.ts.map +1 -1
- package/package.json +21 -1
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* @rovela/sdk/admin/components/UsersTable
|
|
5
|
+
*
|
|
6
|
+
* Admin user management table — list, search, filter, and lifecycle-action
|
|
7
|
+
* (deactivate / reactivate / hard-delete) flows.
|
|
8
|
+
*
|
|
9
|
+
* Reuses the existing CustomerTable styling conventions (admin-* CSS classes)
|
|
10
|
+
* and the shared `DeleteConfirmDialog` for all destructive confirmations.
|
|
11
|
+
*
|
|
12
|
+
* Role-based gating:
|
|
13
|
+
* - Action buttons on each row respect `canManageUser` from
|
|
14
|
+
* `useAdminPermissions` — an admin can never see an action they can't
|
|
15
|
+
* execute. Server still enforces the same rules.
|
|
16
|
+
* - Self row shows no action menu (can't manage yourself).
|
|
17
|
+
* - Hard-delete action is owner-only and requires the target to already
|
|
18
|
+
* be in `deactivated` status.
|
|
19
|
+
* - Hard-delete confirmation requires typing the target's email (high
|
|
20
|
+
* friction, matches GitHub repo deletion UX).
|
|
21
|
+
*/
|
|
22
|
+
import { useState, useEffect, useCallback, useMemo } from 'react';
|
|
23
|
+
import { Search, Users as UsersIcon, UserCheck, UserX, MoreHorizontal, Shield, CheckCircle2, Clock, XCircle, Trash2, RotateCcw, AlertTriangle, UserPlus, Send, Ban, ChevronRight, } from 'lucide-react';
|
|
24
|
+
import { useAdminUsers } from '../hooks/useAdminUsers';
|
|
25
|
+
import { useAdminAuth } from '../hooks/useAdminAuth';
|
|
26
|
+
import { useAdminPermissions } from '../hooks/useAdminPermissions';
|
|
27
|
+
import { useStoreSettingsOptional } from '../../core/StoreSettingsProvider';
|
|
28
|
+
import { roleLabel, canonicalRole } from '../permissions';
|
|
29
|
+
import { DeleteConfirmDialog } from './DeleteConfirmDialog';
|
|
30
|
+
import { InviteUserDialog } from './InviteUserDialog';
|
|
31
|
+
// =============================================================================
|
|
32
|
+
// Role badge
|
|
33
|
+
// =============================================================================
|
|
34
|
+
function RoleBadge({ role }) {
|
|
35
|
+
const canonical = canonicalRole(role);
|
|
36
|
+
const label = roleLabel(role);
|
|
37
|
+
let className = 'admin-badge ';
|
|
38
|
+
if (canonical === 'owner') {
|
|
39
|
+
className += 'admin-badge-verified';
|
|
40
|
+
}
|
|
41
|
+
else if (canonical === 'administrator') {
|
|
42
|
+
className += 'admin-badge-verified';
|
|
43
|
+
}
|
|
44
|
+
else if (canonical === 'manager') {
|
|
45
|
+
className += 'admin-badge-unverified';
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
className += 'admin-badge-unverified';
|
|
49
|
+
}
|
|
50
|
+
return (_jsxs("span", { className: `${className} inline-flex items-center gap-1`, children: [_jsx(Shield, { className: "h-3 w-3" }), label] }));
|
|
51
|
+
}
|
|
52
|
+
// =============================================================================
|
|
53
|
+
// Status badge
|
|
54
|
+
// =============================================================================
|
|
55
|
+
function StatusBadge({ status }) {
|
|
56
|
+
if (status === 'active') {
|
|
57
|
+
return (_jsxs("span", { className: "admin-badge admin-badge-verified inline-flex items-center gap-1", children: [_jsx(CheckCircle2, { className: "h-3 w-3" }), "Active"] }));
|
|
58
|
+
}
|
|
59
|
+
if (status === 'invited') {
|
|
60
|
+
return (_jsxs("span", { className: "admin-badge admin-badge-unverified inline-flex items-center gap-1", children: [_jsx(Clock, { className: "h-3 w-3" }), "Invited"] }));
|
|
61
|
+
}
|
|
62
|
+
return (_jsxs("span", { className: "admin-badge admin-badge-unverified inline-flex items-center gap-1", children: [_jsx(XCircle, { className: "h-3 w-3" }), "Deactivated"] }));
|
|
63
|
+
}
|
|
64
|
+
function RowActions({ user, canDeactivate, canReactivate, canDelete, canResendInvite, canCancelInvite, grantableRoles, onDeactivate, onReactivate, onDelete, onResendInvite, onCancelInvite, onChangeRole, }) {
|
|
65
|
+
const [open, setOpen] = useState(false);
|
|
66
|
+
const [roleSubmenuOpen, setRoleSubmenuOpen] = useState(false);
|
|
67
|
+
const hasAnyAction = canDeactivate ||
|
|
68
|
+
canReactivate ||
|
|
69
|
+
canDelete ||
|
|
70
|
+
canResendInvite ||
|
|
71
|
+
canCancelInvite ||
|
|
72
|
+
grantableRoles.length > 0;
|
|
73
|
+
// If no actions available, render nothing (cleaner than disabled menu)
|
|
74
|
+
if (!hasAnyAction) {
|
|
75
|
+
return _jsx("span", { className: "text-xs admin-text-muted", children: "\u2014" });
|
|
76
|
+
}
|
|
77
|
+
return (_jsxs("div", { className: "relative inline-block", children: [_jsx("button", { type: "button", onClick: (e) => {
|
|
78
|
+
e.stopPropagation();
|
|
79
|
+
setOpen((v) => !v);
|
|
80
|
+
setRoleSubmenuOpen(false);
|
|
81
|
+
}, className: "p-2 rounded-md hover:bg-[hsl(var(--admin-background-hover))] text-[hsl(var(--admin-foreground-muted))]", "aria-label": "Actions", "aria-expanded": open, children: _jsx(MoreHorizontal, { className: "h-4 w-4" }) }), open && (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-40", onClick: () => {
|
|
82
|
+
setOpen(false);
|
|
83
|
+
setRoleSubmenuOpen(false);
|
|
84
|
+
}, "aria-hidden": "true" }), _jsx("div", { className: "absolute right-0 z-50 mt-1 min-w-[200px] rounded-md border shadow-lg", style: {
|
|
85
|
+
background: 'hsl(var(--admin-card))',
|
|
86
|
+
borderColor: 'hsl(var(--admin-border))',
|
|
87
|
+
}, onClick: (e) => e.stopPropagation(), children: _jsxs("div", { className: "py-1", children: [canResendInvite && (_jsxs("button", { type: "button", onClick: () => {
|
|
88
|
+
setOpen(false);
|
|
89
|
+
onResendInvite(user);
|
|
90
|
+
}, className: "w-full px-3 py-2 text-left text-sm flex items-center gap-2 hover:bg-[hsl(var(--admin-background-hover))]", children: [_jsx(Send, { className: "h-4 w-4" }), "Resend invite"] })), canCancelInvite && (_jsxs("button", { type: "button", onClick: () => {
|
|
91
|
+
setOpen(false);
|
|
92
|
+
onCancelInvite(user);
|
|
93
|
+
}, className: "w-full px-3 py-2 text-left text-sm flex items-center gap-2 hover:bg-[hsl(var(--admin-destructive)/0.1)] text-[hsl(var(--admin-destructive))]", children: [_jsx(Ban, { className: "h-4 w-4" }), "Cancel invite"] })), canDeactivate && (_jsxs("button", { type: "button", onClick: () => {
|
|
94
|
+
setOpen(false);
|
|
95
|
+
onDeactivate(user);
|
|
96
|
+
}, className: "w-full px-3 py-2 text-left text-sm flex items-center gap-2 hover:bg-[hsl(var(--admin-background-hover))]", children: [_jsx(UserX, { className: "h-4 w-4" }), "Deactivate"] })), canReactivate && (_jsxs("button", { type: "button", onClick: () => {
|
|
97
|
+
setOpen(false);
|
|
98
|
+
onReactivate(user);
|
|
99
|
+
}, className: "w-full px-3 py-2 text-left text-sm flex items-center gap-2 hover:bg-[hsl(var(--admin-background-hover))]", children: [_jsx(RotateCcw, { className: "h-4 w-4" }), "Reactivate"] })), grantableRoles.length > 0 && (_jsxs("div", { className: "relative", children: [_jsxs("button", { type: "button", onClick: () => setRoleSubmenuOpen((v) => !v), className: "w-full px-3 py-2 text-left text-sm flex items-center justify-between gap-2 hover:bg-[hsl(var(--admin-background-hover))]", "aria-expanded": roleSubmenuOpen, children: [_jsxs("span", { className: "flex items-center gap-2", children: [_jsx(Shield, { className: "h-4 w-4" }), "Change role"] }), _jsx(ChevronRight, { className: "h-4 w-4" })] }), roleSubmenuOpen && (_jsx("div", { className: "ml-4 mt-1 rounded-md border", style: {
|
|
100
|
+
background: 'hsl(var(--admin-card))',
|
|
101
|
+
borderColor: 'hsl(var(--admin-border))',
|
|
102
|
+
}, children: grantableRoles.map((targetRole) => (_jsx("button", { type: "button", onClick: () => {
|
|
103
|
+
setOpen(false);
|
|
104
|
+
setRoleSubmenuOpen(false);
|
|
105
|
+
onChangeRole(user, targetRole);
|
|
106
|
+
}, className: "w-full px-3 py-2 text-left text-sm flex items-center gap-2 hover:bg-[hsl(var(--admin-background-hover))]", children: roleLabel(targetRole) }, targetRole))) }))] })), canDelete && (_jsxs(_Fragment, { children: [_jsx("div", { className: "my-1 border-t", style: { borderColor: 'hsl(var(--admin-border))' } }), _jsxs("button", { type: "button", onClick: () => {
|
|
107
|
+
setOpen(false);
|
|
108
|
+
onDelete(user);
|
|
109
|
+
}, className: "w-full px-3 py-2 text-left text-sm flex items-center gap-2 hover:bg-[hsl(var(--admin-destructive)/0.1)] text-[hsl(var(--admin-destructive))]", children: [_jsx(Trash2, { className: "h-4 w-4" }), "Delete permanently"] })] }))] }) })] }))] }));
|
|
110
|
+
}
|
|
111
|
+
function UserRow({ user, isSelf, canDeactivate, canReactivate, canDelete, canResendInvite, canCancelInvite, grantableRoles, formatDate, onDeactivate, onReactivate, onDelete, onResendInvite, onCancelInvite, onChangeRole, }) {
|
|
112
|
+
return (_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-customer-avatar h-9 w-9 text-sm font-medium", children: (user.name || user.email).charAt(0).toUpperCase() }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "font-medium", children: user.name || 'Unnamed' }), isSelf && (_jsx("span", { className: "text-xs admin-text-muted", children: "(you)" }))] })] }) }), _jsx("td", { className: "px-4 py-3", children: _jsx("span", { className: "text-sm admin-text-muted", children: user.email }) }), _jsx("td", { className: "px-4 py-3", children: _jsx(RoleBadge, { role: user.role }) }), _jsx("td", { className: "px-4 py-3", children: _jsx(StatusBadge, { status: user.status }) }), _jsx("td", { className: "px-4 py-3", children: _jsx("span", { className: "text-sm admin-text-muted", children: formatDate(user.lastLoginAt) }) }), _jsx("td", { className: "px-4 py-3", children: _jsx("span", { className: "text-sm admin-text-muted", children: formatDate(user.createdAt) }) }), _jsx("td", { className: "px-4 py-3 text-right", children: isSelf ? (_jsx("span", { className: "text-xs admin-text-muted", children: "\u2014" })) : (_jsx(RowActions, { user: user, canDeactivate: canDeactivate, canReactivate: canReactivate, canDelete: canDelete, canResendInvite: canResendInvite, canCancelInvite: canCancelInvite, grantableRoles: grantableRoles, onDeactivate: onDeactivate, onReactivate: onReactivate, onDelete: onDelete, onResendInvite: onResendInvite, onCancelInvite: onCancelInvite, onChangeRole: onChangeRole })) })] }));
|
|
113
|
+
}
|
|
114
|
+
function DeleteWithConfirmationDialog({ user, isDeleting, error, onConfirm, onCancel, }) {
|
|
115
|
+
const [typed, setTyped] = useState('');
|
|
116
|
+
// Reset the typed input whenever the dialog opens for a new target
|
|
117
|
+
useEffect(() => {
|
|
118
|
+
setTyped('');
|
|
119
|
+
}, [user?.id]);
|
|
120
|
+
if (!user)
|
|
121
|
+
return null;
|
|
122
|
+
const canConfirm = typed.trim().toLowerCase() === user.email.toLowerCase();
|
|
123
|
+
return (_jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4", style: { background: 'rgba(0,0,0,0.5)' }, onClick: () => {
|
|
124
|
+
if (!isDeleting)
|
|
125
|
+
onCancel();
|
|
126
|
+
}, children: _jsxs("div", { className: "w-full max-w-md rounded-lg p-6", style: {
|
|
127
|
+
background: 'hsl(var(--admin-card))',
|
|
128
|
+
border: '1px solid hsl(var(--admin-border))',
|
|
129
|
+
}, onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { className: "flex items-start gap-3 mb-4", children: [_jsx("div", { className: "flex-shrink-0 h-10 w-10 rounded-full flex items-center justify-center", style: { background: 'hsl(var(--admin-destructive) / 0.1)' }, children: _jsx(AlertTriangle, { className: "h-5 w-5 text-[hsl(var(--admin-destructive))]" }) }), _jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold mb-1", children: "Delete user permanently" }), _jsxs("p", { className: "text-sm admin-text-muted", children: ["This permanently removes ", _jsx("strong", { children: user.name || user.email }), ". Their reset tokens and invite tokens will also be deleted. This action cannot be undone."] })] })] }), _jsxs("div", { className: "mb-4", children: [_jsxs("label", { className: "admin-label block mb-2", children: ["Type ", _jsx("code", { className: "font-mono", children: user.email }), " to confirm"] }), _jsx("input", { type: "text", value: typed, onChange: (e) => setTyped(e.target.value), disabled: isDeleting, className: "admin-input w-full", placeholder: user.email, autoComplete: "off", autoFocus: true })] }), error && (_jsx("div", { className: "admin-alert admin-alert-error mb-4", children: _jsx("div", { className: "admin-alert-description", children: error }) })), _jsxs("div", { className: "flex items-center justify-end gap-2", children: [_jsx("button", { type: "button", onClick: onCancel, disabled: isDeleting, className: "admin-btn admin-btn-secondary", children: "Cancel" }), _jsx("button", { type: "button", onClick: onConfirm, disabled: !canConfirm || isDeleting, className: "admin-btn", style: {
|
|
130
|
+
background: 'hsl(var(--admin-destructive))',
|
|
131
|
+
color: 'hsl(var(--admin-destructive-foreground, 0 0% 100%))',
|
|
132
|
+
}, children: isDeleting ? (_jsxs("span", { className: "flex items-center gap-2", children: [_jsx("span", { className: "admin-spinner admin-spinner-sm" }), "Deleting..."] })) : ('Delete permanently') })] })] }) }));
|
|
133
|
+
}
|
|
134
|
+
// =============================================================================
|
|
135
|
+
// Main component
|
|
136
|
+
// =============================================================================
|
|
137
|
+
export function UsersTable({ pageSize = 20, className = '' }) {
|
|
138
|
+
const { users, total, page, isLoading, error, fetchUsers, deactivate, reactivate, deleteUser,
|
|
139
|
+
// Phase 3
|
|
140
|
+
resendInvite, cancelInvite, changeRole, } = useAdminUsers();
|
|
141
|
+
const { admin: currentAdmin } = useAdminAuth();
|
|
142
|
+
const { canManageUser, isOwner, can, canManageUser: canManageRole, } = useAdminPermissions();
|
|
143
|
+
// Permission to even see the Invite button
|
|
144
|
+
const canInvite = can('users.write');
|
|
145
|
+
const storeSettings = useStoreSettingsOptional();
|
|
146
|
+
const resolvedLocale = storeSettings?.locale ?? 'en-US';
|
|
147
|
+
// Filters
|
|
148
|
+
const [search, setSearch] = useState('');
|
|
149
|
+
const [debouncedSearch, setDebouncedSearch] = useState('');
|
|
150
|
+
const [statusFilter, setStatusFilter] = useState('all');
|
|
151
|
+
const [roleFilter, setRoleFilter] = useState('all');
|
|
152
|
+
// Deactivate confirmation state
|
|
153
|
+
const [deactivateTarget, setDeactivateTarget] = useState(null);
|
|
154
|
+
const [isDeactivating, setIsDeactivating] = useState(false);
|
|
155
|
+
const [deactivateError, setDeactivateError] = useState(null);
|
|
156
|
+
// Hard-delete confirmation state
|
|
157
|
+
const [deleteTarget, setDeleteTarget] = useState(null);
|
|
158
|
+
const [isDeleting, setIsDeleting] = useState(false);
|
|
159
|
+
const [deleteError, setDeleteError] = useState(null);
|
|
160
|
+
// Phase 3 — invite dialog
|
|
161
|
+
const [isInviteOpen, setIsInviteOpen] = useState(false);
|
|
162
|
+
// Phase 3 — cancel invite confirmation
|
|
163
|
+
const [cancelInviteTarget, setCancelInviteTarget] = useState(null);
|
|
164
|
+
const [isCancellingInvite, setIsCancellingInvite] = useState(false);
|
|
165
|
+
const [cancelInviteError, setCancelInviteError] = useState(null);
|
|
166
|
+
// Phase 3 — change role confirmation
|
|
167
|
+
const [changeRoleTarget, setChangeRoleTarget] = useState(null);
|
|
168
|
+
const [isChangingRole, setIsChangingRole] = useState(false);
|
|
169
|
+
const [changeRoleError, setChangeRoleError] = useState(null);
|
|
170
|
+
// Debounce search input (300ms)
|
|
171
|
+
useEffect(() => {
|
|
172
|
+
const timer = setTimeout(() => {
|
|
173
|
+
setDebouncedSearch(search);
|
|
174
|
+
}, 300);
|
|
175
|
+
return () => clearTimeout(timer);
|
|
176
|
+
}, [search]);
|
|
177
|
+
// Refetch on filter change
|
|
178
|
+
useEffect(() => {
|
|
179
|
+
fetchUsers({
|
|
180
|
+
search: debouncedSearch || undefined,
|
|
181
|
+
status: statusFilter,
|
|
182
|
+
role: roleFilter,
|
|
183
|
+
page: 1,
|
|
184
|
+
limit: pageSize,
|
|
185
|
+
});
|
|
186
|
+
}, [debouncedSearch, statusFilter, roleFilter, pageSize, fetchUsers]);
|
|
187
|
+
const handlePageChange = useCallback((newPage) => {
|
|
188
|
+
fetchUsers({
|
|
189
|
+
search: debouncedSearch || undefined,
|
|
190
|
+
status: statusFilter,
|
|
191
|
+
role: roleFilter,
|
|
192
|
+
page: newPage,
|
|
193
|
+
limit: pageSize,
|
|
194
|
+
});
|
|
195
|
+
}, [debouncedSearch, statusFilter, roleFilter, pageSize, fetchUsers]);
|
|
196
|
+
const formatDate = useCallback((iso) => {
|
|
197
|
+
if (!iso)
|
|
198
|
+
return 'Never';
|
|
199
|
+
const date = new Date(iso);
|
|
200
|
+
return date.toLocaleDateString(resolvedLocale, {
|
|
201
|
+
month: 'short',
|
|
202
|
+
day: 'numeric',
|
|
203
|
+
year: 'numeric',
|
|
204
|
+
});
|
|
205
|
+
}, [resolvedLocale]);
|
|
206
|
+
// =======================================================================
|
|
207
|
+
// Deactivate flow
|
|
208
|
+
// =======================================================================
|
|
209
|
+
const openDeactivateDialog = useCallback((user) => {
|
|
210
|
+
setDeactivateTarget(user);
|
|
211
|
+
setDeactivateError(null);
|
|
212
|
+
}, []);
|
|
213
|
+
const confirmDeactivate = useCallback(async () => {
|
|
214
|
+
if (!deactivateTarget)
|
|
215
|
+
return;
|
|
216
|
+
setIsDeactivating(true);
|
|
217
|
+
setDeactivateError(null);
|
|
218
|
+
const result = await deactivate(deactivateTarget.id);
|
|
219
|
+
setIsDeactivating(false);
|
|
220
|
+
if (result.success) {
|
|
221
|
+
setDeactivateTarget(null);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
setDeactivateError(result.error || 'Failed to deactivate user.');
|
|
225
|
+
}
|
|
226
|
+
}, [deactivateTarget, deactivate]);
|
|
227
|
+
const cancelDeactivate = useCallback(() => {
|
|
228
|
+
if (!isDeactivating) {
|
|
229
|
+
setDeactivateTarget(null);
|
|
230
|
+
setDeactivateError(null);
|
|
231
|
+
}
|
|
232
|
+
}, [isDeactivating]);
|
|
233
|
+
// =======================================================================
|
|
234
|
+
// Reactivate flow (no confirmation — it's reversible and benign)
|
|
235
|
+
// =======================================================================
|
|
236
|
+
const handleReactivate = useCallback(async (user) => {
|
|
237
|
+
const result = await reactivate(user.id);
|
|
238
|
+
if (!result.success) {
|
|
239
|
+
// Show error via alert — the inline error row at the top of the table
|
|
240
|
+
// isn't ideal for ad-hoc operations. Simple alert matches existing
|
|
241
|
+
// admin component patterns.
|
|
242
|
+
window.alert(result.error || 'Failed to reactivate user.');
|
|
243
|
+
}
|
|
244
|
+
}, [reactivate]);
|
|
245
|
+
// =======================================================================
|
|
246
|
+
// Hard-delete flow
|
|
247
|
+
// =======================================================================
|
|
248
|
+
const openDeleteDialog = useCallback((user) => {
|
|
249
|
+
setDeleteTarget(user);
|
|
250
|
+
setDeleteError(null);
|
|
251
|
+
}, []);
|
|
252
|
+
const confirmDelete = useCallback(async () => {
|
|
253
|
+
if (!deleteTarget)
|
|
254
|
+
return;
|
|
255
|
+
setIsDeleting(true);
|
|
256
|
+
setDeleteError(null);
|
|
257
|
+
const result = await deleteUser(deleteTarget.id);
|
|
258
|
+
setIsDeleting(false);
|
|
259
|
+
if (result.success) {
|
|
260
|
+
setDeleteTarget(null);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
setDeleteError(result.error || 'Failed to delete user.');
|
|
264
|
+
}
|
|
265
|
+
}, [deleteTarget, deleteUser]);
|
|
266
|
+
const cancelDelete = useCallback(() => {
|
|
267
|
+
if (!isDeleting) {
|
|
268
|
+
setDeleteTarget(null);
|
|
269
|
+
setDeleteError(null);
|
|
270
|
+
}
|
|
271
|
+
}, [isDeleting]);
|
|
272
|
+
// =======================================================================
|
|
273
|
+
// Phase 3 — Resend invite (one-click, no confirmation; reversible)
|
|
274
|
+
// =======================================================================
|
|
275
|
+
const handleResendInvite = useCallback(async (user) => {
|
|
276
|
+
const result = await resendInvite(user.id);
|
|
277
|
+
if (!result.success) {
|
|
278
|
+
window.alert(result.error || 'Failed to resend invite.');
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
window.alert(`Invite resent to ${user.email}.`);
|
|
282
|
+
}
|
|
283
|
+
}, [resendInvite]);
|
|
284
|
+
// =======================================================================
|
|
285
|
+
// Phase 3 — Cancel invite (confirm dialog)
|
|
286
|
+
// =======================================================================
|
|
287
|
+
const openCancelInviteDialog = useCallback((user) => {
|
|
288
|
+
setCancelInviteTarget(user);
|
|
289
|
+
setCancelInviteError(null);
|
|
290
|
+
}, []);
|
|
291
|
+
const confirmCancelInvite = useCallback(async () => {
|
|
292
|
+
if (!cancelInviteTarget)
|
|
293
|
+
return;
|
|
294
|
+
setIsCancellingInvite(true);
|
|
295
|
+
setCancelInviteError(null);
|
|
296
|
+
const result = await cancelInvite(cancelInviteTarget.id);
|
|
297
|
+
setIsCancellingInvite(false);
|
|
298
|
+
if (result.success) {
|
|
299
|
+
setCancelInviteTarget(null);
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
setCancelInviteError(result.error || 'Failed to cancel invite.');
|
|
303
|
+
}
|
|
304
|
+
}, [cancelInviteTarget, cancelInvite]);
|
|
305
|
+
const closeCancelInviteDialog = useCallback(() => {
|
|
306
|
+
if (!isCancellingInvite) {
|
|
307
|
+
setCancelInviteTarget(null);
|
|
308
|
+
setCancelInviteError(null);
|
|
309
|
+
}
|
|
310
|
+
}, [isCancellingInvite]);
|
|
311
|
+
// =======================================================================
|
|
312
|
+
// Phase 3 — Change role (confirm dialog)
|
|
313
|
+
// =======================================================================
|
|
314
|
+
const openChangeRoleDialog = useCallback((user, newRole) => {
|
|
315
|
+
setChangeRoleTarget({ user, newRole });
|
|
316
|
+
setChangeRoleError(null);
|
|
317
|
+
}, []);
|
|
318
|
+
const confirmChangeRole = useCallback(async () => {
|
|
319
|
+
if (!changeRoleTarget)
|
|
320
|
+
return;
|
|
321
|
+
setIsChangingRole(true);
|
|
322
|
+
setChangeRoleError(null);
|
|
323
|
+
const result = await changeRole(changeRoleTarget.user.id, changeRoleTarget.newRole);
|
|
324
|
+
setIsChangingRole(false);
|
|
325
|
+
if (result.success) {
|
|
326
|
+
setChangeRoleTarget(null);
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
setChangeRoleError(result.error || 'Failed to change role.');
|
|
330
|
+
}
|
|
331
|
+
}, [changeRoleTarget, changeRole]);
|
|
332
|
+
const closeChangeRoleDialog = useCallback(() => {
|
|
333
|
+
if (!isChangingRole) {
|
|
334
|
+
setChangeRoleTarget(null);
|
|
335
|
+
setChangeRoleError(null);
|
|
336
|
+
}
|
|
337
|
+
}, [isChangingRole]);
|
|
338
|
+
// =======================================================================
|
|
339
|
+
// Per-row permission calculations
|
|
340
|
+
// =======================================================================
|
|
341
|
+
const rowPermissions = useMemo(() => {
|
|
342
|
+
const map = new Map();
|
|
343
|
+
// Pre-compute the full list of grantable roles for this actor, so the
|
|
344
|
+
// `canManageRole` check is just a reference lookup.
|
|
345
|
+
const allRoles = ['owner', 'administrator', 'manager', 'user'];
|
|
346
|
+
const actorGrantableRoles = allRoles.filter((role) => {
|
|
347
|
+
if (role === 'owner' && !isOwner)
|
|
348
|
+
return false;
|
|
349
|
+
return canManageRole({ id: '__role_target__', role });
|
|
350
|
+
});
|
|
351
|
+
for (const user of users) {
|
|
352
|
+
const isSelf = currentAdmin?.id === user.id;
|
|
353
|
+
const canManage = !isSelf && canManageUser(user);
|
|
354
|
+
const canDeactivate = canManage && user.status === 'active';
|
|
355
|
+
const canReactivate = canManage && user.status === 'deactivated';
|
|
356
|
+
// Hard delete is owner-only AND requires prior deactivation
|
|
357
|
+
const canDelete = canManage && isOwner && user.status === 'deactivated';
|
|
358
|
+
// Invite lifecycle — only for rows in `invited` status
|
|
359
|
+
const canResendInvite = canManage && user.status === 'invited';
|
|
360
|
+
const canCancelInvite = canManage && user.status === 'invited';
|
|
361
|
+
// Change role — grantable roles minus the current role
|
|
362
|
+
// Always excludes the target's current role. Only shown for rows
|
|
363
|
+
// the actor can manage.
|
|
364
|
+
const grantableRoles = canManage
|
|
365
|
+
? actorGrantableRoles.filter((r) => {
|
|
366
|
+
// Exclude the target's current canonical role
|
|
367
|
+
const targetCanonical = user.role === 'admin' ? 'administrator' : user.role;
|
|
368
|
+
return r !== targetCanonical;
|
|
369
|
+
})
|
|
370
|
+
: [];
|
|
371
|
+
map.set(user.id, {
|
|
372
|
+
canDeactivate,
|
|
373
|
+
canReactivate,
|
|
374
|
+
canDelete,
|
|
375
|
+
canResendInvite,
|
|
376
|
+
canCancelInvite,
|
|
377
|
+
grantableRoles,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
return map;
|
|
381
|
+
}, [users, currentAdmin, canManageUser, canManageRole, isOwner]);
|
|
382
|
+
const totalPages = Math.ceil(total / pageSize);
|
|
383
|
+
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: "flex flex-wrap items-center gap-3 flex-1", 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: statusFilter, onChange: (e) => setStatusFilter(e.target.value), className: "admin-input", children: [_jsx("option", { value: "all", children: "All statuses" }), _jsx("option", { value: "active", children: "Active" }), _jsx("option", { value: "invited", children: "Invited" }), _jsx("option", { value: "deactivated", children: "Deactivated" })] }), _jsxs("select", { value: roleFilter, onChange: (e) => setRoleFilter(e.target.value), className: "admin-input", children: [_jsx("option", { value: "all", children: "All roles" }), _jsx("option", { value: "owner", children: "Owner" }), _jsx("option", { value: "administrator", children: "Administrator" }), _jsx("option", { value: "manager", children: "Manager" }), _jsx("option", { value: "user", children: "User" })] })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsxs("div", { className: "flex items-center gap-2 text-sm admin-text-muted", children: [_jsx(UsersIcon, { className: "h-4 w-4" }), _jsxs("span", { children: [total, " user", total !== 1 ? 's' : ''] })] }), canInvite && (_jsxs("button", { type: "button", onClick: () => setIsInviteOpen(true), className: "admin-btn admin-btn-primary inline-flex items-center gap-2", children: [_jsx(UserPlus, { className: "h-4 w-4" }), "Invite user"] }))] })] }), 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: "User" }), _jsx("th", { className: "px-4 py-3 text-left", children: "Email" }), _jsx("th", { className: "px-4 py-3 text-left", children: "Role" }), _jsx("th", { className: "px-4 py-3 text-left", children: "Status" }), _jsx("th", { className: "px-4 py-3 text-left", children: "Last login" }), _jsx("th", { className: "px-4 py-3 text-left", children: "Created" }), _jsx("th", { className: "px-4 py-3 text-right", children: "Actions" })] }) }), _jsx("tbody", { children: isLoading && users.length === 0 ? (
|
|
384
|
+
// Loading skeleton
|
|
385
|
+
Array.from({ length: 5 }).map((_, i) => (_jsx("tr", { className: "admin-table-row", children: _jsx("td", { className: "px-4 py-3", colSpan: 7, children: _jsx("div", { className: "admin-skeleton admin-skeleton-md w-full rounded" }) }) }, `skeleton-${i}`)))) : users.length === 0 ? (_jsx("tr", { children: _jsxs("td", { className: "px-4 py-12 text-center text-sm admin-text-muted", colSpan: 7, children: [_jsx(UserCheck, { className: "h-8 w-8 mx-auto mb-2 opacity-40" }), "No users match your filters."] }) })) : (users.map((user) => {
|
|
386
|
+
const perms = rowPermissions.get(user.id) ?? {
|
|
387
|
+
canDeactivate: false,
|
|
388
|
+
canReactivate: false,
|
|
389
|
+
canDelete: false,
|
|
390
|
+
canResendInvite: false,
|
|
391
|
+
canCancelInvite: false,
|
|
392
|
+
grantableRoles: [],
|
|
393
|
+
};
|
|
394
|
+
return (_jsx(UserRow, { user: user, isSelf: currentAdmin?.id === user.id, canDeactivate: perms.canDeactivate, canReactivate: perms.canReactivate, canDelete: perms.canDelete, canResendInvite: perms.canResendInvite, canCancelInvite: perms.canCancelInvite, grantableRoles: perms.grantableRoles, formatDate: formatDate, onDeactivate: openDeactivateDialog, onReactivate: handleReactivate, onDelete: openDeleteDialog, onResendInvite: handleResendInvite, onCancelInvite: openCancelInviteDialog, onChangeRole: openChangeRoleDialog }, user.id));
|
|
395
|
+
})) })] }) }), totalPages > 1 && (_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "text-sm admin-text-muted", children: ["Page ", page, " of ", totalPages] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("button", { type: "button", onClick: () => handlePageChange(page - 1), disabled: page <= 1 || isLoading, className: "admin-btn admin-btn-secondary", children: "Previous" }), _jsx("button", { type: "button", onClick: () => handlePageChange(page + 1), disabled: page >= totalPages || isLoading, className: "admin-btn admin-btn-secondary", children: "Next" })] })] })), _jsx(DeleteConfirmDialog, { isOpen: !!deactivateTarget, title: "Deactivate user", itemName: deactivateTarget?.name || deactivateTarget?.email || '', itemType: "user", isDeleting: isDeactivating, error: deactivateError, onConfirm: confirmDeactivate, onCancel: cancelDeactivate }), _jsx(DeleteWithConfirmationDialog, { user: deleteTarget, isDeleting: isDeleting, error: deleteError, onConfirm: confirmDelete, onCancel: cancelDelete }), _jsx(InviteUserDialog, { isOpen: isInviteOpen, onClose: () => setIsInviteOpen(false) }), _jsx(DeleteConfirmDialog, { isOpen: !!cancelInviteTarget, title: "Cancel invite", itemName: cancelInviteTarget?.email || '', itemType: "invite", isDeleting: isCancellingInvite, error: cancelInviteError, onConfirm: confirmCancelInvite, onCancel: closeCancelInviteDialog }), _jsx(DeleteConfirmDialog, { isOpen: !!changeRoleTarget, title: "Change role", itemName: changeRoleTarget
|
|
396
|
+
? `${changeRoleTarget.user.name || changeRoleTarget.user.email} → ${roleLabel(changeRoleTarget.newRole)}`
|
|
397
|
+
: '', itemType: "change", isDeleting: isChangingRole, error: changeRoleError, onConfirm: confirmChangeRole, onCancel: closeChangeRoleDialog })] }));
|
|
398
|
+
}
|
|
399
|
+
//# sourceMappingURL=UsersTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UsersTable.js","sourceRoot":"","sources":["../../../src/admin/components/UsersTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,10 @@ export { AdminGuard } from './AdminGuard';
|
|
|
7
7
|
export { AdminLoginForm } from './AdminLoginForm';
|
|
8
8
|
export { AdminSetupForm } from './AdminSetupForm';
|
|
9
9
|
export type { AdminSetupFormProps } from './AdminSetupForm';
|
|
10
|
+
export { AdminForgotPasswordForm } from './AdminForgotPasswordForm';
|
|
11
|
+
export type { AdminForgotPasswordFormProps } from './AdminForgotPasswordForm';
|
|
12
|
+
export { AdminResetPasswordForm } from './AdminResetPasswordForm';
|
|
13
|
+
export type { AdminResetPasswordFormProps } from './AdminResetPasswordForm';
|
|
10
14
|
export { AdminLayout } from './AdminLayout';
|
|
11
15
|
export { AdminNav } from './AdminNav';
|
|
12
16
|
export { AdminUserMenu } from './AdminUserMenu';
|
|
@@ -49,4 +53,9 @@ export { ShippingSettings } from './ShippingSettings';
|
|
|
49
53
|
export { TaxSettings } from './TaxSettings';
|
|
50
54
|
export { CustomerTable } from './CustomerTable';
|
|
51
55
|
export { CustomerDetails } from './CustomerDetails';
|
|
56
|
+
export { UsersTable } from './UsersTable';
|
|
57
|
+
export { InviteUserDialog } from './InviteUserDialog';
|
|
58
|
+
export { AdminAcceptInviteForm } from './AdminAcceptInviteForm';
|
|
59
|
+
export { AdminAccountPage } from './AdminAccountPage';
|
|
60
|
+
export type { AdminAccountPageProps } from './AdminAccountPage';
|
|
52
61
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/admin/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/admin/components/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
export { AdminGuard } from './AdminGuard';
|
|
10
10
|
export { AdminLoginForm } from './AdminLoginForm';
|
|
11
11
|
export { AdminSetupForm } from './AdminSetupForm';
|
|
12
|
+
export { AdminForgotPasswordForm } from './AdminForgotPasswordForm';
|
|
13
|
+
export { AdminResetPasswordForm } from './AdminResetPasswordForm';
|
|
12
14
|
// =============================================================================
|
|
13
15
|
// Layout Components
|
|
14
16
|
// =============================================================================
|
|
@@ -70,4 +72,11 @@ export { TaxSettings } from './TaxSettings';
|
|
|
70
72
|
// =============================================================================
|
|
71
73
|
export { CustomerTable } from './CustomerTable';
|
|
72
74
|
export { CustomerDetails } from './CustomerDetails';
|
|
75
|
+
// =============================================================================
|
|
76
|
+
// User Management Components (Phase 2 + Phase 3 + Phase 4)
|
|
77
|
+
// =============================================================================
|
|
78
|
+
export { UsersTable } from './UsersTable';
|
|
79
|
+
export { InviteUserDialog } from './InviteUserDialog';
|
|
80
|
+
export { AdminAcceptInviteForm } from './AdminAcceptInviteForm';
|
|
81
|
+
export { AdminAccountPage } from './AdminAccountPage';
|
|
73
82
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/admin/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/admin/components/index.ts"],"names":[],"mappings":"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"}
|
package/dist/admin/config.d.ts
CHANGED
|
@@ -14,18 +14,23 @@ import type { AdminSession, AdminAuthConfigOptions } from './types';
|
|
|
14
14
|
/**
|
|
15
15
|
* Create NextAuth options for store admin authentication.
|
|
16
16
|
*
|
|
17
|
-
* @
|
|
18
|
-
*
|
|
17
|
+
* @deprecated The Rovela sandbox template mounts exactly ONE NextAuth
|
|
18
|
+
* endpoint at `/api/auth/[...nextauth]`, wired to `createAuthOptions()`
|
|
19
|
+
* from `@rovela-ai/sdk/auth` — which already knows both the `credentials`
|
|
20
|
+
* and `admin-credentials` providers. `requireAdmin()` reads sessions via
|
|
21
|
+
* that same unified config, so the cookie name and SameSite policy match
|
|
22
|
+
* between write and read.
|
|
19
23
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* import NextAuth from 'next-auth'
|
|
24
|
-
* import { createAdminAuthOptions } from '@rovela/sdk/admin'
|
|
24
|
+
* Mounting a separate `/api/admin/auth/[...nextauth]` with this function
|
|
25
|
+
* creates a second cookie namespace that will NOT be read by
|
|
26
|
+
* `requireAdmin()`. Every admin API call will return 401.
|
|
25
27
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
28
|
+
* Use `createAuthOptions()` from `@rovela-ai/sdk/auth` instead. This
|
|
29
|
+
* function is kept to preserve SDK API compatibility for existing
|
|
30
|
+
* consumers and will be removed in a future major release.
|
|
31
|
+
*
|
|
32
|
+
* @param options - Configuration options
|
|
33
|
+
* @returns NextAuth options object
|
|
29
34
|
*/
|
|
30
35
|
export declare function createAdminAuthOptions(options?: AdminAuthConfigOptions): NextAuthOptions;
|
|
31
36
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/admin/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,WAAW,CAAA;AAI/D,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/admin/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,WAAW,CAAA;AAI/D,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAiBnE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,sBAA2B,GAAG,eAAe,CAyI5F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAE9B;AAgCD;;;GAGG;AACH,eAAO,MAAM,eAAe,iBAA2B,CAAA;AAEvD;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,uBAOzC;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;CAG7B,CAAA"}
|