Vijayakrishnan 4 жил өмнө
parent
commit
c5695a048c

+ 144 - 0
public/js/pro-suggest.js

@@ -0,0 +1,144 @@
+// shortcut suggest functionality
+// auto attaches to all [with-shortcuts] elements
+(function() {
+
+    let suggestionsOuter = null;
+
+    const debounce = (func, wait) => {
+        let timeout;
+        return function executedFunction(...args) {
+            const later = () => {
+                clearTimeout(timeout);
+                func(...args);
+            };
+            clearTimeout(timeout);
+            timeout = setTimeout(later, wait);
+        };
+    };
+
+    var lastTerm = '';
+    var returnedFunction = debounce(function (elem) {
+        var term = elem.val();
+        if (!!term && lastTerm !== term) {
+            $.get('/pro-suggest?term=' + $.trim(term), function (_data) {
+                $('.suggestions-outer.pro-suggestions').html(_data).removeClass('d-none');
+            });
+            lastTerm = term;
+        } else {
+            $('.suggestions-outer.pro-suggestions').addClass('d-none');
+        }
+    }, 250);
+
+    function handleKeydown(elem, e) {
+        let term = $.trim(elem.val());
+        let activeItem = suggestionsOuter.find('.suggest-item.active');
+        switch (e.which) {
+            case 27:
+                suggestionsOuter.addClass('d-none');
+                return false;
+            case 38:
+                if (activeItem.prev().length) {
+                    activeItem.prev()
+                        .addClass('active')
+                        .siblings().removeClass('active');
+                    activeItem = suggestionsOuter.find('.suggest-item.active');
+                    if (activeItem.length) {
+                        activeItem[0].scrollIntoView();
+                    }
+                }
+                return false;
+            case 40:
+                if (activeItem.next().length) {
+                    activeItem.next()
+                        .addClass('active')
+                        .siblings().removeClass('active');
+                    activeItem = suggestionsOuter.find('.suggest-item.active');
+                    if (activeItem.length) {
+                        activeItem[0].scrollIntoView();
+                    }
+                }
+                return false;
+            case 13:
+                if (activeItem.length) {
+                    activeItem.first().click();
+                }
+                return false;
+            default:
+                if (!!term) {
+                    suggestionsOuter
+                        .html('<span class="d-block no-suggest-items">Searching...</span>')
+                        .removeClass('d-none');
+                    returnedFunction(elem);
+                } else {
+                    suggestionsOuter.addClass('d-none');
+                }
+                break;
+        }
+    }
+
+    function handleKeypress(elem, e) {
+        var term = $.trim(elem.val());
+        if (!!term) {
+            suggestionsOuter
+                .html('<span class="d-block no-suggest-items">Searching...</span>')
+                .removeClass('d-none');
+            returnedFunction(elem);
+        } else {
+            suggestionsOuter.addClass('d-none');
+        }
+    }
+
+    function init() {
+
+        // make select[provider-search] hidden & insert a textbox with pro-suggest
+        $('select[provider-search]').each(function() {
+            let elem = $(this);
+            let input = $('<input type="text" placeholder="Pro">').addClass('pro-suggest-input form-control form-control-sm').insertAfter(elem);
+            if(elem.find('option:selected').length) {
+                input.val($.trim(elem.find('option:selected').first().text()));
+            }
+            $('<div class="position-relative"><div class="suggestions-outer pro-suggestions position-absolute d-none"></div></div>').insertAfter(input);
+            elem.hide();
+
+            input
+                .off('keydown.pro-suggest')
+                .on('keydown.pro-suggest', function (e) {
+                    suggestionsOuter = $(this).next('.suggestions-outer');
+                    return handleKeydown($(this), e);
+                })
+                .off('keypress.pro-suggest')
+                .on('keypress.pro-suggest', function (e) {
+                    suggestionsOuter = $(this).next('.suggestions-outer');
+                    return handleKeypress($(this), e);
+                });
+
+        });
+
+        $(document).on('click', '.suggest-item.pro-suggest[data-target-uid]', function () {
+
+            let uid = $(this).attr('data-target-uid'),
+                label = $.trim($(this).text());
+
+            // set select value
+            let select = $(this).closest('.position-relative')
+                .prev('.pro-suggest-input')
+                .prev('select[provider-search]');
+            select.empty().append($('<option value="' + uid + '" selected/>').text(label));
+            select.val(uid).trigger('change');
+
+            // set input value
+            $(this).closest('.position-relative')
+                .prev('.pro-suggest-input')
+                .val(label)
+                .trigger('change');
+
+            $('.suggestions-outer.pro-suggestions').addClass('d-none');
+
+            return false;
+        });
+
+    }
+    addMCInitializer('pro-suggest', init);
+})();
+
+

+ 3 - 3
resources/views/app/patient/appointment-calendar.blade.php

@@ -103,7 +103,7 @@
         <div class="d-block appt-form">
             <form class="appt-form-col w-100 d-flex align-items-center mb-2">
                 <label class="mr-2 my-0 text-secondary text-nowrap">Show all appointments for</label>
-                <select id="eventPros" name="proUid"
+                <select id="eventPros" name="proUid" provider-search
                         class="form-control form-control-sm flex-grow-1" multiple
                         v-model="proIds">
                     <?php
@@ -158,7 +158,7 @@
                         Pro
                     </div>
                     <div class="col-9 font-weight-bold">
-                        <select id="addApptPro" name="proUid" required
+                        <select id="addApptPro" name="proUid" provider-search required
                                 v-model="newAppointment.proUid"
                                 class="form-control form-control-sm">
                             @foreach($pros as $iPro)
@@ -265,7 +265,7 @@
                         Pro
                     </div>
                     <div class="col-9 font-weight-bold">
-                        <select id="editApptPro" name="proUid" required
+                        <select id="editApptPro" name="proUid" provider-search required
                                 v-model="editAppointment.proUid"
                                 class="form-control form-control-sm">
                             @foreach($pros as $iPro)

+ 1 - 1
resources/views/app/patient/care-month/dashboard.blade.php

@@ -523,7 +523,7 @@
                                     <div class="mb-2">
                                         <div class="row">
                                             <div class="col-4 pr-0">
-                                                <select class="form-control form-control-sm w-100" name="proUid" required>
+                                                <select class="form-control form-control-sm w-100" name="proUid" provider-search required>
                                                     <option value="">-- Select Pro --</option>
                                                     @foreach($pros as $iPro)
                                                         <option {{ $iPro->uid === $pro->uid ? 'selected' : '' }}

+ 1 - 1
resources/views/app/patient/documents.blade.php

@@ -128,7 +128,7 @@
                     </div>
                     <div class="mb-2">
                         <label for="" class="text-sm text-secondary mb-1">Provider</label>
-                        <select name="provider" class="form-control form-control-sm">
+                        <select name="provider" provider-search class="form-control form-control-sm">
                             <option value=""> --select-- </option>
                             @foreach($pros as $iPro)
                                 <option value="{{$iPro->uid}}">{{$iPro->displayName()}}</option>

+ 1 - 1
resources/views/app/patient/note/dashboard.blade.php

@@ -126,7 +126,7 @@
                         <form url="/api/note/putHcp">
                             <input type="hidden" name="uid" value="{{$note->uid}}">
                             <div class="mb-2">
-                                <select name="hcpProUid" class="form-control form-control-sm">
+                                <select name="hcpProUid" class="form-control form-control-sm" provider-search >
                                     <option value="">-- Select HCP Pro --</option>
                                     @foreach ($pros as $iPro)
                                         <option value="{{$iPro->uid}}" {{ $note->hcpPro && $iPro->id === $note->hcpPro->id ? 'selected' : '' }}>{{$iPro->name_display}}</option>

+ 2 - 2
resources/views/app/patient/partials/ticket_update_pro_form.blade.php

@@ -7,7 +7,7 @@
         </h3>
         <div class="form-group mb-2">
             <label class="text-sm text-secondary mb-1">@{{proToUpdate}} Pro</label>
-            <select v-model="newProUid" class="form-control">
+            <select v-model="newProUid" class="form-control" provider-search>
                 <option value="">-- select ---</option>
                 @foreach($pros as $pro)
                 <option value="{{$pro->uid}}">{{$pro->name_first}} {{$pro->name_last}}</option>
@@ -19,4 +19,4 @@
             <button type="button" class="btn btn-sm btn-default border" onclick="return closeStagPopup()">Cancel</button>
         </div>
     </form>
-</div>
+</div>

+ 2 - 2
resources/views/app/patient/programs.blade.php

@@ -95,7 +95,7 @@
                                 <input type="hidden" name="uid" value="{{ $program->uid }}">
                                 <div class="mb-2">
                                     <label class="mb-1 text-sm text-secondary">Program MCP</label>
-                                    <select name="newMcpProUid" class="form-control form-control-sm">
+                                    <select name="newMcpProUid" class="form-control form-control-sm" provider-search >
                                         <option value="">-- Select MCP --</option>
                                         @foreach($pros as $iPro)
                                             <option value="{{ $iPro->uid }}" {{ $iPro->id === $program->mcp_pro_id ? 'selected' : ''  }}>
@@ -126,7 +126,7 @@
                                 <input type="hidden" name="uid" value="{{ $program->uid }}">
                                 <div class="mb-2">
                                     <label class="mb-1 text-sm text-secondary">Program Manager</label>
-                                    <select name="newManagerProUid" class="form-control form-control-sm">
+                                    <select name="newManagerProUid" class="form-control form-control-sm" provider-search >
                                         <option value="">-- Select Manager --</option>
                                         @foreach($pros as $iPro)
                                             <option value="{{ $iPro->uid }}" {{ $iPro->id === $program->manager_pro_id ? 'selected' : ''  }}>

+ 2 - 2
resources/views/app/patient/settings.blade.php

@@ -212,7 +212,7 @@
                             <input type="hidden" name="uid" value="{{$patient->uid}}">
                             <div class="mb-2">
                                 <label class="text-secondary text-sm">MCP Pro</label>
-                                <select name="mcpProUid" class="form-control form-control-sm">
+                                <select name="mcpProUid" class="form-control form-control-sm" provider-search >
                                     <option value=""> --select--</option>
                                     @foreach($pros as $iPro)
                                         <option
@@ -237,7 +237,7 @@
                             <input type="hidden" name="uid" value="{{$patient->uid}}">
                             <div class="mb-2">
                                 <label class="text-secondary text-sm">Physician Pro</label>
-                                <select name="physicianProUid" class="form-control form-control-sm">
+                                <select name="physicianProUid" class="form-control form-control-sm" provider-search >
                                     <option value=""> --select--</option>
                                     @foreach($pros as $iPro)
                                         <option

+ 2 - 2
resources/views/app/practice-management/calendar.blade.php

@@ -97,7 +97,7 @@
             @if($pro->pro_type == 'ADMIN')
             <form class="appt-form-col w-100 d-flex align-items-center">
                 <label class="mr-2 my-0 text-secondary text-nowrap">Show calendar for</label>
-                <select id="eventPros" name="proUid"
+                <select id="eventPros" name="proUid" provider-search
                         class="form-control form-control-sm flex-grow-1" multiple
                         v-model="proIds">
                     <?php
@@ -162,7 +162,7 @@
                         Pro
                     </div>
                     <div class="col-9 font-weight-bold">
-                        <select id="addApptPro" name="proUid" required
+                        <select id="addApptPro" name="proUid" required provider-search
                                 v-model="newAppointment.proUid"
                                 class="form-control form-control-sm">
                             @foreach($pros as $iPro)

+ 1 - 1
resources/views/app/practice-management/pro-availability.blade.php

@@ -9,7 +9,7 @@
             <form show url="{{route('pro-availability-filter')}}" method="POST" class="form-inline" redir="/practice-management/pro-availability/[data]">
                 @csrf
                 <div class="form-group">
-                    <select name="proUid" class="form-control form-control-sm mr-2" required>
+                    <select name="proUid" class="form-control form-control-sm mr-2" provider-search required>
                         <option value="">-- select pro --</option>
                         @foreach($pros as $apro)
                         <option value="{{$apro->uid}}" {{$selectedProUid === $apro->uid ? 'selected' : ''}}>{{$apro->name_first}} {{$apro->name_last}}</option>

+ 1 - 1
resources/views/app/practice-management/rates.blade.php

@@ -11,7 +11,7 @@
                     Payment Rates
                 </strong>
                 <span class="mx-2">for</span>
-                <select name="proUid" class="form-control form-control-sm mr-auto width-200px"
+                <select name="proUid" class="form-control form-control-sm mr-auto width-200px" provider-search
                         onchange="fastLoad('/practice-management/rates/' + this.value)">
                     <option value="all" {{$selectedProUid === 'all' ? 'selected' : ''}}>All Pros</option>
                     @foreach($pros as $apro)

+ 2 - 2
resources/views/layouts/patient.blade.php

@@ -301,7 +301,7 @@
                                                             <input type="hidden" name="uid" value="{{$patient->uid}}">
                                                             <div class="mb-2">
                                                                 <label class="text-secondary text-sm">MCP Pro</label>
-                                                                <select name="mcpProUid"
+                                                                <select name="mcpProUid" provider-search
                                                                         class="form-control form-control-sm">
                                                                     <option value=""> --select--</option>
                                                                     @foreach($pros as $iPro)
@@ -396,7 +396,7 @@
                                                         <input type="hidden" name="uid" value="{{$patient->uid}}">
                                                         <div class="mb-2">
                                                             <label class="text-secondary text-sm">Physician Pro</label>
-                                                            <select name="physicianProUid"
+                                                            <select name="physicianProUid" provider-search
                                                                     class="form-control form-control-sm">
                                                                 <option value=""> --select--</option>
                                                                 @foreach($pros as $iPro)

+ 3 - 0
resources/views/layouts/template.blade.php

@@ -180,6 +180,9 @@
     <link href="/css/shortcut.css" rel=stylesheet>
     <script src="/js/shortcut.js" type="application/javascript"></script>
 
+    <!-- pro suggest component -->
+    <script src="/js/pro-suggest.js" type="application/javascript"></script>
+
     <!-- script to handle history/back/forward for mc/xxx pages
     + all other JS initialization needed in fastLoaded pages  -->
     <script src="/js/find-event-handlers.js" type="application/javascript"></script>