query(Currency::query()) ->modelLabel($this->getTableModelLabel()) ->columns([ Tables\Columns\TextColumn::make('code') ->localizeLabel() ->weight(FontWeight::Medium) ->icon(static fn (Currency $record) => $record->isEnabled() ? 'heroicon-o-lock-closed' : null) ->tooltip(function (Currency $record) { $tooltipMessage = translate('Default :Record', [ 'Record' => $this->getTableModelLabel(), ]); return $record->isEnabled() ? $tooltipMessage : null; }) ->iconPosition(IconPosition::After) ->sortable() ->searchable(), Tables\Columns\TextColumn::make('name') ->localizeLabel() ->sortable() ->searchable(), Tables\Columns\TextColumn::make('rate') ->localizeLabel() ->sortable() ->searchable(), Tables\Columns\TextColumn::make('live_rate') ->localizeLabel() ->sortable() ->searchable(), ]) ->filters([ // ]) ->actions([ Tables\Actions\Action::make('update_rate') ->label('Update Rate') ->icon('heroicon-o-arrow-path') ->hidden(static fn (Currency $record): bool => $record->isEnabled() || ($record->rate === $record->live_rate)) ->requiresConfirmation() ->action(static function (Currency $record): void { if (($record->rate !== $record->live_rate) && $record->isDisabled()) { $record->update([ 'rate' => $record->live_rate, ]); Notification::make() ->success() ->title('Exchange Rate Updated') ->body(__('The exchange rate for :currency has been updated to reflect the current market rate.', [ 'currency' => $record->name, ])) ->send(); } }), ]) ->bulkActions([ Tables\Actions\BulkAction::make('update_rate') ->label('Update Rate') ->icon('heroicon-o-arrow-path') ->requiresConfirmation() ->deselectRecordsAfterCompletion() ->action(function (Collection $records): void { $updatedCurrencies = []; $records->each(function (Currency $record) use (&$updatedCurrencies): void { if (($record->rate !== $record->live_rate) && $record->isDisabled()) { $record->update([ 'rate' => $record->live_rate, ]); $updatedCurrencies[] = $record->name; } }); if (filled($updatedCurrencies)) { $currencyList = implode('
', array_map(static function ($currency) { return '• ' . $currency; }, $updatedCurrencies)); $message = __('The exchange rate for the following currencies has been updated to reflect the current market rate:') . '

'; $message .= $currencyList; Notification::make() ->success() ->title('Exchange Rates Updated') ->body($message) ->send(); } }), ]) ->checkIfRecordIsSelectableUsing(static function (Currency $record): bool { return ($record->rate !== $record->live_rate) && $record->isDisabled(); }); } public function render(): View { return view('livewire.company.service.live-currency.list-company-currencies'); } }