Update browser confirm prompts to use confirm prompt modal instead

This commit is contained in:
advplyr 2025-02-24 17:44:17 -06:00
parent c7d8021a16
commit b0045b5b8b
5 changed files with 129 additions and 73 deletions

View File

@ -18,7 +18,7 @@
<ui-textarea-with-label v-model="newCollectionDescription" :label="$strings.LabelDescription" /> <ui-textarea-with-label v-model="newCollectionDescription" :label="$strings.LabelDescription" />
</div> </div>
</div> </div>
<div class="absolute bottom-0 left-0 right-0 w-full py-2 px-4 flex"> <div class="absolute bottom-0 left-0 right-0 w-full py-4 px-4 flex">
<ui-btn v-if="userCanDelete" small color="error" type="button" @click.stop="removeClick">{{ $strings.ButtonRemove }}</ui-btn> <ui-btn v-if="userCanDelete" small color="error" type="button" @click.stop="removeClick">{{ $strings.ButtonRemove }}</ui-btn>
<div class="flex-grow" /> <div class="flex-grow" />
<ui-btn color="success" type="submit">{{ $strings.ButtonSave }}</ui-btn> <ui-btn color="success" type="submit">{{ $strings.ButtonSave }}</ui-btn>
@ -94,21 +94,32 @@ export default {
this.newCollectionDescription = this.collection.description || '' this.newCollectionDescription = this.collection.description || ''
}, },
removeClick() { removeClick() {
if (confirm(this.$getString('MessageConfirmRemoveCollection', [this.collectionName]))) { const payload = {
message: this.$getString('MessageConfirmRemoveCollection', [this.collectionName]),
callback: (confirmed) => {
if (confirmed) {
this.deleteCollection()
}
},
type: 'yesNo'
}
this.$store.commit('globals/setConfirmPrompt', payload)
},
deleteCollection() {
this.processing = true this.processing = true
this.$axios this.$axios
.$delete(`/api/collections/${this.collection.id}`) .$delete(`/api/collections/${this.collection.id}`)
.then(() => { .then(() => {
this.processing = false
this.show = false this.show = false
this.$toast.success(this.$strings.ToastCollectionRemoveSuccess) this.$toast.success(this.$strings.ToastCollectionRemoveSuccess)
}) })
.catch((error) => { .catch((error) => {
console.error('Failed to remove collection', error) console.error('Failed to remove collection', error)
this.processing = false
this.$toast.error(this.$strings.ToastRemoveFailed) this.$toast.error(this.$strings.ToastRemoveFailed)
}) })
} .finally(() => {
this.processing = false
})
}, },
submitForm() { submitForm() {
if (this.newCollectionName === this.collectionName && this.newCollectionDescription === this.collection.description) { if (this.newCollectionName === this.collectionName && this.newCollectionDescription === this.collection.description) {

View File

@ -28,7 +28,7 @@
<button aria-label="Download Backup" class="inline-flex material-symbols text-xl mx-1 mt-1 text-white/70 hover:text-white/100" @click.stop="downloadBackup(backup)">download</button> <button aria-label="Download Backup" class="inline-flex material-symbols text-xl mx-1 mt-1 text-white/70 hover:text-white/100" @click.stop="downloadBackup(backup)">download</button>
<button aria-label="Delete Backup" class="inline-flex material-symbols text-xl mx-1 text-white/70 hover:text-error" @click="deleteBackupClick(backup)">delete</button> <button aria-label="Delete Backup" class="inline-flex material-symbols text-xl mx-1 text-white/70 hover:text-error" @click.stop="deleteBackupClick(backup)">delete</button>
</div> </div>
</td> </td>
</tr> </tr>
@ -107,21 +107,32 @@ export default {
}) })
}, },
deleteBackupClick(backup) { deleteBackupClick(backup) {
if (confirm(this.$getString('MessageConfirmDeleteBackup', [this.$formatDatetime(backup.createdAt, this.dateFormat, this.timeFormat)]))) { const payload = {
message: this.$getString('MessageConfirmDeleteBackup', [this.$formatDatetime(backup.createdAt, this.dateFormat, this.timeFormat)]),
callback: (confirmed) => {
if (confirmed) {
this.deleteBackup(backup)
}
},
type: 'yesNo'
}
this.$store.commit('globals/setConfirmPrompt', payload)
},
deleteBackup(backup) {
this.processing = true this.processing = true
this.$axios this.$axios
.$delete(`/api/backups/${backup.id}`) .$delete(`/api/backups/${backup.id}`)
.then((data) => { .then((data) => {
this.setBackups(data.backups || []) this.setBackups(data.backups || [])
this.$toast.success(this.$strings.ToastBackupDeleteSuccess) this.$toast.success(this.$strings.ToastBackupDeleteSuccess)
this.processing = false
}) })
.catch((error) => { .catch((error) => {
console.error(error) console.error(error)
this.$toast.error(this.$strings.ToastBackupDeleteFailed) this.$toast.error(this.$strings.ToastBackupDeleteFailed)
})
.finally(() => {
this.processing = false this.processing = false
}) })
}
}, },
applyBackup(backup) { applyBackup(backup) {
this.selectedBackup = backup this.selectedBackup = backup

View File

@ -91,12 +91,23 @@ export default {
}, },
deleteUserClick(user) { deleteUserClick(user) {
if (this.isDeletingUser) return if (this.isDeletingUser) return
if (confirm(this.$getString('MessageRemoveUserWarning', [user.username]))) {
const payload = {
message: this.$getString('MessageRemoveUserWarning', [user.username]),
callback: (confirmed) => {
if (confirmed) {
this.deleteUser(user)
}
},
type: 'yesNo'
}
this.$store.commit('globals/setConfirmPrompt', payload)
},
deleteUser(user) {
this.isDeletingUser = true this.isDeletingUser = true
this.$axios this.$axios
.$delete(`/api/users/${user.id}`) .$delete(`/api/users/${user.id}`)
.then((data) => { .then((data) => {
this.isDeletingUser = false
if (data.error) { if (data.error) {
this.$toast.error(data.error) this.$toast.error(data.error)
} else { } else {
@ -106,9 +117,10 @@ export default {
.catch((error) => { .catch((error) => {
console.error('Failed to delete user', error) console.error('Failed to delete user', error)
this.$toast.error(this.$strings.ToastUserDeleteFailed) this.$toast.error(this.$strings.ToastUserDeleteFailed)
})
.finally(() => {
this.isDeletingUser = false this.isDeletingUser = false
}) })
}
}, },
editUser(user) { editUser(user) {
this.$emit('edit', user) this.$emit('edit', user)

View File

@ -176,7 +176,18 @@ export default {
this.$store.commit('globals/setEditCollection', this.collection) this.$store.commit('globals/setEditCollection', this.collection)
}, },
removeClick() { removeClick() {
if (confirm(this.$getString('MessageConfirmRemoveCollection', [this.collectionName]))) { const payload = {
message: this.$getString('MessageConfirmRemoveCollection', [this.collectionName]),
callback: (confirmed) => {
if (confirmed) {
this.deleteCollection()
}
},
type: 'yesNo'
}
this.$store.commit('globals/setConfirmPrompt', payload)
},
deleteCollection() {
this.processing = true this.processing = true
this.$axios this.$axios
.$delete(`/api/collections/${this.collection.id}`) .$delete(`/api/collections/${this.collection.id}`)
@ -190,7 +201,6 @@ export default {
.finally(() => { .finally(() => {
this.processing = false this.processing = false
}) })
}
}, },
clickPlay() { clickPlay() {
const queueItems = [] const queueItems = []

View File

@ -599,19 +599,31 @@ export default {
}, },
clearProgressClick() { clearProgressClick() {
if (!this.userMediaProgress) return if (!this.userMediaProgress) return
if (confirm(this.$strings.MessageConfirmResetProgress)) {
const payload = {
message: this.$strings.MessageConfirmResetProgress,
callback: (confirmed) => {
if (confirmed) {
this.clearProgress()
}
},
type: 'yesNo'
}
this.$store.commit('globals/setConfirmPrompt', payload)
},
clearProgress() {
this.resettingProgress = true this.resettingProgress = true
this.$axios this.$axios
.$delete(`/api/me/progress/${this.userMediaProgress.id}`) .$delete(`/api/me/progress/${this.userMediaProgress.id}`)
.then(() => { .then(() => {
console.log('Progress reset complete') console.log('Progress reset complete')
this.resettingProgress = false
}) })
.catch((error) => { .catch((error) => {
console.error('Progress reset failed', error) console.error('Progress reset failed', error)
})
.finally(() => {
this.resettingProgress = false this.resettingProgress = false
}) })
}
}, },
clickRSSFeed() { clickRSSFeed() {
this.$store.commit('globals/setRSSFeedOpenCloseModal', { this.$store.commit('globals/setRSSFeedOpenCloseModal', {