Untitled

mail@pastecode.io avatar
unknown
php
21 days ago
4.5 kB
2
Indexable
Never
<?php
namespace App\Filament\Resources\CompanyResource\RelationManagers;

use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Tables;
use Filament\Tables\Table;
use App\Models\Contact;
use App\Filament\Resources\ContactResource;
use App\Models\CompanyContact;
use Filament\Tables\Actions\AttachAction;

class ContactsRelationManager extends RelationManager
{
    protected static string $relationship = 'contacts';

    public function form(Form $form): Form
    {
        return $form
            ->schema([
                Forms\Components\Toggle::make('is_point_of_contact')
                    ->inline(false)
                    ->required(),
                Forms\Components\CheckboxList::make('roles')
                    ->options([
                        'Director' => 'Director',
                        'Shareholder' => 'Shareholder',
                        'Beneficial Owner' => 'Beneficial Owner',
                        'Partner' => 'Partner',
                        'Power of Attorney' => 'Power of Attorney',
                        'Other' => 'Other',
                    ])
                    ->afterStateHydrated(function ($component, string $state) {
                        $component->state(json_decode($state));
                    }),
            ])
            ->columns(2);
    }

    public function table(Table $table): Table
    {
        $currentlyAttachedCompanyContactIds = CompanyContact::where('company_id', '=', 6)->pluck('contact_id');

        return $table
            ->recordTitleAttribute('name_and_contact_details')
            ->columns([
                Tables\Columns\TextColumn::make('fullname')
                    ->label('Full name'),
                Tables\Columns\TextColumn::make('email')
                    ->copyable(),
//                Tables\Columns\TextColumn::make('companyContacts.roles.name'),
                Tables\Columns\IconColumn::make('is_point_of_contact')
                    ->icon(fn(string $state): string => match ($state) {
                        '1' => 'heroicon-o-check-circle',
                        '0' => 'heroicon-o-x-circle'
                    })
                    ->color(fn(string $state): string => match ($state) {
                        '1' => 'success',
                        '0' => 'gray'
                    }),
                Tables\Columns\TextColumn::make('roles')
                    ->listWithLineBreaks()
            ])
            ->filters([
                //
            ])
            ->headerActions([
                Tables\Actions\AttachAction::make()
                    ->Label('Add')
                    ->recordSelectSearchColumns(['firstname', 'middlename', 'lastname', 'email', 'secondary_email', 'phone', 'other_contact_details'])
                    ->preloadRecordSelect()
                    ->form(
                        fn(AttachAction $action): array => [
                            $action->getRecordSelect()
                                ->searchable(),
                            Forms\Components\Toggle::make('is_point_of_contact')
                                ->required(),
                            Forms\Components\CheckboxList::make('roles')
                                ->options([
                                    'Director' => 'Director',
                                    'Shareholder' => 'Shareholder',
                                    'Beneficial Owner' => 'Beneficial Owner',
                                    'Partner' => 'Partner',
                                    'Power of Attorney' => 'Power of Attorney',
                                    'Other' => 'Other',
                                ])
                        ]
                    )
            ])
            ->actions([
                Tables\Actions\Action::make('view')
                    ->url(fn(Contact $record): string => ContactResource::getUrl('view', ['record' => $record]))
                    ->icon('heroicon-s-eye'),
                Tables\Actions\EditAction::make('edit')
//                    ->url(fn (Contact $record): string => ContactResource::getUrl('edit', ['record' => $record]))
                    ->icon('heroicon-s-pencil-square'),
                Tables\Actions\DetachAction::make('detach'),
            ])
            ->bulkActions([
                Tables\Actions\BulkActionGroup::make([
                ]),
            ]);
    }

}
Leave a Comment