@open-mercato/core 0.6.8-develop.7101.1.bd9356828a → 0.7.1-develop.7102.1.b41f7e3e51
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/.turbo/turbo-build.log +1 -1
- package/dist/modules/auth/api/login.js +19 -0
- package/dist/modules/auth/api/login.js.map +2 -2
- package/dist/modules/auth/api/routeError.js +11 -0
- package/dist/modules/auth/api/routeError.js.map +7 -0
- package/dist/modules/auth/api/users/acl/route.js +23 -7
- package/dist/modules/auth/api/users/acl/route.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/[id]/page.meta.js +6 -1
- package/dist/modules/business_rules/backend/rules/[id]/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/create/page.meta.js +5 -1
- package/dist/modules/business_rules/backend/rules/create/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/[id]/page.meta.js +6 -1
- package/dist/modules/business_rules/backend/sets/[id]/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/create/page.meta.js +5 -1
- package/dist/modules/business_rules/backend/sets/create/page.meta.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.js +84 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/page.js +7 -81
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js +525 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.js +731 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js +7 -727
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +7 -521
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
- package/dist/modules/customer_accounts/extension-points.js +1 -1
- package/dist/modules/customer_accounts/extension-points.js.map +2 -2
- package/dist/modules/customer_accounts/lib/portalUrl.js +69 -0
- package/dist/modules/customer_accounts/lib/portalUrl.js.map +7 -0
- package/dist/modules/customers/backend/customers/companies/page.js +2 -2
- package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/page.js +2 -2
- package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/page.js +2 -2
- package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
- package/dist/modules/customers/components/detail/AssignRoleDialog.js +33 -28
- package/dist/modules/customers/components/detail/AssignRoleDialog.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/page.meta.js +2 -2
- package/dist/modules/eudr/backend/eudr/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.js +8 -2
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/create/page.js +8 -2
- package/dist/modules/eudr/backend/eudr/plots/create/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/plots/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.js +2 -0
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/page.js +30 -25
- package/dist/modules/eudr/backend/eudr/statements/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/statements/page.meta.js.map +2 -2
- package/dist/modules/eudr/commands/statements.js +5 -3
- package/dist/modules/eudr/commands/statements.js.map +2 -2
- package/dist/modules/eudr/components/crudErrorI18n.js +21 -1
- package/dist/modules/eudr/components/crudErrorI18n.js.map +2 -2
- package/dist/modules/eudr/components/formConfig.js +6 -2
- package/dist/modules/eudr/components/formConfig.js.map +2 -2
- package/dist/modules/eudr/lib/statement-lifecycle.js +9 -1
- package/dist/modules/eudr/lib/statement-lifecycle.js.map +2 -2
- package/dist/modules/sales/components/documents/LineItemDialog.js +1 -1
- package/dist/modules/sales/components/documents/LineItemDialog.js.map +1 -1
- package/dist/modules/sales/widgets/injection/document-history/widget.client.js +44 -2
- package/dist/modules/sales/widgets/injection/document-history/widget.client.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLocationDetailPage.js +20 -16
- package/dist/modules/wms/components/backend/WmsLocationDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLotDetailPage.js +10 -6
- package/dist/modules/wms/components/backend/WmsLotDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsOperationalDashboardPage.js +11 -7
- package/dist/modules/wms/components/backend/WmsOperationalDashboardPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsSkuDetailPage.js +10 -6
- package/dist/modules/wms/components/backend/WmsSkuDetailPage.js.map +2 -2
- package/package.json +8 -8
- package/src/modules/auth/api/login.ts +23 -0
- package/src/modules/auth/api/routeError.ts +30 -0
- package/src/modules/auth/api/users/acl/route.ts +49 -9
- package/src/modules/business_rules/backend/rules/[id]/page.meta.ts +5 -0
- package/src/modules/business_rules/backend/rules/create/page.meta.ts +5 -1
- package/src/modules/business_rules/backend/sets/[id]/page.meta.ts +5 -0
- package/src/modules/business_rules/backend/sets/create/page.meta.ts +5 -1
- package/src/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.tsx +138 -0
- package/src/modules/customer_accounts/backend/customer_accounts/settings/page.tsx +8 -132
- package/src/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.tsx +601 -0
- package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.tsx +838 -0
- package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/page.tsx +6 -838
- package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +6 -590
- package/src/modules/customer_accounts/extension-points.ts +1 -1
- package/src/modules/customer_accounts/lib/portalUrl.ts +112 -0
- package/src/modules/customers/backend/customers/companies/page.tsx +2 -2
- package/src/modules/customers/backend/customers/deals/page.tsx +2 -2
- package/src/modules/customers/backend/customers/people/page.tsx +2 -2
- package/src/modules/customers/components/detail/AssignRoleDialog.tsx +12 -7
- package/src/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/page.meta.ts +2 -2
- package/src/modules/eudr/backend/eudr/plots/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/plots/[id]/page.tsx +8 -2
- package/src/modules/eudr/backend/eudr/plots/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/plots/create/page.tsx +8 -2
- package/src/modules/eudr/backend/eudr/plots/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/product-mappings/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/product-mappings/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/statements/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/statements/[id]/page.tsx +2 -0
- package/src/modules/eudr/backend/eudr/statements/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/statements/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/statements/page.tsx +32 -26
- package/src/modules/eudr/commands/statements.ts +4 -2
- package/src/modules/eudr/components/crudErrorI18n.ts +31 -0
- package/src/modules/eudr/components/formConfig.tsx +9 -1
- package/src/modules/eudr/i18n/de.json +3 -2
- package/src/modules/eudr/i18n/en.json +3 -2
- package/src/modules/eudr/i18n/es.json +3 -2
- package/src/modules/eudr/i18n/ko.json +3 -2
- package/src/modules/eudr/i18n/pl.json +3 -2
- package/src/modules/eudr/lib/statement-lifecycle.ts +8 -0
- package/src/modules/sales/components/documents/LineItemDialog.tsx +1 -1
- package/src/modules/sales/i18n/de.json +37 -0
- package/src/modules/sales/i18n/en.json +37 -0
- package/src/modules/sales/i18n/es.json +37 -0
- package/src/modules/sales/i18n/ko.json +37 -0
- package/src/modules/sales/i18n/pl.json +37 -0
- package/src/modules/sales/widgets/injection/document-history/widget.client.tsx +42 -2
- package/src/modules/wms/components/backend/WmsLocationDetailPage.tsx +30 -26
- package/src/modules/wms/components/backend/WmsLotDetailPage.tsx +21 -17
- package/src/modules/wms/components/backend/WmsOperationalDashboardPage.tsx +17 -13
- package/src/modules/wms/components/backend/WmsSkuDetailPage.tsx +16 -12
|
@@ -2,7 +2,11 @@ export const metadata = {
|
|
|
2
2
|
requireAuth: true,
|
|
3
3
|
requireFeatures: ['business_rules.manage'],
|
|
4
4
|
pageTitle: 'Create Business Rule',
|
|
5
|
+
pageTitleKey: 'business_rules.rules.create.title',
|
|
5
6
|
pageGroup: 'Business Rules',
|
|
6
7
|
pageGroupKey: 'rules.nav.group',
|
|
7
|
-
breadcrumb: [
|
|
8
|
+
breadcrumb: [
|
|
9
|
+
{ label: 'Business Rules', labelKey: 'rules.nav.rules' },
|
|
10
|
+
{ label: 'Create Business Rule', labelKey: 'business_rules.rules.create.title' },
|
|
11
|
+
],
|
|
8
12
|
}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
export const metadata = {
|
|
2
2
|
pageTitle: 'Edit Rule Set',
|
|
3
|
+
pageTitleKey: 'business_rules.sets.edit.title',
|
|
3
4
|
requireAuth: true,
|
|
4
5
|
requireFeatures: ['business_rules.manage_sets'],
|
|
6
|
+
breadcrumb: [
|
|
7
|
+
{ label: 'Rule Sets', labelKey: 'rules.nav.sets' },
|
|
8
|
+
{ label: 'Edit Rule Set', labelKey: 'business_rules.sets.edit.title' },
|
|
9
|
+
],
|
|
5
10
|
}
|
|
@@ -2,7 +2,11 @@ export const metadata = {
|
|
|
2
2
|
requireAuth: true,
|
|
3
3
|
requireFeatures: ['business_rules.manage_sets'],
|
|
4
4
|
pageTitle: 'Create Rule Set',
|
|
5
|
+
pageTitleKey: 'business_rules.sets.create.title',
|
|
5
6
|
pageGroup: 'Business Rules',
|
|
6
7
|
pageGroupKey: 'rules.nav.group',
|
|
7
|
-
breadcrumb: [
|
|
8
|
+
breadcrumb: [
|
|
9
|
+
{ label: 'Rule Sets', labelKey: 'rules.nav.sets' },
|
|
10
|
+
{ label: 'Create Rule Set', labelKey: 'business_rules.sets.create.title' },
|
|
11
|
+
],
|
|
8
12
|
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import { useMemo } from 'react'
|
|
4
|
+
import Link from 'next/link'
|
|
5
|
+
import { FormHeader } from '@open-mercato/ui/backend/forms'
|
|
6
|
+
import { Button } from '@open-mercato/ui/primitives/button'
|
|
7
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
8
|
+
import { buildPortalRootUrl, buildPortalUrlPattern } from '../../../lib/portalUrl'
|
|
9
|
+
|
|
10
|
+
const DEMO_CREDENTIALS = [
|
|
11
|
+
{ email: 'alice.johnson@example.com', password: 'Password123!', role: 'Portal Admin' },
|
|
12
|
+
{ email: 'bob.smith@example.com', password: 'Password123!', role: 'Buyer' },
|
|
13
|
+
{ email: 'carol.white@example.com', password: 'Password123!', role: 'Viewer' },
|
|
14
|
+
] as const
|
|
15
|
+
|
|
16
|
+
export type CustomerAccountsSettingsPageClientProps = {
|
|
17
|
+
portalOrigin: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function CustomerAccountsSettingsPageClient({ portalOrigin }: CustomerAccountsSettingsPageClientProps) {
|
|
21
|
+
const t = useT()
|
|
22
|
+
|
|
23
|
+
const portalUrl = useMemo(() => buildPortalUrlPattern(portalOrigin), [portalOrigin])
|
|
24
|
+
const portalRootUrl = useMemo(() => buildPortalRootUrl(portalOrigin), [portalOrigin])
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
<>
|
|
28
|
+
<div className="px-3 py-3 md:px-6 md:py-4">
|
|
29
|
+
<FormHeader
|
|
30
|
+
mode="detail"
|
|
31
|
+
title={t('customer_accounts.settings.title', 'Portal Settings')}
|
|
32
|
+
backHref="/backend/customer_accounts/users"
|
|
33
|
+
backLabel={t('customer_accounts.settings.back', 'Customer Users')}
|
|
34
|
+
/>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<div className="max-w-2xl space-y-6">
|
|
38
|
+
<div className="rounded-lg border p-4 space-y-3">
|
|
39
|
+
<h3 className="text-sm font-semibold">
|
|
40
|
+
{t('customer_accounts.settings.portal_access.title', 'Portal Access')}
|
|
41
|
+
</h3>
|
|
42
|
+
<div>
|
|
43
|
+
<p className="text-sm text-muted-foreground">
|
|
44
|
+
{t('customer_accounts.settings.portal_access.url_label', 'Portal URL pattern:')}
|
|
45
|
+
</p>
|
|
46
|
+
<code className="mt-1 block rounded bg-muted px-3 py-2 text-sm font-mono">
|
|
47
|
+
{portalUrl}
|
|
48
|
+
</code>
|
|
49
|
+
</div>
|
|
50
|
+
<div>
|
|
51
|
+
<Button type="button" variant="outline" size="sm" asChild>
|
|
52
|
+
<a href={portalRootUrl} target="_blank" rel="noopener noreferrer">
|
|
53
|
+
{t('customer_accounts.settings.portal_access.open_portal', 'Open Portal')}
|
|
54
|
+
</a>
|
|
55
|
+
</Button>
|
|
56
|
+
</div>
|
|
57
|
+
<p className="text-xs text-muted-foreground">
|
|
58
|
+
{t(
|
|
59
|
+
'customer_accounts.settings.portal_access.slug_note',
|
|
60
|
+
'The organization slug is auto-generated from the organization name. You can view and manage organizations in Directory \u2192 Organizations.',
|
|
61
|
+
)}
|
|
62
|
+
</p>
|
|
63
|
+
<p className="text-xs text-muted-foreground">
|
|
64
|
+
<Link href="/backend/directory/organizations" className="text-primary underline underline-offset-4 hover:text-primary/80">
|
|
65
|
+
{t('customer_accounts.settings.portal_access.manage_orgs', 'Manage Organizations')}
|
|
66
|
+
</Link>
|
|
67
|
+
</p>
|
|
68
|
+
</div>
|
|
69
|
+
|
|
70
|
+
<div className="rounded-lg border p-4 space-y-3">
|
|
71
|
+
<h3 className="text-sm font-semibold">
|
|
72
|
+
{t('customer_accounts.settings.demo_credentials.title', 'Demo Credentials')}
|
|
73
|
+
</h3>
|
|
74
|
+
<div className="overflow-x-auto">
|
|
75
|
+
<table className="w-full text-sm">
|
|
76
|
+
<thead>
|
|
77
|
+
<tr className="border-b text-left">
|
|
78
|
+
<th className="pb-2 pr-4 font-medium text-muted-foreground">
|
|
79
|
+
{t('customer_accounts.settings.demo_credentials.email', 'Email')}
|
|
80
|
+
</th>
|
|
81
|
+
<th className="pb-2 pr-4 font-medium text-muted-foreground">
|
|
82
|
+
{t('customer_accounts.settings.demo_credentials.password', 'Password')}
|
|
83
|
+
</th>
|
|
84
|
+
<th className="pb-2 font-medium text-muted-foreground">
|
|
85
|
+
{t('customer_accounts.settings.demo_credentials.role', 'Role')}
|
|
86
|
+
</th>
|
|
87
|
+
</tr>
|
|
88
|
+
</thead>
|
|
89
|
+
<tbody>
|
|
90
|
+
{DEMO_CREDENTIALS.map((cred) => (
|
|
91
|
+
<tr key={cred.email} className="border-b last:border-0">
|
|
92
|
+
<td className="py-2 pr-4 font-mono text-xs">{cred.email}</td>
|
|
93
|
+
<td className="py-2 pr-4 font-mono text-xs">{cred.password}</td>
|
|
94
|
+
<td className="py-2 text-xs">{cred.role}</td>
|
|
95
|
+
</tr>
|
|
96
|
+
))}
|
|
97
|
+
</tbody>
|
|
98
|
+
</table>
|
|
99
|
+
</div>
|
|
100
|
+
<p className="text-xs text-muted-foreground">
|
|
101
|
+
{t(
|
|
102
|
+
'customer_accounts.settings.demo_credentials.note',
|
|
103
|
+
'These credentials are only available if example data was seeded during setup.',
|
|
104
|
+
)}
|
|
105
|
+
</p>
|
|
106
|
+
</div>
|
|
107
|
+
|
|
108
|
+
<div className="rounded-lg border p-4 space-y-3">
|
|
109
|
+
<h3 className="text-sm font-semibold">
|
|
110
|
+
{t('customer_accounts.settings.quick_links.title', 'Quick Links')}
|
|
111
|
+
</h3>
|
|
112
|
+
<ul className="space-y-2">
|
|
113
|
+
<li>
|
|
114
|
+
<Link href="/backend/customer_accounts/users" className="text-sm text-primary underline underline-offset-4 hover:text-primary/80">
|
|
115
|
+
{t('customer_accounts.settings.quick_links.manage_users', 'Manage customer users')}
|
|
116
|
+
</Link>
|
|
117
|
+
</li>
|
|
118
|
+
<li>
|
|
119
|
+
<Link href="/backend/customer_accounts/roles" className="text-sm text-primary underline underline-offset-4 hover:text-primary/80">
|
|
120
|
+
{t('customer_accounts.settings.quick_links.manage_roles', 'Manage customer roles')}
|
|
121
|
+
</Link>
|
|
122
|
+
</li>
|
|
123
|
+
<li>
|
|
124
|
+
<a
|
|
125
|
+
href="https://docs.open-mercato.com/framework/modules/customer-portal"
|
|
126
|
+
target="_blank"
|
|
127
|
+
rel="noopener noreferrer"
|
|
128
|
+
className="text-sm text-primary underline underline-offset-4 hover:text-primary/80"
|
|
129
|
+
>
|
|
130
|
+
{t('customer_accounts.settings.quick_links.portal_docs', 'Portal documentation')}
|
|
131
|
+
</a>
|
|
132
|
+
</li>
|
|
133
|
+
</ul>
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
</>
|
|
137
|
+
)
|
|
138
|
+
}
|
|
@@ -1,139 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { useMemo } from 'react'
|
|
4
|
-
import Link from 'next/link'
|
|
1
|
+
import { headers } from 'next/headers'
|
|
5
2
|
import { Page, PageBody } from '@open-mercato/ui/backend/Page'
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
9
|
-
|
|
10
|
-
function useOrigin() {
|
|
11
|
-
return typeof window !== 'undefined' ? window.location.origin : ''
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const DEMO_CREDENTIALS = [
|
|
15
|
-
{ email: 'alice.johnson@example.com', password: 'Password123!', role: 'Portal Admin' },
|
|
16
|
-
{ email: 'bob.smith@example.com', password: 'Password123!', role: 'Buyer' },
|
|
17
|
-
{ email: 'carol.white@example.com', password: 'Password123!', role: 'Viewer' },
|
|
18
|
-
] as const
|
|
19
|
-
|
|
20
|
-
export default function CustomerAccountsSettingsPage() {
|
|
21
|
-
const t = useT()
|
|
22
|
-
const origin = useOrigin()
|
|
23
|
-
|
|
24
|
-
const portalUrl = useMemo(() => `${origin}/[org-slug]/portal`, [origin])
|
|
3
|
+
import { resolvePortalRequestOrigin } from '../../../lib/portalUrl'
|
|
4
|
+
import { CustomerAccountsSettingsPageClient } from './CustomerAccountsSettingsPageClient'
|
|
25
5
|
|
|
6
|
+
export default async function CustomerAccountsSettingsPage() {
|
|
7
|
+
const portalOrigin = resolvePortalRequestOrigin(await headers())
|
|
26
8
|
return (
|
|
27
9
|
<Page>
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
title={t('customer_accounts.settings.title', 'Portal Settings')}
|
|
32
|
-
backHref="/backend/customer_accounts/users"
|
|
33
|
-
backLabel={t('customer_accounts.settings.back', 'Customer Users')}
|
|
34
|
-
/>
|
|
35
|
-
</div>
|
|
36
|
-
|
|
37
|
-
<PageBody>
|
|
38
|
-
<div className="max-w-2xl space-y-6">
|
|
39
|
-
<div className="rounded-lg border p-4 space-y-3">
|
|
40
|
-
<h3 className="text-sm font-semibold">
|
|
41
|
-
{t('customer_accounts.settings.portal_access.title', 'Portal Access')}
|
|
42
|
-
</h3>
|
|
43
|
-
<div>
|
|
44
|
-
<p className="text-sm text-muted-foreground">
|
|
45
|
-
{t('customer_accounts.settings.portal_access.url_label', 'Portal URL pattern:')}
|
|
46
|
-
</p>
|
|
47
|
-
<code className="mt-1 block rounded bg-muted px-3 py-2 text-sm font-mono">
|
|
48
|
-
{portalUrl}
|
|
49
|
-
</code>
|
|
50
|
-
</div>
|
|
51
|
-
<div>
|
|
52
|
-
<Button type="button" variant="outline" size="sm" asChild>
|
|
53
|
-
<a href={`${origin}/portal`} target="_blank" rel="noopener noreferrer">
|
|
54
|
-
{t('customer_accounts.settings.portal_access.open_portal', 'Open Portal')}
|
|
55
|
-
</a>
|
|
56
|
-
</Button>
|
|
57
|
-
</div>
|
|
58
|
-
<p className="text-xs text-muted-foreground">
|
|
59
|
-
{t(
|
|
60
|
-
'customer_accounts.settings.portal_access.slug_note',
|
|
61
|
-
'The organization slug is auto-generated from the organization name. You can view and manage organizations in Directory \u2192 Organizations.',
|
|
62
|
-
)}
|
|
63
|
-
</p>
|
|
64
|
-
<p className="text-xs text-muted-foreground">
|
|
65
|
-
<Link href="/backend/directory/organizations" className="text-primary underline underline-offset-4 hover:text-primary/80">
|
|
66
|
-
{t('customer_accounts.settings.portal_access.manage_orgs', 'Manage Organizations')}
|
|
67
|
-
</Link>
|
|
68
|
-
</p>
|
|
69
|
-
</div>
|
|
70
|
-
|
|
71
|
-
<div className="rounded-lg border p-4 space-y-3">
|
|
72
|
-
<h3 className="text-sm font-semibold">
|
|
73
|
-
{t('customer_accounts.settings.demo_credentials.title', 'Demo Credentials')}
|
|
74
|
-
</h3>
|
|
75
|
-
<div className="overflow-x-auto">
|
|
76
|
-
<table className="w-full text-sm">
|
|
77
|
-
<thead>
|
|
78
|
-
<tr className="border-b text-left">
|
|
79
|
-
<th className="pb-2 pr-4 font-medium text-muted-foreground">
|
|
80
|
-
{t('customer_accounts.settings.demo_credentials.email', 'Email')}
|
|
81
|
-
</th>
|
|
82
|
-
<th className="pb-2 pr-4 font-medium text-muted-foreground">
|
|
83
|
-
{t('customer_accounts.settings.demo_credentials.password', 'Password')}
|
|
84
|
-
</th>
|
|
85
|
-
<th className="pb-2 font-medium text-muted-foreground">
|
|
86
|
-
{t('customer_accounts.settings.demo_credentials.role', 'Role')}
|
|
87
|
-
</th>
|
|
88
|
-
</tr>
|
|
89
|
-
</thead>
|
|
90
|
-
<tbody>
|
|
91
|
-
{DEMO_CREDENTIALS.map((cred) => (
|
|
92
|
-
<tr key={cred.email} className="border-b last:border-0">
|
|
93
|
-
<td className="py-2 pr-4 font-mono text-xs">{cred.email}</td>
|
|
94
|
-
<td className="py-2 pr-4 font-mono text-xs">{cred.password}</td>
|
|
95
|
-
<td className="py-2 text-xs">{cred.role}</td>
|
|
96
|
-
</tr>
|
|
97
|
-
))}
|
|
98
|
-
</tbody>
|
|
99
|
-
</table>
|
|
100
|
-
</div>
|
|
101
|
-
<p className="text-xs text-muted-foreground">
|
|
102
|
-
{t(
|
|
103
|
-
'customer_accounts.settings.demo_credentials.note',
|
|
104
|
-
'These credentials are only available if example data was seeded during setup.',
|
|
105
|
-
)}
|
|
106
|
-
</p>
|
|
107
|
-
</div>
|
|
108
|
-
|
|
109
|
-
<div className="rounded-lg border p-4 space-y-3">
|
|
110
|
-
<h3 className="text-sm font-semibold">
|
|
111
|
-
{t('customer_accounts.settings.quick_links.title', 'Quick Links')}
|
|
112
|
-
</h3>
|
|
113
|
-
<ul className="space-y-2">
|
|
114
|
-
<li>
|
|
115
|
-
<Link href="/backend/customer_accounts/users" className="text-sm text-primary underline underline-offset-4 hover:text-primary/80">
|
|
116
|
-
{t('customer_accounts.settings.quick_links.manage_users', 'Manage customer users')}
|
|
117
|
-
</Link>
|
|
118
|
-
</li>
|
|
119
|
-
<li>
|
|
120
|
-
<Link href="/backend/customer_accounts/roles" className="text-sm text-primary underline underline-offset-4 hover:text-primary/80">
|
|
121
|
-
{t('customer_accounts.settings.quick_links.manage_roles', 'Manage customer roles')}
|
|
122
|
-
</Link>
|
|
123
|
-
</li>
|
|
124
|
-
<li>
|
|
125
|
-
<a
|
|
126
|
-
href="https://docs.open-mercato.com/framework/modules/customer-portal"
|
|
127
|
-
target="_blank"
|
|
128
|
-
rel="noopener noreferrer"
|
|
129
|
-
className="text-sm text-primary underline underline-offset-4 hover:text-primary/80"
|
|
130
|
-
>
|
|
131
|
-
{t('customer_accounts.settings.quick_links.portal_docs', 'Portal documentation')}
|
|
132
|
-
</a>
|
|
133
|
-
</li>
|
|
134
|
-
</ul>
|
|
135
|
-
</div>
|
|
136
|
-
</div>
|
|
10
|
+
{/* space-y-6 preserves the gap the page header previously got as a direct <Page> child. */}
|
|
11
|
+
<PageBody className="space-y-6">
|
|
12
|
+
<CustomerAccountsSettingsPageClient portalOrigin={portalOrigin} />
|
|
137
13
|
</PageBody>
|
|
138
14
|
</Page>
|
|
139
15
|
)
|