@ -446,6 +446,80 @@
< / div >
< / div >
< / div >
< / div >
<!-- Add after the data export section -- >
< 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
< / r o u t e r - l i n k >
< 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
v - if = "downloadAttempted"
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 id = "sectionImportContactsSettings" class = "mt-4" >
< h2 class = "text-slate-500 text-sm font-bold" >
Import Contacts & Settings Database
< / h2 >
< div class = "ml-4 mt-2" >
< input type = "file" class = "ml-2" @change ="uploadImportFile" / >
< transition
enter - active - class = "transform ease-out duration-300 transition"
enter - from - class = "translate-y-2 opacity-0 sm:translate-y-4"
enter - to - class = "translate-y-0 opacity-100 sm:translate-y-0"
leave - active - class = "transition ease-in duration-500"
leave - from - class = "opacity-100"
leave - to - class = "opacity-0"
>
< div v-if ="showContactImport()" class="mt-4" >
< div class = "flex justify-center" >
< button
class = "block 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-6"
@ click = "confirmSubmitImportFile()"
>
Overwrite Settings & Contacts
< br / >
( which doesn ' t include Identifier Data )
< / button >
< / div >
< div class = "flex justify-center" >
< button
class = "block 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-6"
@ click = "checkContactImports()"
>
Import Only Contacts
< br / >
after comparing
< / button >
< / div >
< / div >
< / transition >
< / div >
< / div >
< / div >
<!-- Add after the data export section -- >
<!-- Add after the data export section -- >
< h3
< h3
id = "advanced"
id = "advanced"
@ -536,105 +610,6 @@
< / div >
< / div >
< / div >
< / div >
<!-- Advanced Actions -- >
< div class = "flex flex-col gap-4" >
< router -link
id = "switch-identity-link"
: to = "{ name: 'identity-switcher' }"
class = "block w-fit text-center text-md bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md"
>
Switch Identifier
< / r o u t e r - l i n k >
< router -link
: to = "{ name: 'statistics' }"
class = "block w-fit text-center text-md bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md"
>
See Global Animated History of Giving
< / r o u t e r - l i n k >
< router -link
: to = "{ name: 'logs' }"
class = "block w-fit text-center text-md bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md"
>
View Logs
< / r o u t e r - l i n k >
< / div >
< / div >
<!-- Add after the basic settings section -- >
< 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
< / r o u t e r - l i n k >
< 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 id = "sectionImportContactsSettings" class = "mt-4" >
< h2 class = "text-slate-500 text-sm font-bold" >
Import Contacts & Settings Database
< / h2 >
< div class = "ml-4 mt-2" >
< input type = "file" class = "ml-2" @change ="uploadImportFile" / >
< transition
enter - active - class = "transform ease-out duration-300 transition"
enter - from - class = "translate-y-2 opacity-0 sm:translate-y-4"
enter - to - class = "translate-y-0 opacity-100 sm:translate-y-0"
leave - active - class = "transition ease-in duration-500"
leave - from - class = "opacity-100"
leave - to - class = "opacity-0"
>
< div v-if ="showContactImport()" class="mt-4" >
< div class = "flex justify-center" >
< button
class = "block 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-6"
@ click = "confirmSubmitImportFile()"
>
Overwrite Settings & Contacts
< br / >
( which doesn ' t include Identifier Data )
< / button >
< / div >
< div class = "flex justify-center" >
< button
class = "block 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-6"
@ click = "checkContactImports()"
>
Import Only Contacts
< br / >
after comparing
< / button >
< / div >
< / div >
< / transition >
< / div >
< / div >
< / div >
<!-- Basic Settings -- >
<!-- Basic Settings -- >
< div
< div
id = "sectionBasicSettings"
id = "sectionBasicSettings"
@ -786,6 +761,32 @@
< / div >
< / div >
< / label >
< / label >
< / div >
< / div >
<!-- Advanced Actions -- >
< div class = "flex flex-col gap-4" >
< router -link
id = "switch-identity-link"
: to = "{ name: 'identity-switcher' }"
class = "block w-fit text-center text-md bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md"
>
Switch Identifier
< / r o u t e r - l i n k >
< router -link
: to = "{ name: 'statistics' }"
class = "block w-fit text-center text-md bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md"
>
See Global Animated History of Giving
< / r o u t e r - l i n k >
< router -link
: to = "{ name: 'logs' }"
class = "block w-fit text-center text-md bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md"
>
View Logs
< / r o u t e r - l i n k >
< / div >
< / div >
< / div >
< / div >
< / section >
< / section >
< / template >
< / template >
@ -851,6 +852,7 @@ export default class AccountViewView extends Vue {
isRegistered = false ;
isRegistered = false ;
profileImageUrl ? : string ;
profileImageUrl ? : string ;
showDidCopy = false ;
showDidCopy = false ;
showAdvanced = false ;
/ / S e r v e r s e t t i n g s
/ / S e r v e r s e t t i n g s
apiServer = "" ;
apiServer = "" ;
@ -878,7 +880,6 @@ export default class AccountViewView extends Vue {
publicBase64 = "" ;
publicBase64 = "" ;
publicHex = "" ;
publicHex = "" ;
derivationPath = "" ;
derivationPath = "" ;
showAdvanced = false ;
showB64Copy = false ;
showB64Copy = false ;
showPubCopy = false ;
showPubCopy = false ;
showDerCopy = false ;
showDerCopy = false ;
@ -898,6 +899,7 @@ export default class AccountViewView extends Vue {
passkeyExpirationDescription = "" ;
passkeyExpirationDescription = "" ;
hideRegisterPromptOnNewContact = false ;
hideRegisterPromptOnNewContact = false ;
previousPasskeyExpirationMinutes = DEFAULT_PASSKEY_EXPIRATION_MINUTES ;
previousPasskeyExpirationMinutes = DEFAULT_PASSKEY_EXPIRATION_MINUTES ;
downloadAttempted = false ;
/ / C o m p o n e n t r e f s
/ / C o m p o n e n t r e f s
declare $refs : {
declare $refs : {
@ -943,6 +945,17 @@ export default class AccountViewView extends Vue {
this . partnerApiServerInput = settings . partnerApiServer || "" ;
this . partnerApiServerInput = settings . partnerApiServer || "" ;
this . warnIfProdServer = ! ! settings . warnIfProdServer ;
this . warnIfProdServer = ! ! settings . warnIfProdServer ;
/ / I n i t i a l i z e s e r v e r s e t t i n g s i f t h e y ' r e e m p t y
if ( ! this . apiServerInput ) {
this . setApiServer ( 'prod' ) ;
}
if ( ! this . webPushServerInput ) {
this . setPushServer ( 'prod' ) ;
}
if ( ! this . partnerApiServerInput ) {
this . setPartnerServer ( 'prod' ) ;
}
/ / N o t i f i c a t i o n s e t t i n g s
/ / N o t i f i c a t i o n s e t t i n g s
this . notifyingNewActivity = ! ! settings . notifyingNewActivityTime ;
this . notifyingNewActivity = ! ! settings . notifyingNewActivityTime ;
this . notifyingNewActivityTime = settings . notifyingNewActivityTime || "" ;
this . notifyingNewActivityTime = settings . notifyingNewActivityTime || "" ;
@ -1226,6 +1239,7 @@ export default class AccountViewView extends Vue {
3000 ,
3000 ,
) ;
) ;
}
}
this . downloadAttempted = true ;
}
}
uploadImportFile ( event : Event ) {
uploadImportFile ( event : Event ) {