columns(1) ->schema([ Forms\Components\TextInput::make('name') ->label('Name') ->required() ->maxLength(255), Forms\Components\Toggle::make('personal_team') ->label('Is personal?') ->required(), Forms\Components\Select::make('user_id') ->relationship(name: 'owner', titleAttribute: 'email') ->searchable(['name', 'email']) ->required(), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('name') ->searchable() ->sortable(), Tables\Columns\IconColumn::make('personal_team') ->boolean() ->label('Is personal?') ->sortable(), Tables\Columns\TextColumn::make('owner.email') ->sortable(), ]) ->filters([ // ]) ->actions([ Tables\Actions\EditAction::make(), Action::make('Import') ->icon('heroicon-o-inbox-arrow-down') ->action(function (Organization $record, array $data) { // TODO: different disk! try { /** @var ReportDto $report */ $report = app(ImportService::class)->import($record, $data['type'], Storage::disk('public')->get($data['file']), []); Notification::make() ->title('Import successful') ->success() ->body( 'Imported time entries: '.$report->timeEntriesCreated.'
'. 'Imported clients: '.$report->clientsCreated.'
'. 'Imported projects: '.$report->projectsCreated.'
'. 'Imported tasks: '.$report->tasksCreated.'
'. 'Imported tags: '.$report->tagsCreated.'
'. 'Imported users: '.$report->usersCreated ) ->persistent() ->send(); } catch (ImportException $exception) { report($exception); Notification::make() ->title('Import failed, changes rolled back') ->danger() ->body('Message: '.$exception->getMessage()) ->persistent() ->send(); } }) ->tooltip(fn (Organization $record): string => "Import into {$record->name}") ->form([ Forms\Components\FileUpload::make('file') ->label('File') ->required(), Select::make('type') ->required() ->options(function (): array { $select = []; foreach (app(ImporterProvider::class)->getImporterKeys() as $key) { $select[$key] = $key; } return $select; }), ]), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]); } public static function getRelations(): array { return [ // ]; } public static function getPages(): array { return [ 'index' => Pages\ListOrganizations::route('/'), 'create' => Pages\CreateOrganization::route('/create'), 'edit' => Pages\EditOrganization::route('/{record}/edit'), ]; } }