From fdd0bf94fe533e97423ca5b7e142dd4e9904d177 Mon Sep 17 00:00:00 2001 From: edalzell Date: Tue, 14 Apr 2026 12:31:53 -0700 Subject: [PATCH 1/4] Back to the original way --- src/ServiceProvider.php | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php index 797ed37..c7b09c9 100644 --- a/src/ServiceProvider.php +++ b/src/ServiceProvider.php @@ -2,8 +2,12 @@ namespace TransformStudios\Events; +use Statamic\Entries\Entry; use Statamic\Facades\Collection; -use Statamic\Facades\Field; +use Statamic\Facades\Field as FieldFacade; +use Statamic\Fields\Field; +use Statamic\Fields\Value; +use Statamic\Fieldtypes\Dictionary; use Statamic\Providers\AddonServiceProvider; use Statamic\Statamic; @@ -11,19 +15,29 @@ class ServiceProvider extends AddonServiceProvider { public function bootAddon() { - Field::computedDefault('default-events-timezone', fn () => Statamic::displayTimezone()); - Field::computedDefault('default-event-timezone', fn () => Events::defaultTimezone()); + FieldFacade::computedDefault('default-events-timezone', fn () => Statamic::displayTimezone()); + FieldFacade::computedDefault('default-event-timezone', fn () => Events::defaultTimezone()); collect(Events::setting('collections', ['events'])) - ->each(function (string $collection) { - Collection::findByHandle($collection)?->entryBlueprint()->ensureField( - 'timezone', - [ - 'dictionary' => 'timezones', - 'max_items' => '1', - 'type' => 'dictionary', - 'default' => 'computed:default-event-timezone', - ]); - }); + ->each(fn (string $collection) => Collection::computed( + $collection, + 'timezone', + $this->timezone(...) + )); + } + + private function timezone(Entry $entry, $value): string|Value + { + $value ??= Events::defaultTimezone(); + + if ($entry->blueprint()->fields()->get('timezone')?->fieldtype() instanceof Dictionary) { + return $value; + } + + return (new Field('timezone', ['type' => 'timezones', 'max_items' => 1])) + ->setValue($value) + ->setParent($entry) + ->augment() + ->value(); } } From d79821e3d11b15c650232ceda70a394896619137 Mon Sep 17 00:00:00 2001 From: edalzell Date: Tue, 14 Apr 2026 12:42:41 -0700 Subject: [PATCH 2/4] dictionary --- src/ServiceProvider.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php index c7b09c9..c9352af 100644 --- a/src/ServiceProvider.php +++ b/src/ServiceProvider.php @@ -34,7 +34,7 @@ private function timezone(Entry $entry, $value): string|Value return $value; } - return (new Field('timezone', ['type' => 'timezones', 'max_items' => 1])) + return (new Field('timezone', ['dictionary' => 'timezones', 'max_items' => '1', 'type' => 'dictionary'])) ->setValue($value) ->setParent($entry) ->augment() From 988232dbe8aa3fb77c309b7320b9666d30707123 Mon Sep 17 00:00:00 2001 From: edalzell Date: Tue, 14 Apr 2026 12:50:10 -0700 Subject: [PATCH 3/4] =?UTF-8?q?addon=E2=80=99s=20booting=20callback?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ServiceProvider.php | 39 ++++++++++++++------------------------- 1 file changed, 14 insertions(+), 25 deletions(-) diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php index c9352af..7b99df2 100644 --- a/src/ServiceProvider.php +++ b/src/ServiceProvider.php @@ -2,12 +2,8 @@ namespace TransformStudios\Events; -use Statamic\Entries\Entry; use Statamic\Facades\Collection; use Statamic\Facades\Field as FieldFacade; -use Statamic\Fields\Field; -use Statamic\Fields\Value; -use Statamic\Fieldtypes\Dictionary; use Statamic\Providers\AddonServiceProvider; use Statamic\Statamic; @@ -18,26 +14,19 @@ public function bootAddon() FieldFacade::computedDefault('default-events-timezone', fn () => Statamic::displayTimezone()); FieldFacade::computedDefault('default-event-timezone', fn () => Events::defaultTimezone()); - collect(Events::setting('collections', ['events'])) - ->each(fn (string $collection) => Collection::computed( - $collection, - 'timezone', - $this->timezone(...) - )); - } - - private function timezone(Entry $entry, $value): string|Value - { - $value ??= Events::defaultTimezone(); - - if ($entry->blueprint()->fields()->get('timezone')?->fieldtype() instanceof Dictionary) { - return $value; - } - - return (new Field('timezone', ['dictionary' => 'timezones', 'max_items' => '1', 'type' => 'dictionary'])) - ->setValue($value) - ->setParent($entry) - ->augment() - ->value(); + // has to be in booted so that the `events::event` fieldset is properly registered and loaded + $this->booted(function () { + collect(Events::setting('collections', ['events'])) + ->each(function (string $collection) { + Collection::findByHandle($collection)?->entryBlueprint()->ensureField( + 'timezone', + [ + 'dictionary' => 'timezones', + 'max_items' => '1', + 'type' => 'dictionary', + 'default' => 'computed:default-event-timezone', + ]); + }); + }); } } From af675e3a7c18b97409e4ebf1d2d26f398fd57afb Mon Sep 17 00:00:00 2001 From: edalzell Date: Tue, 14 Apr 2026 12:50:49 -0700 Subject: [PATCH 4/4] tidy --- src/ServiceProvider.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php index 7b99df2..a6e71a5 100644 --- a/src/ServiceProvider.php +++ b/src/ServiceProvider.php @@ -3,7 +3,7 @@ namespace TransformStudios\Events; use Statamic\Facades\Collection; -use Statamic\Facades\Field as FieldFacade; +use Statamic\Facades\Field; use Statamic\Providers\AddonServiceProvider; use Statamic\Statamic; @@ -11,8 +11,8 @@ class ServiceProvider extends AddonServiceProvider { public function bootAddon() { - FieldFacade::computedDefault('default-events-timezone', fn () => Statamic::displayTimezone()); - FieldFacade::computedDefault('default-event-timezone', fn () => Events::defaultTimezone()); + Field::computedDefault('default-events-timezone', fn () => Statamic::displayTimezone()); + Field::computedDefault('default-event-timezone', fn () => Events::defaultTimezone()); // has to be in booted so that the `events::event` fieldset is properly registered and loaded $this->booted(function () {