playing with extensible fields
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Field;
|
||||
|
||||
use Lucent\Record\RecordData;
|
||||
|
||||
abstract class Field
|
||||
{
|
||||
abstract public function format(RecordData $input, RecordData $output): RecordData;
|
||||
// abstract public function renderForm(): string;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Field;
|
||||
|
||||
abstract class FieldData
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Field;
|
||||
use Lucent\Schema\FieldType;
|
||||
|
||||
class FieldInfo
|
||||
{
|
||||
|
||||
|
||||
public function __construct(
|
||||
public string $name,
|
||||
public string $label,
|
||||
public FieldType $type,
|
||||
)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Field\File;
|
||||
|
||||
use Lucent\Field\FieldData;
|
||||
|
||||
class Data extends FieldData
|
||||
{
|
||||
public function __construct(
|
||||
public string $name,
|
||||
public string $label,
|
||||
public string $mime = "",
|
||||
public string $help = "",
|
||||
public ?int $min = null,
|
||||
public ?int $max = null,
|
||||
public array $collections = [],
|
||||
public string $group = "",
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
public static function fromArray(array $data): self
|
||||
{
|
||||
return new self(
|
||||
name: data_get($data, 'name'),
|
||||
label: data_get($data, 'label'),
|
||||
mime: data_get($data, 'mime',""),
|
||||
help: data_get($data, 'help', ""),
|
||||
min: data_get($data, 'min'),
|
||||
max: data_get($data, 'max'),
|
||||
collections: data_get($data, 'collections',[]),
|
||||
group: data_get($data, 'group', ""),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Field\File;
|
||||
|
||||
use Lucent\Field\Field;
|
||||
use Lucent\Field\FieldInfo;
|
||||
use Lucent\Record\RecordData;
|
||||
use Lucent\Schema\FieldType;
|
||||
use Lucent\Schema\Nullable;
|
||||
|
||||
class File extends Field
|
||||
{
|
||||
public FieldInfo $info;
|
||||
public Data $data;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->info = new FieldInfo("file", "File", FieldType::FILE);
|
||||
}
|
||||
|
||||
public function setData(array $data): void
|
||||
{
|
||||
$this->data = Data::fromArray($data);
|
||||
}
|
||||
|
||||
public function format(RecordData $input, RecordData $output): RecordData
|
||||
{
|
||||
return $output;
|
||||
}
|
||||
|
||||
public function renderForm(): string
|
||||
{
|
||||
return view('lucent::new.edit.fields.file', ["info" => $this->info, "data" => $this->data])->render();;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Field\Reference;
|
||||
|
||||
use Lucent\Field\FieldData;
|
||||
|
||||
class Data extends FieldData
|
||||
{
|
||||
public function __construct(
|
||||
public string $name,
|
||||
public string $label,
|
||||
public string $mime = "",
|
||||
public string $help = "",
|
||||
public ?int $min = null,
|
||||
public ?int $max = null,
|
||||
public array $collections = [],
|
||||
public string $searchField = "",
|
||||
public string $layout = "",
|
||||
public string $group = "",
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
public static function fromArray(array $data): self
|
||||
{
|
||||
return new self(
|
||||
name: data_get($data, 'name'),
|
||||
label: data_get($data, 'label'),
|
||||
mime: data_get($data, 'mime',""),
|
||||
help: data_get($data, 'help', ""),
|
||||
min: data_get($data, 'min'),
|
||||
max: data_get($data, 'max'),
|
||||
collections: data_get($data, 'collections',[]),
|
||||
searchField: data_get($data, 'searchField',""),
|
||||
group: data_get($data, 'group', ""),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Field\Reference;
|
||||
|
||||
use Lucent\Field\Field;
|
||||
use Lucent\Field\FieldInfo;
|
||||
use Lucent\Record\RecordData;
|
||||
use Lucent\Schema\FieldType;
|
||||
|
||||
class Reference extends Field
|
||||
{
|
||||
public FieldInfo $info;
|
||||
public Data $data;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->info = new FieldInfo("reference", "Reference", FieldType::REFERENCE);
|
||||
}
|
||||
|
||||
public function setData(array $data): void
|
||||
{
|
||||
$this->data = Data::fromArray($data);
|
||||
}
|
||||
|
||||
public function format(RecordData $input, RecordData $output): RecordData
|
||||
{
|
||||
return $output;
|
||||
}
|
||||
|
||||
public function renderForm(): string
|
||||
{
|
||||
return view('lucent::new.edit.fields.reference', ["info" => $this->info, "data" => $this->data])->render();;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Field\Rich;
|
||||
|
||||
use Lucent\Field\FieldData;
|
||||
|
||||
class Data extends FieldData
|
||||
{
|
||||
public function __construct(
|
||||
public string $name,
|
||||
public string $label,
|
||||
public bool $required = false,
|
||||
public bool $nullable = false,
|
||||
public string $default = "",
|
||||
public string $help = "",
|
||||
public array $collections = [],
|
||||
public ?int $min = null,
|
||||
public ?int $max = null,
|
||||
public bool $readonly = false,
|
||||
public string $group = "",
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
public static function fromArray(array $data): self
|
||||
{
|
||||
return new self(
|
||||
name: data_get($data, 'name'),
|
||||
label: data_get($data, 'label'),
|
||||
required: data_get($data, 'required', false),
|
||||
nullable: data_get($data, 'nullable', false),
|
||||
default: data_get($data, 'default', ""),
|
||||
help: data_get($data, 'help', ""),
|
||||
min: data_get($data, 'min'),
|
||||
max: data_get($data, 'max'),
|
||||
readonly: data_get($data, 'readonly', false),
|
||||
group: data_get($data, 'group', ""),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Field\Rich;
|
||||
|
||||
use Lucent\Field\Field;
|
||||
use Lucent\Field\FieldInfo;
|
||||
use Lucent\Record\RecordData;
|
||||
use Lucent\Schema\FieldType;
|
||||
use Lucent\Schema\Nullable;
|
||||
|
||||
class Rich extends Field
|
||||
{
|
||||
public FieldInfo $info;
|
||||
public Data $data;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->info = new FieldInfo("rich", "Rich Editor", FieldType::STRING);
|
||||
}
|
||||
|
||||
public function setData(array $data): void
|
||||
{
|
||||
$this->data = Data::fromArray($data);
|
||||
}
|
||||
|
||||
public function format(RecordData $input, RecordData $output): RecordData
|
||||
{
|
||||
$value = $input[$this->data->name] ?? null;
|
||||
$output[$this->data->name] = (new Nullable($this->data->nullable, $value, ""))->value();
|
||||
return $output;
|
||||
}
|
||||
|
||||
public function renderForm(): string
|
||||
{
|
||||
return view('lucent::new.edit.fields.rich', ["info" => $this->info, "data" => $this->data])->render();;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Field\Slug;
|
||||
|
||||
use Lucent\Field\FieldData;
|
||||
|
||||
class Data extends FieldData
|
||||
{
|
||||
public function __construct(
|
||||
public string $name,
|
||||
public string $label,
|
||||
public bool $required = false,
|
||||
public bool $nullable = false,
|
||||
public ?int $min = null,
|
||||
public ?int $max = null,
|
||||
public string $default = "",
|
||||
public string $help = "",
|
||||
public bool $readonly = false,
|
||||
public string $source = "",
|
||||
public string $group = "",
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
public static function fromArray(array $data): self
|
||||
{
|
||||
return new self(
|
||||
name: data_get($data, 'name'),
|
||||
label: data_get($data, 'label'),
|
||||
required: data_get($data, 'required', false),
|
||||
nullable: data_get($data, 'nullable', false),
|
||||
min: data_get($data, 'min'),
|
||||
max: data_get($data, 'max'),
|
||||
default: data_get($data, 'default', ""),
|
||||
help: data_get($data, 'help', ""),
|
||||
readonly: data_get($data, 'readonly', false),
|
||||
source: data_get($data, 'source',""),
|
||||
group: data_get($data, 'group', ""),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Field\Slug;
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
use Lucent\Field\Field;
|
||||
use Lucent\Field\FieldInfo;
|
||||
use Lucent\Record\RecordData;
|
||||
use Lucent\Schema\FieldType;
|
||||
use Lucent\Schema\Nullable;
|
||||
|
||||
class Slug extends Field
|
||||
{
|
||||
public FieldInfo $info;
|
||||
public Data $data;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->info = new FieldInfo("slug", "Slug", FieldType::STRING);
|
||||
}
|
||||
|
||||
public function setData(array $data): void
|
||||
{
|
||||
$this->data = Data::fromArray($data);
|
||||
}
|
||||
|
||||
public function format(RecordData $input, RecordData $output): RecordData
|
||||
{
|
||||
$value = !empty($input[$this->data->name]) ? (string)$input[$this->data->name] : null;
|
||||
if(empty($value)){
|
||||
$value = Str::slug($input[$this->data->source]);
|
||||
}
|
||||
|
||||
$output[$this->data->name] = (new Nullable($this->data->nullable, $value, ""))->value();
|
||||
return $output;
|
||||
}
|
||||
|
||||
public function renderForm(): string
|
||||
{
|
||||
return view('lucent::new.edit.fields.slug', ["info" => $this->info, "data" => $this->data])->render();;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Field\Text;
|
||||
|
||||
use Lucent\Field\FieldData;
|
||||
|
||||
class Data extends FieldData
|
||||
{
|
||||
public function __construct(
|
||||
public string $name,
|
||||
public string $label,
|
||||
public bool $required = false,
|
||||
public bool $nullable = false,
|
||||
public ?int $min = null,
|
||||
public ?int $max = null,
|
||||
public string $help = "",
|
||||
public string $default = "",
|
||||
public bool $readonly = false,
|
||||
public ?array $selectOptions = null,
|
||||
public string $group = "",
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
public static function fromArray(array $data): self
|
||||
{
|
||||
return new self(
|
||||
name: data_get($data, 'name'),
|
||||
label: data_get($data, 'label'),
|
||||
required: data_get($data, 'required', false),
|
||||
nullable: data_get($data, 'nullable', false),
|
||||
min: data_get($data, 'min'),
|
||||
max: data_get($data, 'max'),
|
||||
help: data_get($data, 'help', ""),
|
||||
default: data_get($data, 'default', ""),
|
||||
readonly: data_get($data, 'readonly', false),
|
||||
selectOptions: data_get($data, 'selectOptions'),
|
||||
group: data_get($data, 'group', ""),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace Lucent\Field\Text;
|
||||
|
||||
use Lucent\Field\Field;
|
||||
use Lucent\Field\FieldInfo;
|
||||
use Lucent\Record\RecordData;
|
||||
use Lucent\Schema\FieldType;
|
||||
use Lucent\Schema\Nullable;
|
||||
|
||||
class Text extends Field
|
||||
{
|
||||
public FieldInfo $info;
|
||||
public Data $data;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->info = new FieldInfo("text", "Text", FieldType::STRING);
|
||||
}
|
||||
|
||||
public function setData(array $data): void
|
||||
{
|
||||
$this->data = Data::fromArray($data);
|
||||
}
|
||||
|
||||
|
||||
public function format(RecordData $input, RecordData $output): RecordData
|
||||
{
|
||||
$value = !empty($input[$this->data->name]) ? (string)$input[$this->data->name] : null;
|
||||
$output[$this->data->name] = (new Nullable($this->data->nullable, $value, ""))->value();
|
||||
return $output;
|
||||
}
|
||||
|
||||
public function renderForm($record, string $fieldId): string
|
||||
{
|
||||
return view('lucent::new.edit.fields.text', ["info" => $this->info, "data" => $this->data , "record" => $record, "fieldId" => $fieldId])->render();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user