Skip to content

Commit

Permalink
Added support for nested repeaters in block (area17#521)
Browse files Browse the repository at this point in the history
  • Loading branch information
Yanhao LI authored and antonioribeiro committed Feb 19, 2020
1 parent e05420c commit 052ff87
Showing 1 changed file with 45 additions and 19 deletions.
64 changes: 45 additions & 19 deletions src/Repositories/Behaviors/HandleBlocks.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,16 +70,30 @@ public function afterSaveHandleBlocks($object, $fields)
$blockRepository = app(BlockRepository::class);

$blockRepository->bulkDelete($object->blocks()->pluck('id')->toArray());

$this->getBlocks($object, $fields)->each(function ($block) use ($object, $blockRepository) {
$this->createBlock($blockRepository, $block);
});
}

$blockCreated = $blockRepository->create($block);
/**
* Create a block from formFields, and recursively create it's child blocks
*
* @param \A17\Twill\Repositories\BlockRepository $blockRepository
* @param array $blockFields
*
* @return \A17\Twill\Models\Block $blockCreated
*/
private function createBlock(BlockRepository $blockRepository, $blockFields)
{
$blockCreated = $blockRepository->create($blockFields);

$block['blocks']->each(function ($childBlock) use ($blockCreated, $blockRepository) {
$childBlock['parent_id'] = $blockCreated->id;
$blockRepository->create($childBlock);
});
// Handle child blocks
$blockFields['blocks']->each(function ($childBlock) use ($blockCreated, $blockRepository) {
$childBlock['parent_id'] = $blockCreated->id;
$this->createBlock($blockRepository, $childBlock);
});

return $blockCreated;
}

/**
Expand All @@ -95,27 +109,39 @@ private function getBlocks($object, $fields)
foreach ($fields['blocks'] as $index => $block) {
$block = $this->buildBlock($block, $object);
$block['position'] = $index + 1;
$block['blocks'] = $this->getChildBlocks($object, $block);

$childBlocksList = Collection::make();

foreach ($block['blocks'] as $childKey => $childBlocks) {
foreach ($childBlocks as $index => $childBlock) {
$childBlock = $this->buildBlock($childBlock, $object, true);
$blocks->push($block);
}
}

$childBlock['child_key'] = $childKey;
$childBlock['position'] = $index + 1;
return $blocks;
}

$childBlocksList->push($childBlock);
}
}
/**
* Recursively generate child blocks from the fields of a block
*
* @param \A17\Twill\Models\Model $object
* @param array $parentBlockFields
*
* @return \Illuminate\Support\Collection
*/
private function getChildBlocks($object, $parentBlockFields)
{
$childBlocksList = Collection::make();

$block['blocks'] = $childBlocksList;
foreach ($parentBlockFields['blocks'] as $childKey => $childBlocks) {
foreach ($childBlocks as $index => $childBlock) {
$childBlock = $this->buildBlock($childBlock, $object, true);
$childBlock['child_key'] = $childKey;
$childBlock['position'] = $index + 1;
$childBlock['blocks'] = $this->getChildBlocks($object, $childBlock);

$blocks->push($block);
$childBlocksList->push($childBlock);
}
}

return $blocks;
return $childBlocksList;
}

/**
Expand Down

0 comments on commit 052ff87

Please sign in to comment.