LaravelTrix::make()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.9332
c 0
b 0
f 0
cc 1
nc 1
nop 3
1
<?php
2
3
namespace Te7aHoudini\LaravelTrix;
4
5
use Illuminate\Pipeline\Pipeline;
6
use Illuminate\Support\Str;
7
use Te7aHoudini\LaravelTrix\Pipes\AttachmentInput;
8
use Te7aHoudini\LaravelTrix\Pipes\Input;
9
use Te7aHoudini\LaravelTrix\Pipes\Styles;
10
use Te7aHoudini\LaravelTrix\Pipes\TrixEditor;
11
12
class LaravelTrix
13
{
14
    public $model;
15
16
    public $loweredModelName;
17
18
    public $config;
19
20
    public $html = '';
21
22
    public function make($model, $field, $config = [])
23
    {
24
        $this->model = $model;
25
26
        $this->loweredModelName = Str::lower(class_basename($model));
27
28
        $this->formatFieldConfig($field, $config);
29
30
        return $this;
31
    }
32
33
    public function formatFieldConfig($field, $config)
34
    {
35
        $config['id'] = $config['id'] ?? $this->loweredModelName.'-'.$field.'-'.(is_object($this->model) && $this->model->exists ? $this->model->id : 'new-model');
36
37
        $config['modelClass'] = is_object($this->model) ? get_class($this->model) : $this->model;
38
39
        $config['field'] = $field;
40
41
        $this->config = $config;
42
    }
43
44
    public function __toString()
45
    {
46
        return app(Pipeline::class)
47
            ->send($this)
48
            ->through([
49
                Styles::class,
50
                Input::class,
51
                AttachmentInput::class,
52
                TrixEditor::class,
53
            ])
54
            ->then($this->renderContainer());
55
    }
56
57
    public function renderContainer()
58
    {
59
        return function () {
60
            $tag = $this->config['containerElement'] ?? 'span';
61
62
            return "<$tag v-pre id='container-{$this->config['id']}'> $this->html </$tag>";
63
        };
64
    }
65
}
66