label(__('proposal.copy_link')) ->icon('heroicon-o-clipboard-document-check') ->color('info') ->action(function () { // JS ile kopyalama yapar, bildirim göster }) ->extraAttributes(function () { $url = route('proposals.show', $this->record->slug); return [ 'x-data' => '', 'x-on:click' => "navigator.clipboard.writeText('{$url}').then(() => { \$dispatch('open-notification', { title: '" . __('proposal.link_copied') . "', type: 'success' }) })", ]; }) ->visible(fn () => $this->record !== null), // Yeni rastgele benzersiz slug üret ve kaydet Action::make('regenerate_slug') ->label(__('proposal.regenerate_slug')) ->icon('heroicon-o-arrow-path') ->color('warning') ->requiresConfirmation() ->modalHeading(__('proposal.regenerate_slug_confirm_heading')) ->modalDescription(__('proposal.regenerate_slug_confirm_body')) ->modalSubmitActionLabel(__('proposal.regenerate_slug_confirm_button')) ->action(function () { $newSlug = 'teklif-' . strtolower(Str::random(4)) . '-' . date('ymd') . '-' . strtolower(Str::random(4)); // Benzersizliği garanti et while (\App\Models\Proposal::where('slug', $newSlug)->where('id', '!=', $this->record->id)->exists()) { $newSlug = 'teklif-' . strtolower(Str::random(4)) . '-' . date('ymd') . '-' . strtolower(Str::random(4)); } $this->record->update(['slug' => $newSlug]); $newUrl = route('proposals.show', $newSlug); Notification::make() ->title(__('proposal.regenerate_slug_success')) ->body($newUrl) ->success() ->duration(8000) ->send(); // Formu yenile $this->fillForm(); }) ->visible(fn () => $this->record !== null), // Teklifi yeni sekmede önizle Action::make('preview') ->label(__('proposal.preview')) ->icon('heroicon-o-eye') ->color('gray') ->url(fn () => $this->record ? route('proposals.show', $this->record->slug) : '#') ->openUrlInNewTab() ->visible(fn () => $this->record !== null), ]; } }