Filament v3, custom download action button for table

in class controller

    public function table(Table $table): Table
    {
        return $table
            ->query(WtdReport::query()->whereNotNull('ltxday'))
            ->headerActions([
                \Filament\Tables\Actions\Action::make('download')
                    ->label('Download Report')
                    ->icon('heroicon-s-cloud-arrow-down')
                    //add download process
                    ->action(function ($livewire) {

                        $getdata = $livewire->getFilteredTableQuery()->whereNotNull('ltxday')
                            ->get()->map(function ($data, $k) {
                                $newdata = new \stdClass();
                                $newdata->{'No'} = $k + 1;
                                $newdata->{'Account No.'} = $data->actno;
                                $newdata->{'ID Number'} = $data->id1;
                                $newdata->{'Name'} = $data->name;
                                $newdata->{'GL Account No.'} = $data->gl_account;
                                $newdata->{'CODA Code'} = $data->coda_code;
                                $newdata->{'Transaction Amount'} = $data->txamt;
                                $newdata->{'Transaction Code (After)'} = $data->transaction_code_after;
                                $newdata->{'LTXDAY'} = $data->ltxday;
                                return $newdata;
                            })->toArray();

                        $livewire->dispatch('download-div', [
                            'data' => $getdata,
                            'name' => 'WtdReportClosingDataG12',
                        ]);
                    }),
            ])

in blade

  @assets
    <script src="{{ url('js/xlsx.full.min.js') }}"></script>
    @endassets

    @script
    <script data-navigate-once>
        // Event listener untuk butang "Download"
        $wire.on('download-div', (getdata) => {

            // console.log("data", getdata[0]);

            downloadXLSX(getdata[0].name + ".xlsx", getdata[0].data);

            // Fungsi untuk memuat turun fail XLSX
            function downloadXLSX(filename, data) {
                // Membuat workbook baru
                const workbook = XLSX.utils.book_new();

                // Menukar data ke dalam bentuk sheet
                //Associative arrays ([{}, {}, {}])	XLSX.utils.json_to_sheet()
                const worksheet = XLSX.utils.json_to_sheet(data);

                //AOA 2D arrays ([[...], [...]]) XLSX.utils.aoa_to_sheet()
                //   const worksheet = XLSX.utils.aoa_to_sheet(data);

                // Menambah worksheet ke dalam workbook
                XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1");

                // Menyimpan workbook sebagai fail XLSX
                XLSX.writeFile(workbook, filename);


            }
        }, {
            once: true
        });
    </script>
    @endscript

Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *