1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { reactive, onMounted, watch } from 'vue'
  2. import { Inertia } from '@inertiajs/inertia'
  3. import { usePage } from '@inertiajs/inertia-vue3'
  4. import FormValidationError from '@/utils/formValidationError'
  5. export function useVehicle(props, form) {
  6. const listVehicle = reactive([])
  7. onMounted(() => {
  8. props.initialVehicles.forEach((val) => listVehicle.push(val))
  9. })
  10. watch(
  11. () => form.type_member_id,
  12. () => {
  13. vehicleClear()
  14. form.reset('plat_number', 'max_vehicle_id')
  15. Inertia.reload({ only: ['typeMember'], data: { id: form.type_member_id } })
  16. }
  17. )
  18. const vehicleClear = () => {
  19. listVehicle.splice(0)
  20. }
  21. const vehicleOnDelete = (index) => {
  22. listVehicle.splice(index, 1)
  23. usePage().props.value.errors = {}
  24. }
  25. const vehicleAddValidation = () => {
  26. if (!form.plat_number) {
  27. throw new FormValidationError('Plat kendaraan tidak boleh kosong', 'plat_number')
  28. }
  29. if (!form.max_vehicle_id) {
  30. throw new FormValidationError('Tidak boleh kosong', 'max_vehicle_id')
  31. }
  32. const platNumberExist = listVehicle.filter((vehicle) => vehicle.platNumber === form.plat_number.toUpperCase())
  33. if (platNumberExist.length) {
  34. throw new FormValidationError('Nomor plat kendaraan tidak boleh sama', 'plat_number')
  35. }
  36. const maxVehicles = listVehicle.filter((vehicle) => vehicle.maxVehicleId === form.max_vehicle_id)
  37. if (maxVehicles.length) {
  38. if (maxVehicles.length + 1 > maxVehicles[0].maxVehicle) {
  39. throw new FormValidationError('Melibihi batas maksimal kendaraan', 'plat_number')
  40. }
  41. }
  42. }
  43. const vehicleOnAdd = () => {
  44. try {
  45. form.clearErrors('plat_number', 'max_vehicle_id')
  46. vehicleAddValidation()
  47. const typeVehicle = props.typeMember.maxVehicles.filter(
  48. (maxVehicle) => maxVehicle.value === form.max_vehicle_id
  49. )[0]
  50. listVehicle.push({
  51. platNumber: form.plat_number.toUpperCase(),
  52. typeVehicle: typeVehicle.label,
  53. typeVehicleId: typeVehicle.typeVehicleId,
  54. maxVehicleId: typeVehicle.value,
  55. maxVehicle: typeVehicle.maxVehicle,
  56. })
  57. form.reset('plat_number', 'max_vehicle_id')
  58. } catch (err) {
  59. form.setError(err.field, err.message)
  60. }
  61. }
  62. return {
  63. listVehicle,
  64. vehicleClear,
  65. vehicleOnDelete,
  66. vehicleOnAdd,
  67. }
  68. }