From 6af99c5421599e0f466d797f7d54bb490b02ae4c Mon Sep 17 00:00:00 2001 From: DevSoftTech Server Date: Tue, 19 May 2026 23:14:26 +0530 Subject: [PATCH] =?UTF-8?q?fix:=20complaint=20table=20=E2=80=94=20delete?= =?UTF-8?q?=20idx=3D0=20falsy=20bug,=20frequency=20arrow=20keys,=20severit?= =?UTF-8?q?y->duration=20focus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Views/billing/opd_prescription_basic.php | 40 ++++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/app/Views/billing/opd_prescription_basic.php b/app/Views/billing/opd_prescription_basic.php index 59394a6..6ad39dc 100644 --- a/app/Views/billing/opd_prescription_basic.php +++ b/app/Views/billing/opd_prescription_basic.php @@ -4839,15 +4839,17 @@ // ─── Frequency: event delegation on table rows ──────────────────── var _FREQUENCY_OPTIONS = ['daily', 'twice daily', 'weekly', 'intermittent', 'continuous', 'occasional']; + var _freqDdIdx = -1; + $(document).on('input focus', '.complaint-freq-input', function() { + _freqDdIdx = -1; var $inp = $(this); var q = ($inp.val() || '').trim().toLowerCase(); var sugs = q ? _FREQUENCY_OPTIONS.filter(function(s) { return s.indexOf(q) !== -1; }) : _FREQUENCY_OPTIONS; var idx = parseInt($inp.attr('data-idx'), 10); - if (!sugs.length) { return; } - // reuse complaint_sev_dd div as a floating list (same fixed-position technique) - var $dd = $('
'); $('#_freq_dd').remove(); + if (!sugs.length) { return; } + var $dd = $('
'); sugs.forEach(function(s) { $dd.append(buildSmartDdItem(s, function(val) { $inp.val(val); @@ -4856,6 +4858,7 @@ syncComplaintSnomedJson(); } $('#_freq_dd').remove(); + _freqDdIdx = -1; $inp.closest('tr').find('.complaint-sev-input').trigger('focus'); })); }); @@ -4863,6 +4866,27 @@ $dd.css({ top: (r.bottom + 2) + 'px', left: r.left + 'px', width: Math.max(r.width, 160) + 'px' }); $('body').append($dd); }); + $(document).on('keydown', '.complaint-freq-input', function(e) { + var $dd = $('#_freq_dd'); + var $items = $dd.find('div'); + if ($dd.is(':visible') && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) { + e.preventDefault(); + _freqDdIdx = e.key === 'ArrowDown' ? Math.min(_freqDdIdx + 1, $items.length - 1) : Math.max(_freqDdIdx - 1, 0); + $items.css('background', '').eq(_freqDdIdx).css('background', '#f0f4ff'); + return; + } + if (e.key === 'Enter') { + e.preventDefault(); + if ($dd.is(':visible') && _freqDdIdx >= 0 && _freqDdIdx < $items.length) { + $items.eq(_freqDdIdx).trigger('click'); + } else { + $('#_freq_dd').remove(); _freqDdIdx = -1; + $(this).closest('tr').find('.complaint-sev-input').trigger('focus'); + } + return; + } + if (e.key === 'Escape') { $('#_freq_dd').remove(); _freqDdIdx = -1; } + }); $(document).on('blur', '.complaint-freq-input', function() { var idx = parseInt($(this).attr('data-idx'), 10); if (idx >= 0 && idx < selectedComplaintItems.length) { @@ -4965,8 +4989,8 @@ syncComplaintSnomedJson(); } $dd.hide().empty(); - // Move focus back to lookup for next complaint - $('#complaint_lookup').trigger('focus'); + // Move focus to Duration input in same row + $inp.closest('tr').find('.complaint-dur-input').trigger('focus'); })); }); _positionDd($dd, $inp); @@ -4995,7 +5019,7 @@ if ($dd.is(':visible') && _sevDdIdx >= 0 && _sevDdIdx < $items.length) { $items.eq(_sevDdIdx).trigger('click'); } else { - $('#complaint_lookup').trigger('focus'); + $(this).closest('tr').find('.complaint-dur-input').trigger('focus'); } _sevDdIdx = -1; } @@ -5179,8 +5203,8 @@ }; $(document).on('click', '.btn-remove-complaint', function() { - var idx = parseInt($(this).data('idx') || '-1', 10); - if (idx < 0 || idx >= selectedComplaintItems.length) { + var idx = parseInt($(this).attr('data-idx'), 10); + if (isNaN(idx) || idx < 0 || idx >= selectedComplaintItems.length) { return; } selectedComplaintItems.splice(idx, 1);