From 84014256cb3840e9e65373b04d8cb45a9eb28401 Mon Sep 17 00:00:00 2001 From: Alexis Date: Sat, 16 Dec 2023 17:23:01 +0100 Subject: [PATCH 1/7] Do not return the fallback value. --- .../Concerns/HasTranslatableFormWithExistingRecordData.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/Concerns/HasTranslatableFormWithExistingRecordData.php b/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/Concerns/HasTranslatableFormWithExistingRecordData.php index ed48489936..be9628cfb6 100644 --- a/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/Concerns/HasTranslatableFormWithExistingRecordData.php +++ b/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/Concerns/HasTranslatableFormWithExistingRecordData.php @@ -20,7 +20,7 @@ trait HasTranslatableFormWithExistingRecordData $translatedData = []; foreach ($translatableAttributes as $attribute) { - $translatedData[$attribute] = $record->getTranslation($attribute, $locale); + $translatedData[$attribute] = $record->getTranslation($attribute, $locale, false); } if ($locale !== $this->activeLocale) { From a294023f8f6874dce1cf16f98183bfe7cd36cb85 Mon Sep 17 00:00:00 2001 From: Alexis Date: Sat, 16 Dec 2023 17:23:41 +0100 Subject: [PATCH 2/7] Do not validate the form while change locale. Only validate on actual update. But clear the validation state. --- .../src/Resources/Pages/EditRecord/Concerns/Translatable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/EditRecord/Concerns/Translatable.php b/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/EditRecord/Concerns/Translatable.php index 00cf24d0e5..4d6a5c93ba 100644 --- a/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/EditRecord/Concerns/Translatable.php +++ b/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/EditRecord/Concerns/Translatable.php @@ -72,7 +72,7 @@ trait Translatable } try { - $this->form->validate(); + $this->form->getLivewire()->resetValidation(); } catch (ValidationException $exception) { $this->activeLocale = $this->oldActiveLocale; From 60ca48664e7198e55c46d806cdd99c777bc163ec Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Sun, 17 Dec 2023 10:07:52 +0000 Subject: [PATCH 3/7] wip --- .../Concerns/HasTranslatableFormWithExistingRecordData.php | 2 +- .../src/SpatieLaravelTranslatableContentDriver.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/Concerns/HasTranslatableFormWithExistingRecordData.php b/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/Concerns/HasTranslatableFormWithExistingRecordData.php index be9628cfb6..2e8304ca72 100644 --- a/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/Concerns/HasTranslatableFormWithExistingRecordData.php +++ b/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/Concerns/HasTranslatableFormWithExistingRecordData.php @@ -20,7 +20,7 @@ trait HasTranslatableFormWithExistingRecordData $translatedData = []; foreach ($translatableAttributes as $attribute) { - $translatedData[$attribute] = $record->getTranslation($attribute, $locale, false); + $translatedData[$attribute] = $record->getTranslation($attribute, $locale, useFallbackLocale: false); } if ($locale !== $this->activeLocale) { diff --git a/packages/spatie-laravel-translatable-plugin/src/SpatieLaravelTranslatableContentDriver.php b/packages/spatie-laravel-translatable-plugin/src/SpatieLaravelTranslatableContentDriver.php index 4cab6eb49a..b2d5c3e084 100644 --- a/packages/spatie-laravel-translatable-plugin/src/SpatieLaravelTranslatableContentDriver.php +++ b/packages/spatie-laravel-translatable-plugin/src/SpatieLaravelTranslatableContentDriver.php @@ -104,7 +104,7 @@ class SpatieLaravelTranslatableContentDriver implements TranslatableContentDrive } foreach ($record->getTranslatableAttributes() as $attribute) { - $attributes[$attribute] = $record->getTranslation($attribute, $this->activeLocale); + $attributes[$attribute] = $record->getTranslation($attribute, $this->activeLocale, useFallbackLocale: false); } return $attributes; From 3b75dfbd400a7e5b1a5d1d06565e6c032cd21f19 Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Sun, 17 Dec 2023 10:21:55 +0000 Subject: [PATCH 4/7] Update Translatable.php --- .../EditRecord/Concerns/Translatable.php | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/EditRecord/Concerns/Translatable.php b/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/EditRecord/Concerns/Translatable.php index 4d6a5c93ba..90efbf221f 100644 --- a/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/EditRecord/Concerns/Translatable.php +++ b/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/EditRecord/Concerns/Translatable.php @@ -34,7 +34,15 @@ trait Translatable $originalData = $this->data; + $existingLocales = null; + foreach ($this->otherLocaleData as $locale => $localeData) { + $existingLocales ??= collect($translatableAttributes) + ->map(fn (string $attribute): array => array_keys($record->getTranslations($attribute))) + ->flatten() + ->unique() + ->all(); + $this->data = [ ...$this->data, ...$localeData, @@ -43,7 +51,13 @@ trait Translatable try { $this->form->validate(); } catch (ValidationException $exception) { - continue; + if (! array_key_exists($locale, $existingLocales)) { + continue; + } + + $this->setActiveLocale($locale); + + throw $exception; } $localeData = $this->mutateFormDataBeforeSave($localeData); @@ -65,20 +79,12 @@ trait Translatable $this->oldActiveLocale = $this->activeLocale; } - public function updatedActiveLocale(string $newActiveLocale): void + public function updatedActiveLocale(): void { if (blank($this->oldActiveLocale)) { return; } - try { - $this->form->getLivewire()->resetValidation(); - } catch (ValidationException $exception) { - $this->activeLocale = $this->oldActiveLocale; - - throw $exception; - } - $translatableAttributes = static::getResource()::getTranslatableAttributes(); $this->otherLocaleData[$this->oldActiveLocale] = Arr::only($this->data, $translatableAttributes); @@ -90,4 +96,11 @@ trait Translatable unset($this->otherLocaleData[$this->activeLocale]); } + + public function setActiveLocale(string $locale): void + { + $this->updatingActiveLocale(); + $this->activeLocale = $locale; + $this->updatedActiveLocale(); + } } From 289ff3f493adbbd3464de1457944d4aa13e487cc Mon Sep 17 00:00:00 2001 From: Alexis Date: Sun, 17 Dec 2023 12:52:22 +0100 Subject: [PATCH 5/7] Resets the validation state after a language change to avoid visual confusion. --- .../src/Resources/Pages/EditRecord/Concerns/Translatable.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/EditRecord/Concerns/Translatable.php b/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/EditRecord/Concerns/Translatable.php index 90efbf221f..706001b9b5 100644 --- a/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/EditRecord/Concerns/Translatable.php +++ b/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/EditRecord/Concerns/Translatable.php @@ -85,6 +85,9 @@ trait Translatable return; } + $this->form->getLivewire()->resetValidation(); + + $translatableAttributes = static::getResource()::getTranslatableAttributes(); $this->otherLocaleData[$this->oldActiveLocale] = Arr::only($this->data, $translatableAttributes); From 3825f8c6b2d9640f67c93f5d0557d9519584ed73 Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Sun, 17 Dec 2023 21:49:10 +0000 Subject: [PATCH 6/7] Update Translatable.php --- .../src/Resources/Pages/EditRecord/Concerns/Translatable.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/EditRecord/Concerns/Translatable.php b/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/EditRecord/Concerns/Translatable.php index 706001b9b5..a18e7dda8a 100644 --- a/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/EditRecord/Concerns/Translatable.php +++ b/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/EditRecord/Concerns/Translatable.php @@ -85,8 +85,7 @@ trait Translatable return; } - $this->form->getLivewire()->resetValidation(); - + $this->resetValidation(); $translatableAttributes = static::getResource()::getTranslatableAttributes(); From 029a5ac4a0296a848b02b3cf01f2283105700bd8 Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Sun, 17 Dec 2023 21:49:57 +0000 Subject: [PATCH 7/7] Update Translatable.php --- .../src/Resources/Pages/CreateRecord/Concerns/Translatable.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/CreateRecord/Concerns/Translatable.php b/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/CreateRecord/Concerns/Translatable.php index 6fa0863fae..2117638f9b 100644 --- a/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/CreateRecord/Concerns/Translatable.php +++ b/packages/spatie-laravel-translatable-plugin/src/Resources/Pages/CreateRecord/Concerns/Translatable.php @@ -78,6 +78,8 @@ trait Translatable return; } + $this->resetValidation(); + $translatableAttributes = static::getResource()::getTranslatableAttributes(); $this->otherLocaleData[$this->oldActiveLocale] = Arr::only($this->data, $translatableAttributes);