Index.vue 2.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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 AppButton from '@/components/AppButton.vue'
  8. import AppPagination from '@/components/AppPagination.vue'
  9. import AppLayout from '@/layouts/AppLayout.vue'
  10. import { IndexTable } from './TableHeader'
  11. const props = defineProps({
  12. members: Object,
  13. filters: Object,
  14. })
  15. const filterForm = useForm({
  16. search: props.filters.search,
  17. })
  18. watch(
  19. filterForm,
  20. throttle(() => {
  21. Inertia.get('/members', pickBy({ search: filterForm.search }), { preserveState: true })
  22. }, 300)
  23. )
  24. </script>
  25. <template>
  26. <Head title="Daftar Member" />
  27. <AppLayout>
  28. <DataTable
  29. responsive-layout="scroll"
  30. column-resize-mode="expand"
  31. :value="members.data"
  32. :row-hover="true"
  33. :striped-rows="true"
  34. >
  35. <template #header>
  36. <h1>Daftar Member</h1>
  37. <div class="grid">
  38. <div class="col-12 md:col-8">
  39. <div class="flex align-items-center">
  40. <InputText class="w-full md:w-27rem" placeholder="cari..." v-model="filterForm.search" />
  41. </div>
  42. </div>
  43. <div class="col-12 md:col-4 flex flex-column md:flex-row justify-content-end">
  44. <AppButton
  45. label="Tambah Member"
  46. class="p-button-outlined"
  47. icon="pi pi-pencil"
  48. :href="route('members.create')"
  49. />
  50. </div>
  51. </div>
  52. </template>
  53. <Column
  54. v-for="indexTable in IndexTable"
  55. :field="indexTable.field"
  56. :header="indexTable.header"
  57. :key="indexTable.field"
  58. />
  59. <Column>
  60. <template #body="{ data }">
  61. <AppButton
  62. icon="pi pi-pencil"
  63. class="p-button-text p-button-icon-only p-button-rounded p-button-text"
  64. :href="route('members.edit', data.id)"
  65. />
  66. </template>
  67. </Column>
  68. </DataTable>
  69. <AppPagination :links="members.links" />
  70. </AppLayout>
  71. </template>