@endora-commerce/admin-shell 0.103.1 → 0.105.0
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/components/AppShell.d.ts.map +1 -1
- package/dist/components/AppShell.js +59 -11
- package/dist/components/AppShell.js.map +1 -1
- package/dist/components/IdleLogout.d.ts.map +1 -1
- package/dist/components/IdleLogout.js +19 -40
- package/dist/components/IdleLogout.js.map +1 -1
- package/dist/components/RoleRequiredNotice.d.ts +16 -0
- package/dist/components/RoleRequiredNotice.d.ts.map +1 -0
- package/dist/components/RoleRequiredNotice.js +22 -0
- package/dist/components/RoleRequiredNotice.js.map +1 -0
- package/dist/components/VersionBadge.d.ts +28 -0
- package/dist/components/VersionBadge.d.ts.map +1 -0
- package/dist/components/VersionBadge.js +35 -0
- package/dist/components/VersionBadge.js.map +1 -0
- package/dist/components/notifications/NotificationBell.d.ts +4 -0
- package/dist/components/notifications/NotificationBell.d.ts.map +1 -1
- package/dist/components/notifications/NotificationBell.js +11 -1
- package/dist/components/notifications/NotificationBell.js.map +1 -1
- package/dist/components/notifications/index.d.ts +1 -0
- package/dist/components/notifications/index.d.ts.map +1 -1
- package/dist/components/notifications/index.js +1 -0
- package/dist/components/notifications/index.js.map +1 -1
- package/dist/components/notifications/notification-text.d.ts +42 -0
- package/dist/components/notifications/notification-text.d.ts.map +1 -0
- package/dist/components/notifications/notification-text.js +65 -0
- package/dist/components/notifications/notification-text.js.map +1 -0
- package/dist/components/notifications/useAdminNotifications.d.ts +7 -0
- package/dist/components/notifications/useAdminNotifications.d.ts.map +1 -1
- package/dist/components/notifications/useAdminNotifications.js.map +1 -1
- package/dist/lib/platform-info/api.d.ts +10 -0
- package/dist/lib/platform-info/api.d.ts.map +1 -0
- package/dist/lib/platform-info/api.js +12 -0
- package/dist/lib/platform-info/api.js.map +1 -0
- package/dist/lib/platform-info/usePlatformVersion.d.ts +24 -0
- package/dist/lib/platform-info/usePlatformVersion.d.ts.map +1 -0
- package/dist/lib/platform-info/usePlatformVersion.js +49 -0
- package/dist/lib/platform-info/usePlatformVersion.js.map +1 -0
- package/dist/modules/home/HomePage.d.ts.map +1 -1
- package/dist/modules/home/HomePage.js +142 -97
- package/dist/modules/home/HomePage.js.map +1 -1
- package/dist/modules/profile/ProfilePage.d.ts +8 -0
- package/dist/modules/profile/ProfilePage.d.ts.map +1 -1
- package/dist/modules/profile/ProfilePage.js +38 -5
- package/dist/modules/profile/ProfilePage.js.map +1 -1
- package/package.json +5 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useState } from 'react';
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
3
3
|
import { Link, useNavigate } from 'react-router-dom';
|
|
4
4
|
import { CircleDollarSign, FileText, Plus, Upload } from 'lucide-react';
|
|
5
5
|
import { ApiError, apiClient } from '../../lib/api-client.js';
|
|
@@ -7,13 +7,55 @@ import { useAuth } from '../../lib/auth.js';
|
|
|
7
7
|
import { useSurfaceVisibility } from '../../lib/surface-visibility.js';
|
|
8
8
|
import { useTranslation } from '../../i18n/useTranslation.js';
|
|
9
9
|
import { RecentActivityCard } from './RecentActivityCard.js';
|
|
10
|
-
const
|
|
11
|
-
{
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
const KPIS = [
|
|
11
|
+
{
|
|
12
|
+
labelKey: 'home.kpi.activeProducts',
|
|
13
|
+
to: '/catalog/products?status=active',
|
|
14
|
+
requiredPermission: 'catalog:read',
|
|
15
|
+
module: 'catalog',
|
|
16
|
+
// The list endpoint paginates server-side; ask for one row so the network
|
|
17
|
+
// payload is tiny and read the live `counts.active` field (which the
|
|
18
|
+
// endpoint computes across the full product set).
|
|
19
|
+
path: () => '/api/v1/admin/catalog/products?pageSize=1',
|
|
20
|
+
read: (data) => {
|
|
21
|
+
const active = data.counts?.active;
|
|
22
|
+
return active === undefined ? null : String(active);
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
labelKey: 'home.kpi.pendingQuotes',
|
|
27
|
+
tone: 'warn',
|
|
28
|
+
to: '/quote-requests?status=Pending&scope=all',
|
|
29
|
+
requiredPermission: 'rfqs:handle',
|
|
30
|
+
module: 'quote_requests',
|
|
31
|
+
// Count only Pending requests (matching this KPI's drill-down link).
|
|
32
|
+
// `submitted` is not a valid RFQ status, so the backend rejected the
|
|
33
|
+
// filter and returned every request — Canceled/Approved/etc. included.
|
|
34
|
+
path: ({ platformAdmin }) => `/api/v1/admin/quote-requests?status=Pending${platformAdmin ? '&assignmentScope=all' : ''}`,
|
|
35
|
+
read: (data) => String((data.data ?? []).length),
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
labelKey: 'home.kpi.openOrders',
|
|
39
|
+
to: '/orders?status=new',
|
|
40
|
+
requiredPermission: 'orders:read',
|
|
41
|
+
module: 'orders',
|
|
42
|
+
path: () => '/api/v1/admin/orders?status=new',
|
|
43
|
+
read: (data) => String((data.data ?? []).length),
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
labelKey: 'home.kpi.outOfStock',
|
|
47
|
+
tone: 'danger',
|
|
48
|
+
to: '/inventory?stock=out',
|
|
49
|
+
// `orders:read` is not a copy of the tile above it: the inventory endpoints
|
|
50
|
+
// really are gated by it (`inventory/routes.admin.ts:103`).
|
|
51
|
+
requiredPermission: 'orders:read',
|
|
52
|
+
module: 'inventory',
|
|
53
|
+
path: () => '/api/v1/admin/inventory',
|
|
54
|
+
read: (data) => {
|
|
55
|
+
const count = data.data?.outOfStockCount;
|
|
56
|
+
return count === undefined ? null : String(count);
|
|
57
|
+
},
|
|
58
|
+
},
|
|
17
59
|
];
|
|
18
60
|
const QUICK_ACTIONS = [
|
|
19
61
|
{ labelKey: 'home.quickActions.newProduct', icon: Plus, to: '/catalog/products/new', requiredPermission: 'catalog:write', module: 'catalog' },
|
|
@@ -30,108 +72,111 @@ const STOCK_ALERTS_SURFACE = {
|
|
|
30
72
|
module: 'inventory',
|
|
31
73
|
requiredPermission: 'orders:read',
|
|
32
74
|
};
|
|
75
|
+
const STOCK_ALERTS_PATH = '/api/v1/admin/inventory/low-stock';
|
|
76
|
+
const STOCK_ALERTS_SHOWN = 5;
|
|
77
|
+
function readStockAlerts(data) {
|
|
78
|
+
const items = data.items ?? [];
|
|
79
|
+
return items.slice(0, STOCK_ALERTS_SHOWN).map((item) => ({
|
|
80
|
+
productId: item.productId,
|
|
81
|
+
sku: item.productSku,
|
|
82
|
+
name: item.productName,
|
|
83
|
+
qty: item.cumulativeOnHand,
|
|
84
|
+
threshold: item.lowStockThreshold,
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
33
87
|
export function HomePage() {
|
|
34
88
|
const t = useTranslation('core');
|
|
35
89
|
const { me } = useAuth();
|
|
36
90
|
const isVisible = useSurfaceVisibility();
|
|
37
91
|
const navigate = useNavigate();
|
|
38
92
|
const firstName = me?.adminUser.firstName?.trim() || t('home.defaultName');
|
|
39
|
-
const
|
|
40
|
-
|
|
93
|
+
const kpiContext = { platformAdmin: me?.role?.code === 'platform_admin' };
|
|
94
|
+
return (_jsxs("div", { className: "b2b-page b2b-page--wide", children: [_jsx("div", { className: "b2b-page-head", children: _jsxs("div", { className: "b2b-grow", children: [_jsxs("div", { className: "b2b-page-head__title", children: [t('home.welcomeBack'), ", ", _jsx("span", { style: { color: 'var(--fg-muted)', fontWeight: 500 }, children: firstName })] }), _jsx("div", { className: "b2b-page-head__sub", children: t('home.subtitle') })] }) }), _jsx("div", { className: "b2b-row b2b-kpi-grid", style: { gap: 16, marginBottom: 20 }, children: KPIS.filter(isVisible).map((kpi) => (_jsx(KpiTile, { kpi: kpi, path: kpi.path(kpiContext) }, kpi.labelKey))) }), _jsxs("div", { className: "b2b-home-dashboard-grid", style: { display: 'grid', gridTemplateColumns: 'minmax(0, 2fr) minmax(0, 1fr)', gap: 16 }, children: [_jsx(RecentActivityCard, {}), _jsxs("div", { className: "b2b-col", style: { gap: 16 }, children: [QUICK_ACTIONS.some(isVisible) && (_jsxs("div", { className: "b2b-card", children: [_jsx("div", { className: "b2b-card__head", children: _jsx("div", { className: "b2b-card__title", children: t('home.quickActions.title') }) }), _jsx("div", { className: "b2b-card__body", children: _jsx("div", { className: "b2b-col", style: { gap: 8 }, children: QUICK_ACTIONS.filter(isVisible).map((action) => {
|
|
95
|
+
const Icon = action.icon;
|
|
96
|
+
return (_jsxs("button", { type: "button", className: "b2b-btn b2b-btn--default", style: { justifyContent: 'flex-start' }, onClick: () => { navigate(action.to); }, children: [_jsx(Icon, { size: 14 }), " ", t(action.labelKey)] }, action.to));
|
|
97
|
+
}) }) })] })), isVisible(STOCK_ALERTS_SURFACE) && _jsx(StockAlertsCard, {})] })] })] }));
|
|
98
|
+
}
|
|
99
|
+
function useRemote(path, read) {
|
|
100
|
+
const [state, setState] = useState({ status: 'loading' });
|
|
101
|
+
const [attempt, setAttempt] = useState(0);
|
|
41
102
|
useEffect(() => {
|
|
42
103
|
let cancelled = false;
|
|
43
|
-
|
|
44
|
-
const next = INITIAL_KPIS.map((k) => ({ ...k }));
|
|
45
|
-
// Best-effort KPI fetches. Each one is independent — if any
|
|
46
|
-
// endpoint isn't wired or returns 4xx/5xx, we leave a "—".
|
|
47
|
-
//
|
|
48
|
-
// Feature 073: a tile whose module is absent is not rendered, so its
|
|
49
|
-
// fetch is skipped too. Firing it anyway would spend a request per page
|
|
50
|
-
// load to collect a 503 for a number nobody will see.
|
|
51
|
-
//
|
|
52
|
-
// Issue #230 widens that from module presence to the whole visibility
|
|
53
|
-
// predicate: the same argument holds verbatim for a 403, and the fetch
|
|
54
|
-
// and the tile now answer to one rule rather than two.
|
|
55
|
-
const forSurface = (surface, fetcher) => (isVisible(surface) ? fetcher() : Promise.resolve());
|
|
56
|
-
await Promise.all([
|
|
57
|
-
// The list endpoint paginates server-side; ask for one row so the
|
|
58
|
-
// network payload is tiny and read the live `counts.active` field
|
|
59
|
-
// (which the endpoint computes across the full product set).
|
|
60
|
-
forSurface(INITIAL_KPIS[0], () => fetchKpi('/api/v1/admin/catalog/products?pageSize=1', (data) => {
|
|
61
|
-
const counts = data.counts;
|
|
62
|
-
if (counts?.active !== undefined) {
|
|
63
|
-
next[0].value = String(counts.active);
|
|
64
|
-
}
|
|
65
|
-
})),
|
|
66
|
-
// Count only Pending requests (matching this KPI's drill-down link).
|
|
67
|
-
// `submitted` is not a valid RFQ status, so the backend rejected the
|
|
68
|
-
// filter and returned every request — Canceled/Approved/etc. included.
|
|
69
|
-
// A platform admin owns no per-user assignments, so scope the count to
|
|
70
|
-
// "all" for them (parity with the list's default Visibility filter);
|
|
71
|
-
// otherwise the tile would read 0 even with pending requests waiting.
|
|
72
|
-
forSurface(INITIAL_KPIS[1], () => fetchKpi(`/api/v1/admin/quote-requests?status=Pending${me?.role?.code === 'platform_admin' ? '&assignmentScope=all' : ''}`, (data) => {
|
|
73
|
-
const arr = data.data ?? [];
|
|
74
|
-
next[1].value = String(arr.length);
|
|
75
|
-
})),
|
|
76
|
-
forSurface(INITIAL_KPIS[2], () => fetchKpi('/api/v1/admin/orders?status=new', (data) => {
|
|
77
|
-
const arr = data.data ?? [];
|
|
78
|
-
next[2].value = String(arr.length);
|
|
79
|
-
})),
|
|
80
|
-
forSurface(INITIAL_KPIS[3], () => fetchKpi('/api/v1/admin/inventory', (data) => {
|
|
81
|
-
const k = data.data;
|
|
82
|
-
if (k?.outOfStockCount !== undefined) {
|
|
83
|
-
next[3].value = String(k.outOfStockCount);
|
|
84
|
-
}
|
|
85
|
-
})),
|
|
86
|
-
forSurface(STOCK_ALERTS_SURFACE, () => fetchKpi('/api/v1/admin/inventory/low-stock', (data) => {
|
|
87
|
-
const items = data.items ?? [];
|
|
88
|
-
if (!cancelled) {
|
|
89
|
-
setStockAlerts(items.slice(0, 5).map((i) => ({
|
|
90
|
-
productId: i.productId,
|
|
91
|
-
sku: i.productSku,
|
|
92
|
-
name: i.productName,
|
|
93
|
-
qty: i.cumulativeOnHand,
|
|
94
|
-
threshold: i.lowStockThreshold,
|
|
95
|
-
})));
|
|
96
|
-
}
|
|
97
|
-
})),
|
|
98
|
-
]);
|
|
104
|
+
apiClient.get(path).then((data) => {
|
|
99
105
|
if (!cancelled)
|
|
100
|
-
|
|
101
|
-
}
|
|
106
|
+
setState({ status: 'ready', data: read(data) });
|
|
107
|
+
}, (err) => {
|
|
108
|
+
if (cancelled)
|
|
109
|
+
return;
|
|
110
|
+
if (!(err instanceof ApiError)) {
|
|
111
|
+
// eslint-disable-next-line no-console
|
|
112
|
+
console.warn(`Dashboard fetch ${path} failed`, err);
|
|
113
|
+
}
|
|
114
|
+
setState({ status: 'error' });
|
|
115
|
+
});
|
|
102
116
|
return () => {
|
|
103
117
|
cancelled = true;
|
|
104
118
|
};
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
119
|
+
}, [path, read, attempt]);
|
|
120
|
+
const retry = useCallback(() => {
|
|
121
|
+
setState({ status: 'loading' });
|
|
122
|
+
setAttempt((n) => n + 1);
|
|
110
123
|
}, []);
|
|
111
|
-
return
|
|
112
|
-
const Icon = action.icon;
|
|
113
|
-
return (_jsxs("button", { type: "button", className: "b2b-btn b2b-btn--default", style: { justifyContent: 'flex-start' }, onClick: () => { navigate(action.to); }, children: [_jsx(Icon, { size: 14 }), " ", t(action.labelKey)] }, action.to));
|
|
114
|
-
}) }) })] })), isVisible(STOCK_ALERTS_SURFACE) && (_jsxs("div", { className: "b2b-card", children: [_jsxs("div", { className: "b2b-card__head", children: [_jsxs("div", { children: [_jsx("div", { className: "b2b-card__title", children: t('home.stockAlerts.title') }), _jsx("div", { className: "b2b-card__sub", children: t('home.stockAlerts.subtitle') })] }), _jsx(Link, { to: "/inventory/low-stock", className: "b2b-btn b2b-btn--ghost b2b-btn--sm", children: t('home.stockAlerts.seeAll') })] }), _jsx("div", { className: "b2b-card__body b2b-card__body--flush", children: stockAlerts.length === 0 ? (_jsx("div", { className: "b2b-help", style: { padding: 16 }, children: t('home.stockAlerts.empty') })) : (_jsx("div", { className: "b2b-minilist", style: { padding: 4 }, children: stockAlerts.map((alert) => (_jsxs(Link, { to: `/catalog/products/${alert.productId}`, className: "b2b-minirow", style: { textDecoration: 'none', color: 'inherit' }, children: [_jsx("div", { className: "b2b-thumb", style: {
|
|
115
|
-
width: 28,
|
|
116
|
-
height: 28,
|
|
117
|
-
background: 'linear-gradient(135deg, #94a3b8cc, #94a3b888)',
|
|
118
|
-
} }), _jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [_jsx("div", { style: { fontSize: 12, fontWeight: 500 }, children: alert.name }), _jsx("div", { className: "b2b-mono b2b-muted", style: { fontSize: 10 }, children: alert.sku })] }), _jsx("span", { className: alert.qty === 0 ? 'b2b-badge b2b-badge--danger' : 'b2b-badge b2b-badge--warn', children: alert.qty === 0 ? t('home.stockAlerts.out') : t('home.stockAlerts.left', { qty: alert.qty }) })] }, alert.productId))) })) })] }))] })] })] }));
|
|
124
|
+
return { state, retry };
|
|
119
125
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
126
|
+
const KPI_LABEL_STYLE = {
|
|
127
|
+
fontSize: 11,
|
|
128
|
+
textTransform: 'uppercase',
|
|
129
|
+
letterSpacing: '0.06em',
|
|
130
|
+
};
|
|
131
|
+
const SKELETON_STYLE = {
|
|
132
|
+
background: 'var(--surface-sunken)',
|
|
133
|
+
borderRadius: 4,
|
|
134
|
+
};
|
|
135
|
+
function KpiTile({ kpi, path }) {
|
|
136
|
+
const t = useTranslation('core');
|
|
137
|
+
const { state, retry } = useRemote(path, kpi.read);
|
|
138
|
+
const label = t(kpi.labelKey);
|
|
139
|
+
// A failed request is not a number. The tile used to keep its "—" here,
|
|
140
|
+
// which reads as "no data" and is the same glyph a pending tile showed, so
|
|
141
|
+
// an operator could not tell a dead endpoint from a slow one from an empty
|
|
142
|
+
// shop. The card stops being one big link in this state because a retry
|
|
143
|
+
// button cannot be nested inside one; the label keeps the drill-down.
|
|
144
|
+
if (state.status === 'error') {
|
|
145
|
+
return (_jsxs("div", { className: "b2b-card", style: { flex: 1, padding: 16 }, "data-testid": `kpi-${kpi.labelKey}-error`, children: [_jsx(Link, { to: kpi.to, className: "b2b-muted", style: { ...KPI_LABEL_STYLE, display: 'block', textDecoration: 'none' }, children: label }), _jsxs("div", { style: {
|
|
146
|
+
display: 'flex',
|
|
147
|
+
justifyContent: 'space-between',
|
|
148
|
+
alignItems: 'center',
|
|
149
|
+
gap: 8,
|
|
150
|
+
marginTop: 4,
|
|
151
|
+
}, children: [_jsx("span", { className: "b2b-help", style: { marginTop: 0 }, role: "alert", children: t('home.kpi.error') }), _jsx("button", { type: "button", className: "b2b-btn b2b-btn--default b2b-btn--sm", "aria-label": t('home.kpi.retryLabel', { label }), onClick: retry, children: t('home.kpi.retry') })] })] }));
|
|
135
152
|
}
|
|
153
|
+
const color = kpi.tone === 'danger' ? 'var(--danger)' : kpi.tone === 'warn' ? 'var(--warn)' : 'var(--fg)';
|
|
154
|
+
const loading = state.status === 'loading';
|
|
155
|
+
return (_jsxs(Link, { to: kpi.to, className: "b2b-card b2b-card--clickable", style: { flex: 1, padding: 16, textDecoration: 'none', color: 'inherit' }, "data-testid": `kpi-${kpi.labelKey}`, ...(loading ? { 'aria-busy': true } : {}), children: [_jsx("div", { className: "b2b-muted", style: KPI_LABEL_STYLE, children: label }), _jsx("div", { style: { fontSize: 26, fontWeight: 600, marginTop: 4, color }, children: loading ? (_jsxs(_Fragment, { children: [_jsx("span", { "aria-hidden": "true", style: { ...SKELETON_STYLE, display: 'inline-block', width: '2.5ch', height: '0.7em' } }), _jsx("span", { className: "sr-only", children: t('home.kpi.loading') })] })) : ((state.data ?? '—')) })] }));
|
|
156
|
+
}
|
|
157
|
+
const STOCK_ALERT_PLACEHOLDER_COUNT = 3;
|
|
158
|
+
/**
|
|
159
|
+
* Stock alerts — wholly owned by `inventory`; the card is the module's
|
|
160
|
+
* contribution to the dashboard, so it goes with it.
|
|
161
|
+
*
|
|
162
|
+
* It distinguishes four states because three of them used to be one: an empty
|
|
163
|
+
* list was the initial state, so "still loading" and "the request failed" both
|
|
164
|
+
* read "No products are currently low on stock" — a statement about the
|
|
165
|
+
* warehouse that nothing had established.
|
|
166
|
+
*/
|
|
167
|
+
function StockAlertsCard() {
|
|
168
|
+
const t = useTranslation('core');
|
|
169
|
+
const { state, retry } = useRemote(STOCK_ALERTS_PATH, readStockAlerts);
|
|
170
|
+
return (_jsxs("div", { className: "b2b-card", children: [_jsxs("div", { className: "b2b-card__head", children: [_jsxs("div", { children: [_jsx("div", { className: "b2b-card__title", children: t('home.stockAlerts.title') }), _jsx("div", { className: "b2b-card__sub", children: t('home.stockAlerts.subtitle') })] }), _jsx(Link, { to: "/inventory/low-stock", className: "b2b-btn b2b-btn--ghost b2b-btn--sm", children: t('home.stockAlerts.seeAll') })] }), _jsxs("div", { className: "b2b-card__body b2b-card__body--flush", children: [state.status === 'loading' && (_jsxs("div", { className: "b2b-minilist", style: { padding: 4 }, "data-testid": "stock-alerts-loading", "aria-busy": "true", children: [_jsx("span", { className: "sr-only", children: t('home.stockAlerts.loading') }), Array.from({ length: STOCK_ALERT_PLACEHOLDER_COUNT }).map((_, idx) => (_jsxs("div", { className: "b2b-minirow", style: { opacity: 0.6 }, "aria-hidden": "true", children: [_jsx("div", { style: { ...SKELETON_STYLE, width: 28, height: 28, flexShrink: 0 } }), _jsxs("div", { style: { flex: 1 }, children: [_jsx("div", { style: { ...SKELETON_STYLE, height: 10, width: '70%' } }), _jsx("div", { style: { ...SKELETON_STYLE, height: 8, width: '40%', marginTop: 6 } })] }), _jsx("span", { style: { ...SKELETON_STYLE, width: 36, height: 10, flexShrink: 0 } })] }, idx)))] })), state.status === 'error' && (_jsxs("div", { className: "b2b-help", style: {
|
|
171
|
+
padding: 16,
|
|
172
|
+
display: 'flex',
|
|
173
|
+
justifyContent: 'space-between',
|
|
174
|
+
alignItems: 'center',
|
|
175
|
+
gap: 12,
|
|
176
|
+
}, role: "alert", children: [_jsx("span", { children: t('home.stockAlerts.error') }), _jsx("button", { type: "button", className: "b2b-btn b2b-btn--default b2b-btn--sm", onClick: retry, children: t('home.stockAlerts.retry') })] })), state.status === 'ready' && state.data.length === 0 && (_jsx("div", { className: "b2b-help", style: { padding: 16 }, children: t('home.stockAlerts.empty') })), state.status === 'ready' && state.data.length > 0 && (_jsx("div", { className: "b2b-minilist", style: { padding: 4 }, children: state.data.map((alert) => (_jsxs(Link, { to: `/catalog/products/${alert.productId}`, className: "b2b-minirow", style: { textDecoration: 'none', color: 'inherit' }, children: [_jsx("div", { className: "b2b-thumb", style: {
|
|
177
|
+
width: 28,
|
|
178
|
+
height: 28,
|
|
179
|
+
background: 'linear-gradient(135deg, #94a3b8cc, #94a3b888)',
|
|
180
|
+
} }), _jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [_jsx("div", { style: { fontSize: 12, fontWeight: 500 }, children: alert.name }), _jsx("div", { className: "b2b-mono b2b-muted", style: { fontSize: 10 }, children: alert.sku })] }), _jsx("span", { className: alert.qty === 0 ? 'b2b-badge b2b-badge--danger' : 'b2b-badge b2b-badge--warn', children: alert.qty === 0 ? t('home.stockAlerts.out') : t('home.stockAlerts.left', { qty: alert.qty }) })] }, alert.productId))) }))] })] }));
|
|
136
181
|
}
|
|
137
182
|
//# sourceMappingURL=HomePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HomePage.js","sourceRoot":"","sources":["../../../src/modules/home/HomePage.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HomePage.js","sourceRoot":"","sources":["../../../src/modules/home/HomePage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,14 @@ import { type ReactNode } from 'react';
|
|
|
6
6
|
* `PATCH /api/v1/admin/me`, which any authenticated admin can call
|
|
7
7
|
* without holding `admin_users:manage`. Linked from the avatar in the
|
|
8
8
|
* top-right corner of the AppShell.
|
|
9
|
+
*
|
|
10
|
+
* A new password travels with the current one: the route refuses a `password`
|
|
11
|
+
* without `currentPassword`, so the screen asks for it before it sends
|
|
12
|
+
* anything, and shows a wrong one on that field rather than in the page
|
|
13
|
+
* banner.
|
|
14
|
+
*
|
|
15
|
+
* A password change revokes the account's other sessions and keeps the one it
|
|
16
|
+
* was made from, so the screen stays where it is and says so.
|
|
9
17
|
*/
|
|
10
18
|
export declare function ProfilePage(): ReactNode;
|
|
11
19
|
//# sourceMappingURL=ProfilePage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfilePage.d.ts","sourceRoot":"","sources":["../../../src/modules/profile/ProfilePage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAQ5E
|
|
1
|
+
{"version":3,"file":"ProfilePage.d.ts","sourceRoot":"","sources":["../../../src/modules/profile/ProfilePage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAQ5E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,IAAI,SAAS,CA2NvC"}
|
|
@@ -12,6 +12,14 @@ import { useTranslation } from '../../i18n/useTranslation.js';
|
|
|
12
12
|
* `PATCH /api/v1/admin/me`, which any authenticated admin can call
|
|
13
13
|
* without holding `admin_users:manage`. Linked from the avatar in the
|
|
14
14
|
* top-right corner of the AppShell.
|
|
15
|
+
*
|
|
16
|
+
* A new password travels with the current one: the route refuses a `password`
|
|
17
|
+
* without `currentPassword`, so the screen asks for it before it sends
|
|
18
|
+
* anything, and shows a wrong one on that field rather than in the page
|
|
19
|
+
* banner.
|
|
20
|
+
*
|
|
21
|
+
* A password change revokes the account's other sessions and keeps the one it
|
|
22
|
+
* was made from, so the screen stays where it is and says so.
|
|
15
23
|
*/
|
|
16
24
|
export function ProfilePage() {
|
|
17
25
|
const t = useTranslation('core');
|
|
@@ -19,6 +27,8 @@ export function ProfilePage() {
|
|
|
19
27
|
const [firstName, setFirstName] = useState('');
|
|
20
28
|
const [lastName, setLastName] = useState('');
|
|
21
29
|
const [password, setPassword] = useState('');
|
|
30
|
+
const [currentPassword, setCurrentPassword] = useState('');
|
|
31
|
+
const [currentPasswordError, setCurrentPasswordError] = useState(null);
|
|
22
32
|
const [submitting, setSubmitting] = useState(false);
|
|
23
33
|
const [error, setError] = useState(null);
|
|
24
34
|
const [info, setInfo] = useState(null);
|
|
@@ -33,17 +43,25 @@ export function ProfilePage() {
|
|
|
33
43
|
}
|
|
34
44
|
const handleSubmit = async (e) => {
|
|
35
45
|
e.preventDefault();
|
|
36
|
-
setSubmitting(true);
|
|
37
46
|
setError(null);
|
|
38
47
|
setInfo(null);
|
|
48
|
+
setCurrentPasswordError(null);
|
|
49
|
+
const changingPassword = password.trim().length > 0;
|
|
50
|
+
if (changingPassword && currentPassword.length === 0) {
|
|
51
|
+
setCurrentPasswordError(t('profile.error.currentPasswordRequired'));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
setSubmitting(true);
|
|
39
55
|
try {
|
|
40
56
|
const body = {};
|
|
41
57
|
if (firstName !== me.adminUser.firstName)
|
|
42
58
|
body['firstName'] = firstName;
|
|
43
59
|
if (lastName !== me.adminUser.lastName)
|
|
44
60
|
body['lastName'] = lastName;
|
|
45
|
-
if (
|
|
61
|
+
if (changingPassword) {
|
|
46
62
|
body['password'] = password;
|
|
63
|
+
body['currentPassword'] = currentPassword;
|
|
64
|
+
}
|
|
47
65
|
if (Object.keys(body).length === 0) {
|
|
48
66
|
setInfo(t('profile.info.nothingToSave'));
|
|
49
67
|
setSubmitting(false);
|
|
@@ -51,11 +69,23 @@ export function ProfilePage() {
|
|
|
51
69
|
}
|
|
52
70
|
await apiClient.patch('/api/v1/admin/me', body);
|
|
53
71
|
setPassword('');
|
|
54
|
-
|
|
72
|
+
setCurrentPassword('');
|
|
73
|
+
// A password change signs every other session of the account out and
|
|
74
|
+
// leaves this one alone, so there is nothing to recover from here — only
|
|
75
|
+
// something to tell the administrator.
|
|
76
|
+
setInfo(t(changingPassword ? 'profile.info.passwordChanged' : 'profile.info.updated'));
|
|
55
77
|
await refresh();
|
|
56
78
|
}
|
|
57
79
|
catch (err) {
|
|
58
|
-
|
|
80
|
+
if (err instanceof ApiError && err.envelope.error.code === 'CURRENT_PASSWORD_INVALID') {
|
|
81
|
+
// The refusal is about one field, so it is shown there. The new
|
|
82
|
+
// password is kept: only the wrong field needs retyping.
|
|
83
|
+
setCurrentPasswordError(err.envelope.error.message);
|
|
84
|
+
setCurrentPassword('');
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
setError(err instanceof ApiError ? err.envelope.error.message : t('profile.error.save'));
|
|
88
|
+
}
|
|
59
89
|
}
|
|
60
90
|
finally {
|
|
61
91
|
setSubmitting(false);
|
|
@@ -73,7 +103,10 @@ export function ProfilePage() {
|
|
|
73
103
|
padding: 12,
|
|
74
104
|
marginBottom: 16,
|
|
75
105
|
border: '1px solid hsl(142 50% 80%)',
|
|
76
|
-
}, children: info })) : null, _jsxs("form", { onSubmit: (e) => { void handleSubmit(e); }, children: [_jsxs("div", { className: "b2b-card", style: { marginBottom: 16 }, children: [_jsx("div", { className: "b2b-card__head", children: _jsx("h2", { children: t('profile.identityTitle') }) }), _jsx("div", { className: "b2b-card__body", children: _jsxs("div", { className: "b2b-grid b2b-grid--cols-2", children: [_jsxs("div", { children: [_jsx("label", { className: "b2b-label", htmlFor: "me-email", children: t('profile.field.email') }), _jsx("input", { id: "me-email", className: "b2b-field", value: me.adminUser.email, disabled: true }), _jsx("div", { className: "b2b-help", children: t('profile.emailHelp') })] }), _jsxs("div", { children: [_jsx("label", { className: "b2b-label", htmlFor: "me-role", children: t('profile.field.role') }), _jsx("input", { id: "me-role", className: "b2b-field", value: me.role?.name ?? '—', disabled: true })] }), _jsxs("div", { children: [_jsx("label", { className: "b2b-label", htmlFor: "me-first", children: t('profile.field.firstName') }), _jsx("input", { id: "me-first", className: "b2b-field", value: firstName, onChange: (e) => setFirstName(e.target.value), required: true, maxLength: 120 })] }), _jsxs("div", { children: [_jsx("label", { className: "b2b-label", htmlFor: "me-last", children: t('profile.field.lastName') }), _jsx("input", { id: "me-last", className: "b2b-field", value: lastName, onChange: (e) => setLastName(e.target.value), required: true, maxLength: 120 })] })] }) })] }), _jsxs("div", { className: "b2b-card", style: { marginBottom: 16 }, children: [_jsx("div", { className: "b2b-card__head", children: _jsx("h2", { children: t('profile.changePassword') }) }),
|
|
106
|
+
}, children: info })) : null, _jsxs("form", { onSubmit: (e) => { void handleSubmit(e); }, children: [_jsxs("div", { className: "b2b-card", style: { marginBottom: 16 }, children: [_jsx("div", { className: "b2b-card__head", children: _jsx("h2", { children: t('profile.identityTitle') }) }), _jsx("div", { className: "b2b-card__body", children: _jsxs("div", { className: "b2b-grid b2b-grid--cols-2", children: [_jsxs("div", { children: [_jsx("label", { className: "b2b-label", htmlFor: "me-email", children: t('profile.field.email') }), _jsx("input", { id: "me-email", className: "b2b-field", value: me.adminUser.email, disabled: true }), _jsx("div", { className: "b2b-help", children: t('profile.emailHelp') })] }), _jsxs("div", { children: [_jsx("label", { className: "b2b-label", htmlFor: "me-role", children: t('profile.field.role') }), _jsx("input", { id: "me-role", className: "b2b-field", value: me.role?.name ?? '—', disabled: true })] }), _jsxs("div", { children: [_jsx("label", { className: "b2b-label", htmlFor: "me-first", children: t('profile.field.firstName') }), _jsx("input", { id: "me-first", className: "b2b-field", value: firstName, onChange: (e) => setFirstName(e.target.value), required: true, maxLength: 120 })] }), _jsxs("div", { children: [_jsx("label", { className: "b2b-label", htmlFor: "me-last", children: t('profile.field.lastName') }), _jsx("input", { id: "me-last", className: "b2b-field", value: lastName, onChange: (e) => setLastName(e.target.value), required: true, maxLength: 120 })] })] }) })] }), _jsxs("div", { className: "b2b-card", style: { marginBottom: 16 }, children: [_jsx("div", { className: "b2b-card__head", children: _jsx("h2", { children: t('profile.changePassword') }) }), _jsxs("div", { className: "b2b-card__body", children: [_jsxs("div", { style: { marginBottom: 16 }, children: [_jsx("label", { className: "b2b-label", htmlFor: "me-current-pwd", children: t('profile.field.currentPassword') }), _jsx("input", { id: "me-current-pwd", className: "b2b-field", type: "password", value: currentPassword, onChange: (e) => {
|
|
107
|
+
setCurrentPassword(e.target.value);
|
|
108
|
+
setCurrentPasswordError(null);
|
|
109
|
+
}, maxLength: 256, autoComplete: "current-password", "aria-invalid": currentPasswordError ? true : undefined, "aria-describedby": currentPasswordError ? 'me-current-pwd-error' : 'me-current-pwd-help' }), currentPasswordError ? (_jsx("div", { id: "me-current-pwd-error", className: "b2b-help", role: "alert", style: { color: 'var(--danger-soft-fg)' }, children: currentPasswordError })) : (_jsx("div", { id: "me-current-pwd-help", className: "b2b-help", children: t('profile.field.currentPasswordHelp') }))] }), _jsxs("div", { children: [_jsx("label", { className: "b2b-label", htmlFor: "me-pwd", children: t('profile.field.newPassword') }), _jsx("input", { id: "me-pwd", className: "b2b-field", type: "password", value: password, onChange: (e) => setPassword(e.target.value), minLength: 12, maxLength: 120, autoComplete: "new-password", placeholder: t('profile.field.newPasswordPlaceholder') }), _jsx("div", { className: "b2b-help", children: t('profile.field.newPasswordHelp') })] })] })] }), _jsx("div", { className: "b2b-row", style: { gap: 8, justifyContent: 'flex-end' }, children: _jsx("button", { type: "submit", className: "b2b-btn b2b-btn--primary", disabled: submitting, children: submitting ? t('profile.saving') : t('profile.saveChanges') }) })] }), _jsx(LanguageSection, {})] }));
|
|
77
110
|
}
|
|
78
111
|
/**
|
|
79
112
|
* Language section — feature 019 / FR-002, FR-004, FR-005, FR-006.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfilePage.js","sourceRoot":"","sources":["../../../src/modules/profile/ProfilePage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAkC,MAAM,OAAO,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAG9D
|
|
1
|
+
{"version":3,"file":"ProfilePage.js","sourceRoot":"","sources":["../../../src/modules/profile/ProfilePage.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@endora-commerce/admin-shell",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.105.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "The admin application itself (feature 110, FR-016) — the router, the sidebar and palette shell, the sign-in screen and the host's own screens. An instance depends on it and holds only index.html, main.tsx, the configuration, the brand assets, the theme overrides and the generated contribution registry.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"react-router-dom": "^7.18.2",
|
|
38
38
|
"tailwindcss": "^4.2.4",
|
|
39
39
|
"vite": "^7.3.2",
|
|
40
|
-
"@endora-commerce/admin-kit": "0.
|
|
41
|
-
"@endora-commerce/contracts": "0.
|
|
40
|
+
"@endora-commerce/admin-kit": "0.105.0",
|
|
41
|
+
"@endora-commerce/contracts": "0.105.0"
|
|
42
42
|
},
|
|
43
43
|
"peerDependenciesMeta": {
|
|
44
44
|
"@tailwindcss/vite": {
|
|
@@ -66,8 +66,8 @@
|
|
|
66
66
|
"react-router-dom": "^7.18.2",
|
|
67
67
|
"typescript": "^5.9.3",
|
|
68
68
|
"vite": "^7.3.2",
|
|
69
|
-
"@endora-commerce/admin-kit": "0.
|
|
70
|
-
"@endora-commerce/contracts": "0.
|
|
69
|
+
"@endora-commerce/admin-kit": "0.105.0",
|
|
70
|
+
"@endora-commerce/contracts": "0.105.0"
|
|
71
71
|
},
|
|
72
72
|
"scripts": {
|
|
73
73
|
"build": "tsc -p tsconfig.build.json",
|