From 69ae99873af294d8786521c0770564d40126d227 Mon Sep 17 00:00:00 2001 From: Alexis Saettler Date: Thu, 13 Jul 2023 12:53:21 +0200 Subject: [PATCH] use inertia --- .../Controllers/ContactVCardController.php | 8 +++--- resources/js/Pages/Vault/Contact/Show.vue | 26 ++++++++++++------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/app/Domains/Contact/ManageContact/Web/Controllers/ContactVCardController.php b/app/Domains/Contact/ManageContact/Web/Controllers/ContactVCardController.php index 65038df6b03..cb6eb91f5cb 100644 --- a/app/Domains/Contact/ManageContact/Web/Controllers/ContactVCardController.php +++ b/app/Domains/Contact/ManageContact/Web/Controllers/ContactVCardController.php @@ -9,6 +9,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Redirect; use Illuminate\Support\Str; class ContactVCardController extends Controller @@ -18,9 +19,10 @@ public function download(Request $request, Vault $vault, Contact $contact) $cardData = $this->exportVCard($vault->id, $contact->id); $name = Str::of($contact->name)->slug(language: App::getLocale()); - return response()->streamDownload(function () use ($cardData) { - echo $cardData; - }, "$name.vcf", ['Content-Type' => 'text/vcard'], 'inline'); + return Redirect::back()->with('flash', [ + 'data' => $cardData, + 'filename' => "$name.vcf", + ]); } /** diff --git a/resources/js/Pages/Vault/Contact/Show.vue b/resources/js/Pages/Vault/Contact/Show.vue index 2c076401041..5f35213a9bd 100644 --- a/resources/js/Pages/Vault/Contact/Show.vue +++ b/resources/js/Pages/Vault/Contact/Show.vue @@ -132,15 +132,23 @@ const destroyAvatar = () => { }; const download = () => { - return axios.post(props.data.url.download_vcard).then((response) => { - const filename = response.headers['content-disposition'].split('filename=')[1]; - const url = window.URL.createObjectURL(new Blob([response.data])); - const link = document.createElement('a'); - link.href = url; - link.setAttribute('download', filename); - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); + router.post(props.data.url.download_vcard, null, { + preserveScroll: true, + onSuccess: (response) => { + const filename = response.props.jetstream.flash.filename; + if (filename !== undefined) { + const url = window.URL.createObjectURL(new Blob([response.props.jetstream.flash.data])); + const link = document.createElement('a'); + link.href = url; + link.setAttribute('download', filename); + try { + document.body.appendChild(link); + link.click(); + } catch (e) { + document.body.removeChild(link); + } + } + }, }); };