232 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			232 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
/**
 | 
						|
 * Actions on folders
 | 
						|
 */
 | 
						|
export default {
 | 
						|
    /*
 | 
						|
     * -------------------------------------------------------------------------
 | 
						|
     * ----| CRUD |-------------------------------------------------------------
 | 
						|
     * -------------------------------------------------------------------------
 | 
						|
     */
 | 
						|
 | 
						|
    /**
 | 
						|
     * Display a listing of the resource.
 | 
						|
     */
 | 
						|
    async index({ getters, commit, dispatch }, { folders, show }) {
 | 
						|
        commit("setFolders", folders);
 | 
						|
 | 
						|
        if (show) {
 | 
						|
            if (show === "unread_items") {
 | 
						|
                show = getters.getUnreadItemsFolder;
 | 
						|
            }
 | 
						|
 | 
						|
            dispatch("show", { folder: show });
 | 
						|
        } else {
 | 
						|
            dispatch("show", {});
 | 
						|
        }
 | 
						|
    },
 | 
						|
 | 
						|
    /**
 | 
						|
     * Display the specified resource.
 | 
						|
     */
 | 
						|
    show(
 | 
						|
        { commit, getters, dispatch },
 | 
						|
        { folder, deselectDocuments = true, updateFeedItems = true }
 | 
						|
    ) {
 | 
						|
        const currentSelectedFolder = getters.selectedFolder;
 | 
						|
 | 
						|
        if (!folder) {
 | 
						|
            folder = currentSelectedFolder;
 | 
						|
        } else if (Number.isInteger(folder)) {
 | 
						|
            folder = getters.folders.find((f) => f.id === folder);
 | 
						|
        }
 | 
						|
 | 
						|
        commit("setSelectedFolder", folder);
 | 
						|
 | 
						|
        if (deselectDocuments) {
 | 
						|
            dispatch("documents/selectDocuments", [], { root: true });
 | 
						|
        }
 | 
						|
 | 
						|
        api.get(route("folder.show", folder)).then(function (response) {
 | 
						|
            dispatch(
 | 
						|
                "documents/index",
 | 
						|
                { documents: response, updateFeedItems: updateFeedItems },
 | 
						|
                { root: true }
 | 
						|
            );
 | 
						|
        });
 | 
						|
    },
 | 
						|
 | 
						|
    /**
 | 
						|
     * Load folder's details
 | 
						|
     */
 | 
						|
    async loadDetails({ dispatch }, folder) {
 | 
						|
        if (!folder.details_loaded && !folder.details_loading) {
 | 
						|
            dispatch("updateProperties", {
 | 
						|
                folderId: folder.id,
 | 
						|
                newProperties: {
 | 
						|
                    details_loading: true,
 | 
						|
                },
 | 
						|
            });
 | 
						|
 | 
						|
            let response = await api.get(route("folder.details", folder));
 | 
						|
 | 
						|
            response.details_loaded = true;
 | 
						|
            response.details_loading = false;
 | 
						|
 | 
						|
            dispatch("updateProperties", {
 | 
						|
                folderId: folder.id,
 | 
						|
                newProperties: response,
 | 
						|
            });
 | 
						|
        }
 | 
						|
    },
 | 
						|
 | 
						|
    /**
 | 
						|
     * Store a newly created resource in storage.
 | 
						|
     */
 | 
						|
    store({ dispatch }, { title, parent_id, group_id }) {
 | 
						|
        return api
 | 
						|
            .post(route("folder.store"), {
 | 
						|
                title,
 | 
						|
                parent_id,
 | 
						|
                group_id,
 | 
						|
            })
 | 
						|
            .then((data) => {
 | 
						|
                dispatch("index", { folders: data });
 | 
						|
            })
 | 
						|
            .catch((error) => console.error(error));
 | 
						|
    },
 | 
						|
 | 
						|
    /**
 | 
						|
     * Update the specified resource in storage.
 | 
						|
     */
 | 
						|
    async update({ dispatch }, { folder, newProperties }) {
 | 
						|
        const data = await api.put(
 | 
						|
            route("folder.update", folder),
 | 
						|
            newProperties
 | 
						|
        );
 | 
						|
 | 
						|
        dispatch("updateProperties", {
 | 
						|
            folderId: folder.id,
 | 
						|
            newProperties: data,
 | 
						|
        });
 | 
						|
    },
 | 
						|
 | 
						|
    /**
 | 
						|
     * Update the specified resource in storage.
 | 
						|
     */
 | 
						|
    updateProperties({ commit, getters }, { folderId, newProperties }) {
 | 
						|
        const folder = getters.folders.find((f) => f.id == folderId);
 | 
						|
 | 
						|
        if (!folder) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
 | 
						|
        commit("update", { folder: folder, newProperties: newProperties });
 | 
						|
    },
 | 
						|
 | 
						|
    updatePermission({ dispatch }, { folder, user, ability, granted }) {
 | 
						|
        api.post(route("folder.set_permission", folder), {
 | 
						|
            ability: ability,
 | 
						|
            granted: granted,
 | 
						|
            user_id: user,
 | 
						|
        }).then(function (response) {
 | 
						|
            dispatch("updateProperties", {
 | 
						|
                folderId: folder.id,
 | 
						|
                newProperties: response,
 | 
						|
            });
 | 
						|
        });
 | 
						|
    },
 | 
						|
 | 
						|
    /**
 | 
						|
     * Remove the specified resource from storage.
 | 
						|
     */
 | 
						|
    async destroy({ dispatch }, folder) {
 | 
						|
        const data = await api.delete(route("folder.destroy", folder));
 | 
						|
 | 
						|
        dispatch("index", { folders: data });
 | 
						|
    },
 | 
						|
 | 
						|
    /**
 | 
						|
     * Toggle specified folder expanded/collapsed
 | 
						|
     */
 | 
						|
    toggleExpanded({ dispatch }, folder) {
 | 
						|
        dispatch("update", {
 | 
						|
            folder: folder,
 | 
						|
            newProperties: {
 | 
						|
                ...folder,
 | 
						|
                ...{
 | 
						|
                    is_expanded: !folder.is_expanded,
 | 
						|
                },
 | 
						|
            },
 | 
						|
        });
 | 
						|
    },
 | 
						|
 | 
						|
    /**
 | 
						|
     * Toggle specified folder's branch expanded/collapsed
 | 
						|
     */
 | 
						|
    async toggleBranch({ commit }, folder) {
 | 
						|
        const response = await api.post(route("folder.toggle_branch", folder));
 | 
						|
 | 
						|
        commit("setFolders", response);
 | 
						|
    },
 | 
						|
 | 
						|
    /*
 | 
						|
     * -------------------------------------------------------------------------
 | 
						|
     * ----| Drag'n'drop |------------------------------------------------------
 | 
						|
     * -------------------------------------------------------------------------
 | 
						|
     */
 | 
						|
 | 
						|
    /**
 | 
						|
     * Remind folder being dragged
 | 
						|
     */
 | 
						|
    startDraggingFolder({ commit }, folder) {
 | 
						|
        commit("setDraggedFolder", folder);
 | 
						|
    },
 | 
						|
 | 
						|
    /**
 | 
						|
     * Forget folder being dragged
 | 
						|
     */
 | 
						|
    stopDraggingFolder({ commit }) {
 | 
						|
        commit("setDraggedFolder", null);
 | 
						|
    },
 | 
						|
 | 
						|
    /**
 | 
						|
     * Drop something into specified folder
 | 
						|
     */
 | 
						|
    async dropIntoFolder({ getters, dispatch }, folder) {
 | 
						|
        var sourceFolder = getters.draggedFolder;
 | 
						|
 | 
						|
        if (!sourceFolder) {
 | 
						|
            sourceFolder = getters.selectedFolder;
 | 
						|
 | 
						|
            await dispatch(
 | 
						|
                "documents/dropIntoFolder",
 | 
						|
                { sourceFolder: sourceFolder, targetFolder: folder },
 | 
						|
                { root: true }
 | 
						|
            );
 | 
						|
 | 
						|
            return;
 | 
						|
        }
 | 
						|
 | 
						|
        if (
 | 
						|
            sourceFolder.parent_id === folder.id ||
 | 
						|
            sourceFolder.id === folder.id
 | 
						|
        ) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
 | 
						|
        const newProperties = {
 | 
						|
            parent_id: folder.id,
 | 
						|
        };
 | 
						|
 | 
						|
        await dispatch("update", {
 | 
						|
            folder: sourceFolder,
 | 
						|
            newProperties: {
 | 
						|
                ...sourceFolder,
 | 
						|
                ...newProperties,
 | 
						|
            },
 | 
						|
        }).then(function () {
 | 
						|
            dispatch("groups/show", {}, { root: true });
 | 
						|
        });
 | 
						|
    },
 | 
						|
};
 |