diff --git a/apps/client/src/widgets/bulk_actions/BulkAction.tsx b/apps/client/src/widgets/bulk_actions/BulkAction.tsx new file mode 100644 index 000000000..5f9c63750 --- /dev/null +++ b/apps/client/src/widgets/bulk_actions/BulkAction.tsx @@ -0,0 +1,7 @@ +interface BulkActionProps { + +} + +export default function BulkAction() { + +} \ No newline at end of file diff --git a/apps/client/src/widgets/dialogs/bulk_actions.css b/apps/client/src/widgets/dialogs/bulk_actions.css new file mode 100644 index 000000000..fe64a02b3 --- /dev/null +++ b/apps/client/src/widgets/dialogs/bulk_actions.css @@ -0,0 +1,24 @@ +.bulk-actions-dialog .modal-body h4:not(:first-child) { + margin-top: 20px; +} + +.bulk-actions-dialog .bulk-available-action-list button { + padding: 2px 7px; + margin-right: 10px; + margin-bottom: 5px; +} + +.bulk-actions-dialog .bulk-existing-action-list { + width: 100%; +} + +.bulk-actions-dialog .bulk-existing-action-list td { + padding: 7px; +} + +.bulk-actions-dialog .bulk-existing-action-list .button-column { + /* minimal width so that table remains static sized and most space remains for middle column with settings */ + width: 50px; + white-space: nowrap; + text-align: right; +} \ No newline at end of file diff --git a/apps/client/src/widgets/dialogs/bulk_actions.ts b/apps/client/src/widgets/dialogs/bulk_actions.ts deleted file mode 100644 index 544a5d03e..000000000 --- a/apps/client/src/widgets/dialogs/bulk_actions.ts +++ /dev/null @@ -1,175 +0,0 @@ -import BasicWidget from "../basic_widget.js"; -import froca from "../../services/froca.js"; -import bulkActionService from "../../services/bulk_action.js"; -import server from "../../services/server.js"; -import toastService from "../../services/toast.js"; -import { t } from "../../services/i18n.js"; -import type { EventData } from "../../components/app_context.js"; -import { closeActiveDialog, openDialog } from "../../services/dialog.js"; - - -const TPL = /*html*/` -`; - -export default class BulkActionsDialog extends BasicWidget { - private $includeDescendants!: JQuery; - private $affectedNoteCount!: JQuery; - private $availableActionList!: JQuery; - private $existingActionList!: JQuery; - private $executeButton!: JQuery; - private selectedOrActiveNoteIds: string[] | null = null; - - doRender() { - this.$widget = $(TPL); - this.$includeDescendants = this.$widget.find(".include-descendants"); - this.$includeDescendants.on("change", () => this.refresh()); - - this.$affectedNoteCount = this.$widget.find(".affected-note-count"); - - this.$availableActionList = this.$widget.find(".bulk-available-action-list"); - this.$existingActionList = this.$widget.find(".bulk-existing-action-list"); - - this.$widget.on("click", "[data-action-add]", async (event) => { - const actionName = $(event.target).attr("data-action-add"); - if (!actionName) { - return; - } - - await bulkActionService.addAction("_bulkAction", actionName); - await this.refresh(); - }); - - this.$executeButton = this.$widget.find(".execute-bulk-actions"); - this.$executeButton.on("click", async () => { - await server.post("bulk-action/execute", { - noteIds: this.selectedOrActiveNoteIds, - includeDescendants: this.$includeDescendants.is(":checked") - }); - - toastService.showMessage(t("bulk_actions.bulk_actions_executed"), 3000); - closeActiveDialog(); - }); - } - - async refresh() { - this.renderAvailableActions(); - - if (!this.selectedOrActiveNoteIds) { - return; - } - - const { affectedNoteCount } = await server.post("bulk-action/affected-notes", { - noteIds: this.selectedOrActiveNoteIds, - includeDescendants: this.$includeDescendants.is(":checked") - }) as { affectedNoteCount: number }; - - this.$affectedNoteCount.text(affectedNoteCount); - - const bulkActionNote = await froca.getNote("_bulkAction"); - if (!bulkActionNote) { - return; - } - - const actions = bulkActionService.parseActions(bulkActionNote); - - this.$existingActionList.empty(); - - if (actions.length > 0) { - this.$existingActionList.append(...actions.map((action) => action.render()).filter((action) => action !== null)); - } else { - this.$existingActionList.append($("

").text(t("bulk_actions.none_yet"))); - } - } - - renderAvailableActions() { - this.$availableActionList.empty(); - - for (const actionGroup of bulkActionService.ACTION_GROUPS) { - const $actionGroupList = $(""); - const $actionGroup = $("") - .append($("").text(`${actionGroup.title}: `)) - .append($actionGroupList); - - for (const action of actionGroup.actions) { - $actionGroupList.append($('