Set minDate of field based on other field

272 Views Asked by At

I'm trying to set minDate of end_at field same as value of start_at field.

This is how this field are set in fields.yaml:

start_at:
    label: netspin.myevents::lang.modeldata.start_at
    mode: datetime
    span: left
    required: 1
    type: datepicker
    default: now
    format: d-m-Y
end_at:
    label: netspin.myevents::lang.modeldata.end_at
    mode: datetime
    span: left
    required: 1
    type: datepicker
    format: d-m-Y

I tried doing this way:

public function filterFields($fields, $context = null){
    if (!empty($fields->start_at->value)) {
        $start_date = $fields->start_at->value;
        $fields->end_at->minDate = Carbon::parse($start_date)->format('Y-m-d');
    }
}

I can't set end_at minDate dynamically when start_at is set/changed.

When i go to create page, start_at field as default date as now, so end_at field should have minDate has now. When start_at date is changed, end_at minDate should change to be the same as start_at date.

Eg:. If start_at has value of 14-09-2018, end_at should have minDate 14-09-2018. If i change start_at value to 12-09-2018, end_at should have minDate 12-09-2018.

Update

By using filterFields in model I'm able to update end_at value . How can I also update minDate to be the same as start_at value?

public function filterFields($fields, $context = null)
{
    if (empty($this->start_at)){
        return;
    }
    if($this->start_at > $this->end_at) {
        $start_date = $this->start_at;
        $fields->end_at->value = Carbon::parse($start_date)->format('Y-m-d');
        // $fields->end_at->min_date doesn't work
        $fields->end_at->min_date = Carbon::parse($start_date)->format('Y-m-d');
    }

}
1

There are 1 best solutions below

1
On

Set this to your controller

    public function formExtendFieldsBefore($form) 
    {
       //handle here your conditions
        $form->fields['end_at']['minDate'] = Carbon::parse($start_date)->format('Y-m-d');
    }