diff --git a/src/Fields/Date.php b/src/Fields/Date.php index 5cbe463ab..c62f9ddca 100644 --- a/src/Fields/Date.php +++ b/src/Fields/Date.php @@ -18,11 +18,17 @@ class Date extends Field public function formViewValue(Model $item): string { + if(!$this->getDefault() && $this->isNullable()) { + return ''; + } + return date('Y-m-d', strtotime($item->{$this->name()} ?? $this->getDefault())); } public function indexViewValue(Model $item, bool $container = false): string { - return date($this->format, strtotime($item->{$this->name()})); + return $item->{$this->name()} + ? date($this->format, strtotime($item->{$this->name()})) + : ''; } } \ No newline at end of file diff --git a/src/Fields/Field.php b/src/Fields/Field.php index fa6917d57..ff1fd8fef 100644 --- a/src/Fields/Field.php +++ b/src/Fields/Field.php @@ -185,7 +185,7 @@ public function save(Model $item): Model { $item->{$this->field()} = $this->requestValue() !== false ? $this->requestValue() - : ''; + : ($this->isNullable() ? null : ''); return $item; } diff --git a/tests/Fields/DateTest.php b/tests/Fields/DateTest.php new file mode 100644 index 000000000..15eb19931 --- /dev/null +++ b/tests/Fields/DateTest.php @@ -0,0 +1,74 @@ +make([ + 'created_at' => '2022-01-01 00:00:00' + ]); + + $field = Date::make('Created at') + ->format('d.m.Y'); + + $this->assertEquals('2022-01-01', $field->formViewValue($user)); + $this->assertEquals('01.01.2022', $field->indexViewValue($user)); + } + + public function test_nullable() + { + $user = new MoonshineUser(); + + $field = Date::make('Created at') + ->nullable(); + + $this->assertEquals('', $field->formViewValue($user)); + $this->assertEquals('', $field->indexViewValue($user)); + } + + public function test_default() + { + $user = new MoonshineUser(); + + $field = Date::make('Created at') + ->default('2022-01-02'); + + $this->assertEquals('2022-01-02', $field->formViewValue($user)); + + $field = Date::make('Created at') + ->nullable() + ->default('2022-01-02'); + + $this->assertEquals('2022-01-02', $field->formViewValue($user)); + } + + public function test_save() + { + $user = new MoonshineUser(); + + $field = Date::make('Created at') + ->default('2022-01-02'); + + $item = $field->save($user); + + $this->assertEquals('2022-01-02', $item->created_at->format('Y-m-d')); + + $field = Date::make('Created at') + ->nullable(); + + $item = $field->save($user); + + $this->assertNull($item->created_at); + + } +} \ No newline at end of file