Richard Dern 400e3d01f1 Refresh
2022-01-12 00:35:37 +01:00

236 lines
6.2 KiB
JavaScript
Executable File

import { collect } from "collect.js";
/**
* Actions on documents
*/
export default {
/**
* Display a listing of the resource.
*/
async index(
{ commit, dispatch, getters },
{ documents, updateFeedItems = true }
) {
commit("setDocuments", documents);
let selectedDocuments = getters.selectedDocuments;
if (!selectedDocuments || selectedDocuments.length === 0) {
selectedDocuments = documents;
}
if (updateFeedItems) {
await dispatch("feedItems/index", selectedDocuments, {
root: true,
});
}
},
/**
* Store a newly created resource in storage.
*/
async store({ dispatch }, { url, folder_id, group_id }) {
const data = await api.post(route("document.store"), {
url: url,
folder_id: folder_id,
group_id: group_id,
});
dispatch("index", { documents: data });
},
/**
* Mark specified documents as selected.
*/
selectDocuments({ commit, dispatch }, { documents, selectFirstUnread }) {
commit("setSelectedDocuments", documents);
commit("feedItems/setSelectedFeedItems", [], {
root: true,
});
dispatch("feedItems/index", documents, { root: true }).then(
function () {
if (selectFirstUnread && documents) {
dispatch("feedItems/selectFirstUnreadFeedItem", null, {
root: true,
});
}
}
);
},
/**
* Select first document in currently displayed list
*/
selectFirstDocument({ getters, dispatch }) {
const document = collect(getters.documents).first();
dispatch("selectDocuments", [document]);
},
/**
* Select first document containing unread feed items in currently displayed
* list
*/
selectFirstDocumentWithUnreadItems(
{ getters, dispatch, rootGetters },
{ exclude, selectFirstUnread }
) {
if (!exclude) {
exclude = collect(getters.selectedDocuments).pluck("id").all();
}
const document = collect(getters.documents)
.where("feed_item_states_count", ">", 0)
.whereNotIn("id", exclude)
.first();
if (document) {
dispatch("selectDocuments", {
documents: [document],
selectFirstUnread: selectFirstUnread,
});
} else {
if (rootGetters["folders/selectedFolder"].type === "unread_items") {
dispatch("selectDocuments", {
selectFirstUnread: selectFirstUnread,
});
}
}
},
/**
* Remember documents being dragged
*/
startDraggingDocuments({ commit }, documents) {
commit("setDraggedDocuments", documents);
},
/**
* Forget dragged documents
*/
stopDraggingDocuments({ commit }) {
commit("setDraggedDocuments", []);
},
/**
* Move selected documents into specified folder
*/
async dropIntoFolder(
{ getters, commit, dispatch },
{ sourceFolder, targetFolder }
) {
const documents = collect(getters.draggedDocuments).pluck("id").all();
if (!documents || documents.length === 0) {
return;
}
const response = await api.post(
route("document.move", {
sourceFolder: sourceFolder.id,
targetFolder: targetFolder.id,
}),
{
documents: documents,
}
);
commit("setDraggedDocuments", []);
commit("setSelectedDocuments", []);
const newDocumentsList = collect(getters.documents).whereNotIn(
"id",
documents
);
dispatch("index", { documents: newDocumentsList });
dispatch("feedItems/index", getters.feeds, { root: true });
dispatch("feedItems/updateUnreadFeedItemsCount", response, {
root: true,
});
},
/**
* Increment visits for specified document
*/
async incrementVisits({ commit }, { document }) {
const data = await api.post(
route("document.visit", { document: document.id })
);
commit("update", {
document: document,
newProperties: data,
});
},
/**
* Open specified document in background
*/
openDocument({ dispatch }, { document }) {
window.open(document.url);
dispatch("incrementVisits", { document: document });
},
/**
* Remove specified documents from specified folder
*/
async destroy({ commit, getters, dispatch }, { folder, documents }) {
commit("setSelectedDocuments", []);
const data = await api.post(
route("document.destroy_bookmarks", { folder: folder.id }),
{
documents: collect(documents).pluck("id").all(),
}
);
dispatch("index", { documents: data });
},
/**
* Update the specified resource in storage.
*/
update({ commit, getters }, { documentId, newProperties }) {
const document = getters.documents.find((d) => d.id == documentId);
if (!document) {
return;
}
commit("update", { document: document, newProperties: newProperties });
},
/**
* Load every data available for specified document, unless it was already
* loaded
*/
load({ dispatch }, document) {
if (!document.loaded) {
return api
.get(route("document.show", document))
.then(function (response) {
response.loaded = true;
return dispatch("update", {
documentId: document.id,
newProperties: response,
});
});
}
},
followFeed({ commit }, feed) {
api.post(route("feed.follow", feed));
commit("ignoreFeed", { feed: feed, ignored: false });
},
ignoreFeed({ commit }, feed) {
api.post(route("feed.ignore", feed));
commit("ignoreFeed", { feed: feed, ignored: true });
},
};