Przeglądaj źródła

Merge branch '2.0' into gitee2

jqh 4 lat temu
rodzic
commit
02400ca23d

+ 9 - 1
resources/assets/dcat/js/extensions/RowSelector.js

@@ -26,7 +26,15 @@ export default class RowSelector {
             selectAll = options.selectAllSelector;
 
         $(selectAll).on('change', function() {
-            $(this).parents(options.container).find(checkboxSelector).prop('checked', this.checked).trigger('change');
+            let checked = this.checked;
+
+            $.each($(this).parents(options.container).find(checkboxSelector), function (_, checkbox) {
+                let $this = $(checkbox);
+
+                if (! $this.attr('disabled')) {
+                    $this.prop('checked', checked).trigger('change');
+                }
+            });
         });
         if (options.clickRow) {
             $document.off('click', checkboxSelector).on('click', checkboxSelector, function (e) {

+ 5 - 0
resources/assets/dcat/sass/components/_grid.scss

@@ -137,3 +137,8 @@ body:not(.dark-mode) .simple-grid {
   }
 
 }
+
+.vs-checkbox-con.checkbox-grid-column input:disabled + .vs-checkbox {
+  cursor: not-allowed;
+  opacity: 0.33;
+}

Plik diff jest za duży
+ 0 - 0
resources/dist/dcat/css/dcat-app-blue-light.css


Plik diff jest za duży
+ 0 - 0
resources/dist/dcat/css/dcat-app-blue.css


Plik diff jest za duży
+ 0 - 0
resources/dist/dcat/css/dcat-app-green.css


Plik diff jest za duży
+ 0 - 0
resources/dist/dcat/css/dcat-app.css


Plik diff jest za duży
+ 0 - 0
resources/dist/dcat/js/dcat-app.js


Plik diff jest za duży
+ 0 - 0
resources/dist/dcat/js/dcat-app.js.map


+ 1 - 1
resources/views/form/fields.blade.php

@@ -1,5 +1,5 @@
 @if($rows)
-    <div class="ml-2 mb-2" style="margin-top: -0.5rem">
+    <div class="ml-2 mb-2 mr-2" style="margin-top: -0.5rem">
         @foreach($rows as $row)
             {!! $row->render() !!}
         @endforeach

+ 3 - 5
resources/views/grid/displayer/dialogtree.blade.php

@@ -68,17 +68,15 @@
             var idColumn = options.columns.id,
                 textColumn = options.columns.text,
                 parentColumn = options.columns.parent,
-                parentIds = [], nodes = [], i, v, parentId;
+                nodes = [], i, v, parentId;
 
             for (i in all) {
                 v = all[i];
                 if (!v[idColumn]) continue;
 
                 parentId = v[parentColumn] || '#';
-                if (!parentId) {
+                if (!parentId || parentId == options.rootParentId || parentId == '0') {
                     parentId = '#';
-                } else {
-                    parentIds.push(parentId);
                 }
 
                 v['state'] = {'disabled': true};
@@ -106,6 +104,6 @@
     var area = {!! json_encode($area) !!};
 
     $('.grid-dialog-tree').off('click').on('click', function () {
-        resolveDialogTree.call(this, {config: options, nodes: nodes, area: area, columns: {!! json_encode($columnNames) !!}});
+        resolveDialogTree.call(this, {config: options, nodes: nodes, area: area, rootParentId: '{!! $rootParentId !!}', columns: {!! json_encode($columnNames) !!}});
     });
 </script>

+ 21 - 2
src/Form/Field.php

@@ -12,6 +12,7 @@ use Illuminate\Contracts\Support\Arrayable;
 use Illuminate\Contracts\Support\Renderable;
 use Illuminate\Support\Arr;
 use Illuminate\Support\Fluent;
+use Illuminate\Support\Str;
 use Illuminate\Support\Traits\Macroable;
 
 /**
@@ -335,13 +336,31 @@ class Field implements Renderable
             $value = [];
 
             foreach ($this->column as $key => $column) {
-                $value[$key] = Arr::get($data, $this->normalizeColumn($column));
+                $value[$key] = $this->getValueFromData($data, $this->normalizeColumn($column));
             }
 
             return $value;
         }
 
-        return Arr::get($data, $this->normalizeColumn(), $this->value);
+        return $this->getValueFromData($data, null, $this->value);
+    }
+
+    /**
+     * @param array $data
+     * @param string $column
+     * @param mixed $default
+     *
+     * @return mixed
+     */
+    protected function getValueFromData($data, $column = null, $default = null)
+    {
+        $column = $column ?: $this->normalizeColumn();
+
+        if (Arr::has($data, $column)) {
+            return Arr::get($data, $column, $default);
+        }
+
+        return Arr::get($data, Str::snake($column), $default);
     }
 
     protected function normalizeColumn(?string $column = null)

+ 1 - 1
src/Form/Field/File.php

@@ -120,7 +120,7 @@ class File extends Field implements UploadFieldInterface
 
     protected function formatFieldData($data)
     {
-        return Helper::array(Arr::get($data, $this->normalizeColumn()));
+        return Helper::array($this->getValueFromData($data));
     }
 
     /**

+ 1 - 1
src/Form/Field/KeyValue.php

@@ -17,7 +17,7 @@ class KeyValue extends Field
     {
         $this->data = $data;
 
-        return Helper::array(Arr::get($data, $this->normalizeColumn(), $this->value));
+        return Helper::array($this->getValueFromData($data, null, $this->value));
     }
 
     /**

+ 1 - 1
src/Form/Field/ListField.php

@@ -60,7 +60,7 @@ class ListField extends Field
     {
         $this->data = $data;
 
-        return Helper::array(Arr::get($data, $this->normalizeColumn(), $this->value));
+        return Helper::array($this->getValueFromData($data, null, $this->value));
     }
 
     /**

+ 1 - 1
src/Form/Field/MultipleSelect.php

@@ -9,7 +9,7 @@ class MultipleSelect extends Select
 {
     protected function formatFieldData($data)
     {
-        return Helper::array(Arr::get($data, $this->normalizeColumn()));
+        return Helper::array($this->getValueFromData($data));
     }
 
     protected function prepareInputValue($value)

+ 1 - 1
src/Form/Field/Tags.php

@@ -40,7 +40,7 @@ class Tags extends Field
      */
     protected function formatFieldData($data)
     {
-        $value = Arr::get($data, $this->normalizeColumn());
+        $value = $this->getValueFromData($data);
 
         if (is_array($value) && $this->keyAsValue) {
             $value = array_column($value, $this->visibleColumn, $this->key);

+ 11 - 2
src/Form/Field/Tree.php

@@ -46,6 +46,8 @@ class Tree extends Field
 
     protected $readOnly = false;
 
+    protected $rootParentId = 0;
+
     /**
      * @param array|Arrayable|\Closure $data exp:
      *                                       {
@@ -82,6 +84,13 @@ class Tree extends Field
         return $this;
     }
 
+    public function rootParentId($id)
+    {
+        $this->rootParentId = $id;
+
+        return $this;
+    }
+
     /**
      * {@inheritDoc}
      */
@@ -139,7 +148,7 @@ class Tree extends Field
             }
 
             $parentId = $v[$parentColumn] ?? '#';
-            if (empty($parentId)) {
+            if (empty($parentId) || $parentId == $this->rootParentId) {
                 $parentId = '#';
             } else {
                 $parentIds[] = $parentId;
@@ -213,7 +222,7 @@ class Tree extends Field
 
     protected function formatFieldData($data)
     {
-        return Helper::array(Arr::get($data, $this->normalizeColumn()), true);
+        return Helper::array($this->getValueFromData($data), true);
     }
 
     protected function prepareInputValue($value)

+ 18 - 8
src/Grid/Displayers/DialogTree.php

@@ -44,6 +44,8 @@ class DialogTree extends AbstractDisplayer
 
     protected $checkAll;
 
+    protected $rootParentId = 0;
+
     /**
      * @param array $data exp:
      *                    {
@@ -67,6 +69,13 @@ class DialogTree extends AbstractDisplayer
         return $this;
     }
 
+    public function rootParentId($id)
+    {
+        $this->rootParentId = $id;
+
+        return $this;
+    }
+
     public function url(string $source)
     {
         $this->url = admin_url($source);
@@ -147,14 +156,15 @@ class DialogTree extends AbstractDisplayer
         }
 
         return Admin::view('admin::grid.displayer.dialogtree', [
-            'value'       => $this->format($this->value),
-            'nodes'       => $this->nodes,
-            'title'       => $this->title ?: $this->column->getLabel(),
-            'options'     => $this->options,
-            'area'        => $this->area,
-            'columnNames' => $this->columnNames,
-            'url'         => $this->url,
-            'checkAll'    => $this->checkAll,
+            'value'        => $this->format($this->value),
+            'nodes'        => $this->nodes,
+            'title'        => $this->title ?: $this->column->getLabel(),
+            'options'      => $this->options,
+            'area'         => $this->area,
+            'columnNames'  => $this->columnNames,
+            'url'          => $this->url,
+            'checkAll'     => $this->checkAll,
+            'rootParentId' => $this->rootParentId,
         ]);
     }
 

+ 48 - 1
src/Grid/Tools/RowSelector.php

@@ -20,6 +20,10 @@ class RowSelector
 
     protected $titleColumn;
 
+    protected $checked = [];
+
+    protected $disabled = [];
+
     public function __construct(Grid $grid)
     {
         $this->grid = $grid;
@@ -46,6 +50,20 @@ class RowSelector
         return $this;
     }
 
+    public function check($data)
+    {
+        $this->checked = $data;
+
+        return $this;
+    }
+
+    public function disable($data)
+    {
+        $this->disabled = $data;
+
+        return $this;
+    }
+
     public function idColumn(string $value)
     {
         $this->idColumn = $value;
@@ -76,10 +94,12 @@ HTML;
         $title = $this->getTitle($row, $id);
         $title = e(is_array($title) ? json_encode($title) : $title);
         $id = $this->idColumn ? Arr::get($row->toArray(), $this->idColumn) : $id;
+        $checked = $this->shouldChecked($row) ? 'checked="true"' : '';
+        $disabled = $this->shouldDisable($row) ? 'disabled' : '';
 
         return <<<EOT
 <div class="vs-checkbox-con vs-checkbox-{$this->style} checkbox-grid checkbox-grid-column">
-    <input type="checkbox" class="{$this->grid->getRowName()}-checkbox" data-id="{$id}" data-label="{$title}">
+    <input type="checkbox" class="{$this->grid->getRowName()}-checkbox" data-id="{$id}" {$checked} {$disabled} data-label="{$title}">
     <span class="vs-checkbox"><span class="vs-checkbox--check"><i class="vs-icon feather icon-check"></i></span></span>
 </div>        
 EOT;
@@ -103,6 +123,33 @@ JS
         );
     }
 
+    protected function shouldChecked($row)
+    {
+        return $this->isSelectedRow($row, $this->checked);
+    }
+
+    protected function shouldDisable($row)
+    {
+        return $this->isSelectedRow($row, $this->disabled);
+    }
+
+    protected function isSelectedRow($row, $value)
+    {
+        if ($value instanceof \Closure) {
+            return $value->call($row, $row);
+        }
+
+        if (is_array($value)) {
+            foreach ($value as $v) {
+                if (((int) $v) === $row->_index) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
     protected function getTitle($row, $id)
     {
         if ($key = $this->titleColumn) {

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików