adrema/app/Lib/Editor/EditorData.php

62 lines
1.7 KiB
PHP
Raw Normal View History

2024-07-04 23:54:37 +02:00
<?php
namespace App\Lib\Editor;
use Spatie\LaravelData\Data;
2024-07-04 23:56:47 +02:00
/** @todo replace blocks with actual block data classes */
2024-07-04 23:54:37 +02:00
class EditorData extends Data
{
public function __construct(
public string $version,
public array $blocks,
public int $time
) {
}
public function placeholder(string $search, string $replacement): self
{
$replacedBlocks = str(json_encode($this->blocks))->replace('{' . $search . '}', $replacement);
$this->blocks = json_decode($replacedBlocks);
return $this;
}
/**
* @param array<int, string> $wanted
*/
public function hasAll(array $wanted): bool
{
return collect($wanted)->first(fn ($search) => !str(json_encode($this->blocks))->contains($search)) === null;
}
public function replaceWithList(string $blockContent, array $replacements): self
{
$this->blocks = collect($this->blocks)->map(function ($block) use ($blockContent, $replacements) {
if (data_get($block, 'type') !== 'paragraph') {
return $block;
}
if (data_get($block, 'data.text') === '{' . $blockContent . '}') {
return [
...((array)$block),
'type' => 'list',
'data' => [
'style' => 'unordered',
'items' => collect($replacements)->map(fn ($replacement) => [
'content' => $replacement,
'items' => [],
]),
]
];
}
return $block;
})->toArray();
return $this;
}
}