123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <script setup>
  2. import { watch } from 'vue'
  3. import { Inertia } from '@inertiajs/inertia'
  4. import { Head, useForm } from '@inertiajs/inertia-vue3'
  5. import throttle from 'lodash/throttle'
  6. import pickBy from 'lodash/pickBy'
  7. import AppLayout from '@/layouts/AppLayout.vue'
  8. import AppButton from '@/components/AppButton.vue'
  9. import AppPagination from '@/components/AppPagination.vue'
  10. import TableHeader from './TableHeader'
  11. const props = defineProps({
  12. users: Object,
  13. filters: Object,
  14. })
  15. const filterForm = useForm({
  16. search: props.filters.search,
  17. })
  18. watch(
  19. filterForm,
  20. throttle(() => {
  21. Inertia.get('/users', pickBy({ search: filterForm.search }), { preserveState: true })
  22. }, 300)
  23. )
  24. </script>
  25. <template>
  26. <Head title="Daftar User" />
  27. <AppLayout>
  28. <DataTable
  29. responsiveLayout="scroll"
  30. columnResizeMode="expand"
  31. :value="users.data"
  32. :rowHover="true"
  33. :stripedRows="true"
  34. >
  35. <template #header>
  36. <h1>User</h1>
  37. <div class="grid">
  38. <div class="col-12 md:col-8">
  39. <div class="flex align-items-center">
  40. <InputText
  41. class="w-full md:w-27rem"
  42. placeholder="cari, contoh: 08xx, tina, tina@xx.com"
  43. v-model="filterForm.search"
  44. />
  45. </div>
  46. </div>
  47. <div class="col-12 md:col-4 flex flex-column md:flex-row justify-content-end">
  48. <AppButton
  49. label="Tambah User"
  50. icon="pi pi-pencil"
  51. class="p-button-outlined"
  52. :href="route('users.create')"
  53. />
  54. </div>
  55. </div>
  56. </template>
  57. <Column
  58. v-for="tableHeader in TableHeader"
  59. :field="tableHeader.field"
  60. :header="tableHeader.header"
  61. :key="tableHeader.field"
  62. />
  63. <Column>
  64. <template #body="{ data }">
  65. <AppButton
  66. icon="pi pi-pencil"
  67. class="p-button-icon-only p-button-rounded p-button-text"
  68. :href="route('users.edit', data.id)"
  69. />
  70. </template>
  71. </Column>
  72. </DataTable>
  73. <AppPagination :links="users.links" />
  74. </AppLayout>
  75. </template>