diff --git a/README.md b/README.md index e819302..0fb815c 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# Making Laravel Nova Tab Translatable +# Making Laravel Nova Tab Translatable Nova 5 ready [![Latest Version on Packagist](https://img.shields.io/packagist/v/kongulov/nova-tab-translatable?style=flat-square)](https://packagist.org/packages/kongulov/nova-tab-translatable) ![Licence](https://img.shields.io/github/license/kongulov/nova-tab-translatable?style=flat-square) [![Total Downloads](https://poser.pugx.org/kongulov/nova-tab-translatable/downloads?format=flat-square)](https://packagist.org/packages/kongulov/nova-tab-translatable) -This package contains a `NovaTabTranslatable` class you can use to make any Nova field type translatable with tabs. +This package contains a `NovaTabTranslatable` class you can use to make any Nova field type translatable with tabs. Use the master branch for Nova 5 and the 1.x branch for Nova 4. Imagine you have this `fields` method in a Post Nova resource: diff --git a/composer.json b/composer.json index b412c3b..1255edc 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,7 @@ "require": { "php": "^8.0", "spatie/laravel-translatable": "^5.0|^6.0", - "laravel/nova": "^4.0" + "laravel/nova": "^5.0" }, "autoload": { "psr-4": { diff --git a/nova.mix.js b/nova.mix.js index c43ca88..3cfa6e3 100644 --- a/nova.mix.js +++ b/nova.mix.js @@ -14,7 +14,6 @@ class NovaExtension { webpackPlugins() { return new webpack.ProvidePlugin({ _: 'lodash', - Errors: 'form-backend-validation', }) } diff --git a/src/NovaTabTranslatable.php b/src/NovaTabTranslatable.php index 14e1ddc..515c16d 100644 --- a/src/NovaTabTranslatable.php +++ b/src/NovaTabTranslatable.php @@ -14,10 +14,13 @@ use Laravel\Nova\Fields\Image; use Laravel\Nova\Fields\Slug; use Laravel\Nova\Http\Requests\NovaRequest; +use Laravel\Nova\Fields\SupportsDependentFields; use Throwable; class NovaTabTranslatable extends Field { + use SupportsDependentFields; + /** * The field's component. * @@ -40,19 +43,20 @@ class NovaTabTranslatable extends Field public $panel; - public function __construct(array $fields = []) + public function __construct(array $fields = [], array $locales = []) { parent::__construct($this->name); $config = config('tab-translatable'); - if ($config['source'] == 'database') + if ($config['source'] == 'database') { $this->locales = $config['database']['model']::query() ->when(isset($config['database']['sort_by']), function ($query) use ($config) { $query->orderBy($config['database']['sort_by'], $config['database']['sort_direction']); }) ->pluck($config['database']['code_field']) ->toArray(); - else - $this->locales = $config['locales']; + } else { + $this->locales = count($locales) > 0 ? $locales : $config['locales']; + } $this->displayLocalizedNameUsingCallback = self::$displayLocalizedNameByDefaultUsingCallback ?? function (Field $field, string $locale) { return ucfirst($field->name) . " [{$locale}]"; @@ -85,7 +89,7 @@ public function saveLastSelectedLang(bool $state = true): self ]); } - protected function createTranslatableFields() + protected function createTranslatableFields(): void { collect($this->locales) ->crossJoin($this->originalFields) @@ -243,21 +247,21 @@ protected function compatibilityWithOtherPlugins($translatedField) return $translatedField; } - public function resolve($resource, $attribute = null) + public function resolve($resource, $attribute = null): void { foreach ($this->data as $field) { $field->resolve($resource, $attribute); } } - public function fillInto($request, $model, $attribute, $requestAttribute = null) + public function fillInto($request, $model, $attribute, $requestAttribute = null): void { foreach ($this->data as $field) { $field->fill($request, $model); } } - public function getCreationRules(NovaRequest $request) + public function getCreationRules(NovaRequest $request): array { $fieldsRules = $this->getSituationalRulesSet($request, 'creationRules'); @@ -267,7 +271,7 @@ public function getCreationRules(NovaRequest $request) ); } - protected function getSituationalRulesSet(NovaRequest $request, string $propertyName = 'rules') + protected function getSituationalRulesSet(NovaRequest $request, string $propertyName = 'rules'): array { $fieldsRules = [$this->attribute => []]; @@ -280,7 +284,7 @@ protected function getSituationalRulesSet(NovaRequest $request, string $property return $fieldsRules; } - public function getUpdateRules(NovaRequest $request) + public function getUpdateRules(NovaRequest $request): array { $fieldsRules = $this->getSituationalRulesSet($request, 'updateRules'); @@ -290,7 +294,7 @@ public function getUpdateRules(NovaRequest $request) ); } - public function getRules(NovaRequest $request) + public function getRules(NovaRequest $request): array { return $this->getSituationalRulesSet($request); }