openRecordUrlInNewTab() ->columns([ TextColumn::make('name') ->description(fn (Plugin $plugin) => (strlen($plugin->description) > 80) ? substr($plugin->description, 0, 80).'...' : $plugin->description) ->icon(fn (Plugin $plugin) => $plugin->isCompatible() ? 'tabler-versions' : 'tabler-versions-off') ->iconColor(fn (Plugin $plugin) => $plugin->isCompatible() ? 'success' : 'danger') ->tooltip(fn (Plugin $plugin) => !$plugin->isCompatible() ? 'This Plugin is only compatible with Panel version ' . $plugin->panel_version . ' but you are using version ' . config('app.version') . '!' : null) ->sortable(), TextColumn::make('author') ->sortable(), TextColumn::make('version') ->sortable(), TextColumn::make('category') ->badge() ->sortable(), TextColumn::make('status') ->badge() ->tooltip(fn (Plugin $plugin) => $plugin->status_message) ->sortable(), ]) ->actions([ Action::make('view') ->icon('tabler-eye-share') ->color('gray') ->visible(fn (Plugin $plugin) => $plugin->url) ->url(fn (Plugin $plugin) => $plugin->url, true), Action::make('settings') ->authorize(fn (Plugin $plugin) => auth()->user()->can('update plugin', $plugin)) ->icon('tabler-settings') ->color('primary') ->visible(fn (Plugin $plugin) => $plugin->status === PluginStatus::Enabled && $plugin->hasSettings()) ->form(fn (Plugin $plugin) => $plugin->getSettingsForm()) ->action(fn (array $data, Plugin $plugin) => $plugin->saveSettings($data)) ->slideOver(), Action::make('install') ->authorize(fn (Plugin $plugin) => auth()->user()->can('update plugin', $plugin)) ->icon('tabler-terminal') ->color('success') ->hidden(fn (Plugin $plugin) => $plugin->isInstalled()) ->action(function (Plugin $plugin, PluginService $service) { $service->installPlugin($plugin); redirect(ListPlugins::getUrl()); Notification::make() ->success() ->title('Plugin installed') ->send(); }), Action::make('enable') ->authorize(fn (Plugin $plugin) => auth()->user()->can('update plugin', $plugin)) ->icon('tabler-check') ->color('success') ->hidden(fn (Plugin $plugin) => !$plugin->isInstalled() || !$plugin->isDisabled()) ->action(function (Plugin $plugin, PluginService $service) { $service->enablePlugin($plugin); redirect(ListPlugins::getUrl()); Notification::make() ->success() ->title('Plugin enabled') ->send(); }), Action::make('disable') ->authorize(fn (Plugin $plugin) => auth()->user()->can('update plugin', $plugin)) ->icon('tabler-x') ->color('danger') ->hidden(fn (Plugin $plugin) => !$plugin->isInstalled() || $plugin->isDisabled()) ->action(function (Plugin $plugin, PluginService $service) { $service->disablePlugin($plugin); redirect(ListPlugins::getUrl()); Notification::make() ->success() ->title('Plugin disabled') ->send(); }), ]) ->emptyStateIcon('tabler-packages') ->emptyStateDescription('') ->emptyStateHeading('No Plugins'); } public static function getPages(): array { return [ 'index' => ListPlugins::route('/'), ]; } }