diff --git a/resources/views/livewire/plugins/index.blade.php b/resources/views/livewire/plugins/index.blade.php index bcecfc9..ab42b67 100644 --- a/resources/views/livewire/plugins/index.blade.php +++ b/resources/views/livewire/plugins/index.blade.php @@ -19,6 +19,8 @@ new class extends Component { public array $plugins; public $zipFile; + public string $sortBy = 'date_asc'; + public array $native_plugins = [ 'markup' => ['name' => 'Markup', 'flux_icon_name' => 'code-bracket', 'detail_view_route' => 'plugins.markup'], @@ -39,7 +41,47 @@ new class extends Component { public function refreshPlugins(): void { $userPlugins = auth()->user()?->plugins?->makeHidden(['render_markup', 'data_payload'])->toArray(); - $this->plugins = array_merge($this->native_plugins, $userPlugins ?? []); + $allPlugins = array_merge($this->native_plugins, $userPlugins ?? []); + $allPlugins = array_values($allPlugins); + $allPlugins = $this->sortPlugins($allPlugins); + $this->plugins = $allPlugins; + } + + protected function sortPlugins(array $plugins): array + { + $pluginsToSort = array_values($plugins); + + switch ($this->sortBy) { + case 'name_asc': + usort($pluginsToSort, function($a, $b) { + return strcasecmp($a['name'] ?? '', $b['name'] ?? ''); + }); + break; + + case 'name_desc': + usort($pluginsToSort, function($a, $b) { + return strcasecmp($b['name'] ?? '', $a['name'] ?? ''); + }); + break; + + case 'date_desc': + usort($pluginsToSort, function($a, $b) { + $aDate = $a['created_at'] ?? '1970-01-01'; + $bDate = $b['created_at'] ?? '1970-01-01'; + return strcmp($bDate, $aDate); + }); + break; + + case 'date_asc': + usort($pluginsToSort, function($a, $b) { + $aDate = $a['created_at'] ?? '1970-01-01'; + $bDate = $b['created_at'] ?? '1970-01-01'; + return strcmp($aDate, $bDate); + }); + break; + } + + return $pluginsToSort; } public function mount(): void @@ -47,6 +89,18 @@ new class extends Component { $this->refreshPlugins(); } + public function updatedSortBy(): void + { + $this->refreshPlugins(); + } + + public function getListeners(): array + { + return [ + 'plugin-installed' => 'refreshPlugins', + ]; + } + public function addPlugin(): void { abort_unless(auth()->user() !== null, 403); @@ -74,7 +128,6 @@ new class extends Component { { Artisan::call(ExampleRecipesSeederCommand::class, ['user_id' => auth()->id()]); $this->refreshPlugins(); - } @@ -101,7 +154,14 @@ new class extends Component { }; ?> -
+

Plugins & Recipes

@@ -124,8 +184,30 @@ new class extends Component { +
+
+
+ +
+
+ + + + + + +
+
+ @@ -194,7 +276,7 @@ new class extends Component { Browse and install Recipes from the community. Add yours here.
- +
@@ -265,9 +347,16 @@ new class extends Component {
+ @php + $allPlugins = $this->plugins; + @endphp +
- @foreach($plugins as $plugin) + @foreach($allPlugins as $index => $plugin)