From 16c4a4e6715b1399c6658f9f330cf75ef1d334f5 Mon Sep 17 00:00:00 2001 From: Gareth George Date: Wed, 22 Apr 2026 01:11:17 -0700 Subject: [PATCH] add it to the ui --- webui/messages/en.json | 2 + webui/src/components/common/HooksFormList.tsx | 41 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/webui/messages/en.json b/webui/messages/en.json index b59e1ef5..0c0a8818 100644 --- a/webui/messages/en.json +++ b/webui/messages/en.json @@ -185,6 +185,8 @@ "repo_hooks_command_runs_condition_forget_success": "Triggered when a forget operation completes successfully", "repo_hooks_command_runs_condition_forget_error": "Triggered when a forget operation fails", "repo_hooks_command_runs_condition_any_error": "Triggered when any operation fails", + "repo_hooks_command_runs_condition_any_start": "Triggered before any operation starts", + "repo_hooks_command_runs_condition_any_end": "Triggered after any operation ends (success or fail)", "repo_hooks_command_runs_condition_unknown": "Triggered when unknown", "settings_modal_title": "Settings", "app_breadcrumb_repo": "Repo", diff --git a/webui/src/components/common/HooksFormList.tsx b/webui/src/components/common/HooksFormList.tsx index e44e9f12..302677a6 100644 --- a/webui/src/components/common/HooksFormList.tsx +++ b/webui/src/components/common/HooksFormList.tsx @@ -42,6 +42,7 @@ export interface HookFields { actionShoutrrr?: any; actionHealthchecks?: any; actionTelegram?: any; + actionSyncLock?: any; } export const hooksListTooltipText = ( @@ -83,6 +84,8 @@ const hookConditionDescriptions: Record = { CONDITION_FORGET_SUCCESS: m.repo_hooks_command_runs_condition_forget_success(), CONDITION_FORGET_ERROR: m.repo_hooks_command_runs_condition_forget_error(), CONDITION_ANY_ERROR: m.repo_hooks_command_runs_condition_any_error(), + CONDITION_ANY_START: m.repo_hooks_command_runs_condition_any_start(), + CONDITION_ANY_END: m.repo_hooks_command_runs_condition_any_end(), CONDITION_UNKNOWN: m.repo_hooks_command_runs_condition_unknown(), }; @@ -554,6 +557,44 @@ const hookTypes: { ); }, }, + { + name: "Sync Lock", + template: { + actionSyncLock: { + targetInstanceId: "", + lockKey: "", + }, + conditions: ["CONDITION_ANY_START", "CONDITION_ANY_END"], + }, + oneofKey: "actionSyncLock", + component: ({ hook, onChange }) => { + const updateSyncLock = (field: string, val: string) => { + onChange({ + ...hook, + actionSyncLock: { ...hook.actionSyncLock, [field]: val }, + }); + }; + return ( + + + updateSyncLock("targetInstanceId", e.target.value) + } + size="sm" + /> + updateSyncLock("lockKey", e.target.value)} + size="sm" + /> + + + ); + }, + }, ]; const findHookTypeName = (field: HookFields): string => {