diff --git a/packages/builder/config/builder.php b/packages/builder/config/builder.php index 711354eea..c8cc6a328 100644 --- a/packages/builder/config/builder.php +++ b/packages/builder/config/builder.php @@ -14,39 +14,43 @@ 'blocks' => [ 'fields' => [ - 'boolean' => \Moox\Builder\Blocks\Filament\Boolean::class, - 'builder' => \Moox\Builder\Blocks\Filament\Builder::class, - 'checkbox-list' => \Moox\Builder\Blocks\Filament\CheckboxList::class, - 'color-picker' => \Moox\Builder\Blocks\Filament\ColorPicker::class, - 'date' => \Moox\Builder\Blocks\Filament\Date::class, - 'date-time' => \Moox\Builder\Blocks\Filament\DateTime::class, - 'file-upload' => \Moox\Builder\Blocks\Filament\FileUpload::class, - 'hidden' => \Moox\Builder\Blocks\Filament\Hidden::class, - 'image' => \Moox\Builder\Blocks\Filament\Image::class, - 'key-value' => \Moox\Builder\Blocks\Filament\KeyValue::class, - 'markdown-editor' => \Moox\Builder\Blocks\Filament\MarkdownEditor::class, - 'multi-select' => \Moox\Builder\Blocks\Filament\MultiSelect::class, - 'number' => \Moox\Builder\Blocks\Filament\Number::class, - 'radio' => \Moox\Builder\Blocks\Filament\Radio::class, - 'relationship' => \Moox\Builder\Blocks\Filament\Relationship::class, - 'repeater' => \Moox\Builder\Blocks\Filament\Repeater::class, - 'rich-editor' => \Moox\Builder\Blocks\Filament\RichEditor::class, - 'select' => \Moox\Builder\Blocks\Filament\Select::class, - 'tags-input' => \Moox\Builder\Blocks\Filament\TagsInput::class, - 'text' => \Moox\Builder\Blocks\Filament\Text::class, - 'textarea' => \Moox\Builder\Blocks\Filament\TextArea::class, - 'toggle' => \Moox\Builder\Blocks\Filament\Toggle::class, - 'toggle-buttons' => \Moox\Builder\Blocks\Filament\ToggleButtons::class, + 'boolean' => \Moox\Builder\Blocks\Fields\Boolean::class, + 'builder' => \Moox\Builder\Blocks\Fields\Builder::class, + 'checkbox-list' => \Moox\Builder\Blocks\Fields\CheckboxList::class, + 'color-picker' => \Moox\Builder\Blocks\Fields\ColorPicker::class, + 'date' => \Moox\Builder\Blocks\Fields\Date::class, + 'date-time' => \Moox\Builder\Blocks\Fields\DateTime::class, + 'file-upload' => \Moox\Builder\Blocks\Fields\FileUpload::class, + 'hidden' => \Moox\Builder\Blocks\Fields\Hidden::class, + 'image' => \Moox\Builder\Blocks\Fields\Image::class, + 'key-value' => \Moox\Builder\Blocks\Fields\KeyValue::class, + 'markdown-editor' => \Moox\Builder\Blocks\Fields\MarkdownEditor::class, + 'multi-select' => \Moox\Builder\Blocks\Fields\MultiSelect::class, + 'number' => \Moox\Builder\Blocks\Fields\Number::class, + 'radio' => \Moox\Builder\Blocks\Fields\Radio::class, + 'relationship' => \Moox\Builder\Blocks\Fields\Relationship::class, + 'repeater' => \Moox\Builder\Blocks\Fields\Repeater::class, + 'rich-editor' => \Moox\Builder\Blocks\Fields\RichEditor::class, + 'select' => \Moox\Builder\Blocks\Fields\Select::class, + 'tags-input' => \Moox\Builder\Blocks\Fields\TagsInput::class, + 'text' => \Moox\Builder\Blocks\Fields\Text::class, + 'textarea' => \Moox\Builder\Blocks\Fields\TextArea::class, + 'toggle' => \Moox\Builder\Blocks\Fields\Toggle::class, + 'toggle-buttons' => \Moox\Builder\Blocks\Fields\ToggleButtons::class, ], 'features' => [ - 'simple' => \Moox\Builder\Blocks\Singles\Simple::class, - 'soft-delete' => \Moox\Builder\Blocks\Singles\SoftDelete::class, - 'title-with-slug' => \Moox\Builder\Blocks\Moox\TitleWithSlug::class, + 'custom-demo' => \Moox\Builder\Blocks\Features\CustomDemo::class, 'simple-status' => \Moox\Builder\Blocks\Features\SimpleStatus::class, 'simple-type' => \Moox\Builder\Blocks\Features\SimpleType::class, + 'tabs' => \Moox\Builder\Blocks\Features\Tabs::class, ], 'sections' => [ - 'address' => \Moox\Builder\Blocks\Sections\AddressSection::class, + 'simple-address' => \Moox\Builder\Blocks\Sections\SimpleAddressSection::class, + ], + 'singles' => [ + 'light' => \Moox\Builder\Blocks\Singles\Light::class, + 'simple' => \Moox\Builder\Blocks\Singles\Simple::class, + 'soft-delete' => \Moox\Builder\Blocks\Singles\SoftDelete::class, ], ], @@ -175,13 +179,5 @@ 'class' => \Moox\Builder\Presets\FullItemPreset::class, 'generators' => ['model', 'migration', 'resource'], ], - 'related-item' => [ - 'class' => \Moox\Builder\Presets\RelatedItemPreset::class, - 'generators' => ['model', 'migration', 'resource'], - ], - 'simple-taxonomy' => [ - 'class' => \Moox\Builder\Presets\SimpleTaxonomyPreset::class, - 'generators' => ['model', 'migration', 'resource'], - ], ], ]; diff --git a/packages/builder/src/Blocks/Features/Taxonomy.php b/packages/builder/src/Blocks/Features/Taxonomy.php deleted file mode 100644 index f4b558b0c..000000000 --- a/packages/builder/src/Blocks/Features/Taxonomy.php +++ /dev/null @@ -1,78 +0,0 @@ -addSection('taxonomy') - ->asMeta() - ->hideHeader() - ->withFields([ - 'static::getTaxonomyFields()', - ]); - - $this->tableColumns['resource'] = [ - '...static::getTaxonomyColumns()', - ]; - - $this->taxonomies[] = [ - 'name' => strtolower($single), - 'label' => $plural, - 'model' => $model, - 'table' => $table, - 'relationship' => $relationship, - 'foreign_key' => $foreignKey, - 'related_key' => $relatedKey, - 'create_form' => $createForm, - 'hierarchical' => $nested, - ]; - - $this->traits['model'] = ['Moox\Core\Traits\Taxonomy\TaxonomyInModel']; - $this->traits['resource'] = ['Moox\Core\Traits\Taxonomy\TaxonomyInResource']; - $this->traits['pages']['create'] = ['Moox\Core\Traits\Taxonomy\TaxonomyInPages']; - $this->traits['pages']['view'] = ['Moox\Core\Traits\Taxonomy\TaxonomyInPages']; - $this->traits['pages']['edit'] = ['Moox\Core\Traits\Taxonomy\TaxonomyInPages']; - - $this->methods['model'] = [ - 'protected function getResourceName(): string - { - return \'{{ resource_name }}\'; - }', - ]; - } - - public function getFormFields(string $context = 'resource'): array - { - return $this->formFields[$context] ?? []; - } - - public function getTaxonomies(): array - { - return $this->taxonomies; - } -} diff --git a/packages/builder/src/Blocks/Filament/Boolean.php b/packages/builder/src/Blocks/Fields/Boolean.php similarity index 97% rename from packages/builder/src/Blocks/Filament/Boolean.php rename to packages/builder/src/Blocks/Fields/Boolean.php index 6376f3aeb..df03b8174 100644 --- a/packages/builder/src/Blocks/Filament/Boolean.php +++ b/packages/builder/src/Blocks/Fields/Boolean.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/Builder.php b/packages/builder/src/Blocks/Fields/Builder.php similarity index 97% rename from packages/builder/src/Blocks/Filament/Builder.php rename to packages/builder/src/Blocks/Fields/Builder.php index 352d17f86..5fe678654 100644 --- a/packages/builder/src/Blocks/Filament/Builder.php +++ b/packages/builder/src/Blocks/Fields/Builder.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/CheckboxList.php b/packages/builder/src/Blocks/Fields/CheckboxList.php similarity index 97% rename from packages/builder/src/Blocks/Filament/CheckboxList.php rename to packages/builder/src/Blocks/Fields/CheckboxList.php index f44a17f75..aeecbb195 100644 --- a/packages/builder/src/Blocks/Filament/CheckboxList.php +++ b/packages/builder/src/Blocks/Fields/CheckboxList.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/ColorPicker.php b/packages/builder/src/Blocks/Fields/ColorPicker.php similarity index 96% rename from packages/builder/src/Blocks/Filament/ColorPicker.php rename to packages/builder/src/Blocks/Fields/ColorPicker.php index 471d0a10f..10816a715 100644 --- a/packages/builder/src/Blocks/Filament/ColorPicker.php +++ b/packages/builder/src/Blocks/Fields/ColorPicker.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/Date.php b/packages/builder/src/Blocks/Fields/Date.php similarity index 97% rename from packages/builder/src/Blocks/Filament/Date.php rename to packages/builder/src/Blocks/Fields/Date.php index 9f08d5098..43bf03f43 100644 --- a/packages/builder/src/Blocks/Filament/Date.php +++ b/packages/builder/src/Blocks/Fields/Date.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/DateTime.php b/packages/builder/src/Blocks/Fields/DateTime.php similarity index 98% rename from packages/builder/src/Blocks/Filament/DateTime.php rename to packages/builder/src/Blocks/Fields/DateTime.php index 1751974c9..331d59d3b 100644 --- a/packages/builder/src/Blocks/Filament/DateTime.php +++ b/packages/builder/src/Blocks/Fields/DateTime.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/FileUpload.php b/packages/builder/src/Blocks/Fields/FileUpload.php similarity index 97% rename from packages/builder/src/Blocks/Filament/FileUpload.php rename to packages/builder/src/Blocks/Fields/FileUpload.php index 6029b48c7..ec41cf935 100644 --- a/packages/builder/src/Blocks/Filament/FileUpload.php +++ b/packages/builder/src/Blocks/Fields/FileUpload.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/Hidden.php b/packages/builder/src/Blocks/Fields/Hidden.php similarity index 96% rename from packages/builder/src/Blocks/Filament/Hidden.php rename to packages/builder/src/Blocks/Fields/Hidden.php index 7a7680f64..eb61299e9 100644 --- a/packages/builder/src/Blocks/Filament/Hidden.php +++ b/packages/builder/src/Blocks/Fields/Hidden.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/Image.php b/packages/builder/src/Blocks/Fields/Image.php similarity index 96% rename from packages/builder/src/Blocks/Filament/Image.php rename to packages/builder/src/Blocks/Fields/Image.php index d62c9cb04..fa02aa24c 100644 --- a/packages/builder/src/Blocks/Filament/Image.php +++ b/packages/builder/src/Blocks/Fields/Image.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; class Image extends FileUpload { diff --git a/packages/builder/src/Blocks/Filament/KeyValue.php b/packages/builder/src/Blocks/Fields/KeyValue.php similarity index 98% rename from packages/builder/src/Blocks/Filament/KeyValue.php rename to packages/builder/src/Blocks/Fields/KeyValue.php index 2445023d0..8d4ca4d10 100644 --- a/packages/builder/src/Blocks/Filament/KeyValue.php +++ b/packages/builder/src/Blocks/Fields/KeyValue.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/MarkdownEditor.php b/packages/builder/src/Blocks/Fields/MarkdownEditor.php similarity index 97% rename from packages/builder/src/Blocks/Filament/MarkdownEditor.php rename to packages/builder/src/Blocks/Fields/MarkdownEditor.php index fdc7de882..e1376b9f7 100644 --- a/packages/builder/src/Blocks/Filament/MarkdownEditor.php +++ b/packages/builder/src/Blocks/Fields/MarkdownEditor.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/MultiSelect.php b/packages/builder/src/Blocks/Fields/MultiSelect.php similarity index 97% rename from packages/builder/src/Blocks/Filament/MultiSelect.php rename to packages/builder/src/Blocks/Fields/MultiSelect.php index 1521b0d81..c1feee741 100644 --- a/packages/builder/src/Blocks/Filament/MultiSelect.php +++ b/packages/builder/src/Blocks/Fields/MultiSelect.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/Number.php b/packages/builder/src/Blocks/Fields/Number.php similarity index 97% rename from packages/builder/src/Blocks/Filament/Number.php rename to packages/builder/src/Blocks/Fields/Number.php index c40d92a25..78e21cc60 100644 --- a/packages/builder/src/Blocks/Filament/Number.php +++ b/packages/builder/src/Blocks/Fields/Number.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/Radio.php b/packages/builder/src/Blocks/Fields/Radio.php similarity index 97% rename from packages/builder/src/Blocks/Filament/Radio.php rename to packages/builder/src/Blocks/Fields/Radio.php index 2eb2db716..78e2aee72 100644 --- a/packages/builder/src/Blocks/Filament/Radio.php +++ b/packages/builder/src/Blocks/Fields/Radio.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/Relationship.php b/packages/builder/src/Blocks/Fields/Relationship.php similarity index 98% rename from packages/builder/src/Blocks/Filament/Relationship.php rename to packages/builder/src/Blocks/Fields/Relationship.php index c61ffd97d..bf32e5074 100644 --- a/packages/builder/src/Blocks/Filament/Relationship.php +++ b/packages/builder/src/Blocks/Fields/Relationship.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/Repeater.php b/packages/builder/src/Blocks/Fields/Repeater.php similarity index 98% rename from packages/builder/src/Blocks/Filament/Repeater.php rename to packages/builder/src/Blocks/Fields/Repeater.php index e011f93af..5a9b244c4 100644 --- a/packages/builder/src/Blocks/Filament/Repeater.php +++ b/packages/builder/src/Blocks/Fields/Repeater.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/RichEditor.php b/packages/builder/src/Blocks/Fields/RichEditor.php similarity index 97% rename from packages/builder/src/Blocks/Filament/RichEditor.php rename to packages/builder/src/Blocks/Fields/RichEditor.php index f78b2ce88..5a7e47a56 100644 --- a/packages/builder/src/Blocks/Filament/RichEditor.php +++ b/packages/builder/src/Blocks/Fields/RichEditor.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/Select.php b/packages/builder/src/Blocks/Fields/Select.php similarity index 98% rename from packages/builder/src/Blocks/Filament/Select.php rename to packages/builder/src/Blocks/Fields/Select.php index 1443ee195..a8411b8ee 100644 --- a/packages/builder/src/Blocks/Filament/Select.php +++ b/packages/builder/src/Blocks/Fields/Select.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/TagsInput.php b/packages/builder/src/Blocks/Fields/TagsInput.php similarity index 98% rename from packages/builder/src/Blocks/Filament/TagsInput.php rename to packages/builder/src/Blocks/Fields/TagsInput.php index d3d05b475..7d0144880 100644 --- a/packages/builder/src/Blocks/Filament/TagsInput.php +++ b/packages/builder/src/Blocks/Fields/TagsInput.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/Text.php b/packages/builder/src/Blocks/Fields/Text.php similarity index 98% rename from packages/builder/src/Blocks/Filament/Text.php rename to packages/builder/src/Blocks/Fields/Text.php index 0c110486a..b10218ac7 100644 --- a/packages/builder/src/Blocks/Filament/Text.php +++ b/packages/builder/src/Blocks/Fields/Text.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/TextArea.php b/packages/builder/src/Blocks/Fields/TextArea.php similarity index 97% rename from packages/builder/src/Blocks/Filament/TextArea.php rename to packages/builder/src/Blocks/Fields/TextArea.php index f8b1611f8..71dc138be 100644 --- a/packages/builder/src/Blocks/Filament/TextArea.php +++ b/packages/builder/src/Blocks/Fields/TextArea.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/Toggle.php b/packages/builder/src/Blocks/Fields/Toggle.php similarity index 97% rename from packages/builder/src/Blocks/Filament/Toggle.php rename to packages/builder/src/Blocks/Fields/Toggle.php index 730e22ea1..798c57dee 100644 --- a/packages/builder/src/Blocks/Filament/Toggle.php +++ b/packages/builder/src/Blocks/Fields/Toggle.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Filament/ToggleButtons.php b/packages/builder/src/Blocks/Fields/ToggleButtons.php similarity index 97% rename from packages/builder/src/Blocks/Filament/ToggleButtons.php rename to packages/builder/src/Blocks/Fields/ToggleButtons.php index 24995e2fb..8dc1053bb 100644 --- a/packages/builder/src/Blocks/Filament/ToggleButtons.php +++ b/packages/builder/src/Blocks/Fields/ToggleButtons.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Moox\Builder\Blocks\Filament; +namespace Moox\Builder\Blocks\Fields; use Moox\Builder\Blocks\AbstractBlock; diff --git a/packages/builder/src/Blocks/Moox/TitleWithSlug.php b/packages/builder/src/Blocks/Moox/TitleWithSlug.php deleted file mode 100644 index 02b690dc4..000000000 --- a/packages/builder/src/Blocks/Moox/TitleWithSlug.php +++ /dev/null @@ -1,191 +0,0 @@ -useStatements = [ - 'resource' => [ - 'forms' => [ - 'use Camya\Filament\Forms\Components\TitleWithSlugInput;', - 'use Filament\Forms\Components\Hidden;', - ], - 'columns' => ['use Filament\Tables\Columns\TextColumn;'], - 'filters' => [ - 'use Filament\Tables\Filters\Filter;', - 'use Filament\Forms\Components\TextInput;', - 'use Illuminate\Database\Eloquent\Builder;', - ], - ], - ]; - - $this->addSection('form') - ->withFields([ - "TitleWithSlugInput::make( - fieldTitle: '{$this->titleFieldName}', - fieldSlug: '{$this->slugFieldName}', - )", - ]); - - $this->tableColumns['resource'] = [ - "TextColumn::make('{$this->titleFieldName}') - ->searchable() - ->sortable()", - "TextColumn::make('{$this->slugFieldName}') - ->searchable() - ->sortable()", - ]; - - $this->filters['resource'] = [ - "Filter::make('{$this->titleFieldName}') - ->form([ - TextInput::make('{$this->titleFieldName}') - ->label('{$this->label}') - ->placeholder(__('core::core.filter').' {$this->label}'), - ]) - ->query(function (Builder \$query, array \$data): Builder { - return \$query->when( - \$data['{$this->titleFieldName}'], - fn (Builder \$query, \$value): Builder => \$query->where('{$this->titleFieldName}', 'like', \"%{\$value}%\"), - ); - }) - ->indicateUsing(function (array \$data): ?string { - if (! \$data['{$this->titleFieldName}']) { - return null; - } - - return '{$this->label}: '.\$data['{$this->titleFieldName}']; - })", - "Filter::make('{$this->slugFieldName}') - ->form([ - TextInput::make('{$this->slugFieldName}') - ->label(__('core::core.slug')) - ->placeholder(__('core::core.filter').' {$this->label}'), - ]) - ->query(function (Builder \$query, array \$data): Builder { - return \$query->when( - \$data['{$this->slugFieldName}'], - fn (Builder \$query, \$value): Builder => \$query->where('{$this->slugFieldName}', 'like', \"%{\$value}%\"), - ); - }) - ->indicateUsing(function (array \$data): ?string { - if (! \$data['{$this->slugFieldName}']) { - return null; - } - - return __('core::core.slug').': '.\$data['{$this->slugFieldName}']; - })", - ]; - - $this->migrations['fields'] = [ - "\$table->string('{$this->titleFieldName}')", - "\$table->string('{$this->slugFieldName}')->unique()->nullable(false)", - ]; - - $this->factories['model']['definitions'] = [ - "{$this->titleFieldName}" => 'fake()->sentence()', - "{$this->slugFieldName}" => 'str()->slug(fake()->sentence())', - ]; - - $this->tests['unit']['model'] = [ - 'test_slug_is_generated_from_title' => " - \$model = Model::factory()->create([ - '{$this->titleFieldName}' => 'Test Title', - ]); - - \$this->assertEquals('test-title', \$model->{$this->slugFieldName}); - ", - ]; - - $this->tests['feature']['resource'] = [ - 'test_slug_is_unique' => " - \$existingModel = Model::factory()->create([ - '{$this->titleFieldName}' => 'Test Title', - ]); - - \$response = \$this->post(route('resource.store'), [ - '{$this->titleFieldName}' => 'Test Title', - ]); - - \$response->assertSessionHasErrors('{$this->slugFieldName}'); - ", - ]; - - $this->addCast("'{$this->slugFieldName}' => 'string'") - ->addCast("'{$this->titleFieldName}' => 'string'"); - } - - public function isFillable(): bool - { - return true; - } - - public function getName(): string - { - return $this->titleFieldName; - } - - public function getFillableFields(): array - { - return [$this->titleFieldName, $this->slugFieldName]; - } - - protected function hasMultipleFields(): bool - { - return true; - } - - protected function getAdditionalFields(): array - { - return [$this->slugFieldName]; - } - - protected function getUniqueFields(): array - { - return [$this->slugFieldName]; - } - - protected function getRequiredFields(): array - { - return [$this->titleFieldName, $this->slugFieldName]; - } - - protected function getIndexedFields(): array - { - return [$this->titleFieldName, $this->slugFieldName]; - } - - public function getTitle(): string - { - return 'Title with Slug'; - } - - public function getDescription(): string - { - return 'Adds a title field with an automatically generated slug'; - } - - public function getOptions(): array - { - return [ - 'titleFieldName' => $this->titleFieldName, - 'slugFieldName' => $this->slugFieldName, - 'label' => $this->label, - 'description' => $this->description, - 'nullable' => $this->nullable, - ]; - } -} diff --git a/packages/builder/src/Blocks/Sections/AddressSection.php b/packages/builder/src/Blocks/Sections/SimpleAddressSection.php similarity index 96% rename from packages/builder/src/Blocks/Sections/AddressSection.php rename to packages/builder/src/Blocks/Sections/SimpleAddressSection.php index 457ee82ca..69d6118a5 100644 --- a/packages/builder/src/Blocks/Sections/AddressSection.php +++ b/packages/builder/src/Blocks/Sections/SimpleAddressSection.php @@ -6,7 +6,7 @@ use Moox\Builder\Blocks\AbstractBlock; -final class AddressSection extends AbstractBlock +final class SimpleAddressSection extends AbstractBlock { public function __construct( string $name = 'address_section', diff --git a/packages/builder/src/Blocks/Singles/Light.php b/packages/builder/src/Blocks/Singles/Light.php index 247d03306..f6c1c0d7d 100644 --- a/packages/builder/src/Blocks/Singles/Light.php +++ b/packages/builder/src/Blocks/Singles/Light.php @@ -7,9 +7,9 @@ class Light extends AbstractBlock { protected array $incompatibleBlocks = [ - Simple::class, - Publish::class, - SoftDelete::class, + 'Moox\Builder\Blocks\Singles\Simple', + 'Moox\BuilderPro\Blocks\Singles\Publish', + 'Moox\Builder\Blocks\Singles\SoftDelete', ]; public function __construct( diff --git a/packages/builder/src/Blocks/Singles/Publish.php b/packages/builder/src/Blocks/Singles/Publish.php deleted file mode 100644 index 515b06119..000000000 --- a/packages/builder/src/Blocks/Singles/Publish.php +++ /dev/null @@ -1,227 +0,0 @@ -useStatements = [ - 'model' => [ - 'use Illuminate\Database\Eloquent\Builder;', - ], - 'resource' => [ - 'forms' => ['use Filament\Forms\Components\DateTimePicker;'], - 'columns' => ['use Filament\Tables\Columns\TextColumn;'], - 'filters' => ['use Filament\Tables\Filters\Filter;'], - 'actions' => ['use Filament\Actions\Action;'], - ], - 'pages' => [ - 'list' => [ - // This is missing in the generated list page, why? - 'use Illuminate\Database\Eloquent\Builder;', - // while this is generated - 'use Moox\Core\Traits\Publish\SinglePublishInListPage;', - ], - ], - ]; - - $this->traits['model'] = [ - 'Moox\Core\Traits\Publish\SinglePublishInModel', - 'Moox\Core\Traits\Base\BaseInModel', - ]; - $this->traits['resource'] = [ - 'Moox\Core\Traits\Publish\SinglePublishInResource', - 'Moox\Core\Traits\Base\BaseInResource', - ]; - $this->traits['pages']['list'] = [ - 'Moox\Core\Traits\Publish\SinglePublishInListPage', - 'Moox\Core\Traits\Base\BaseInListPage', - ]; - $this->traits['pages']['view'] = [ - 'Moox\Core\Traits\Publish\SinglePublishInViewPage', - 'Moox\Core\Traits\Base\BaseInViewPage', - ]; - $this->traits['pages']['edit'] = [ - 'Moox\Core\Traits\Publish\SinglePublishInEditPage', - 'Moox\Core\Traits\Base\BaseInEditPage', - ]; - $this->traits['pages']['create'] = [ - 'Moox\Core\Traits\Publish\SinglePublishInCreatePage', - 'Moox\Core\Traits\Base\BaseInCreatePage', - ]; - - $this->methods['model'] = [ - 'scopes' => [ - 'public function scopePublished(Builder $query): Builder { - return $query->whereNotNull("published_at"); - }', - 'public function scopeScheduled(Builder $query): Builder { - return $query->whereNotNull("publish_at") - ->whereNull("published_at"); - }', - 'public function scopeDraft(Builder $query): Builder { - return $query->whereNull("published_at") - ->whereNull("publish_at"); - }', - ], - ]; - - $this->methods['pages']['list'] = [ - 'protected function applyStatusFilter(Builder $query, string $status): Builder { - return match ($status) { - "published" => $query->published(), - "scheduled" => $query->scheduled(), - "draft" => $query->draft(), - default => $query, - }; - }', - ]; - - $this->metaFields['resource'] = [ - 'static::getFormActions()', - 'static::getPublishAtFormField()', - ]; - - $this->tableColumns['resource'] = [ - "TextColumn::make('publish_at') - ->label(__('core::core.publish_at')) - ->dateTime() - ->sortable() - ->toggleable()", - "TextColumn::make('published_at') - ->label(__('core::core.published_at')) - ->dateTime() - ->sortable() - ->toggleable()", - ]; - - $this->filters = []; - /* TODO: Fix this - $this->filters['resource'] = [ - "Filter::make('published') - ->label(__('core::core.published')) - ->query(fn (Builder \$query): Builder => \$query->published())", - "Filter::make('scheduled') - ->label(__('core::core.scheduled')) - ->query(fn (Builder \$query): Builder => \$query->scheduled())", - "Filter::make('draft') - ->label(__('core::core.draft')) - ->query(fn (Builder \$query): Builder => \$query->draft())", - ]; - */ - - $this->actions['pages']['edit']['header'] = [ - "Action::make('publish') - ->label(__('core::core.publish')) - ->color('success') - ->action(function (\$livewire) { - \$data = \$livewire->form->getState(); - \$data['published_at'] = now(); - \$livewire->form->fill(\$data); - \$livewire->save(); - }) - ->visible(fn (\$record) => ! \$record->published_at)", - ]; - - $this->migrations['fields'] = [ - '$table->timestamp("published_at")->nullable()', - '$table->timestamp("publish_at")->nullable()', - '$table->softDeletes()', - ]; - - $this->factories['model']['states'] = [ - 'published' => [ - 'published_at' => 'now()', - 'publish_at' => 'now()', - ], - 'scheduled' => [ - 'publish_at' => 'fake()->dateTimeBetween("tomorrow", "+30 days")', - 'published_at' => 'null', - ], - 'draft' => [ - 'publish_at' => 'null', - 'published_at' => 'null', - ], - ]; - } - - public function getTabs(): array - { - return [ - 'all' => [ - 'label' => 'trans//core::core.all', - 'icon' => 'gmdi-filter-list', - 'query' => [ - [ - 'field' => 'deleted_at', - 'operator' => '=', - 'value' => null, - ], - ], - ], - 'published' => [ - 'label' => 'trans//core::core.published', - 'icon' => 'gmdi-check-circle', - 'query' => [ - [ - 'field' => 'publish_at', - 'operator' => '<=', - 'value' => 'now()', - ], - ], - ], - 'scheduled' => [ - 'label' => 'trans//core::core.scheduled', - 'icon' => 'gmdi-schedule', - 'query' => [ - [ - 'field' => 'publish_at', - 'operator' => '>', - 'value' => 'now()', - ], - ], - ], - 'draft' => [ - 'label' => 'trans//core::core.draft', - 'icon' => 'gmdi-text-snippet', - 'query' => [ - [ - 'field' => 'published_at', - 'operator' => '=', - 'value' => null, - ], - ], - ], - 'deleted' => [ - 'label' => 'trans//core::core.deleted', - 'icon' => 'gmdi-delete', - 'query' => [ - [ - 'field' => 'deleted_at', - 'operator' => '!=', - 'value' => null, - ], - ], - ], - ]; - } -} diff --git a/packages/builder/src/Blocks/Singles/Simple.php b/packages/builder/src/Blocks/Singles/Simple.php index 54a0b9187..bc08e1978 100644 --- a/packages/builder/src/Blocks/Singles/Simple.php +++ b/packages/builder/src/Blocks/Singles/Simple.php @@ -7,9 +7,9 @@ class Simple extends AbstractBlock { protected array $incompatibleBlocks = [ - SoftDelete::class, - Publish::class, - Light::class, + 'Moox\Builder\Blocks\Singles\SoftDelete', + 'Moox\BuilderPro\Blocks\Singles\Publish', + 'Moox\Builder\Blocks\Singles\Light', ]; public function __construct( diff --git a/packages/builder/src/Blocks/Singles/SoftDelete.php b/packages/builder/src/Blocks/Singles/SoftDelete.php index 9b89d61a3..4e34c6aff 100644 --- a/packages/builder/src/Blocks/Singles/SoftDelete.php +++ b/packages/builder/src/Blocks/Singles/SoftDelete.php @@ -9,12 +9,12 @@ class SoftDelete extends AbstractBlock { protected array $containsBlocks = [ - Simple::class, + 'Moox\Builder\Blocks\Singles\Simple', ]; protected array $incompatibleBlocks = [ - Publish::class, - Light::class, + 'Moox\BuilderPro\Blocks\Singles\Publish', + 'Moox\Builder\Blocks\Singles\Light', ]; public function __construct( diff --git a/packages/builder/src/Presets/FullItemPreset.php b/packages/builder/src/Presets/FullItemPreset.php index 9fd93fa63..db85aa97e 100644 --- a/packages/builder/src/Presets/FullItemPreset.php +++ b/packages/builder/src/Presets/FullItemPreset.php @@ -7,10 +7,9 @@ use Moox\Builder\Blocks\Features\SimpleStatus; use Moox\Builder\Blocks\Features\SimpleType; use Moox\Builder\Blocks\Features\Tabs; -use Moox\Builder\Blocks\Features\Taxonomy; -use Moox\Builder\Blocks\Filament\TextArea; -use Moox\Builder\Blocks\Moox\TitleWithSlug; -use Moox\Builder\Blocks\Sections\AddressSection; +use Moox\Builder\Blocks\Fields\Text; +use Moox\Builder\Blocks\Fields\TextArea; +use Moox\Builder\Blocks\Sections\SimpleAddressSection; use Moox\Builder\Blocks\Singles\Simple; class FullItemPreset extends AbstractPreset @@ -19,38 +18,19 @@ protected function initializePreset(): void { $this->blocks = [ new Simple, - new TitleWithSlug( - titleFieldName: 'title', - slugFieldName: 'slug', + new Text( + name: 'title', + label: 'Title', + description: 'The title of the item', ), new TextArea( name: 'content', label: 'Content', - description: 'The content of the item' + description: 'The content of the item', + nullable: true, ), new Tabs, - new Taxonomy( - single: 'Category', - plural: 'Categories', - model: '\Moox\Category\Models\Category::class', - table: 'categorizables', - relationship: 'categorizable', - foreignKey: 'categorizable_id', - relatedKey: 'category_id', - createForm: '\Moox\Category\Forms\TaxonomyCreateForm::class', - nested: true, - ), - new Taxonomy( - single: 'Tag', - plural: 'Tags', - model: '\Moox\Tag\Models\Tag::class', - table: 'taggables', - relationship: 'taggable', - foreignKey: 'taggable_id', - relatedKey: 'tag_id', - createForm: '\Moox\Tag\Forms\TaxonomyCreateForm::class', - ), - new AddressSection, + new SimpleAddressSection, new SimpleStatus( enum: ['Probably', 'Never', 'Done', 'Maybe'], ), diff --git a/packages/builder/src/Presets/LightItemPreset.php b/packages/builder/src/Presets/LightItemPreset.php index bffff3e59..de06fbaf0 100644 --- a/packages/builder/src/Presets/LightItemPreset.php +++ b/packages/builder/src/Presets/LightItemPreset.php @@ -6,9 +6,9 @@ use Moox\Builder\Blocks\Features\SimpleStatus; use Moox\Builder\Blocks\Features\SimpleType; -use Moox\Builder\Blocks\Filament\TextArea; -use Moox\Builder\Blocks\Moox\TitleWithSlug; -use Moox\Builder\Blocks\Sections\AddressSection; +use Moox\Builder\Blocks\Fields\Text; +use Moox\Builder\Blocks\Fields\TextArea; +use Moox\Builder\Blocks\Sections\SimpleAddressSection; use Moox\Builder\Blocks\Singles\Light; class LightItemPreset extends AbstractPreset @@ -17,16 +17,18 @@ protected function initializePreset(): void { $this->blocks = [ new Light, - new TitleWithSlug( - titleFieldName: 'title', - slugFieldName: 'slug', + new Text( + name: 'title', + label: 'Title', + description: 'The title of the item', ), new TextArea( name: 'content', label: 'Content', - description: 'The content of the item' + description: 'The content of the item', + nullable: true, ), - new AddressSection, + new SimpleAddressSection, new SimpleStatus( enum: ['Probably', 'Never', 'Done', 'Maybe'], ), diff --git a/packages/builder/src/Presets/RelatedItemPreset.php b/packages/builder/src/Presets/RelatedItemPreset.php deleted file mode 100644 index ceb7e5e63..000000000 --- a/packages/builder/src/Presets/RelatedItemPreset.php +++ /dev/null @@ -1,62 +0,0 @@ -blocks = [ - new Simple, - new TitleWithSlug( - titleFieldName: 'title', - slugFieldName: 'slug', - ), - new TextArea( - name: 'content', - label: 'Content', - description: 'The content of the item' - ), - new Tabs, - new Taxonomy( - single: 'Category', - plural: 'Categories', - model: '\Moox\Category\Models\Category::class', - table: 'categorizables', - relationship: 'categorizable', - foreignKey: 'categorizable_id', - relatedKey: 'category_id', - createForm: '\Moox\Category\Forms\TaxonomyCreateForm::class', - nested: true, - ), - new Taxonomy( - single: 'Tag', - plural: 'Tags', - model: '\Moox\Tag\Models\Tag::class', - table: 'taggables', - relationship: 'taggable', - foreignKey: 'taggable_id', - relatedKey: 'tag_id', - createForm: '\Moox\Tag\Forms\TaxonomyCreateForm::class', - ), - new AddressSection, - new SimpleStatus( - enum: ['Probably', 'Never', 'Done', 'Maybe'], - ), - new SimpleType( - enum: ['Post', 'Page'], - ), - ]; - } -} diff --git a/packages/builder/src/Presets/SimpleItemPreset.php b/packages/builder/src/Presets/SimpleItemPreset.php index 4c1b51011..dd507e59e 100644 --- a/packages/builder/src/Presets/SimpleItemPreset.php +++ b/packages/builder/src/Presets/SimpleItemPreset.php @@ -7,10 +7,9 @@ use Moox\Builder\Blocks\Features\SimpleStatus; use Moox\Builder\Blocks\Features\SimpleType; use Moox\Builder\Blocks\Features\Tabs; -use Moox\Builder\Blocks\Features\Taxonomy; -use Moox\Builder\Blocks\Filament\TextArea; -use Moox\Builder\Blocks\Moox\TitleWithSlug; -use Moox\Builder\Blocks\Sections\AddressSection; +use Moox\Builder\Blocks\Fields\Text; +use Moox\Builder\Blocks\Fields\TextArea; +use Moox\Builder\Blocks\Sections\SimpleAddressSection; use Moox\Builder\Blocks\Singles\Simple; class SimpleItemPreset extends AbstractPreset @@ -19,38 +18,19 @@ protected function initializePreset(): void { $this->blocks = [ new Simple, - new TitleWithSlug( - titleFieldName: 'title', - slugFieldName: 'slug', + new Text( + name: 'title', + label: 'Title', + description: 'The title of the item', ), new TextArea( name: 'content', label: 'Content', - description: 'The content of the item' + description: 'The content of the item', + nullable: true, ), new Tabs, - new Taxonomy( - single: 'Category', - plural: 'Categories', - model: '\Moox\Category\Models\Category::class', - table: 'categorizables', - relationship: 'categorizable', - foreignKey: 'categorizable_id', - relatedKey: 'category_id', - createForm: '\Moox\Category\Forms\TaxonomyCreateForm::class', - nested: true, - ), - new Taxonomy( - single: 'Tag', - plural: 'Tags', - model: '\Moox\Tag\Models\Tag::class', - table: 'taggables', - relationship: 'taggable', - foreignKey: 'taggable_id', - relatedKey: 'tag_id', - createForm: '\Moox\Tag\Forms\TaxonomyCreateForm::class', - ), - new AddressSection, + new SimpleAddressSection, new SimpleStatus( enum: ['Probably', 'Never', 'Done', 'Maybe'], ), diff --git a/packages/builder/src/Presets/SimpleTaxonomyPreset.php b/packages/builder/src/Presets/SimpleTaxonomyPreset.php deleted file mode 100644 index d6f02c0ac..000000000 --- a/packages/builder/src/Presets/SimpleTaxonomyPreset.php +++ /dev/null @@ -1,40 +0,0 @@ -blocks = [ - new Text( - name: 'title', - label: 'Title', - description: 'The title of the taxonomy', - length: 255, - nullable: false, - unique: true, - searchable: true, - sortable: true - ), - new Text( - name: 'slug', - label: 'Slug', - description: 'The URL slug for the taxonomy', - length: 255, - nullable: false, - unique: true - ), - new TextArea( - name: 'description', - label: 'Description', - description: 'The description of the taxonomy' - ), - ]; - } -} diff --git a/packages/builder/src/Presets/SoftDeleteItemPreset.php b/packages/builder/src/Presets/SoftDeleteItemPreset.php index ef6878791..903bb39f7 100644 --- a/packages/builder/src/Presets/SoftDeleteItemPreset.php +++ b/packages/builder/src/Presets/SoftDeleteItemPreset.php @@ -7,10 +7,9 @@ use Moox\Builder\Blocks\Features\SimpleStatus; use Moox\Builder\Blocks\Features\SimpleType; use Moox\Builder\Blocks\Features\Tabs; -use Moox\Builder\Blocks\Features\Taxonomy; -use Moox\Builder\Blocks\Filament\TextArea; -use Moox\Builder\Blocks\Moox\TitleWithSlug; -use Moox\Builder\Blocks\Sections\AddressSection; +use Moox\Builder\Blocks\Fields\Text; +use Moox\Builder\Blocks\Fields\TextArea; +use Moox\Builder\Blocks\Sections\SimpleAddressSection; use Moox\Builder\Blocks\Singles\SoftDelete; class SoftDeleteItemPreset extends AbstractPreset @@ -18,38 +17,24 @@ class SoftDeleteItemPreset extends AbstractPreset protected function initializePreset(): void { $this->blocks = [ - new TitleWithSlug( - titleFieldName: 'title', - slugFieldName: 'slug', + new Text( + name: 'title', + label: 'Title', + description: 'The title of the item', + nullable: true, ), new TextArea( name: 'content', label: 'Content', description: 'The content of the item' ), - new Tabs, - new Taxonomy( - single: 'Category', - plural: 'Categories', - model: '\Moox\Category\Models\Category::class', - table: 'categorizables', - relationship: 'categorizable', - foreignKey: 'categorizable_id', - relatedKey: 'category_id', - createForm: '\Moox\Category\Forms\TaxonomyCreateForm::class', - nested: true, - ), - new Taxonomy( - single: 'Tag', - plural: 'Tags', - model: '\Moox\Tag\Models\Tag::class', - table: 'taggables', - relationship: 'taggable', - foreignKey: 'taggable_id', - relatedKey: 'tag_id', - createForm: '\Moox\Tag\Forms\TaxonomyCreateForm::class', + new Text( + name: 'keks', + label: 'Keks', + description: 'For my lovely wife', ), - new AddressSection, + new Tabs, + new SimpleAddressSection, new SimpleType( enum: ['Post', 'Page'], ), diff --git a/packages/builder/src/Services/Build/BuildManager.php b/packages/builder/src/Services/Build/BuildManager.php index 23a54e62e..bfba41a29 100644 --- a/packages/builder/src/Services/Build/BuildManager.php +++ b/packages/builder/src/Services/Build/BuildManager.php @@ -28,9 +28,10 @@ public function recordBuild(int $entityId, string $buildContext, array $blocks, $this->validateBlocks($blocks); $this->validateFiles($files); - if ($this->hasConflictingProductionBuild($entityId, $buildContext)) { - throw new RuntimeException('Entity already has an active build in a different production context'); - } + // TODO: This was a check to prevent conflicts in the production contexts, but it also prevents the preview from being used. + // if ($this->hasConflictingProductionBuild($entityId, $buildContext)) { + // throw new RuntimeException('Entity already has an active build in a different production context'); + // } $this->buildRecorder->record($entityId, $buildContext, $blocks, $files); $this->buildStateManager->setContext($this->context);