Commit f1e05e11 authored by davelopez's avatar davelopez
Browse files

Hide bulk undelete when all selected items purged

When we are in query selection mode we need to enable it anyway since we don't know if some items may not be purged in the query.
parent cb9dd02c
Loading
Loading
Loading
Loading
+23 −2
Original line number Diff line number Diff line
@@ -100,10 +100,31 @@ describe("History Selection Operations", () => {
                expect(wrapper.find(option).exists()).toBe(true);
            });

            it("should display 'undelete' option only on deleted items", async () => {
            it("should display 'undelete' option only on deleted and non-purged items", async () => {
                const option = '[data-description="undelete option"]';
                const ONE_PURGED_SELECTED = new Map([["FAKE_ID", { purged: true }]]);
                const ONE_NON_PURGED_SELECTED = new Map([["FAKE_ID", { purged: false }]]);
                expect(wrapper.find(option).exists()).toBe(false);
                await wrapper.setProps({ filterText: "deleted:true" });
                await wrapper.setProps({
                    filterText: "deleted:true",
                    contentSelection: ONE_NON_PURGED_SELECTED,
                });
                expect(wrapper.find(option).exists()).toBe(true);

                // In manual selection mode, if all selected items are purged we don't allow undeleting
                await wrapper.setProps({
                    filterText: "deleted:true",
                    contentSelection: ONE_PURGED_SELECTED,
                    isQuerySelection: false,
                });
                expect(wrapper.find(option).exists()).toBe(false);

                // In query selection mode we don't know if some items may not be purged, so we allow to undelete
                await wrapper.setProps({
                    filterText: "deleted:true",
                    contentSelection: ONE_PURGED_SELECTED,
                    isQuerySelection: true,
                });
                expect(wrapper.find(option).exists()).toBe(true);
            });

+13 −2
Original line number Diff line number Diff line
@@ -20,12 +20,12 @@
                    <span v-localize>Hide</span>
                </b-dropdown-item>
                <b-dropdown-item
                    v-if="showDeleted"
                    v-if="canUndeleteSelection"
                    v-b-modal:restore-selected-content
                    data-description="undelete option">
                    <span v-localize>Undelete</span>
                </b-dropdown-item>
                <b-dropdown-item v-else v-b-modal:delete-selected-content data-description="delete option">
                <b-dropdown-item v-if="!showDeleted" v-b-modal:delete-selected-content data-description="delete option">
                    <span v-localize>Delete</span>
                </b-dropdown-item>
                <b-dropdown-item v-b-modal:purge-selected-content data-description="purge option">
@@ -210,6 +210,17 @@ export default {
        noTagsSelected() {
            return this.selectedTags.length === 0;
        },
        canUndeleteSelection() {
            return this.showDeleted && (this.isQuerySelection || !this.areAllSelectedPurged);
        },
        areAllSelectedPurged() {
            for (const item of this.contentSelection.values()) {
                if (Object.prototype.hasOwnProperty.call(item, "purged") && !item["purged"]) {
                    return false;
                }
            }
            return true;
        },
    },
    watch: {
        hasSelection(newVal) {