diff --git a/src/app/admin/matrix-management/hooks/createMatrix.ts b/src/app/admin/matrix-management/hooks/createMatrix.ts index d54d00d..479aa28 100644 --- a/src/app/admin/matrix-management/hooks/createMatrix.ts +++ b/src/app/admin/matrix-management/hooks/createMatrix.ts @@ -5,19 +5,24 @@ export type CreateMatrixResult = { message?: string } + export async function createMatrix(params: { token: string name: string email: string + depth?: number force?: boolean baseUrl?: string }): Promise { - const { token, name, email, force = false, baseUrl = process.env.NEXT_PUBLIC_API_BASE_URL || '' } = params + const { token, name, email, depth, force = false, baseUrl = process.env.NEXT_PUBLIC_API_BASE_URL || '' } = params if (!token) return { ok: false, status: 401, message: 'Missing token' } const url = new URL(`${baseUrl}/api/matrix/create`) url.searchParams.set('name', name) url.searchParams.set('email', email) + if (typeof depth === 'number' && Number.isFinite(depth)) { + url.searchParams.set('depth', String(depth)) + } if (force) url.searchParams.set('force', 'true') try { diff --git a/src/app/admin/matrix-management/page.tsx b/src/app/admin/matrix-management/page.tsx index c9ca9e4..1c76606 100644 --- a/src/app/admin/matrix-management/page.tsx +++ b/src/app/admin/matrix-management/page.tsx @@ -57,6 +57,7 @@ export default function MatrixManagementPage() { const [createName, setCreateName] = useState('') const [createEmail, setCreateEmail] = useState('') const [formError, setFormError] = useState('') + const [createDepth, setCreateDepth] = useState(5) const [createLoading, setCreateLoading] = useState(false) const [forcePrompt, setForcePrompt] = useState<{ name: string; email: string } | null>(null) @@ -120,6 +121,7 @@ export default function MatrixManagementPage() { const resetForm = () => { setCreateName('') setCreateEmail('') + setCreateDepth(5) setFormError('') setForcePrompt(null) setCreateSuccess(null) @@ -132,6 +134,7 @@ export default function MatrixManagementPage() { e.preventDefault() const name = createName.trim() const email = createEmail.trim() + const depth = Number(createDepth) setFormError('') setCreateSuccess(null) setForcePrompt(null) @@ -148,10 +151,14 @@ export default function MatrixManagementPage() { setFormError('Not authenticated. Please log in again.') return } + if (!Number.isFinite(depth) || depth < 1 || depth > 20) { + setFormError('Please provide a valid matrix depth (1-20).') + return + } setCreateLoading(true) try { - const res = await createMatrix({ token, name, email }) + const res = await createMatrix({ token, name, email, depth }) console.log('🧱 MatrixManagement: create result ->', res.status, res.body) if (res.ok && res.body?.success) { const createdName = res.body?.data?.name || name @@ -160,6 +167,7 @@ export default function MatrixManagementPage() { await loadStats() setCreateName('') setCreateEmail('') + setCreateDepth(5) } else if (res.status === 409) { setForcePrompt({ name, email }) } else { @@ -355,7 +363,7 @@ export default function MatrixManagementPage() {
- Policy: {(!m.policyMaxDepth || m.policyMaxDepth <= 0) ? 'Unlimited' : m.policyMaxDepth} + Depth: {(!m.policyMaxDepth || m.policyMaxDepth <= 0) ? 'Unlimited' : m.policyMaxDepth} Root: unlimited immediate children (sequential), non-root: 5 children (positions 1–5) @@ -495,6 +503,19 @@ export default function MatrixManagementPage() { placeholder="owner@example.com" />
+
+ + setCreateDepth(Number(e.target.value))} + disabled={createLoading} + className="w-full rounded-lg border border-gray-300 px-4 py-3 text-sm focus:ring-2 focus:ring-blue-900 focus:border-transparent disabled:bg-gray-100" + placeholder="e.g., 5" + /> +
{formError && (