lundi 25 février 2019

Laravel - Trying to achieve preview option for an Excel file before submission, but it only works one specific way

I'm working with an Excel improtation function (Using maatwebsite/excel package) and I have that part covered, but I also need to have a function that'd allow apreview "sneak peek" before the file is uploaded.

I did manage to make it work (pic - https://imgur.com/rySv3Ck), but it ONLY works a certain way - code:

public function MakeImportPreview(Request $request)
{
    $dataPreview = Excel::toCollection(new ClientsImport(), $request->file('file'));

    $randomDataPreviews = $dataPreview->get(0)
        ->take(20)
        ->reject(function($row) {
            return
                !isset($row['name'])
                || !isset($row['email'])
                || is_null($row['name'])
                || is_null($row['email'])
                || empty($row['name'])
                || empty($row['email']);
        })
        ->toArray();


    return view('clients.preview', compact('randomDataPreviews'));
}

From the ClientsImportPreview class:

class ClientsImportPreview implements ToCollection, WithHeadingRow, WithLimit
{

public function collection(Collection $rows)
{
   return $rows->get(0)->reject(function($row) {
       return
           !isset($row['name'])
           || !isset($row['email'])
           || is_null($row['name'])
           || is_null($row['email'])
           || empty($row['name'])
           || empty($row['email']);
   })->take(20);
}


public function limit(): int
{
    return 20;
}

}

Basically, usage of reject and checking for emptiness/not being set was the only way I could make it work.

Is there a way to make this work by looking for the populated fields, as opposed to non-populated ones?

For example, if I try the following code instead:

public function MakeImportPreview(Request $request)
{
    $dataPreview = Excel::toCollection(new ClientsImport(), $request->file('file'));

    $randomDataPreviews = $dataPreview->get(0)
        ->take(20)
        ->map(function($row) {
            return
                isset($row['name'])
                || isset($row['email'])
                || !is_null($row['name'])
                || !is_null($row['email'])
                || !empty($row['name'])
                || !empty($row['email']);
        })
        ->toArray();


    return view('clients.preview', compact('randomDataPreviews'));
}



  class ClientsImportPreview implements ToCollection, WithHeadingRow, WithLimit
{

public function collection(Collection $rows)
{
   return $rows->get(0)->reject(function($row) {
       return
           !isset($row['name'])
           || !isset($row['email'])
           || is_null($row['name'])
           || is_null($row['email'])
           || empty($row['name'])
           || empty($row['email']);
   })->take(20);
}

I then get the following result -https://imgur.com/6iFKH4Y.

Any help is greatly appreciated. Thanks in advance!



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire