laravellaravel-filamentfilamentphp

How to Copy Text Url in Filament Laravel


I'm using Laravel Filament and encountering an issue. I have multiple kits allocated to vendors, and I'm displaying the kit names with slug URLs. How can I copy only the URL without copying any other text?

public static function infolist(Infolist $infolist): Infolist
    {
        return $infolist
            ->schema([
                Components\Section::make()
                    ->schema([
                        Components\Split::make([
                            Components\Grid::make()
                                ->schema([
                                    Components\TextEntry::make('vendor.name'),
                                    Components\TextEntry::make('kit_ids')->label('Kits Name & URL')
                                    ->formatStateUsing(function (KitAllocation $kitAllocation) {
                                        $kitIds = $kitAllocation->kit_ids;
                                        $kits = Kit::whereIn('id', $kitIds)->get();
                                        $output = '';
                                        foreach ($kits as $kit) {
                                         $url = env('APP_URL') . ('/' . $kitAllocation->vendor->slug . '/' . $kit->slug);
                                         $output .= "<li>" . $kit->kit_name . "<br>" . ' -> ' . $url . "</li>";
                                        }
                                        return $output;
                                    })->html()
                                        ->copyable(function (KitAllocation $kitAllocation) {
                                            $kitIds = $kitAllocation->kit_ids;
                                            $kits = Kit::whereIn('id', $kitIds)->get();

                                            if ($kits->isNotEmpty()) {
                                                $kit = $kits->first();
                                                return env('APP_URL') . ('/' . $kitAllocation->vendor->slug . '/' . $kit->slug);
                                            }

                                            return '';
                                        }),

                                ]),

                        ])->from('lg'),
                    ]),

            ]);
    }

I want a data display like this "**Welcome T-shirt & Bag Pack Kits -> http://127.0.0.1:8000/olio-global-adtech/welcome-t-shirt-bag-pack-kits**" and copy only url on particular click text.

How to Copy only url in filament in multiple kits with url.

Any One help me on this.


Solution

  • To achieve this, you can use the copyableState() method to customize the text that is copied to the clipboard. See code below.

    ...
    ->html()
    ->copyable()
    ->copyableState(
      function (KitAllocation $record) {
         $kitAllocation = $record;
         $kitIds = $kitAllocation->kit_ids;
         $kits = Kit::whereIn('id', $kitIds)->get();
        
         if ($kits->isNotEmpty()) {
              $kit = $kits->first();
              return env('APP_URL') . ('/' . $kitAllocation->vendor->slug . '/' . $kit->slug);
         }
        
         return '';
      }),
    ...
    

    Docs