فهرست منبع

Stattree - dirty on paste + clauses in alpha order

Vijayakrishnan 3 سال پیش
والد
کامیت
3790e92424
2فایلهای تغییر یافته به همراه45 افزوده شده و 16 حذف شده
  1. 3 3
      app/Http/Controllers/StatTreeController.php
  2. 42 13
      resources/views/app/stat-tree/stat-trees/sub/edit.blade.php

+ 3 - 3
app/Http/Controllers/StatTreeController.php

@@ -272,7 +272,7 @@ class StatTreeController extends Controller
     }
 
     public function clausesJSON(Request $request, StatTree $statTree) {
-        $clauses = Clause::where('model', $statTree->model)->orderBy('position_index')->get();
+        $clauses = Clause::where('model', $statTree->model)->orderBy('label')->get();
         $nodes = [];
         foreach ($clauses as $clause) {
 
@@ -305,7 +305,7 @@ class StatTreeController extends Controller
                     "text" => $clauseArg->arg_text . '<span class="text-secondary text-sm ml-2">' . $clauseArg->field_type . '</span>',
                     "icon" => "fa fa-cubes text-info",
                     "state" => [
-                        "opened" => true,
+                        "opened" => false,
                         "disabled" => false,
                         "selected" => false,
                     ],
@@ -329,7 +329,7 @@ class StatTreeController extends Controller
             $nodes[] = [
                 "text" => $clause->label,
                 "state" => [
-                    "opened" => true,
+                    "opened" => false,
                     "disabled" => false,
                     "selected" => false,
                 ],

+ 42 - 13
resources/views/app/stat-tree/stat-trees/sub/edit.blade.php

@@ -123,7 +123,7 @@
                                         </div>
                                         <div class="mb-2">
                                             <label class="text-secondary text-sm mb-1">Clause Text</label>
-                                            <input type="text" class="form-control form-control-sm" name="clauseText">
+                                            <textarea type="text" class="form-control form-control-sm" name="clauseText"></textarea>
                                         </div>
                                         <div class="d-flex align-items-center">
                                             <button class="btn btn-sm btn-primary mr-2" type="button" submit>Save</button>
@@ -167,7 +167,7 @@
                                         </div>
                                         <div class="mb-2">
                                             <label class="text-secondary text-sm mb-1">Clause Text</label>
-                                            <input type="text" class="form-control form-control-sm" name="clauseText">
+                                            <textarea type="text" class="form-control form-control-sm" name="clauseText"></textarea>
                                         </div>
                                         <div class="d-flex align-items-center">
                                             <button class="btn btn-sm btn-primary mr-2" type="button" submit>Save</button>
@@ -433,7 +433,7 @@
 
                             function fillAndInvokeMoe(_id, _node) {
                                 let moe = $(_id);
-                                moe.find('input[name], select[name]').each(function() {
+                                moe.find('input[name], select[name], textarea[name]').each(function() {
                                     let name = $(this).attr('name');
                                     if(!!_node.data[name]) {
                                         $(this).val(!!_node.data[name] ? _node.data[name] : '');
@@ -586,7 +586,8 @@
                                                 "dnd": {
                                                     "is_draggable": function(_node, _e) {
                                                         return _node[0].data && _node[0].data.type === 'stat_tree_line';
-                                                    }
+                                                    },
+                                                    "inside_pos": "last",
                                                 },
                                                 "contextmenu": {
                                                     show_at_node: false,
@@ -614,6 +615,7 @@
                                                                         let selected = StatTree.selectedNode();
                                                                         if(selected) {
                                                                             StatTree.el.jstree(true).cut(selected.id);
+                                                                            StatTree.setDirty();
                                                                         }
                                                                     },
                                                                 },
@@ -639,6 +641,7 @@
                                                                         let selected = StatTree.selectedNode();
                                                                         if(selected && StatTree.el.jstree(true).can_paste()) {
                                                                             StatTree.el.jstree(true).paste(selected.id, 'last');
+                                                                            StatTree.setDirty();
                                                                         }
                                                                     },
                                                                 },
@@ -652,6 +655,7 @@
                                                                                 let parsed = JSON.parse(localStorage.stPasteBuffer);
                                                                                 StatTree.el.jstree(true).create_node(selected.id, parsed);
                                                                                 StatTree.el.jstree(true).open_node(selected.id);
+                                                                                StatTree.setDirty();
                                                                             }
                                                                             catch (e) {
                                                                                 console.error(e);
@@ -667,31 +671,51 @@
                                                                     "action": function (obj) {
                                                                         let selected = StatTree.selectedNode();
                                                                         if(selected) {
-                                                                            localStorage.stPasteBuffer_Columns = JSON.stringify(selected.data.columns);
+                                                                            let json = JSON.stringify(selected.data.columns);
+                                                                            localStorage.stPasteBuffer_Columns = json;
+                                                                            copyTextToClipboard(json);
                                                                         }
                                                                     },
                                                                 },
                                                                 "paste_columns": {
                                                                     "label": "<span class='text-sm'>Paste Columns</span>",
-                                                                    "_disabled": !localStorage.stPasteBuffer_Columns,
+                                                                    // "_disabled": !localStorage.stPasteBuffer_Columns,
                                                                     "action": function (obj) {
                                                                         let selected = StatTree.selectedNode();
                                                                         if(selected) {
-                                                                            StatTree.setSelectedNodeColumns(JSON.parse(localStorage.stPasteBuffer_Columns));
-                                                                            StatTree.onSelected();
-                                                                            StatTree.setDirty();
+                                                                            navigator.clipboard.readText().then(clipText => {
+                                                                                // check if valid json
+                                                                                try {
+                                                                                    let parsed = JSON.parse(clipText);
+                                                                                    StatTree.setSelectedNodeColumns(parsed);
+                                                                                    StatTree.onSelected();
+                                                                                    StatTree.setDirty();
+                                                                                }
+                                                                                catch (e) {
+                                                                                    toastr.error('Invalid paste buffer!');
+                                                                                }
+                                                                            })
                                                                         }
                                                                     },
                                                                 },
                                                                 "paste_columns_deep": {
                                                                     "label": "<span class='text-sm'>Paste Columns Recursively</span>",
-                                                                    "_disabled": !localStorage.stPasteBuffer_Columns,
+                                                                    // "_disabled": !localStorage.stPasteBuffer_Columns,
                                                                     "action": function (obj) {
                                                                         let selected = StatTree.selectedNode();
                                                                         if(selected) {
-                                                                            StatTree.pasteColumnsDeep(selected, localStorage.stPasteBuffer_Columns);
-                                                                            StatTree.onSelected();
-                                                                            StatTree.setDirty();
+                                                                            navigator.clipboard.readText().then(clipText => {
+                                                                                // check if valid json
+                                                                                try {
+                                                                                    let parsed = JSON.parse(clipText);
+                                                                                    StatTree.pasteColumnsDeep(selected, clipText);
+                                                                                    StatTree.onSelected();
+                                                                                    StatTree.setDirty();
+                                                                                }
+                                                                                catch (e) {
+                                                                                    toastr.error('Invalid paste buffer!');
+                                                                                }
+                                                                            })
                                                                         }
                                                                     },
                                                                     separator_after: true,
@@ -713,6 +737,7 @@
                                                                         let selected = StatTree.selectedNode();
                                                                         if(selected) {
                                                                             StatTree.createChildTreePermutations(selected);
+                                                                            StatTree.setDirty();
                                                                         }
                                                                     }
                                                                 },
@@ -723,6 +748,7 @@
                                                                         let selected = StatTree.selectedNode();
                                                                         if(selected) {
                                                                             StatTree.replicateForAllUSStates(selected);
+                                                                            StatTree.setDirty();
                                                                         }
                                                                     }
                                                                 }
@@ -989,6 +1015,7 @@
                                 save: function() {
                                     setTimeout(() => {
                                         $.post('{{ route("practice-management.api.statTree.replaceAllLinesJSON") }}', {
+                                            _token: '{{ csrf_token() }}',
                                             uid: "{{ $statTree->uid }}",
                                             data: StatTree.payload()
                                         }, function (response) {
@@ -1378,6 +1405,8 @@
 
                                             // paste it!
                                             StatTree.el.jstree(true).create_node('#', parsed, 'first');
+
+                                            StatTree.setDirty();
                                         }
                                         catch (e) {
                                             toastr.error('Invalid paste buffer!');