rdv: connect fullcalendar vue component to startDate and endDate fields

This commit is contained in:
nobohan 2021-07-23 15:54:30 +02:00
parent cc3e7f54a7
commit 5181098339
7 changed files with 50 additions and 21 deletions

View File

@ -238,11 +238,11 @@ class CalendarController extends AbstractController
$em->persist($entity); $em->persist($entity);
$em->flush(); $em->flush();
$this->addFlash('success', $this->get('translator')->trans('Success : activity updated!')); $this->addFlash('success', $this->get('translator')->trans('Success : calendar item updated!'));
$params = $this->buildParamsToUrl($user, $accompanyingPeriod); $params = $this->buildParamsToUrl($user, $accompanyingPeriod);
$params['id'] = $id; $params['id'] = $id;
return $this->redirectToRoute('chill_activity_activity_show', $params); return $this->redirectToRoute('chill_calendar_calendar_show', $params);
} elseif ($form->isSubmitted() and !$form->isValid()) { } elseif ($form->isSubmitted() and !$form->isValid()) {
$this->addFlash('error', $this->get('translator')->trans('This form contains errors')); $this->addFlash('error', $this->get('translator')->trans('This form contains errors'));
} }

View File

@ -125,7 +125,7 @@ class Calendar
/** /**
* @ORM\Column(type="boolean", nullable=true) * @ORM\Column(type="boolean", nullable=true)
*/ */
private boolean $sendSMS; private ?bool $sendSMS;
public function __construct() public function __construct()
{ {

View File

@ -21,7 +21,7 @@ use Chill\MainBundle\Entity\User;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
use Chill\PersonBundle\Entity\Person; use Chill\PersonBundle\Entity\Person;
use Chill\ThirdPartyBundle\Entity\ThirdParty; use Chill\ThirdPartyBundle\Entity\ThirdParty;
use DateTimeImmutable;
class CalendarType extends AbstractType class CalendarType extends AbstractType
{ {
@ -55,16 +55,6 @@ class CalendarType extends AbstractType
->add('comment', CommentType::class, [ ->add('comment', CommentType::class, [
'required' => false 'required' => false
]) ])
->add('startDate', DateType::class, [
'required' => true,
'input' => 'datetime_immutable',
'widget' => 'single_text'
])
->add('endDate', DateType::class, [
'required' => true,
'input' => 'datetime_immutable',
'widget' => 'single_text'
])
->add('cancelReason', EntityType::class, [ ->add('cancelReason', EntityType::class, [
'required' => false, 'required' => false,
'class' => CancelReason::class, 'class' => CancelReason::class,
@ -82,6 +72,41 @@ class CalendarType extends AbstractType
]) ])
; ;
$builder->add('startDate', HiddenType::class);
$builder->get('startDate')
->addModelTransformer(new CallbackTransformer(
function (?DateTimeImmutable $dateTimeImmutable): string {
if (NULL !== $dateTimeImmutable) {
$res = date_format($dateTimeImmutable, 'Y-m-d H:i:s');
} else {
$res = '';
}
return $res;
},
function (?string $dateAsString): DateTimeImmutable {
dump($dateAsString);
return new DateTimeImmutable($dateAsString);
}
))
;
$builder->add('endDate', HiddenType::class);
$builder->get('endDate')
->addModelTransformer(new CallbackTransformer(
function (?DateTimeImmutable $dateTimeImmutable): string {
if (NULL !== $dateTimeImmutable) {
$res = date_format($dateTimeImmutable, 'Y-m-d H:i:s');
} else {
$res = '';
}
return $res;
},
function (?string $dateAsString): DateTimeImmutable {
return new DateTimeImmutable($dateAsString);
}
))
;
$builder->add('persons', HiddenType::class); $builder->add('persons', HiddenType::class);
$builder->get('persons') $builder->get('persons')
->addModelTransformer(new CallbackTransformer( ->addModelTransformer(new CallbackTransformer(

View File

@ -63,7 +63,7 @@ const store = createStore({
}; };
}, },
// Calendar // Calendar
onDateSelect(state, payload) { setEvents(state, payload) {
console.log(payload) console.log(payload)
state.events.push( {start: payload.start, end: payload.end}) state.events.push( {start: payload.start, end: payload.end})
} }
@ -107,9 +107,13 @@ const store = createStore({
}, },
// Calendar // Calendar
onDateSelect({ commit }, payload) { setDateRange({ commit }, payload) {
console.log('### action onDateSelect', payload); console.log('### action setDateRange', payload);
commit('onDateSelect', payload); let startDateInput = document.getElementById("chill_calendarbundle_calendar_startDate");
startDateInput.value = payload.startStr;
let endDateInput = document.getElementById("chill_calendarbundle_calendar_endDate");
endDateInput.value = payload.endStr;
commit('setEvents', payload);
} }
} }
}); });

View File

@ -30,7 +30,7 @@ export default {
}, },
methods: { methods: {
onDateSelect(payload) { onDateSelect(payload) {
this.$store.dispatch('onDateSelect', payload); this.$store.dispatch('setDateRange', payload);
} }
} }
} }

View File

@ -1,6 +1,6 @@
const calendarMessages = { const calendarMessages = {
fr: { fr: {
choose_your_date: 'Sélectionner vos dates', choose_your_date: 'Sélectionnez vos dates',
} }
}; };

View File

@ -68,7 +68,7 @@
</li> </li>
<li> <li>
<button class="btn btn-create" type="submit"> <button class="btn btn-create" type="submit">
{{ 'Create'|trans }} {{ 'Update'|trans }}
</button> </button>
</li> </li>
</ul> </ul>