diff --git a/.github/workflows/fix-php-code-style-issues.yml b/.github/workflows/fix-php-code-style-issues.yml index 6c5929e..94265f9 100644 --- a/.github/workflows/fix-php-code-style-issues.yml +++ b/.github/workflows/fix-php-code-style-issues.yml @@ -1,7 +1,7 @@ name: "Fix PHP Code Styling" on: - push: + pull_request: paths: - '**.php' diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml index fb47267..80eaeb2 100644 --- a/.github/workflows/phpstan.yml +++ b/.github/workflows/phpstan.yml @@ -2,6 +2,11 @@ name: PHPStan on: push: + branches: [main] + paths: + - '**.php' + - 'phpstan.neon.dist' + pull_request: paths: - '**.php' - 'phpstan.neon.dist' diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index d80f4ac..530e951 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -54,5 +54,8 @@ jobs: - name: List Installed Dependencies run: composer show -D + - name: Check code style + run: vendor/bin/pint --test + - name: Execute tests run: vendor/bin/pest --ci --coverage --min=0 diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml index 0ae452d..dd191d8 100644 --- a/.github/workflows/update-changelog.yml +++ b/.github/workflows/update-changelog.yml @@ -6,6 +6,7 @@ on: permissions: contents: write + pull-requests: write jobs: update: @@ -23,9 +24,12 @@ jobs: latest-version: ${{ github.event.release.name }} release-notes: ${{ github.event.release.body }} - - name: Commit updated CHANGELOG - uses: stefanzweifel/git-auto-commit-action@v7 + - name: Create Pull Request + uses: peter-evans/create-pull-request@v7 with: - branch: main - commit_message: Update CHANGELOG - file_pattern: CHANGELOG.md + commit-message: Update CHANGELOG + title: Update CHANGELOG for ${{ github.event.release.name }} + body: | + Automated changelog update for release ${{ github.event.release.name }}. + branch: changelog/${{ github.event.release.tag_name }} + delete-branch: true diff --git a/config/flatpickr.php b/config/flatpickr.php index fb31c62..4510a1d 100644 --- a/config/flatpickr.php +++ b/config/flatpickr.php @@ -1,5 +1,7 @@ \Coolsam\Flatpickr\Enums\FlatpickrTheme::DEFAULT, // Recommended: Use DEFAULT theme for better compatibility with Filament Styling and dark mode + 'theme' => FlatpickrTheme::DEFAULT, // Recommended: Use DEFAULT theme for better compatibility with Filament Styling and dark mode ]; diff --git a/src/Forms/Components/Flatpickr.php b/src/Forms/Components/Flatpickr.php index f69e74c..bccb863 100644 --- a/src/Forms/Components/Flatpickr.php +++ b/src/Forms/Components/Flatpickr.php @@ -524,7 +524,7 @@ public function hydrateFlatpickr(Flatpickr $component, $state): void } } - public static function dehydrateFlatpickr(Flatpickr $component, $state): array|CarbonInterface|null + public static function dehydrateFlatpickr(Flatpickr $component, $state): array | CarbonInterface | null { if (blank($state)) { return null; @@ -532,11 +532,11 @@ public static function dehydrateFlatpickr(Flatpickr $component, $state): array|C $component->rule( 'date', - static fn(Flatpickr $component): bool => $component->isMultiplePicker() && !$component->isRangePicker() && $component->hasDate(), + static fn (Flatpickr $component): bool => $component->isMultiplePicker() && ! $component->isRangePicker() && $component->hasDate(), ); // try to convert the state to a Carbon instance - if (!($component->isMultiplePicker() || $component->isRangePicker())) { + if (! ($component->isMultiplePicker() || $component->isRangePicker())) { try { $res = $component->parseToCarbon($state); if ($res) { @@ -547,7 +547,7 @@ public static function dehydrateFlatpickr(Flatpickr $component, $state): array|C } } - if (!$state instanceof CarbonInterface) { + if (! $state instanceof CarbonInterface) { if (is_string($state)) { if ($component->isRangePicker()) { $range = self::splitRangeString($state, $component); @@ -560,23 +560,23 @@ public static function dehydrateFlatpickr(Flatpickr $component, $state): array|C return collect($range)->map(function ($date) use ($component) { $parsed = $component->parseToCarbon($date); - if (!$parsed) { + if (! $parsed) { return null; } $parsed = $parsed->setTimezone($component->getTimezone()); - if (!$component->isNative()) { + if (! $component->isNative()) { return $parsed->format($component->getFormat()); } - if (!$component->hasTime()) { + if (! $component->hasTime()) { return $parsed->toDateString(); } $precision = $component->hasSeconds() ? 'second' : 'minute'; - if (!$component->hasDate()) { + if (! $component->hasDate()) { return $parsed->toTimeString($precision); } @@ -625,6 +625,7 @@ protected static function extractDateMatches(string $state, Flatpickr $component return []; } + protected function setUp(): void { parent::setUp(); diff --git a/tests/FlatpickrDehydrationTest.php b/tests/FlatpickrDehydrationTest.php new file mode 100644 index 0000000..d0f3a6b --- /dev/null +++ b/tests/FlatpickrDehydrationTest.php @@ -0,0 +1,47 @@ +toBeNull() + ->and(Flatpickr::dehydrateFlatpickr($component, ''))->toBeNull(); +}); + +it('dehydrates a single date string to a carbon instance', function () { + $component = Flatpickr::make('date')->format('Y-m-d'); + + $result = Flatpickr::dehydrateFlatpickr($component, '2024-06-15'); + + expect($result)->toBeInstanceOf(CarbonInterface::class) + ->and($result->format('Y-m-d'))->toBe('2024-06-15'); +}); + +it('dehydrates a range with dates separated by whitespace', function () { + $component = Flatpickr::make('range')->rangePicker()->format('Y-m-d'); + + $result = Flatpickr::dehydrateFlatpickr($component, '2024-06-01 to 2024-06-15'); + + expect($result)->toBe(['2024-06-01', '2024-06-15']); +}); + +it('dehydrates a range by dynamically splitting concatenated dates', function () { + $component = Flatpickr::make('range')->rangePicker()->format('Y-m-d'); + + $result = Flatpickr::dehydrateFlatpickr($component, '2024-06-012024-06-15'); + + expect($result)->toBe(['2024-06-01', '2024-06-15']); +}); + +it('dehydrates multiple dates separated by the configured conjunction', function () { + $component = Flatpickr::make('dates') + ->multiplePicker() + ->format('Y-m-d') + ->conjunction(','); + + $result = Flatpickr::dehydrateFlatpickr($component, '2024-06-01,2024-06-15,2024-06-30'); + + expect($result)->toBe(['2024-06-01', '2024-06-15', '2024-06-30']); +});