Spaces:
Sleeping
Sleeping
| /** | |
| * Smart Ticket Templates v2 — Structured Dynamic Form Templates | |
| * | |
| * ARCHITECTURE CHANGE (v2): | |
| * Templates now include a `fields` array for dynamic form rendering, | |
| * replacing the old plain-text `description_template` blob approach. | |
| * | |
| * Each template contains: | |
| * - id: unique slug identifier | |
| * - label: short display name | |
| * - icon: lucide-react icon name string (resolved in the component) | |
| * - category: broad category for Quick Actions bridging | |
| * - priority_hint: soft signal for the AI pipeline | |
| * - title: auto-filled ticket title | |
| * - description_summary: brief description shown in template preview | |
| * - fields: structured form field definitions for dynamic rendering | |
| * - tags: search/filter keywords | |
| * | |
| * Supported field types: text, textarea, select, date, checkbox | |
| * | |
| * The old `description_template` is REMOVED in favor of `fields`. | |
| * At submit time, fields are serialized back to formatted text for backend compatibility. | |
| */ | |
| const TICKET_TEMPLATES = [ | |
| { | |
| id: 'vpn-connectivity', | |
| label: 'VPN Connectivity Issue', | |
| icon: 'ShieldOff', | |
| category: 'Network', | |
| priority_hint: 'high', | |
| title: 'Unable to connect to company VPN', | |
| description_summary: 'Report VPN connection failures with device, location, and error details.', | |
| fields: [ | |
| { key: 'error_message', label: 'Error Message', type: 'textarea', placeholder: 'Paste the exact error here', required: true }, | |
| { key: 'device_os', label: 'Device & OS', type: 'text', placeholder: 'e.g., Windows 11 laptop / MacBook M2', required: true }, | |
| { key: 'location', label: 'Location', type: 'select', options: ['Office', 'Home WiFi', 'Mobile Hotspot', 'Other'], required: true }, | |
| { key: 'internet_status', label: 'Internet Status', type: 'select', options: ['Working', 'Not Working', 'Intermittent'], required: true }, | |
| { key: 'vpn_client', label: 'VPN Client', type: 'text', placeholder: 'e.g., Cisco AnyConnect, GlobalProtect, OpenVPN', required: false }, | |
| { key: 'additional_context', label: 'Additional Context', type: 'textarea', placeholder: 'What changed recently? e.g., password reset, OS update', required: false }, | |
| ], | |
| tags: ['vpn', 'network', 'connectivity', 'remote-access'], | |
| }, | |
| { | |
| id: 'password-reset', | |
| label: 'Password Reset Request', | |
| icon: 'KeyRound', | |
| category: 'Access', | |
| priority_hint: 'medium', | |
| title: 'Password reset request', | |
| description_summary: 'Request a password reset for any company system or account.', | |
| fields: [ | |
| { key: 'account_system', label: 'Account / System', type: 'select', options: ['Email', 'SSO', 'Active Directory', 'VPN', 'Other'], required: true }, | |
| { key: 'username_email', label: 'Username / Email', type: 'text', placeholder: 'Your account identifier', required: true }, | |
| { key: 'reset_reason', label: 'Reason for Reset', type: 'select', options: ['Forgotten', 'Expired', 'Locked out', 'Compromised', 'Other'], required: true }, | |
| { key: 'last_login', label: 'Last Successful Login', type: 'date', placeholder: '', required: false }, | |
| { key: 'additional_context', label: 'Additional Context', type: 'textarea', placeholder: 'Any error messages or relevant details', required: false }, | |
| ], | |
| tags: ['password', 'reset', 'account', 'locked', 'login'], | |
| }, | |
| { | |
| id: 'email-access', | |
| label: 'Email Access Problem', | |
| icon: 'MailX', | |
| category: 'Software', | |
| priority_hint: 'high', | |
| title: 'Unable to access email', | |
| description_summary: 'Report email connectivity, login, or delivery issues.', | |
| fields: [ | |
| { key: 'email_client', label: 'Email Client', type: 'select', options: ['Outlook Desktop', 'Outlook Web (OWA)', 'Gmail', 'Mobile App', 'Other'], required: true }, | |
| { key: 'error_message', label: 'Error Message', type: 'textarea', placeholder: 'Paste the exact error here', required: false }, | |
| { key: 'device_os', label: 'Device & OS', type: 'text', placeholder: 'e.g., Windows 11 / macOS Sonoma / iPhone 15', required: true }, | |
| { key: 'issue_type', label: 'Issue Type', type: 'select', options: ['Cannot login', 'Emails not loading', 'Cannot send', 'Cannot receive', 'Slow performance'], required: true }, | |
| { key: 'since_when', label: 'Since When', type: 'date', placeholder: '', required: true }, | |
| { key: 'additional_context', label: 'Additional Context', type: 'textarea', placeholder: 'Any recent changes — password reset, device change, etc.', required: false }, | |
| ], | |
| tags: ['email', 'outlook', 'mail', 'inbox', 'access'], | |
| }, | |
| { | |
| id: 'printer-issue', | |
| label: 'Printer Not Working', | |
| icon: 'Printer', | |
| category: 'Hardware', | |
| priority_hint: 'low', | |
| title: 'Printer not working', | |
| description_summary: 'Report printer hardware, driver, or connectivity problems.', | |
| fields: [ | |
| { key: 'printer_name', label: 'Printer Name / Location', type: 'text', placeholder: 'e.g., 3rd Floor HP LaserJet, Room 201', required: true }, | |
| { key: 'issue_type', label: 'Issue Type', type: 'select', options: ['Not printing', 'Paper jam', 'Offline', 'Poor quality', 'Driver error', 'Other'], required: true }, | |
| { key: 'error_message', label: 'Error Message', type: 'text', placeholder: 'Any error shown on screen or printer display', required: false }, | |
| { key: 'connection_type', label: 'Connected Via', type: 'select', options: ['USB', 'WiFi', 'Network (Ethernet)', 'Bluetooth'], required: true }, | |
| { key: 'steps_tried', label: 'Steps Already Tried', type: 'textarea', placeholder: 'Restart, re-add printer, check cables, etc.', required: false }, | |
| { key: 'affects_multiple', label: 'Affects multiple users?', type: 'checkbox', placeholder: '', required: false }, | |
| ], | |
| tags: ['printer', 'print', 'hardware', 'paper jam', 'offline'], | |
| }, | |
| { | |
| id: 'wifi-network', | |
| label: 'WiFi / Network Issue', | |
| icon: 'WifiOff', | |
| category: 'Network', | |
| priority_hint: 'high', | |
| title: 'WiFi or network connectivity issue', | |
| description_summary: 'Report WiFi drops, slow speeds, or network access problems.', | |
| fields: [ | |
| { key: 'issue_type', label: 'Issue Type', type: 'select', options: ['No connection', 'Slow speed', 'Intermittent drops', 'Cannot access specific sites'], required: true }, | |
| { key: 'network_name', label: 'Network Name (SSID)', type: 'text', placeholder: 'e.g., CorpWiFi-5G, GuestNetwork', required: true }, | |
| { key: 'device_os', label: 'Device & OS', type: 'text', placeholder: 'e.g., Dell Laptop / Windows 11', required: true }, | |
| { key: 'location', label: 'Location', type: 'text', placeholder: 'Building, floor, room number', required: true }, | |
| { key: 'connection_type', label: 'Wired or Wireless', type: 'select', options: ['WiFi', 'Ethernet cable'], required: true }, | |
| { key: 'since_when', label: 'Since When', type: 'date', placeholder: '', required: true }, | |
| { key: 'additional_context', label: 'Additional Context', type: 'textarea', placeholder: 'Are other users affected? Any recent changes?', required: false }, | |
| ], | |
| tags: ['wifi', 'network', 'internet', 'connectivity', 'slow'], | |
| }, | |
| { | |
| id: 'software-installation', | |
| label: 'Software Installation Request', | |
| icon: 'Download', | |
| category: 'Software', | |
| priority_hint: 'medium', | |
| title: 'Software installation request', | |
| description_summary: 'Request new software installation with license and justification details.', | |
| fields: [ | |
| { key: 'software_name', label: 'Software Name & Version', type: 'text', placeholder: 'e.g., Adobe Acrobat Pro 2024, Python 3.12', required: true }, | |
| { key: 'justification', label: 'Business Justification', type: 'textarea', placeholder: 'Why is this software needed for your role?', required: true }, | |
| { key: 'device_os', label: 'Device & OS', type: 'text', placeholder: 'e.g., Windows 11 laptop, Asset Tag #12345', required: true }, | |
| { key: 'license_available', label: 'License Available', type: 'select', options: ['Yes', 'No', 'Not sure'], required: true }, | |
| { key: 'needed_by', label: 'Needed By', type: 'date', placeholder: '', required: false }, | |
| { key: 'additional_context', label: 'Additional Context', type: 'textarea', placeholder: 'Any special configuration requirements?', required: false }, | |
| ], | |
| tags: ['software', 'install', 'application', 'license', 'download'], | |
| }, | |
| ]; | |
| /** | |
| * serializeFieldsToText — Converts structured form data back into formatted | |
| * plain text for backend API compatibility. | |
| * | |
| * This ensures the existing `/ai/analyze_stream` and `/tickets/save` endpoints | |
| * continue to work without any backend modifications. | |
| * | |
| * @param {Array} fields - The template's field definitions | |
| * @param {Object} values - The user-entered values keyed by field.key | |
| * @returns {string} - Formatted text description | |
| */ | |
| export function serializeFieldsToText(fields, values) { | |
| const lines = []; | |
| for (const field of fields) { | |
| const val = values[field.key]; | |
| // Skip empty optional fields | |
| if (!val && !field.required) continue; | |
| // Handle checkbox fields | |
| if (field.type === 'checkbox') { | |
| lines.push(`${field.label}: ${val ? 'Yes' : 'No'}`); | |
| } else if (val) { | |
| lines.push(`${field.label}: ${val}`); | |
| } | |
| } | |
| return lines.join('\n'); | |
| } | |
| /** | |
| * getEmptyFormValues — Creates an empty values object for a template's fields. | |
| * | |
| * @param {Array} fields - The template's field definitions | |
| * @returns {Object} - Empty form values keyed by field.key | |
| */ | |
| export function getEmptyFormValues(fields) { | |
| const values = {}; | |
| for (const field of fields) { | |
| values[field.key] = field.type === 'checkbox' ? false : ''; | |
| } | |
| return values; | |
| } | |
| export default TICKET_TEMPLATES; | |