112 lines
4.7 KiB
PHP
112 lines
4.7 KiB
PHP
<div class="mx-auto">
|
|
<div class="flex justify-between items-center mb-8">
|
|
<div>
|
|
<flux:heading size="xl">Manajemen Role</flux:heading>
|
|
<flux:subheading>Atur hak akses pengguna sistem Anda di sini.</flux:subheading>
|
|
</div>
|
|
<div class="flex gap-2">
|
|
<flux:button href="{{ route('admin.permissions') }}" variant="outline" icon="key" wire:navigate>
|
|
Kelola Master Permission
|
|
</flux:button>
|
|
|
|
<flux:button wire:click="create" variant="primary" icon="plus">Tambah Role</flux:button>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Filter & Pencarian --}}
|
|
<div class="flex gap-4 mb-4">
|
|
<div class="flex-1">
|
|
<flux:input wire:model.live.debounce.300ms="search" placeholder="Cari nama role..."
|
|
icon="magnifying-glass" />
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Tabel Roles --}}
|
|
<flux:table>
|
|
<flux:table.columns>
|
|
<flux:table.column>Nama Role</flux:table.column>
|
|
<flux:table.column>Guard</flux:table.column>
|
|
<flux:table.column>Dibuat Pada</flux:table.column>
|
|
<flux:table.column align="end">Aksi</flux:table.column>
|
|
</flux:table.columns>
|
|
|
|
<flux:table.rows>
|
|
@forelse ($roles as $role)
|
|
<flux:table.row :key="$role->id">
|
|
<flux:table.cell class="font-medium text-zinc-800 dark:text-white">
|
|
{{ $role->name }}
|
|
</flux:table.cell>
|
|
<flux:table.cell>
|
|
<flux:badge size="sm">{{ $role->guard_name }}</flux:badge>
|
|
</flux:table.cell>
|
|
<flux:table.cell>{{ $role->created_at->translatedFormat('d F Y') }}</flux:table.cell>
|
|
<flux:table.cell align="end">
|
|
<div class="flex justify-end gap-2">
|
|
<flux:button href="{{ route('admin.roles.permissions', $role->id) }}" variant="ghost"
|
|
icon="shield-check" size="sm" tooltip="Atur Hak Akses" wire:navigate />
|
|
|
|
<flux:button wire:click="edit({{ $role->id }})" variant="ghost" icon="pencil-square"
|
|
size="sm" tooltip="Edit Role" />
|
|
@if (!in_array(strtolower($role->name), ['admin', 'super-admin']))
|
|
<flux:button type="button"
|
|
x-on:click="confirmDelete({{ $role->id }}, '{{ $role->name }}')"
|
|
variant="ghost" icon="trash" size="sm" class="text-red-500" />
|
|
@endif
|
|
</div>
|
|
</flux:table.cell>
|
|
</flux:table.row>
|
|
@empty
|
|
<flux:table.row>
|
|
<flux:table.cell colspan="4" class="py-10 text-zinc-400 text-center">
|
|
Data role tidak ditemukan.
|
|
</flux:table.cell>
|
|
</flux:table.row>
|
|
@endforelse
|
|
</flux:table.rows>
|
|
</flux:table>
|
|
|
|
<div class="mt-4">
|
|
<flux:pagination :paginator="$roles" />
|
|
</div>
|
|
|
|
{{-- Modal Input --}}
|
|
<flux:modal wire:model="isModalOpen" class="min-w-[450px]">
|
|
<form wire:submit.prevent="save" class="space-y-6">
|
|
<div>
|
|
<flux:heading size="lg">{{ $roleId ? 'Ubah Role' : 'Role Baru' }}</flux:heading>
|
|
<flux:subheading>Pastikan nama role bersifat unik.</flux:subheading>
|
|
</div>
|
|
|
|
<flux:input wire:model="name" label="Nama Role" placeholder="Contoh: Administrator, Editor..." autofocus />
|
|
|
|
<div class="flex justify-end space-x-2">
|
|
<flux:button x-on:click="$wire.isModalOpen = false" variant="ghost">Batal</flux:button>
|
|
<flux:button type="submit" variant="primary">Simpan Perubahan</flux:button>
|
|
</div>
|
|
</form>
|
|
</flux:modal>
|
|
</div>
|
|
|
|
@script
|
|
<script>
|
|
window.confirmDelete = function(id, name) {
|
|
Swal.fire({
|
|
title: 'Hapus Role?',
|
|
text: `Anda akan menghapus role "${name}". Tindakan ini tidak dapat dibatalkan!`,
|
|
icon: 'warning',
|
|
showCancelButton: true,
|
|
confirmButtonColor: '#ef4444', // warna merah tailwind
|
|
cancelButtonColor: '#71717a', // warna zinc tailwind
|
|
confirmButtonText: 'Ya, Hapus!',
|
|
cancelButtonText: 'Batal',
|
|
reverseButtons: true
|
|
}).then((result) => {
|
|
if (result.isConfirmed) {
|
|
// Memanggil method delete di component Livewire
|
|
$wire.delete(id);
|
|
}
|
|
});
|
|
}
|
|
</script>
|
|
@endscript
|