Tables\Columns\IconColumn::make('latestAsbestosCompliance.asbestos_present') ->label('Asbestos Present') ->getStateUsing(function ($record) { if ($record?->latestAsbestosCompliance) { return $record->latestAsbestosCompliance->asbestos_present ? 'Yes' : 'No'; } else { return 'Not Recorded'; } }) ->icon(function ($state) { return match ($state) { 'Yes' => 'heroicon-o-face-frown', 'No' => 'heroicon-o-face-smile', 'Not Recorded' => 'heroicon-o-exclamation-triangle', }; }) ->tooltip(function ($state) { return match ($state) { 'Yes' => 'Asbestos is present', 'No' => 'Asbestos is not present', 'Not Recorded' => 'Asbestos compliance has not been recorded', }; }) ->color(function ($state) { return match ($state) { 'Yes' => 'danger', 'No' => 'success', 'Not Recorded' => 'danger', }; }) ->sortable() ->action( EditAction::make('editLatestAsbestosCompliance') ->visible(fn($record) => !!$record->latestAsbestosCompliance) ->modalHeading('Edit Asbestos Compliance') ->mutateRecordDataUsing(function (array $data) { $location = Location::find($data['id']); return $location->latestAsbestosCompliance->toArray(); }) ->form([ Forms\Components\Section::make('Compliance') ->columns(3) ->schema([ Forms\Components\Toggle::make('asbestos_present') ->label('Asbestos Present'), Forms\Components\Toggle::make('survey_in_place') ->label('Survey in Place'), Forms\Components\Toggle::make('team_training_complete') ->label('Team Training Complete'), ]), Forms\Components\Grid::make(2)->schema([ Forms\Components\FileUpload::make('documentation_attachment') ->label('Documentation') ->disk('public') ->directory('asbestos') ->maxSize(10240), Forms\Components\Textarea::make('notes') ->label('Notes'), ]), ]) ->using(function (Location $record, array $data): Location { $record->latestAsbestosCompliance->update($data); return $record; }), CreateAction::make('createLatestAsbestosCompliance') ->visible(fn($record) => !$record->latestAsbestosCompliance) ->modalHeading('Create Asbestos Compliance') ->form([ Forms\Components\Section::make('Compliance') ->columns(3) ->schema([ Forms\Components\Toggle::make('asbestos_present') ->label('Asbestos Present'), Forms\Components\Toggle::make('survey_in_place') ->label('Survey in Place'), Forms\Components\Toggle::make('team_training_complete') ->label('Team Training Complete'), ]), Forms\Components\Grid::make(2)->schema([ Forms\Components\FileUpload::make('documentation_attachment') ->label('Documentation') ->disk('public') ->directory('asbestos') ->maxSize(10240), Forms\Components\Textarea::make('notes') ->label('Notes'), ]), ]) ->using(function (Location $record, array $data): Location { $record->asbestosCompliance->create($data); return $record; }), ),