feat(frontend): autogenerate entity names from type/provider
Mirror the providers form pattern (defaultName tied to type) across bots, targets, trackers, actions, and configs. Each form now derives form.name from the selected type or provider while the user hasn't manually edited it; switching to edit-mode flips the manualEdited flag so existing names are preserved. Defaults: bots → "<Type> Bot"; targets → type label; notification trackers → "<provider> Tracker"; command trackers → "<provider> Commands"; actions → "<provider> <Action Type>"; tracking/template/ command/command-template configs → "<descriptor.defaultName> <Suffix>". TargetForm and TrackerForm grew an optional onnameinput prop so parents can flag manual edits in subform inputs.
This commit is contained in:
@@ -129,6 +129,7 @@
|
||||
child_target_ids: [] as number[],
|
||||
});
|
||||
let form = $state(defaultForm());
|
||||
let nameManuallyEdited = $state(false);
|
||||
let error = $state('');
|
||||
let loaded = $state(false);
|
||||
let submitting = $state(false);
|
||||
@@ -137,6 +138,17 @@
|
||||
let confirmDelete = $state<NotificationTarget | null>(null);
|
||||
let formEl = $state<HTMLElement | undefined>();
|
||||
|
||||
const TARGET_TYPE_DEFAULT_NAMES: Record<TargetType, string> = {
|
||||
telegram: 'Telegram', webhook: 'Webhook', email: 'Email',
|
||||
discord: 'Discord', slack: 'Slack', ntfy: 'ntfy', matrix: 'Matrix',
|
||||
broadcast: 'Broadcast',
|
||||
};
|
||||
$effect(() => {
|
||||
if (showForm && !nameManuallyEdited && !editing) {
|
||||
form.name = TARGET_TYPE_DEFAULT_NAMES[formType] ?? '';
|
||||
}
|
||||
});
|
||||
|
||||
async function scrollToForm() {
|
||||
await tick();
|
||||
formEl?.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
||||
@@ -213,6 +225,7 @@
|
||||
if (formType === 'telegram' && telegramBots.length > 0) form.bot_id = telegramBots[0].id;
|
||||
if (formType === 'email' && emailBots.length > 0) form.email_bot_id = emailBots[0].id;
|
||||
if (formType === 'matrix' && matrixBots.length > 0) form.matrix_bot_id = matrixBots[0].id;
|
||||
nameManuallyEdited = false;
|
||||
editing = null;
|
||||
showTelegramSettings = false;
|
||||
showForm = true;
|
||||
@@ -242,6 +255,7 @@
|
||||
// broadcast
|
||||
child_target_ids: c.child_target_ids || [],
|
||||
};
|
||||
nameManuallyEdited = true;
|
||||
editing = tgt.id;
|
||||
showTelegramSettings = false;
|
||||
showForm = true;
|
||||
@@ -476,6 +490,7 @@
|
||||
bind:showTelegramSettings
|
||||
onsave={save}
|
||||
ontoggleTelegramSettings={() => showTelegramSettings = !showTelegramSettings}
|
||||
onnameinput={() => nameManuallyEdited = true}
|
||||
/>
|
||||
{/if}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user