Skip to content
Draft
38 changes: 19 additions & 19 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

86 changes: 0 additions & 86 deletions src/Concerns/HasOptions.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,14 @@

namespace LaraZeus\Bolt\Concerns;

use Filament\Actions\Action;
use Filament\Forms\Components\ColorPicker;
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Schemas\Components\Grid;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Components\Utilities\Set;
use Guava\IconPicker\Forms\Components\IconPicker;
use LaraZeus\Accordion\Forms\Accordion;
use LaraZeus\Bolt\BoltPlugin;
use LaraZeus\Bolt\Concerns\Options\DataSource;
use LaraZeus\Bolt\Concerns\Options\Visibility;
use LaraZeus\Bolt\Facades\Bolt;

trait HasOptions
{
Expand Down Expand Up @@ -80,85 +73,6 @@ public static function hiddenLabel(): Grid
->columns(1);
}

public static function dataSource(): Grid
{
$dataSources = BoltPlugin::getModel('Collection')::get()
->mapWithKeys(function ($item, $key) {
return [
$key => [
'title' => $item['name'],
'class' => $item['id'],
],
];
})
->toBase()
->merge(
Bolt::availableDataSource()
->mapWithKeys(function ($item, $key) {
return [
$key => [
'title' => $item['title'],
'class' => $item['class'],
],
];
})
)
->pluck('title', 'class');

return Grid::make()
->schema([
Select::make('options.dataSource')
->createOptionAction(fn (Action $action) => $action->hidden(auth()->user()->cannot('create', BoltPlugin::getModel('Collection'))))
->required()
->createOptionForm([
TextInput::make('name')
->live(onBlur: true)
->label(__('zeus-bolt::forms.options.collections.label'))
->required()
->maxLength(255)
->columnSpan(2),
Repeater::make('values')
->grid([
'default' => 1,
'md' => 2,
'lg' => 3,
])
->label(__('zeus-bolt::forms.options.collections.values'))
->columnSpan(2)
->columns(1)
->schema([
TextInput::make('itemValue')
->live(onBlur: true)
->afterStateUpdated(function (Set $set, Get $get, string $operation) {
$set('itemKey', $get('itemValue'));
})
->required()
->label(__('zeus-bolt::forms.options.collections.values'))
->hint(__('zeus-bolt::forms.options.collections.value_hint')),
TextInput::make('itemKey')
->live(onBlur: true)
->required()
->label(__('zeus-bolt::forms.options.collections.key'))
->hint(__('what store in the form')),
Toggle::make('itemIsDefault')
->label(__('zeus-bolt::forms.options.collections.is_default')),
]),
])
->createOptionUsing(function (array $data) {
$collectionModel = BoltPlugin::getModel('Collection');
$collection = new $collectionModel;
$collection->fill($data);
$collection->save();

return $collection->id;
})
->options($dataSources)
->label(__('zeus-bolt::forms.options.data_source.label')),
])
->columnSpanFull()
->columns(1);
}

public static function htmlID(): Grid
{
return Grid::make()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,19 @@

use Filament\Resources\Pages\CreateRecord;
use LaraZeus\Bolt\Filament\Resources\CollectionResource;
use LaraZeus\SpatieTranslatable\Actions\LocaleSwitcher;
use LaraZeus\SpatieTranslatable\Resources\Pages\CreateRecord\Concerns\Translatable;

class CreateCollection extends CreateRecord
{
use Translatable;

protected static string $resource = CollectionResource::class;

protected function getHeaderActions(): array
{
return [
LocaleSwitcher::make(),
];
}
}
11 changes: 11 additions & 0 deletions src/Filament/Resources/CollectionResource/Pages/EditCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,13 @@
use Filament\Resources\Pages\EditRecord;
use LaraZeus\Bolt\Filament\Resources\CollectionResource;
use LaraZeus\Bolt\Filament\Resources\CollectionResource\Widgets\EditCollectionWarning;
use LaraZeus\SpatieTranslatable\Actions\LocaleSwitcher;
use LaraZeus\SpatieTranslatable\Resources\Pages\EditRecord\Concerns\Translatable;

class EditCollection extends EditRecord
{
use Translatable;

protected static string $resource = CollectionResource::class;

protected function getHeaderWidgets(): array
Expand All @@ -16,4 +20,11 @@ protected function getHeaderWidgets(): array
EditCollectionWarning::class,
];
}

protected function getHeaderActions(): array
{
return [
LocaleSwitcher::make(),
];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,19 @@
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
use LaraZeus\Bolt\Filament\Resources\CollectionResource;
use LaraZeus\SpatieTranslatable\Actions\LocaleSwitcher;
use LaraZeus\SpatieTranslatable\Resources\Pages\ListRecords\Concerns\Translatable;

class ListCollections extends ListRecords
{
use Translatable;

protected static string $resource = CollectionResource::class;

protected function getHeaderActions(): array
{
return [
LocaleSwitcher::make(),
CreateAction::make(),
];
}
Expand Down
53 changes: 52 additions & 1 deletion src/Models/Collection.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
use JsonException;
use LaraZeus\Bolt\Concerns\HasUpdates;
use LaraZeus\Bolt\Database\Factories\CollectionFactory;
use Spatie\Translatable\HasTranslations;

/**
* @property string $updated_at
Expand All @@ -17,13 +19,16 @@
class Collection extends Model
{
use HasFactory;
use HasTranslations;
use HasUpdates;
use SoftDeletes;

protected $guarded = [];

public $translatable = ['name', 'values'];

Check failure on line 28 in src/Models/Collection.php

View workflow job for this annotation

GitHub Actions / phpstan

Property LaraZeus\Bolt\Models\Collection::$translatable has no type specified.

protected $casts = [
'values' => 'collection',
'values' => 'array',
];

public function getTable(): string
Expand All @@ -47,7 +52,53 @@
return null;
}

public function getNameAttribute($value)

Check failure on line 55 in src/Models/Collection.php

View workflow job for this annotation

GitHub Actions / phpstan

Method LaraZeus\Bolt\Models\Collection::getNameAttribute() has parameter $value with no type specified.

Check failure on line 55 in src/Models/Collection.php

View workflow job for this annotation

GitHub Actions / phpstan

Method LaraZeus\Bolt\Models\Collection::getNameAttribute() has no return type specified.
{
if ($this->hasTranslation('name')) {
return $value;
}

return $this->getRawOriginal('name');
}

/**
* @throws JsonException
*/
public function getValuesAttribute($value)

Check failure on line 67 in src/Models/Collection.php

View workflow job for this annotation

GitHub Actions / phpstan

Method LaraZeus\Bolt\Models\Collection::getValuesAttribute() has parameter $value with no type specified.

Check failure on line 67 in src/Models/Collection.php

View workflow job for this annotation

GitHub Actions / phpstan

Method LaraZeus\Bolt\Models\Collection::getValuesAttribute() has no return type specified.
{
if ($this->hasTranslation('values')) {
return $value;
}

if (filled($this->getRawOriginal('values'))) {
return json_decode($this->getRawOriginal('values'), true, 512, JSON_THROW_ON_ERROR);
}

return $this->getRawOriginal('values');
}

/**
* @param $value
* @return \Illuminate\Support\Collection
*/
/*public function getValuesAttribute($value)
{
if($value instanceof \Illuminate\Support\Collection){
return $value;
}
if(empty($value)){
return collect();
}
if(is_array($value)){
return collect($value);
}
if(is_string($value)){
return collect(json_encode($value));
}
return collect($value);
}*/

protected static function newFactory(): Factory

Check failure on line 101 in src/Models/Collection.php

View workflow job for this annotation

GitHub Actions / phpstan

PHPDoc tag `@return` with type Illuminate\Support\Collection is incompatible with native type Illuminate\Database\Eloquent\Factories\Factory.
{
return CollectionFactory::new();
}
Expand Down
Loading