jqh 4 år sedan
förälder
incheckning
c3d6d2a5c9

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

@@ -60,7 +60,7 @@
 </div>
 
 <script>
-    var nestedIndex = 0,
+    var nestedIndex = {!! $count !!},
         container = '.has-many-{{ $column }}',
         forms = '.has-many-{{ $column  }}-forms';
 

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

@@ -79,7 +79,7 @@
         }
     });
 
-    var nestedIndex = 0;
+    var nestedIndex = {!! $count !!};
 
     function replaceNestedFormIndex(value) {
         return String(value).replace(/{{ Dcat\Admin\Form\NestedForm::DEFAULT_KEY_NAME }}/g, nestedIndex);

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

@@ -81,7 +81,7 @@
 {{--<hr style="margin-top: 0px;">--}}
 
 <script>
-    var nestedIndex = 0,
+    var nestedIndex = {!! $count !!},
         container = '.has-many-{{ $column }}';
 
     function replaceNestedFormIndex(value) {

+ 15 - 22
src/Form/Field.php

@@ -399,13 +399,18 @@ class Field implements Renderable
             $value = [];
 
             foreach ($this->column as $key => $column) {
-                $value[$key] = Arr::get($data, $column);
+                $value[$key] = Arr::get($data, $this->normalizeColumn($column));
             }
 
             return $value;
         }
 
-        return Arr::get($data, $this->column, $this->value);
+        return Arr::get($data, $this->normalizeColumn(), $this->value);
+    }
+
+    protected function normalizeColumn(?string $column = null)
+    {
+        return str_replace('->', '.', $column ?: $this->column);
     }
 
     /**
@@ -951,7 +956,7 @@ class Field implements Renderable
      */
     public function setElementClass($class)
     {
-        $this->elementClass = array_merge($this->elementClass, (array) $class);
+        $this->elementClass = array_merge($this->elementClass, (array) $this->normalizeElementClass($class));
 
         return $this;
     }
@@ -964,36 +969,24 @@ class Field implements Renderable
     public function getElementClass()
     {
         if (! $this->elementClass) {
-            $name = $this->getElementName();
-
-            $this->elementClass = array_map(function ($v) {
-                return static::FIELD_CLASS_PREFIX.$v;
-            }, (array) str_replace(['[', ']'], '_', $name));
+            $this->elementClass = $this->normalizeElementClass((array) $this->getElementName());
         }
 
         return $this->elementClass;
     }
 
     /**
-     * Get element class string.
+     * @param string|array $class
      *
-     * @return mixed
+     * @return array|string
      */
-    public function getElementClassString()
+    public function normalizeElementClass($class)
     {
-        $elementClass = $this->getElementClass();
-
-        if (Arr::isAssoc($elementClass)) {
-            $classes = [];
-
-            foreach ($elementClass as $index => $class) {
-                $classes[$index] = is_array($class) ? implode(' ', $class) : $class;
-            }
-
-            return $classes;
+        if (is_array($class)) {
+            return array_map([$this, 'normalizeElementClass'], $class);
         }
 
-        return implode(' ', $elementClass);
+        return static::FIELD_CLASS_PREFIX.str_replace(['[', ']', '->', '.'], '_', $class);
     }
 
     /**

+ 0 - 9
src/Form/Field/ArrayField.php

@@ -53,15 +53,6 @@ class ArrayField extends HasMany
             ->toArray();
     }
 
-    public function value($value = null)
-    {
-        if ($value === null) {
-            return Helper::array(parent::value($value));
-        }
-
-        return parent::value($value);
-    }
-
     public function buildNestedForm($key = null)
     {
         $form = new NestedForm($this->column);

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

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

+ 10 - 0
src/Form/Field/HasMany.php

@@ -457,6 +457,15 @@ class HasMany extends Field
         return $this;
     }
 
+    public function value($value = null)
+    {
+        if ($value === null) {
+            return Helper::array(parent::value($value));
+        }
+
+        return parent::value($value);
+    }
+
     /**
      * Render the `HasMany` field.
      *
@@ -486,6 +495,7 @@ class HasMany extends Field
             'relationName'   => $this->relationName,
             'options'        => $this->options,
             'templateScript' => $script,
+            'count'          => count($this->value()),
         ]);
 
         return parent::render();

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

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

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

@@ -65,7 +65,7 @@ class ListField extends Field
     {
         $this->data = $data;
 
-        return Helper::array(Arr::get($data, $this->column, $this->value));
+        return Helper::array(Arr::get($data, $this->normalizeColumn(), $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->column));
+        return Helper::array(Arr::get($data, $this->normalizeColumn()));
     }
 
     protected function prepareInputValue($value)

+ 4 - 5
src/Form/Field/Select.php

@@ -98,11 +98,10 @@ class Select extends Field
     {
         if (Str::contains($field, '.')) {
             $field = $this->formatName($field);
-            $class = static::FIELD_CLASS_PREFIX.str_replace(['[', ']'], '_', $field);
-        } else {
-            $class = static::FIELD_CLASS_PREFIX.$field;
         }
 
+        $class = $this->normalizeElementClass($field);;
+
         $url = admin_url($sourceUrl);
 
         return $this->addVariables(['load' => compact('url', 'class', 'idField', 'textField')]);
@@ -122,10 +121,10 @@ class Select extends Field
     {
         $fieldsStr = implode('^', array_map(function ($field) {
             if (Str::contains($field, '.')) {
-                return static::FIELD_CLASS_PREFIX.str_replace('.', '_', $field).'_';
+                return $this->normalizeElementClass($field).'_';
             }
 
-            return static::FIELD_CLASS_PREFIX.$field;
+            return $this->normalizeElementClass($field);
         }, (array) $fields));
         $urlsStr = implode('^', array_map(function ($url) {
             return admin_url($url);

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

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

+ 1 - 3
src/Form/Field/Tree.php

@@ -211,9 +211,7 @@ class Tree extends Field
 
     protected function formatFieldData($data)
     {
-        $value = Arr::get($data, $this->column);
-
-        return Helper::array($value, true);
+        return Helper::array(Arr::get($data, $this->normalizeColumn()), true);
     }
 
     protected function prepareInputValue($value)

+ 2 - 2
src/Form/NestedForm.php

@@ -414,12 +414,12 @@ class NestedForm
             foreach ($column as $k => $name) {
                 $errorKey[$k] = sprintf('%s.%s.%s', $this->relationName, $key, $name);
                 $elementName[$k] = sprintf('%s[%s][%s]', $this->relationName, $key, $name);
-                $elementClass[$k] = [$this->relationName, Field::FIELD_CLASS_PREFIX.$name];
+                $elementClass[$k] = [$this->relationName, $name];
             }
         } else {
             $errorKey = sprintf('%s.%s.%s', $this->relationName, $key, $column);
             $elementName = sprintf('%s[%s][%s]', $this->relationName, $key, $column);
-            $elementClass = [$this->relationName, Field::FIELD_CLASS_PREFIX.$column];
+            $elementClass = [$this->relationName, $column];
         }
 
         return $field->setErrorKey($errorKey)