Эх сурвалжийг харах

Support for template sets

Vijayakrishnan Krishnan 4 жил өмнө
parent
commit
1779bb39ce

+ 51 - 0
app/Helpers/helpers.php

@@ -87,3 +87,54 @@ if(!function_exists('sanitize_field_name')) {
         return preg_replace("/[^0-9a-z]/i", "_", $result);
     }
 }
+
+if(!function_exists('renderNoteTemplate')) {
+    function renderNoteTemplate($template, $topLevel)
+    {
+        echo
+            '<div class="note-template-item" ' .
+            'template="' . (isset($template->template) ? $template->template : $template->text) . '" ' .
+            'type="' . (isset($template->type) ? $template->type : "value") . '" ' .
+            '>' .
+            '<div class="note-template-text d-flex align-items-center">' .
+            '<span class="label">' .
+            '<input type="checkbox" />' .
+            '<span>' . $template->text . '</span>' .
+            '</span>';
+        if (isset($template->type) && $template->type === 'plus-minus') {
+            echo '<div class="ml-auto mr-2 text-nowrap">';
+            echo '<a href="#" class="plus-trigger"><i class="fa fa-plus-circle"></i></a>';
+            echo '<a href="#" class="minus-trigger ml-1"><i class="fa fa-minus-circle"></i></a>';
+            echo '</div>';
+        }
+        echo '</div>';
+        if (isset($template->children) && count($template->children)) {
+            echo '<i class="fa fa-chevron-right has-children"></i>';
+            echo '<div class="note-template-children">';
+            foreach ($template->children as $t) {
+                renderNoteTemplate($t, false);
+            }
+            echo '</div>';
+        } else if (isset($template->type) && $template->type !== 'plus-minus') {
+            echo '<i class="fa fa-chevron-right has-children"></i>';
+            echo '<div class="note-template-children">';
+            if ($template->type === 'alpha') {
+                echo '<textarea class="form-control form-control-sm"></textarea>';
+            } else {
+                echo '<input type="' . $template->type . '" class="form-control form-control-sm">';
+            }
+            echo '</div>';
+        }
+        echo '</div>';
+    }
+}
+
+if(!function_exists('renderNoteTemplates')) {
+    function renderNoteTemplates($path)
+    {
+        $templates = json_decode(file_get_contents($path));
+        foreach ($templates->templates as $template) {
+            renderNoteTemplate($template, true);
+        }
+    }
+}

+ 7 - 0
app/Http/Controllers/HomeController.php

@@ -375,4 +375,11 @@ class HomeController extends Controller
     {
         return view('app/blank');
     }
+
+    public function noteTemplateSet(Request $request, $section, $template) {
+        return view('app/patient/note/_template', [
+            "sectionInternalName" => $section,
+            "templateName" => $template
+        ]);
+    }
 }

+ 7 - 0
public/css/style.css

@@ -458,6 +458,7 @@ input.search_field, textarea.search_field {
     align-items: center;
     min-width: 120px;
     cursor: pointer;
+    flex-grow: 1;
 }
 .note-template-container .note-template-item:hover,
 .note-template-container .note-template-item.selected {
@@ -547,3 +548,9 @@ input.search_field, textarea.search_field {
     max-width: 500px;
     margin: 0;
 }
+.note-template-set-chooser {
+    height: 22px;
+    line-height: 22px;
+    padding: 0 0.22rem;
+    font-size: 12px !important;
+}

+ 4 - 0
resources/views/app/patient/note/_template.blade.php

@@ -0,0 +1,4 @@
+<?php
+renderNoteTemplates(storage_path('templates/'.$sectionInternalName.'/' . $templateName . '.json'));
+?>
+

+ 40 - 0
resources/views/app/patient/note/_templates-index.blade.php

@@ -0,0 +1,40 @@
+<?php
+$templateIndex = json_decode(file_get_contents(storage_path('templates/index.json')));
+$hasTemplates = false;
+if(isset($templateIndex->{$sectionInternalName})) {
+    $hasTemplates = true;
+    $templateName = '';
+    foreach($templateIndex->{$sectionInternalName} as $k => $templateSet) {
+        $templateName = $k;
+        break;
+    }
+?>
+    <span class="position-relative d-none if-edit ml-3 pl-3 border-left">
+        <a href="#" class="note-templates-trigger">Templates</a>
+        <div class="note-template-container">
+            <div class="position-relative w-100">
+                <div class="note-template-output">
+                    <div class="font-weight-bold text-secondary">Result:</div>
+                    <div class="note-template-output-text"></div>
+                </div>
+                <div class="note-template-buttons d-flex align-items-center">
+                    <button class="btn btn-sm btn-default bg-white border text-primary border-primary note-template-apply-trigger">Apply</button>
+                    <button class="btn btn-sm btn-default bg-light border text-secondary border-secondary note-template-close-trigger">Close</button>
+                </div>
+            </div>
+            <div class="p-1 border border-bottom">
+                <select class="form-control form-control-sm note-template-set-chooser" data-section="{{$sectionInternalName}}">
+                    <option value="">Templates</option>
+                    @foreach($templateIndex->{$sectionInternalName} as $k => $templateSet)
+                        <option value="{{$k}}" {{$k === $templateName ? 'selected' : ''}}>{{$templateSet->name}}</option>
+                    @endforeach
+                </select>
+            </div>
+            @include('app/patient/note/_template')
+        </div>
+    </span>
+<?php
+}
+?>
+
+

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

@@ -227,66 +227,6 @@
         </div>
         <div class="card-body p-0">
             <div>
-                <?php
-                function _renderNoteTemplate($template, $topLevel) {
-                    echo
-                        '<div class="note-template-item" ' .
-                            'template="' . (isset($template->template) ? $template->template : $template->text) . '" ' .
-                            'type="' . (isset($template->type) ? $template->type : "value") . '" ' .
-                            '>' .
-                            '<div class="note-template-text d-flex align-items-center">' .
-                                '<span class="label">' .
-                                '<input type="checkbox" />' .
-                                '<span>' . $template->text . '</span>' .
-                                '</span>';
-                            if(isset($template->type) && $template->type === 'plus-minus') {
-                                echo '<div class="ml-auto mr-2 text-nowrap">';
-                                echo '<a href="#" class="plus-trigger"><i class="fa fa-plus-circle"></i></a>';
-                                echo '<a href="#" class="minus-trigger ml-1"><i class="fa fa-minus-circle"></i></a>';
-                                echo '</div>';
-                            }
-                            echo '</div>';
-                    if(isset($template->children) && count($template->children)) {
-                        echo '<i class="fa fa-chevron-right has-children"></i>';
-                        echo '<div class="note-template-children">';
-                        foreach ($template->children as $t) {
-                            _renderNoteTemplate($t, false);
-                        }
-                        echo '</div>';
-                    }
-                    else if(isset($template->type) && $template->type !== 'plus-minus') {
-                        echo '<i class="fa fa-chevron-right has-children"></i>';
-                        echo '<div class="note-template-children">';
-                        if($template->type === 'alpha') {
-                            echo '<textarea class="form-control form-control-sm"></textarea>';
-                        }
-                        else {
-                            echo '<input type="' . $template->type . '" class="form-control form-control-sm">';
-                        }
-                        echo '</div>';
-                    }
-                    echo '</div>';
-                }
-
-                function renderNoteTemplates($path) {
-                    $templates = json_decode(file_get_contents($path));
-                    echo '<div class="note-template-container">';
-                    echo '<div class="position-relative w-100">' .
-                            '<div class="note-template-output">' .
-                                '<div class="font-weight-bold text-secondary">Result:</div>' .
-                                '<div class="note-template-output-text"></div>' .
-                            '</div>' .
-                            '<div class="note-template-buttons d-flex align-items-center">' .
-                                '<button class="btn btn-sm btn-default bg-white border text-primary border-primary note-template-apply-trigger">Apply</button>' .
-                                '<button class="btn btn-sm btn-default bg-light border text-secondary border-secondary note-template-close-trigger">Close</button>' .
-                            '</div>' .
-                        '</div>';
-                    foreach ($templates->templates as $template) {
-                        _renderNoteTemplate($template, true);
-                    }
-                    echo '</div>';
-                }
-                ?>
                 <div class="mb-3">
                     <div>
                         <?php
@@ -298,13 +238,6 @@
                         $packed = implode("^^^", $packed);
                         $shortcuts = $packed;
                         ?>
-                        {{--<div class="primary-form">
-                            <div class="note-content {{ $note->is_cancelled ? 'cancelled' : '' }} {{ $note->is_signed_by_hcp ? 'readonly' : '' }}"
-                                 data-note-uid="{{ $note->uid  }}"
-                                 {{ !$note->is_cancelled && empty($note->free_text_html) ? 'auto-edit' : '' }}
-                                 data-shortcuts="{{ $packed }}"
-                            >{!! $note->free_text_html !!}</div>
-                        </div>--}}
                         @foreach($note->sections as $section)
                         <div class="p-3 border-bottom note-section">
                             <div class="d-flex align-items-start">
@@ -312,14 +245,8 @@
                                     {{$section->sectionTemplate->title}}
                                     <span class="d-none if-not-edit"><i class="fa fa-edit ml-2"></i></span>
                                 </a>
-                                <?php
-                                if(file_exists(storage_path('sections/'.$section->sectionTemplate->internal_name.'/templates.json'))) {
-                                    echo '<span class="position-relative d-none if-edit ml-3 pl-3 border-left">' .
-                                        '<a href="#" class="note-templates-trigger">Templates</a>';
-                                    renderNoteTemplates(storage_path('sections/'.$section->sectionTemplate->internal_name.'/templates.json'));
-                                    echo '</span>';
-                                }
-                            ?>
+                                <?php $sectionInternalName = $section->sectionTemplate->internal_name; ?>
+                                @include('app/patient/note/_templates-index')
                             </div>
                             <div class="d-none if-not-edit  inset-comment">{!! !empty($section->summary_html) ? $section->summary_html : '-' !!}</div>
                             <div class="d-none if-edit">@include('sections/'.$section->sectionTemplate->internal_name.'/form')</div>
@@ -534,16 +461,16 @@
                         return false;
                     });
 
-                $('.note-templates-underlay, .note-template-close-trigger')
-                    .off('click.note-templates-underlay')
-                    .on('click.note-templates-underlay', function() {
+                $(document)
+                    .off('click.note-templates-underlay', '.note-templates-underlay, .note-template-close-trigger')
+                    .on('click.note-templates-underlay', '.note-templates-underlay, .note-template-close-trigger', function() {
                         $('.note-templates-underlay').hide();
                          $('.note-template-container').hide();
                     });
 
-                $('.note-template-item .label')
-                    .off('click.note-template-label')
-                    .on('click.note-template-label', function() {
+                $(document)
+                    .off('click.note-template-label', '.note-template-item .label')
+                    .on('click.note-template-label', '.note-template-item .label', function() {
                         let item = $(this).closest('.note-template-item');
                         let isChecked = $(this).find('>input[type="checkbox"]').prop('checked');
                         let hasChildren = !!item.find('>.note-template-children').length,
@@ -579,27 +506,27 @@
                         return false;
                     });
 
-                $('.note-template-apply-trigger')
-                    .off('mousedown.note-templates-apply')
-                    .on('mousedown.note-templates-apply', function() {
+                $(document)
+                    .off('mousedown.note-templates-apply', '.note-template-apply-trigger')
+                    .on('mousedown.note-templates-apply', '.note-template-apply-trigger', function() {
                         let result = $('.note-template-output-text:visible').first().html();
                         $('.note-templates-underlay').hide();
                         $('.note-template-container').hide();
-                        let editor  = $('.ql-editor[contenteditable]').first();
+                        let editor  = $('.ql-editor[contenteditable]:visible').first();
                         result = $.trim(editor.text() !== '' ? editor.html() : '') + result;
                         editor.html(result).focus();
                         return false;
                     });
 
-                $('.note-template-item textarea, .note-template-item input[type="number"], .note-template-item input[type="date"]')
-                    .off('input paste change')
-                    .on('input paste change', function() {
+                $(document)
+                    .off('input paste change', '.note-template-item textarea, .note-template-item input[type="number"], .note-template-item input[type="date"]')
+                    .on('input paste change', '.note-template-item textarea, .note-template-item input[type="number"], .note-template-item input[type="date"]', function() {
                         generateTemplateOutput();
                     });
 
-                $('.note-template-item .plus-trigger')
-                    .off('click.plus-trigger')
-                    .on('click.plus-trigger', function() {
+                $(document)
+                    .off('click.plus-trigger', '.note-template-item .plus-trigger')
+                    .on('click.plus-trigger', '.note-template-item .plus-trigger', function() {
                         let item = $(this).closest('.note-template-item');
                         if(item.attr('prefix') === '(+)') {
                             item.removeAttr('prefix');
@@ -615,9 +542,9 @@
                         return false;
                     });
 
-                $('.note-template-item .minus-trigger')
-                    .off('click.plus-trigger')
-                    .on('click.plus-trigger', function() {
+                $(document)
+                    .off('click.minus-trigger', '.note-template-item .minus-trigger')
+                    .on('click.minus-trigger', '.note-template-item .minus-trigger', function() {
                         let item = $(this).closest('.note-template-item');
                         if(item.attr('prefix') === '(-)') {
                             item.removeAttr('prefix');
@@ -633,6 +560,17 @@
                         return false;
                     });
 
+                $(document)
+                    .off('click.note-template-set-chooser', '.note-template-set-chooser')
+                    .on('click.note-template-set-chooser', '.note-template-set-chooser', function() {
+                        if(!$(this).val()) return false;
+                        $.get('/note-template-set/' + $(this).attr('data-section') + '/' + $(this).val(), function(_html) {
+                             $('.note-template-container:visible>.note-template-item').remove();
+                            $('.note-template-container:visible').append(_html);
+                        });
+                        return false;
+                    });
+
             }
 
             function generateOutputForNode(_node) {

+ 3 - 0
routes/web.php

@@ -107,6 +107,9 @@ Route::middleware('pro.auth')->group(function () {
         });
     });
 
+    // load template set
+    Route::get('/note-template-set/{section}/{template}', 'HomeController@noteTemplateSet');
+
     // Patient suggest
     Route::get('/patients-suggest', 'HomeController@patientsSuggest');