<?php
namespace App\Livewire\Tokens;
class ListTokens extends Component implements HasForms, HasTable
{
use InteractsWithForms;
use InteractsWithTable;
public User $user;
public function mount(User $user): void
{
$this->user = $user;
}
public function table(Table $table): Table
{
return $table
->relationship(fn (): MorphMany => $this->user->tokens())
->inverseRelationship('tokens')
->columns([
TextColumn::make('name'),
TextColumn::make('tokenable.name')
->label('User'),
TextColumn::make('created_at')
->toggleable(isToggledHiddenByDefault: true),
])
->headerActions([
Tables\Actions\CreateAction::make('create_token')
->label('Crear Token')
->icon('heroicon-o-plus')
->createAnother(false)
->modal()
->mountUsing(function (Form $form) {
$form->fill(['tokenable_id' => $this->user->id]);
})
->using(function (array $data): Model {
$user = User::find($data['tokenable_id']);
$token = $user->createToken($data['name']);
Session::flash('token', $token->plainTextToken);
return $token->accessToken;
})
->form(fn (Form $form) => TokenResource::form($form))
])
}
public function render(): View
{
return view('livewire.tokens.list-tokens');
}
}