Allow for discarding of changes without leaving (#9644)

* Allow for discarding of changes without leaving

* Update to use v-if for consistency

* Fix boolean logic

* Allow disabling of options

* Remove unused disabled prop
This commit is contained in:
ian
2021-11-09 23:09:11 +08:00
committed by GitHub
parent c962144cef
commit 14a5347eca
5 changed files with 45 additions and 10 deletions

View File

@@ -136,6 +136,7 @@
@save-and-stay="saveAndStay"
@save-and-add-new="saveAndAddNew"
@save-as-copy="saveAsCopyAndNavigate"
@discard-and-stay="discardAndStay"
/>
</template>
</v-button>
@@ -385,6 +386,7 @@ export default defineComponent({
saveAndStay,
saveAndAddNew,
saveAsCopyAndNavigate,
discardAndStay,
templateData,
templateDataLoading,
archiveTooltip,
@@ -506,6 +508,11 @@ export default defineComponent({
router.push(leaveTo.value);
}
function discardAndStay() {
edits.value = {};
confirmLeave.value = false;
}
function revert(values: Record<string, any>) {
edits.value = {
...edits.value,

View File

@@ -99,9 +99,11 @@
<template #append-outer>
<save-options
v-if="hasEdits === true || saveAllowed === true"
v-if="hasEdits === true && saveAllowed === true"
:disabled-options="['save-and-add-new']"
@save-and-stay="saveAndStay"
@save-as-copy="saveAsCopyAndNavigate"
@discard-and-stay="discardAndStay"
/>
</template>
</v-button>
@@ -328,6 +330,7 @@ export default defineComponent({
deleting,
saveAndStay,
saveAsCopyAndNavigate,
discardAndStay,
isBatch,
editActive,
revisionsDrawerDetail,
@@ -411,9 +414,15 @@ export default defineComponent({
function discardAndLeave() {
if (!leaveTo.value) return;
edits.value = {};
confirmLeave.value = false;
router.push(leaveTo.value);
}
function discardAndStay() {
edits.value = {};
confirmLeave.value = false;
}
function downloadFile() {
const filePath = addTokenToURL(getRootPath() + `assets/${props.primaryKey}?download`);
window.open(filePath, '_blank');

View File

@@ -37,10 +37,11 @@
<template #append-outer>
<save-options
:disabled="hasEdits === false"
v-if="hasEdits === true"
@save-and-stay="saveAndStay"
@save-and-add-new="saveAndAddNew"
@save-as-copy="saveAsCopyAndNavigate"
@discard-and-stay="discardAndStay"
/>
</template>
</v-button>
@@ -178,6 +179,7 @@ export default defineComponent({
saveAndStay,
saveAndAddNew,
saveAsCopyAndNavigate,
discardAndStay,
isBatch,
title,
validationErrors,
@@ -217,6 +219,11 @@ export default defineComponent({
confirmLeave.value = false;
router.push(leaveTo.value);
}
function discardAndStay() {
edits.value = {};
confirmLeave.value = false;
}
},
});
</script>

View File

@@ -89,6 +89,7 @@
@save-and-stay="saveAndStay"
@save-and-add-new="saveAndAddNew"
@save-as-copy="saveAsCopyAndNavigate"
@discard-and-stay="discardAndStay"
/>
</template>
</v-button>
@@ -343,6 +344,7 @@ export default defineComponent({
saveAndStay,
saveAndAddNew,
saveAsCopyAndNavigate,
discardAndStay,
isBatch,
revisionsDrawerDetail,
previewLoading,
@@ -492,9 +494,15 @@ export default defineComponent({
function discardAndLeave() {
if (!leaveTo.value) return;
edits.value = {};
confirmLeave.value = false;
router.push(leaveTo.value);
}
function discardAndStay() {
edits.value = {};
confirmLeave.value = false;
}
async function toggleArchive() {
await archive();

View File

@@ -1,24 +1,28 @@
<template>
<v-menu show-arrow :disabled="disabled">
<v-menu show-arrow>
<template #activator="{ toggle }">
<v-icon :class="{ disabled }" name="more_vert" clickable @click="toggle" />
</template>
<v-list>
<v-list-item :disabled="disabled" clickable @click="$emit('save-and-stay')">
<v-list-item v-if="!disabledOptions.includes('save-and-stay')" clickable @click="$emit('save-and-stay')">
<v-list-item-icon><v-icon name="check" /></v-list-item-icon>
<v-list-item-content>{{ t('save_and_stay') }}</v-list-item-content>
<v-list-item-hint>{{ translateShortcut(['meta', 's']) }}</v-list-item-hint>
</v-list-item>
<v-list-item :disabled="disabled" clickable @click="$emit('save-and-add-new')">
<v-list-item v-if="!disabledOptions.includes('save-and-add-new')" clickable @click="$emit('save-and-add-new')">
<v-list-item-icon><v-icon name="add" /></v-list-item-icon>
<v-list-item-content>{{ t('save_and_create_new') }}</v-list-item-content>
<v-list-item-hint>{{ translateShortcut(['meta', 'shift', 's']) }}</v-list-item-hint>
</v-list-item>
<v-list-item :disabled="disabled" clickable @click="$emit('save-as-copy')">
<v-list-item v-if="!disabledOptions.includes('save-as-copy')" clickable @click="$emit('save-as-copy')">
<v-list-item-icon><v-icon name="done_all" /></v-list-item-icon>
<v-list-item-content>{{ t('save_as_copy') }}</v-list-item-content>
</v-list-item>
<v-list-item v-if="!disabledOptions.includes('discard-and-stay')" clickable @click="$emit('discard-and-stay')">
<v-list-item-icon><v-icon name="undo" /></v-list-item-icon>
<v-list-item-content>{{ t('discard_changes') }}</v-list-item-content>
</v-list-item>
</v-list>
</v-menu>
</template>
@@ -30,12 +34,12 @@ import translateShortcut from '@/utils/translate-shortcut';
export default defineComponent({
props: {
disabled: {
type: Boolean,
default: false,
disabledOptions: {
type: Array,
default: () => [],
},
},
emits: ['save-and-stay', 'save-and-add-new', 'save-as-copy'],
emits: ['save-and-stay', 'save-and-add-new', 'save-as-copy', 'discard-and-stay'],
setup() {
const { t } = useI18n();