HasSteps.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. namespace Dcat\Admin\Form\Concerns;
  3. use Closure;
  4. use Dcat\Admin\Form\StepBuilder;
  5. trait HasSteps
  6. {
  7. /**
  8. * @param Closure|null $builder
  9. * @return StepBuilder
  10. */
  11. public function step(\Closure $builder = null)
  12. {
  13. return $this->builder->step($builder);
  14. }
  15. /**
  16. * @param array $data
  17. * @return void
  18. */
  19. protected function prepareStepFormFields(array $data)
  20. {
  21. $stepBuilder = $this->builder->getStepBuilder();
  22. if (
  23. empty($stepBuilder)
  24. || empty($stepBuilder->count())
  25. || (! isset($data[StepBuilder::ALL_STEPS]) && ! $this->isStepFormValidationRequest())
  26. ) {
  27. return;
  28. }
  29. $stepBuilder->stash($data);
  30. $steps = $stepBuilder->all();
  31. if ($this->isStepFormValidationRequest()) {
  32. $currentIndex = $data[StepBuilder::CURRENT_VALIDATION_STEP];
  33. if (empty($steps[$currentIndex])) {
  34. return;
  35. }
  36. foreach ($steps[$currentIndex]->field() as $field) {
  37. $this->pushField($field);
  38. }
  39. return;
  40. }
  41. if (! empty($data[StepBuilder::ALL_STEPS])) {
  42. foreach ($steps as $stepForm) {
  43. foreach ($stepForm->field() as $field) {
  44. $this->pushField($field);
  45. }
  46. }
  47. }
  48. }
  49. /**
  50. * @return bool
  51. */
  52. protected function isStepFormValidationRequest()
  53. {
  54. $index = $this->request->get(StepBuilder::CURRENT_VALIDATION_STEP);
  55. return $index !== '' && $index !== null;
  56. }
  57. /**
  58. * Validate step form.
  59. *
  60. * @param array $data
  61. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
  62. */
  63. protected function validateStepForm(array $data)
  64. {
  65. // Handle validation errors.
  66. if ($validationMessages = $this->validationMessages($data)) {
  67. return $this->makeValidationErrorsResponse($validationMessages);
  68. }
  69. return $this->ajaxResponse('Success');
  70. }
  71. /**
  72. * @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response|void
  73. */
  74. protected function responseDoneStep()
  75. {
  76. if (! $builder = $this->builder->getStepBuilder()) {
  77. return;
  78. }
  79. return response(
  80. $builder->getDoneStep()
  81. ->finish()
  82. ->render()
  83. );
  84. }
  85. }