HasRemoveCallback::defaultRemoveCallback()   A
last analyzed

Complexity

Conditions 6
Paths 1

Size

Total Lines 21
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 17
nc 1
nop 0
dl 0
loc 21
ccs 18
cts 18
cp 1
crap 6
rs 9.0777
c 1
b 0
f 0
1
<?php
2
3
namespace NovaFlexibleContent\Layouts\LayoutTraits;
4
5
use Laravel\Nova\Contracts\Deletable;
6
use Laravel\Nova\Contracts\Storable;
7
use Laravel\Nova\Fields\Field;
8
use Laravel\Nova\Http\Requests\NovaRequest;
9
use NovaFlexibleContent\Flexible;
10
use NovaFlexibleContent\Layouts\Layout;
11
12
trait HasRemoveCallback
13
{
14
    /**
15
     * The callback to be called when this layout removed.
16
     */
17
    protected ?\Closure $removeCallbackMethod = null;
18
19
    /**
20
     * The method to call when this layout removed.
21
     */
22 1
    public function fireRemoveCallback(Flexible $flexibleField, NovaRequest $request, $model)
23
    {
24 1
        $removeCallbackMethod = $this->removeCallbackMethod ?? $this->defaultRemoveCallback();
25
26 1
        return call_user_func_array($removeCallbackMethod, [$flexibleField, $this, $request, $model]);
27
    }
28
29
    /**
30
     * The default behaviour when removed.
31
     *
32
     * TODO: confusing code - should be reworked
33
     */
34 1
    protected function defaultRemoveCallback(): \Closure
35
    {
36
37 1
        return function (Flexible $flexible, Layout $layout, NovaRequest $request, $model) {
38 1
            $layout->fieldsCollection()
39 1
                ->each(function (Field $field) use ($layout, $request, $model) {
40 1
                    if ($field instanceof Flexible) {
41 1
                        $field->resolve($layout);
42 1
                        $field->groups()->fireRemoveCallback($field, $request, $model);
43 1
                    } elseif ($field instanceof Storable
44 1
                        && $field instanceof Deletable
45 1
                        && $field->isPrunable()
46 1
                        && property_exists($field, 'deleteCallback')
47
                    ) {
48 1
                        $field->value = $layout->getAttribute($field->attribute);
49 1
                        call_user_func(
50 1
                            $field->deleteCallback,
51 1
                            $request,
52 1
                            $model,
53 1
                            $field->getStorageDisk(),
54 1
                            $field->getStoragePath()
55 1
                        );
56
                    }
57 1
                });
58 1
        };
59
    }
60
}
61