update lisensi prosess
tests / ci (push) Has been cancelled

This commit is contained in:
Wian Drs
2026-08-25 13:43:55 +07:00
parent 1e80be180e
commit 60946ddf37
58 changed files with 2903 additions and 165 deletions
@@ -33,15 +33,29 @@ type Installation = {
status: string;
last_seen_at?: string;
};
type License = {
plan: string;
status: string;
max_devices: number;
max_users: number;
expires_at: string;
};
export default function TenantEdit({
tenant,
users,
installation,
license,
plans,
}: {
tenant: Tenant;
users: User[];
installation: Installation | null;
license: License | null;
plans: Record<
string,
{ name: string; price: number; max_devices: number; max_users: number }
>;
}) {
const { flash } = usePage().props as unknown as {
flash: { success?: string };
@@ -150,6 +164,37 @@ export default function TenantEdit({
}
/>
</div>
<div className="grid gap-2 md:col-span-2">
<Label>Paket Lisensi Aktif</Label>
<select
name="plan_code"
defaultValue={
license?.plan ?? 'cloud_free'
}
className="h-10 rounded-md border bg-background px-3"
>
{Object.entries(plans).map(
([code, plan]) => (
<option key={code} value={code}>
{plan.name} ·{' '}
{plan.price === 0
? 'Gratis'
: `Rp${plan.price.toLocaleString('id-ID')}/bulan`}{' '}
· {plan.max_devices}{' '}
perangkat · {plan.max_users}{' '}
user
</option>
),
)}
</select>
<p className="text-xs text-muted-foreground">
Status: {license?.status ?? 'belum ada'}
{license?.expires_at
? ` · sampai ${new Date(license.expires_at).toLocaleDateString('id-ID')}`
: ''}
</p>
<InputError message={errors.plan_code} />
</div>
<div className="flex gap-3 md:col-span-2">
<Button disabled={processing}>
Simpan Perubahan