From 12b8a70e5ccd16ff26cea21e2e59f9f8a6386c3b Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 9 Aug 2025 09:28:48 +0300 Subject: [PATCH] feat(react/bulk_actions): port update label value --- .../bulk_actions/label/update_label_value.ts | 65 ------------------- .../bulk_actions/label/update_label_value.tsx | 49 ++++++++++++++ 2 files changed, 49 insertions(+), 65 deletions(-) delete mode 100644 apps/client/src/widgets/bulk_actions/label/update_label_value.ts create mode 100644 apps/client/src/widgets/bulk_actions/label/update_label_value.tsx diff --git a/apps/client/src/widgets/bulk_actions/label/update_label_value.ts b/apps/client/src/widgets/bulk_actions/label/update_label_value.ts deleted file mode 100644 index d32e21c7e..000000000 --- a/apps/client/src/widgets/bulk_actions/label/update_label_value.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { t } from "../../../services/i18n.js"; -import SpacedUpdate from "../../../services/spaced_update.js"; -import AbstractBulkAction from "../abstract_bulk_action.js"; - -const TPL = /*html*/` - - -
-
${t("update_label_value.update_label_value")}
- - - -
${t("update_label_value.to_value")}
- - -
- - - - - - -`; - -export default class UpdateLabelValueBulkAction extends AbstractBulkAction { - static get actionName() { - return "updateLabelValue"; - } - static get actionTitle() { - return t("update_label_value.update_label_value"); - } - - doRender() { - const $action = $(TPL); - - const $labelName = $action.find(".label-name"); - $labelName.val(this.actionDef.labelName || ""); - - const $labelValue = $action.find(".label-value"); - $labelValue.val(this.actionDef.labelValue || ""); - - const spacedUpdate = new SpacedUpdate(async () => { - await this.saveAction({ - labelName: $labelName.val(), - labelValue: $labelValue.val() - }); - }, 1000); - - $labelName.on("input", () => spacedUpdate.scheduleUpdate()); - $labelValue.on("input", () => spacedUpdate.scheduleUpdate()); - - return $action; - } -} diff --git a/apps/client/src/widgets/bulk_actions/label/update_label_value.tsx b/apps/client/src/widgets/bulk_actions/label/update_label_value.tsx new file mode 100644 index 000000000..25beafc3e --- /dev/null +++ b/apps/client/src/widgets/bulk_actions/label/update_label_value.tsx @@ -0,0 +1,49 @@ +import { t } from "../../../services/i18n.js"; +import AbstractBulkAction, { ActionDefinition } from "../abstract_bulk_action.js"; +import FormTextBox from "../../react/FormTextBox.jsx"; +import BulkAction, { BulkActionText } from "../BulkAction.jsx"; +import { useSpacedUpdate } from "../../react/hooks.jsx"; +import { useEffect, useState } from "preact/hooks"; + +function UpdateLabelValueComponent({ bulkAction, actionDef }: { bulkAction: AbstractBulkAction, actionDef: ActionDefinition}) { + const [ labelName, setLabelName ] = useState(actionDef.labelName ?? ""); + const [ labelValue, setLabelValue ] = useState(actionDef.labelValue ?? ""); + const spacedUpdate = useSpacedUpdate(() => bulkAction.saveAction({ labelName, labelValue })); + useEffect(() => spacedUpdate.scheduleUpdate(), [labelName, labelValue]); + + return ( + +

${t("update_label_value.help_text")}

+ + ${t("update_label_value.help_text_note")} + } + > + + + +
+ ) +} + +export default class UpdateLabelValueBulkAction extends AbstractBulkAction { + static get actionName() { + return "updateLabelValue"; + } + static get actionTitle() { + return t("update_label_value.update_label_value"); + } + + doRender() { + return ; + } +}