diff --git a/app/Http/Controllers/TemplateController.php b/app/Http/Controllers/TemplateController.php index 7ecaf4b..611bb24 100644 --- a/app/Http/Controllers/TemplateController.php +++ b/app/Http/Controllers/TemplateController.php @@ -101,9 +101,12 @@ public function update(Request $request, Template $template) public function destroy(Template $template) { - // Only allow deleting non-system templates - if ($template->is_system) { - return response()->json(['error' => 'Cannot delete system templates'], 403); + // Prevent deletion if this is the last template + $remainingTemplatesCount = Template::where('id', '!=', $template->id)->count(); + if ($remainingTemplatesCount === 0) { + return response()->json([ + 'error' => 'Cannot delete the last remaining template. At least one template must exist.' + ], 422); } $template->delete(); diff --git a/resources/js/pages/RealtimeAgent/Main.vue b/resources/js/pages/RealtimeAgent/Main.vue index d7f3c0f..0eb7261 100644 --- a/resources/js/pages/RealtimeAgent/Main.vue +++ b/resources/js/pages/RealtimeAgent/Main.vue @@ -69,11 +69,11 @@
-
+
No templates found
-
+
No templates found
- - -
- - -
- - -
-
-

API Configuration

-

Configure your OpenAI API key for the AI coach functionality.

-
- -
-
- -
- - -
-

Your API key is stored locally and never sent to our servers.

-
- -
- -
-
-
- - -
-
-
-

Sales Coach Templates

-

Manage your coaching templates and create custom ones.

-
- -
- - -
- -
-
-
- {{ getIconEmoji(template.icon) }} -

{{ template.name }}

- - Built-in - -
-

{{ template.description }}

-
- Used {{ template.usage_count }} times - - {{ template.variables ? Object.keys(template.variables).length : 0 }} variables -
-
-
- - -
-
-
-
-
- - -
- -
- - -
-
-

Knowledge Base

-

Upload documents and resources to enhance the AI coach's knowledge.

-
- - - - - -

Knowledge base feature coming soon...

-
-
-
-
-
-
- - - - - diff --git a/resources/js/pages/RealtimeAgent/TemplateForm.vue b/resources/js/pages/RealtimeAgent/TemplateForm.vue index 64b2649..9112ec4 100644 --- a/resources/js/pages/RealtimeAgent/TemplateForm.vue +++ b/resources/js/pages/RealtimeAgent/TemplateForm.vue @@ -142,7 +142,7 @@ const saveTemplate = async () => { }; const cancel = () => { - router.visit('/realtime-agent/settings'); + router.visit('/templates'); }; diff --git a/resources/js/pages/Templates/Index.vue b/resources/js/pages/Templates/Index.vue index 38cd215..ba0c3f9 100644 --- a/resources/js/pages/Templates/Index.vue +++ b/resources/js/pages/Templates/Index.vue @@ -19,6 +19,9 @@ interface Template { category: string; is_system: boolean; usage_count: number; + variables?: Record; + talking_points?: string[]; + additional_info?: Record; created_at: string; updated_at: string; } @@ -52,21 +55,33 @@ const fetchTemplates = async () => { }; const createTemplate = () => { - router.visit('/realtime-agent/templates/create'); + router.visit('/templates/create'); }; const editTemplate = (templateId: string) => { - router.visit(`/realtime-agent/templates/${templateId}/edit`); + router.visit(`/templates/${templateId}/edit`); }; const deleteTemplate = async (template: Template) => { - if (confirm(`Are you sure you want to delete "${template.name}"?`)) { + // Enhanced confirmation for system templates + let confirmMessage = `Are you sure you want to delete "${template.name}"?`; + if (template.is_system) { + confirmMessage = `⚠️ WARNING: You are about to delete a built-in system template!\n\n"${template.name}" is a pre-configured template that may be useful for many users.\n\nAre you absolutely sure you want to permanently delete this system template?`; + } + + if (confirm(confirmMessage)) { try { await axios.delete(route('templates.destroy', template.id)); await fetchTemplates(); } catch (error) { console.error('Failed to delete template:', error); - alert('Failed to delete template. Please try again.'); + + // Handle specific error messages from backend + if (error.response?.status === 422 && error.response?.data?.error) { + alert(error.response.data.error); + } else { + alert('Failed to delete template. Please try again.'); + } } } }; @@ -159,12 +174,14 @@ onMounted(() => {

- + + + +