whereNotNull('parent_id'); } public static function form(Form $form): Form { return $form ->schema([ Section::make('') ->columns(2) ->schema([ Forms\Components\TextInput::make('arabic_name') ->formatStateUsing(function ($record) { if ($record) { return $record->getTranslation('name', 'ar'); } }) ->required() ->maxLength(255), Forms\Components\TextInput::make('english_name') ->formatStateUsing(function ($record) { if ($record) { return $record->getTranslation('name', 'en'); } }) ->required() ->maxLength(255), Grid::make() ->columns(1) ->schema([ Forms\Components\Select::make('parent_id') ->label('Main Category') ->options(function () { $array = []; foreach (Category::whereNull('parent_id') ->where('is_available', 1) ->get() as $category) { $array[$category->id] = $category->getTranslation('name', 'ar'); } return $array; }) ->required(), Forms\Components\FileUpload::make('logo') ->imageEditor() ->acceptedFileTypes(['image/jpeg', 'image/png']) // ->required() ->directory('category-logo-attachments'), ]), Forms\Components\Toggle::make('is_available') ->onColor('success') ->offColor('danger'), ]), ]); } public static function table(Table $table): Table { return $table ->columns([ TextColumn::make('index') ->rowIndex() ->label('#'), Tables\Columns\TextColumn::make('arabic_name') ->state(function (Model $record): String { return $record->getTranslation('name', 'ar'); }) ->searchable(['name->ar']), Tables\Columns\TextColumn::make('english_name') ->state(function (Model $record): String { return $record->getTranslation('name', 'en'); }) ->searchable(['name->en']), Tables\Columns\TextColumn::make('Arabic Main Category') ->state(function (Model $record): String { return $record->mainCategory->getTranslation('name', 'ar'); }) ->searchable(['name->ar']), Tables\Columns\TextColumn::make('English Main Category') ->state(function (Model $record): String { return $record->mainCategory->getTranslation('name', 'en'); }) ->searchable(['name->en']), Tables\Columns\ToggleColumn::make('is_available') ->onColor('success') ->offColor('danger'), Tables\Columns\ImageColumn::make('logo'), Tables\Columns\TextColumn::make('created_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), Tables\Columns\TextColumn::make('updated_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) ->filters([ // Filter::make('disabled') ->toggle() ->query(function (Builder $query) { $query->where('is_available', false); }), Filter::make('enabled') ->toggle() ->query(function (Builder $query) { $query->where('is_available', true); }), ]) ->actions([ Tables\Actions\EditAction::make() ->mutateFormDataUsing(function ($data) { $data['name'] = [ 'ar' => $data['arabic_name'], 'en' => $data['english_name'], ]; unset($data['arabic_name']); unset($data['english_name']); return $data; }), Tables\Actions\DeleteAction::make(), ]) ->emptyStateActions([ Tables\Actions\CreateAction::make() ->mutateFormDataUsing(function ($data) { $data['name'] = [ 'ar' => $data['arabic_name'], 'en' => $data['english_name'], ]; unset($data['arabic_name']); unset($data['english_name']); return $data; }) ]) ->filters([ // ]) ->actions([ Tables\Actions\EditAction::make(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), Tables\Actions\BulkAction::make('change_main_category') ->form([ Forms\Components\Select::make('main_category') ->options(function () { $array = []; foreach (Category::whereNull('parent_id') ->where('is_available', 1) ->get() as $category) { $array[$category->id] = $category->getTranslation('name', 'ar'); } return $array; }) ->searchable(), ])->action(function (Collection $records, array $data) { foreach ($records as $record) { $record->parent_id = $data['main_category']; $record->save(); } }), Tables\Actions\BulkAction::make('move_to_main_category') ->requiresConfirmation() ->action(function (Collection $records) { foreach ($records as $record) { $record->parent_id = null; $record->save(); } }) ]), ]) ->emptyStateActions([ // Tables\Actions\CreateAction::make(), ]); } public static function getRelations(): array { return [ RelationManagers\ItemsRelationManager::class, ]; } public static function getPages(): array { return [ 'index' => Pages\ListSubCategories::route('/'), 'create' => Pages\CreateSubCategory::route('/create'), 'edit' => Pages\EditSubCategory::route('/{record}/edit'), ]; } }