- Remove old incremental migrations (now consolidated into create_* files) - Clean up cached view files - Various fixes across core-api, core-mcp, core-php packages Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2.7 KiB
2.7 KiB
Core-Admin TODO
Form Authorization Components
Priority: Medium
Context: Authorization checks scattered throughout views with @can directives.
Solution
Build authorization into form components themselves.
Implementation
{{-- resources/views/components/forms/input.blade.php --}}
@props([
'id',
'label' => null,
'canGate' => null,
'canResource' => null,
])
@php
$disabled = $attributes->get('disabled', false);
if ($canGate && $canResource && !$disabled) {
$disabled = !auth()->user()?->can($canGate, $canResource);
}
@endphp
<input {{ $attributes->merge(['disabled' => $disabled]) }} />
Usage
<x-forms.input canGate="update" :canResource="$biolink" id="name" label="Name" />
<x-forms.button canGate="update" :canResource="$biolink">Save</x-forms.button>
Components to Create
input.blade.phptextarea.blade.phpselect.blade.phpcheckbox.blade.phpbutton.blade.phptoggle.blade.php
Global Search (⌘K)
Priority: Medium Context: No unified search across resources.
Implementation
class GlobalSearch extends Component
{
public bool $open = false;
public string $query = '';
public array $results = [];
public function updatedQuery()
{
if (strlen($this->query) < 2) return;
$this->results = $this->searchProviders();
}
}
Features
- ⌘K keyboard shortcut
- Arrow key navigation
- Enter to select
- Module-provided search providers
- Recent searches
Requirements
SearchProviderinterface for modules to implement- Auto-discover providers from registered modules
- Fuzzy matching support
Real-time WebSocket (Soketi)
Priority: Low Context: No real-time updates. Users must refresh.
Implementation
Self-hosted Soketi + Laravel Echo.
# docker-compose.yml
soketi:
image: 'quay.io/soketi/soketi:latest'
ports:
- '6001:6001'
// Broadcasting events
broadcast(new ResourceUpdated($resource));
// Livewire listening
protected function getListeners()
{
return [
"echo-private:workspace.{$this->workspace->id},resource.updated" => 'refresh',
];
}
Notes
- DO NOT route through Bunny CDN (charges per connection)
- Use private channels for workspace-scoped events
Enhanced Form Components
Priority: Medium Context: Extend Flux Pro components with additional features.
Features to Add
- Dark mode consistency
- Automatic error display
- Helper text support
- Disabled states from authorization
instantSavefor real-time persistence
Components
<x-forms.input id="name" label="Name" helper="Enter a display name" />
<x-forms.toggle id="is_public" label="Public" instantSave />