Index.vue 2.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <script setup>
  2. import { watch } from 'vue'
  3. import { Inertia } from '@inertiajs/inertia'
  4. import { Head, Link, 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 TableHeader from './TableHeader'
  11. const props = defineProps({
  12. laundries: Object,
  13. filters: Object,
  14. })
  15. const filterForm = useForm({
  16. search: props.filters.search,
  17. })
  18. watch(
  19. filterForm,
  20. throttle(() => {
  21. Inertia.get('/laundries', pickBy({ search: filterForm.search }), { preserveState: true })
  22. }, 300)
  23. )
  24. </script>
  25. <template>
  26. <Head title="Daftar Tipe Laundry" />
  27. <AppLayout>
  28. <DataTable
  29. responsiveLayout="scroll"
  30. columnResizeMode="expand"
  31. :value="laundries.data"
  32. :rowHover="true"
  33. :stripedRows="true"
  34. >
  35. <template #header>
  36. <h5>Laundry</h5>
  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 justify-content-end">
  44. <AppButton :href="route('laundries.create')" label="Tambah Laundry" icon="pi pi-pencil" />
  45. </div>
  46. </div>
  47. </template>
  48. <Column
  49. v-for="tableHeader in TableHeader"
  50. :field="tableHeader.field"
  51. :header="tableHeader.header"
  52. :key="tableHeader.field"
  53. />
  54. <Column>
  55. <template #body="{ data }">
  56. <Link
  57. as="button"
  58. :href="route('laundries.edit', data.id)"
  59. class="p-button p-component p-button-icon-only p-button-rounded p-button-text"
  60. >
  61. <i class="pi pi-angle-double-right p-button-icon"></i>
  62. </Link>
  63. </template>
  64. </Column>
  65. </DataTable>
  66. <AppPagination :links="laundries.links" />
  67. </AppLayout>
  68. </template>