Browse Source
- Add detailed error logging for image upload failures in PhotoDialog and SharedPhotoView - Extract DataExportSection into standalone component with proper prop handling - Fix Backup Identifier Seed visibility by passing activeDid propcross-platform-factory
4 changed files with 139 additions and 67 deletions
@ -0,0 +1,114 @@ |
|||||
|
<template> |
||||
|
<div |
||||
|
id="sectionDataExport" |
||||
|
class="bg-slate-100 rounded-md overflow-hidden px-4 py-4 mt-8 mb-8" |
||||
|
> |
||||
|
<div class="mb-2 font-bold">Data Export</div> |
||||
|
<router-link |
||||
|
v-if="activeDid" |
||||
|
:to="{ name: 'seed-backup' }" |
||||
|
class="block w-full text-center text-md bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md mb-2 mt-2" |
||||
|
> |
||||
|
Backup Identifier Seed |
||||
|
</router-link> |
||||
|
|
||||
|
<button |
||||
|
:class="computedStartDownloadLinkClassNames()" |
||||
|
class="block w-full text-center text-md bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md" |
||||
|
@click="exportDatabase()" |
||||
|
> |
||||
|
Download Settings & Contacts |
||||
|
<br /> |
||||
|
(excluding Identifier Data) |
||||
|
</button> |
||||
|
<a |
||||
|
ref="downloadLink" |
||||
|
:class="computedDownloadLinkClassNames()" |
||||
|
class="block w-full text-center text-md bg-gradient-to-b from-green-500 to-green-800 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md mb-6" |
||||
|
> |
||||
|
If no download happened yet, click again here to download now. |
||||
|
</a> |
||||
|
<div class="mt-4"> |
||||
|
<p> |
||||
|
After the download, you can save the file in your preferred storage |
||||
|
location. |
||||
|
</p> |
||||
|
<ul> |
||||
|
<li class="list-disc list-outside ml-4"> |
||||
|
On iOS: Choose "More..." and select a place in iCloud, or go "Back" |
||||
|
and save to another location. |
||||
|
</li> |
||||
|
<li class="list-disc list-outside ml-4"> |
||||
|
On Android: Choose "Open" and then share |
||||
|
<font-awesome icon="share-nodes" class="fa-fw" /> |
||||
|
to your prefered place. |
||||
|
</li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script lang="ts"> |
||||
|
import { Component, Prop, Vue } from "vue-facing-decorator"; |
||||
|
import { NotificationIface } from "../constants/app"; |
||||
|
import { db } from "../db/index"; |
||||
|
import { logger } from "../utils/logger"; |
||||
|
|
||||
|
@Component |
||||
|
export default class DataExportSection extends Vue { |
||||
|
$notify!: (notification: NotificationIface, timeout?: number) => void; |
||||
|
|
||||
|
@Prop({ required: true }) readonly activeDid!: string; |
||||
|
downloadUrl = ""; |
||||
|
|
||||
|
beforeUnmount() { |
||||
|
if (this.downloadUrl) { |
||||
|
URL.revokeObjectURL(this.downloadUrl); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public async exportDatabase() { |
||||
|
try { |
||||
|
const blob = await db.export({ prettyJson: true }); |
||||
|
this.downloadUrl = URL.createObjectURL(blob); |
||||
|
const downloadAnchor = this.$refs.downloadLink as HTMLAnchorElement; |
||||
|
downloadAnchor.href = this.downloadUrl; |
||||
|
downloadAnchor.download = `${db.name}-backup.json`; |
||||
|
downloadAnchor.click(); |
||||
|
this.$notify( |
||||
|
{ |
||||
|
group: "alert", |
||||
|
type: "success", |
||||
|
title: "Download Started", |
||||
|
text: "See your downloads directory for the backup. It is in the Dexie format.", |
||||
|
}, |
||||
|
-1, |
||||
|
); |
||||
|
setTimeout(() => URL.revokeObjectURL(this.downloadUrl), 1000); |
||||
|
} catch (error) { |
||||
|
logger.error("Export Error:", error); |
||||
|
this.$notify( |
||||
|
{ |
||||
|
group: "alert", |
||||
|
type: "danger", |
||||
|
title: "Export Error", |
||||
|
text: "There was an error exporting the data.", |
||||
|
}, |
||||
|
3000, |
||||
|
); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public computedStartDownloadLinkClassNames() { |
||||
|
return { |
||||
|
hidden: this.downloadUrl, |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
public computedDownloadLinkClassNames() { |
||||
|
return { |
||||
|
hidden: !this.downloadUrl, |
||||
|
}; |
||||
|
} |
||||
|
} |
||||
|
</script> |
Loading…
Reference in new issue