Files
chronus/src/pages/dashboard/team/invite.astro
2025-12-25 23:49:47 -07:00

68 lines
2.3 KiB
Plaintext

---
import DashboardLayout from '../../../layouts/DashboardLayout.astro';
import { Icon } from 'astro-icon/components';
import { db } from '../../../db';
import { members } from '../../../db/schema';
import { eq } from 'drizzle-orm';
const user = Astro.locals.user;
if (!user) return Astro.redirect('/login');
const userMembership = await db.select()
.from(members)
.where(eq(members.userId, user.id))
.get();
if (!userMembership) return Astro.redirect('/dashboard');
const isAdmin = userMembership.role === 'owner' || userMembership.role === 'admin';
if (!isAdmin) return Astro.redirect('/dashboard/team');
---
<DashboardLayout title="Invite Team Member - Zamaan">
<div class="max-w-2xl mx-auto">
<h1 class="text-3xl font-bold mb-6">Invite Team Member</h1>
<form method="POST" action="/api/team/invite" class="card bg-base-100 shadow-xl border border-base-200">
<div class="card-body">
<div class="alert alert-info mb-4">
<Icon name="heroicons:information-circle" class="w-6 h-6" />
<span>The user must already have an account. They'll be added to your organization.</span>
</div>
<div class="form-control">
<label class="label" for="email">
<span class="label-text">Email Address</span>
</label>
<input
type="email"
id="email"
name="email"
placeholder="user@example.com"
class="input input-bordered"
required
/>
</div>
<div class="form-control">
<label class="label" for="role">
<span class="label-text">Role</span>
</label>
<select id="role" name="role" class="select select-bordered" required>
<option value="member">Member</option>
<option value="admin">Admin</option>
</select>
<label class="label">
<span class="label-text-alt">Members can track time. Admins can manage team and clients.</span>
</label>
</div>
<div class="card-actions justify-end mt-6">
<a href="/dashboard/team" class="btn btn-ghost">Cancel</a>
<button type="submit" class="btn btn-primary">Invite Member</button>
</div>
</div>
</form>
</div>
</DashboardLayout>