Files
Trilium/src/public/app/services/bulk_action.ts

98 lines
3.4 KiB
TypeScript
Raw Normal View History

2022-06-03 17:29:08 +02:00
import server from "./server.js";
import ws from "./ws.js";
import MoveNoteBulkAction from "../widgets/bulk_actions/note/move_note.js";
import DeleteNoteBulkAction from "../widgets/bulk_actions/note/delete_note.js";
import DeleteRevisionsBulkAction from "../widgets/bulk_actions/note/delete_revisions.js";
import DeleteLabelBulkAction from "../widgets/bulk_actions/label/delete_label.js";
import DeleteRelationBulkAction from "../widgets/bulk_actions/relation/delete_relation.js";
import RenameLabelBulkAction from "../widgets/bulk_actions/label/rename_label.js";
import RenameRelationBulkAction from "../widgets/bulk_actions/relation/rename_relation.js";
import UpdateLabelValueBulkAction from "../widgets/bulk_actions/label/update_label_value.js";
import UpdateRelationTargetBulkAction from "../widgets/bulk_actions/relation/update_relation_target.js";
import ExecuteScriptBulkAction from "../widgets/bulk_actions/execute_script.js";
import AddLabelBulkAction from "../widgets/bulk_actions/label/add_label.js";
import AddRelationBulkAction from "../widgets/bulk_actions/relation/add_relation.js";
2022-06-12 23:29:11 +02:00
import RenameNoteBulkAction from "../widgets/bulk_actions/note/rename_note.js";
2024-11-19 23:38:49 +02:00
import { t } from "./i18n.js";
import FNote from "../entities/fnote.js";
2022-06-03 17:29:08 +02:00
2022-06-05 23:36:46 +02:00
const ACTION_GROUPS = [
{
2024-11-19 23:38:49 +02:00
title: t("bulk_actions.labels"),
2022-06-05 23:36:46 +02:00
actions: [AddLabelBulkAction, UpdateLabelValueBulkAction, RenameLabelBulkAction, DeleteLabelBulkAction]
},
{
2024-11-19 23:38:49 +02:00
title: t("bulk_actions.relations"),
2022-06-05 23:36:46 +02:00
actions: [AddRelationBulkAction, UpdateRelationTargetBulkAction, RenameRelationBulkAction, DeleteRelationBulkAction]
},
{
2024-11-19 23:38:49 +02:00
title: t("bulk_actions.notes"),
2025-01-09 18:07:02 +02:00
actions: [RenameNoteBulkAction, MoveNoteBulkAction, DeleteNoteBulkAction, DeleteRevisionsBulkAction]
2022-06-05 23:36:46 +02:00
},
{
2024-11-19 23:38:49 +02:00
title: t("bulk_actions.other"),
2022-06-05 23:36:46 +02:00
actions: [ExecuteScriptBulkAction]
}
];
2022-06-03 17:29:08 +02:00
const ACTION_CLASSES = [
2022-06-12 23:29:11 +02:00
RenameNoteBulkAction,
MoveNoteBulkAction,
DeleteNoteBulkAction,
DeleteRevisionsBulkAction,
DeleteLabelBulkAction,
DeleteRelationBulkAction,
RenameLabelBulkAction,
RenameRelationBulkAction,
AddLabelBulkAction,
AddRelationBulkAction,
UpdateLabelValueBulkAction,
UpdateRelationTargetBulkAction,
ExecuteScriptBulkAction
2022-06-03 17:29:08 +02:00
];
async function addAction(noteId: string, actionName: string) {
2022-06-03 17:29:08 +02:00
await server.post(`notes/${noteId}/attributes`, {
2025-01-09 18:07:02 +02:00
type: "label",
name: "action",
2022-06-03 17:29:08 +02:00
value: JSON.stringify({
name: actionName
})
});
await ws.waitForMaxKnownEntityChangeId();
}
function parseActions(note: FNote) {
2025-01-09 18:07:02 +02:00
const actionLabels = note.getLabels("action");
2022-06-03 17:29:08 +02:00
2025-01-09 18:07:02 +02:00
return actionLabels
.map((actionAttr) => {
let actionDef;
2022-06-03 17:29:08 +02:00
2025-01-09 18:07:02 +02:00
try {
actionDef = JSON.parse(actionAttr.value);
} catch (e: any) {
logError(`Parsing of attribute: '${actionAttr.value}' failed with error: ${e.message}`);
return null;
}
2022-06-03 17:29:08 +02:00
2025-01-09 18:07:02 +02:00
const ActionClass = ACTION_CLASSES.find((actionClass) => actionClass.actionName === actionDef.name);
2022-06-03 17:29:08 +02:00
2025-01-09 18:07:02 +02:00
if (!ActionClass) {
logError(`No action class for '${actionDef.name}' found.`);
return null;
}
2022-06-03 17:29:08 +02:00
2025-01-09 18:07:02 +02:00
return new ActionClass(actionAttr, actionDef);
})
.filter((action) => !!action);
2022-06-03 17:29:08 +02:00
}
export default {
addAction,
parseActions,
2022-06-05 23:36:46 +02:00
ACTION_CLASSES,
ACTION_GROUPS
};