Skip to content

Commit

Permalink
πŸ§‘β€πŸ’» Improve Builder intellisense in child contexts (#221)
Browse files Browse the repository at this point in the history
  • Loading branch information
Log1x committed Feb 29, 2024
1 parent f30eceb commit bf075f9
Show file tree
Hide file tree
Showing 9 changed files with 374 additions and 25 deletions.
56 changes: 46 additions & 10 deletions src/Builder.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,30 @@

use Illuminate\Support\Str;
use InvalidArgumentException;
use Log1x\AcfComposer\Builder\AccordionBuilder;
use Log1x\AcfComposer\Builder\ChoiceFieldBuilder;
use Log1x\AcfComposer\Builder\FieldBuilder;
use Log1x\AcfComposer\Builder\FlexibleContentBuilder;
use Log1x\AcfComposer\Builder\GroupBuilder;
use Log1x\AcfComposer\Builder\RepeaterBuilder;
use Log1x\AcfComposer\Builder\TabBuilder;
use ReflectionClass;
use StoutLogic\AcfBuilder\FieldsBuilder;
use StoutLogic\AcfBuilder\LocationBuilder;

/**
* Builds configurations for an ACF Field.
*
* @method AccordionBuilder addAccordion(string $label, array $args = [])
* @method Builder addLayout(string|FieldsBuilder $layout, array $args = [])
* @method Builder endFlexibleContent()
* @method Builder endGroup()
* @method Builder endRepeater()
* @method FieldBuilder addCheckbox(string $name, array $args = [])
* @method FieldBuilder addChoiceField(string $name, string $type, array $args = [])
* @method ChoiceFieldBuilder addButtonGroup(string $name, array $args = [])
* @method ChoiceFieldBuilder addCheckbox(string $name, array $args = [])
* @method ChoiceFieldBuilder addChoiceField(string $name, string $type, array $args = [])
* @method ChoiceFieldBuilder addRadio(string $name, array $args = [])
* @method ChoiceFieldBuilder addSelect(string $name, array $args = [])
* @method FieldBuilder addColorPicker(string $name, array $args = [])
* @method FieldBuilder addDatePicker(string $name, array $args = [])
* @method FieldBuilder addDateTimePicker(string $name, array $args = [])
Expand All @@ -39,11 +46,8 @@
* @method FieldBuilder addPartial(string $partial)
* @method FieldBuilder addPassword(string $name, array $args = [])
* @method FieldBuilder addPostObject(string $name, array $args = [])
* @method FieldBuilder addRadio(string $name, array $args = [])
* @method FieldBuilder addRange(string $name, array $args = [])
* @method FieldBuilder addRelationship(string $name, array $args = [])
* @method FieldBuilder addSelect(string $name, array $args = [])
* @method FieldBuilder addTab(string $label, array $args = [])
* @method FieldBuilder addTaxonomy(string $name, array $args = [])
* @method FieldBuilder addText(string $name, array $args = [])
* @method FieldBuilder addTextarea(string $name, array $args = [])
Expand All @@ -57,6 +61,7 @@
* @method GroupBuilder end()
* @method LocationBuilder setLocation(string $param, string $operator, string $value)
* @method RepeaterBuilder addRepeater(string $name, array $args = [])
* @method TabBuilder addTab(string $label, array $args = [])
*/
class Builder extends FieldsBuilder
{
Expand Down Expand Up @@ -181,8 +186,7 @@ public function addGroup($name, array $args = [])
}

/**
* Add a repeater field. Any fields added after will be added to the repeater
* until `endRepeater` is called.
* Add a repeater field.
*
* @param string $name
* @return \Log1x\AcfComposer\Builder\RepeaterBuilder
Expand All @@ -193,9 +197,7 @@ public function addRepeater($name, array $args = [])
}

/**
* Add a flexible content field. Once adding a layout with `addLayout`,
* any fields added after will be added to that layout until another
* `addLayout` call is made, or until `endFlexibleContent` is called.
* Add a flexible content field.
*
* @param string $name
* @return \Log1x\AcfComposer\Builder\FlexibleContentBuilder
Expand All @@ -205,6 +207,40 @@ public function addFlexibleContent($name, array $args = [])
return $this->initializeField(new FlexibleContentBuilder($name, 'flexible_content', $args));
}

/**
* Add a tab field.
*
* @param string $label
* @return \Log1x\AcfComposer\Builder\TabBuilder
*/
public function addTab($label, array $args = [])
{
return $this->initializeField(new TabBuilder($label, 'tab', $args));
}

/**
* Add an accordion field.
*
* @param string $label
* @return \Log1x\AcfComposer\Builder\AccordionBuilder
*/
public function addAccordion($label, array $args = [])
{
return $this->initializeField(new AccordionBuilder($label, 'accordion', $args));
}

/**
* Add a choice field.
*
* @param string $name
* @param string $type
* @return \Log1x\AcfComposer\Builder\ChoiceFieldBuilder
*/
public function addChoiceField($name, $type, array $args = [])
{
return $this->initializeField(new ChoiceFieldBuilder($name, $type, $args));
}

/**
* Check for custom field types before calling the requested method.
*
Expand Down
56 changes: 56 additions & 0 deletions src/Builder/AccordionBuilder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?php

namespace Log1x\AcfComposer\Builder;

use StoutLogic\AcfBuilder\AccordionBuilder as AccordionBuilderBase;

/**
* @method AccordionBuilder addAccordion(string $label, array $args = [])
* @method \Log1x\AcfComposer\Builder addLayout(string|FieldsBuilder $layout, array $args = [])
* @method \Log1x\AcfComposer\Builder endFlexibleContent()
* @method \Log1x\AcfComposer\Builder endGroup()
* @method \Log1x\AcfComposer\Builder endRepeater()
* @method ChoiceFieldBuilder addButtonGroup(string $name, array $args = [])
* @method ChoiceFieldBuilder addCheckbox(string $name, array $args = [])
* @method ChoiceFieldBuilder addChoiceField(string $name, string $type, array $args = [])
* @method ChoiceFieldBuilder addRadio(string $name, array $args = [])
* @method ChoiceFieldBuilder addSelect(string $name, array $args = [])
* @method FieldBuilder addColorPicker(string $name, array $args = [])
* @method FieldBuilder addDatePicker(string $name, array $args = [])
* @method FieldBuilder addDateTimePicker(string $name, array $args = [])
* @method FieldBuilder addEmail(string $name, array $args = [])
* @method FieldBuilder addField(string $name, string $type, array $args = [])
* @method FieldBuilder addFields(FieldsBuilder|array $fields)
* @method FieldBuilder addFile(string $name, array $args = [])
* @method FieldBuilder addGallery(string $name, array $args = [])
* @method FieldBuilder addGoogleMap(string $name, array $args = [])
* @method FieldBuilder addImage(string $name, array $args = [])
* @method FieldBuilder addLink(string $name, array $args = [])
* @method FieldBuilder addMessage(string $label, string $message, array $args = [])
* @method FieldBuilder addNumber(string $name, array $args = [])
* @method FieldBuilder addOembed(string $name, array $args = [])
* @method FieldBuilder addPageLink(string $name, array $args = [])
* @method FieldBuilder addPartial(string $partial)
* @method FieldBuilder addPassword(string $name, array $args = [])
* @method FieldBuilder addPostObject(string $name, array $args = [])
* @method FieldBuilder addRange(string $name, array $args = [])
* @method FieldBuilder addRelationship(string $name, array $args = [])
* @method FieldBuilder addTaxonomy(string $name, array $args = [])
* @method FieldBuilder addText(string $name, array $args = [])
* @method FieldBuilder addTextarea(string $name, array $args = [])
* @method FieldBuilder addTimePicker(string $name, array $args = [])
* @method FieldBuilder addTrueFalse(string $name, array $args = [])
* @method FieldBuilder addUrl(string $name, array $args = [])
* @method FieldBuilder addUser(string $name, array $args = [])
* @method FieldBuilder addWysiwyg(string $name, array $args = [])
* @method FlexibleContentBuilder addFlexibleContent(string $name, array $args = [])
* @method GroupBuilder addGroup(string $name, array $args = [])
* @method GroupBuilder end()
* @method LocationBuilder setLocation(string $param, string $operator, string $value)
* @method RepeaterBuilder addRepeater(string $name, array $args = [])
* @method TabBuilder addTab(string $label, array $args = [])
*/
class AccordionBuilder extends AccordionBuilderBase
{
//
}
56 changes: 56 additions & 0 deletions src/Builder/ChoiceFieldBuilder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?php

namespace Log1x\AcfComposer\Builder;

use StoutLogic\AcfBuilder\ChoiceFieldBuilder as ChoiceFieldBuilderBase;

/**
* @method AccordionBuilder addAccordion(string $label, array $args = [])
* @method Builder addLayout(string|FieldsBuilder $layout, array $args = [])
* @method Builder endFlexibleContent()
* @method Builder endGroup()
* @method Builder endRepeater()
* @method ChoiceFieldBuilder addButtonGroup(string $name, array $args = [])
* @method ChoiceFieldBuilder addCheckbox(string $name, array $args = [])
* @method ChoiceFieldBuilder addChoiceField(string $name, string $type, array $args = [])
* @method ChoiceFieldBuilder addRadio(string $name, array $args = [])
* @method ChoiceFieldBuilder addSelect(string $name, array $args = [])
* @method FieldBuilder addColorPicker(string $name, array $args = [])
* @method FieldBuilder addDatePicker(string $name, array $args = [])
* @method FieldBuilder addDateTimePicker(string $name, array $args = [])
* @method FieldBuilder addEmail(string $name, array $args = [])
* @method FieldBuilder addField(string $name, string $type, array $args = [])
* @method FieldBuilder addFields(FieldsBuilder|array $fields)
* @method FieldBuilder addFile(string $name, array $args = [])
* @method FieldBuilder addGallery(string $name, array $args = [])
* @method FieldBuilder addGoogleMap(string $name, array $args = [])
* @method FieldBuilder addImage(string $name, array $args = [])
* @method FieldBuilder addLink(string $name, array $args = [])
* @method FieldBuilder addMessage(string $label, string $message, array $args = [])
* @method FieldBuilder addNumber(string $name, array $args = [])
* @method FieldBuilder addOembed(string $name, array $args = [])
* @method FieldBuilder addPageLink(string $name, array $args = [])
* @method FieldBuilder addPartial(string $partial)
* @method FieldBuilder addPassword(string $name, array $args = [])
* @method FieldBuilder addPostObject(string $name, array $args = [])
* @method FieldBuilder addRange(string $name, array $args = [])
* @method FieldBuilder addRelationship(string $name, array $args = [])
* @method FieldBuilder addTaxonomy(string $name, array $args = [])
* @method FieldBuilder addText(string $name, array $args = [])
* @method FieldBuilder addTextarea(string $name, array $args = [])
* @method FieldBuilder addTimePicker(string $name, array $args = [])
* @method FieldBuilder addTrueFalse(string $name, array $args = [])
* @method FieldBuilder addUrl(string $name, array $args = [])
* @method FieldBuilder addUser(string $name, array $args = [])
* @method FieldBuilder addWysiwyg(string $name, array $args = [])
* @method FlexibleContentBuilder addFlexibleContent(string $name, array $args = [])
* @method GroupBuilder addGroup(string $name, array $args = [])
* @method GroupBuilder end()
* @method LocationBuilder setLocation(string $param, string $operator, string $value)
* @method RepeaterBuilder addRepeater(string $name, array $args = [])
* @method TabBuilder addTab(string $label, array $args = [])
*/
class ChoiceFieldBuilder extends ChoiceFieldBuilderBase
{
//
}
14 changes: 7 additions & 7 deletions src/Builder/FieldBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,16 @@
use StoutLogic\AcfBuilder\LocationBuilder;

/**
* Builds configurations for an ACF Field.
*
* @method AccordionBuilder addAccordion(string $label, array $args = [])
* @method Builder addLayout(string|FieldsBuilder $layout, array $args = [])
* @method Builder endFlexibleContent()
* @method Builder endGroup()
* @method Builder endRepeater()
* @method FieldBuilder addCheckbox(string $name, array $args = [])
* @method FieldBuilder addChoiceField(string $name, string $type, array $args = [])
* @method ChoiceFieldBuilder addButtonGroup(string $name, array $args = [])
* @method ChoiceFieldBuilder addCheckbox(string $name, array $args = [])
* @method ChoiceFieldBuilder addChoiceField(string $name, string $type, array $args = [])
* @method ChoiceFieldBuilder addRadio(string $name, array $args = [])
* @method ChoiceFieldBuilder addSelect(string $name, array $args = [])
* @method FieldBuilder addColorPicker(string $name, array $args = [])
* @method FieldBuilder addDatePicker(string $name, array $args = [])
* @method FieldBuilder addDateTimePicker(string $name, array $args = [])
Expand All @@ -34,11 +36,8 @@
* @method FieldBuilder addPartial(string $partial)
* @method FieldBuilder addPassword(string $name, array $args = [])
* @method FieldBuilder addPostObject(string $name, array $args = [])
* @method FieldBuilder addRadio(string $name, array $args = [])
* @method FieldBuilder addRange(string $name, array $args = [])
* @method FieldBuilder addRelationship(string $name, array $args = [])
* @method FieldBuilder addSelect(string $name, array $args = [])
* @method FieldBuilder addTab(string $label, array $args = [])
* @method FieldBuilder addTaxonomy(string $name, array $args = [])
* @method FieldBuilder addText(string $name, array $args = [])
* @method FieldBuilder addTextarea(string $name, array $args = [])
Expand All @@ -52,6 +51,7 @@
* @method GroupBuilder end()
* @method LocationBuilder setLocation(string $param, string $operator, string $value)
* @method RepeaterBuilder addRepeater(string $name, array $args = [])
* @method TabBuilder addTab(string $label, array $args = [])
*/
class FieldBuilder extends FieldBuilderBase
{
Expand Down
46 changes: 46 additions & 0 deletions src/Builder/FlexibleContentBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,52 @@
use StoutLogic\AcfBuilder\FieldsBuilder;
use StoutLogic\AcfBuilder\FlexibleContentBuilder as FieldBuilder;

/**
* @method AccordionBuilder addAccordion(string $label, array $args = [])
* @method Builder addLayout(string|FieldsBuilder $layout, array $args = [])
* @method Builder endFlexibleContent()
* @method Builder endGroup()
* @method Builder endRepeater()
* @method ChoiceFieldBuilder addButtonGroup(string $name, array $args = [])
* @method ChoiceFieldBuilder addCheckbox(string $name, array $args = [])
* @method ChoiceFieldBuilder addChoiceField(string $name, string $type, array $args = [])
* @method ChoiceFieldBuilder addRadio(string $name, array $args = [])
* @method ChoiceFieldBuilder addSelect(string $name, array $args = [])
* @method FieldBuilder addColorPicker(string $name, array $args = [])
* @method FieldBuilder addDatePicker(string $name, array $args = [])
* @method FieldBuilder addDateTimePicker(string $name, array $args = [])
* @method FieldBuilder addEmail(string $name, array $args = [])
* @method FieldBuilder addField(string $name, string $type, array $args = [])
* @method FieldBuilder addFields(FieldsBuilder|array $fields)
* @method FieldBuilder addFile(string $name, array $args = [])
* @method FieldBuilder addGallery(string $name, array $args = [])
* @method FieldBuilder addGoogleMap(string $name, array $args = [])
* @method FieldBuilder addImage(string $name, array $args = [])
* @method FieldBuilder addLink(string $name, array $args = [])
* @method FieldBuilder addMessage(string $label, string $message, array $args = [])
* @method FieldBuilder addNumber(string $name, array $args = [])
* @method FieldBuilder addOembed(string $name, array $args = [])
* @method FieldBuilder addPageLink(string $name, array $args = [])
* @method FieldBuilder addPartial(string $partial)
* @method FieldBuilder addPassword(string $name, array $args = [])
* @method FieldBuilder addPostObject(string $name, array $args = [])
* @method FieldBuilder addRange(string $name, array $args = [])
* @method FieldBuilder addRelationship(string $name, array $args = [])
* @method FieldBuilder addTaxonomy(string $name, array $args = [])
* @method FieldBuilder addText(string $name, array $args = [])
* @method FieldBuilder addTextarea(string $name, array $args = [])
* @method FieldBuilder addTimePicker(string $name, array $args = [])
* @method FieldBuilder addTrueFalse(string $name, array $args = [])
* @method FieldBuilder addUrl(string $name, array $args = [])
* @method FieldBuilder addUser(string $name, array $args = [])
* @method FieldBuilder addWysiwyg(string $name, array $args = [])
* @method FlexibleContentBuilder addFlexibleContent(string $name, array $args = [])
* @method GroupBuilder addGroup(string $name, array $args = [])
* @method GroupBuilder end()
* @method LocationBuilder setLocation(string $param, string $operator, string $value)
* @method RepeaterBuilder addRepeater(string $name, array $args = [])
* @method TabBuilder addTab(string $label, array $args = [])
*/
class FlexibleContentBuilder extends FieldBuilder
{
/**
Expand Down
43 changes: 43 additions & 0 deletions src/Builder/GroupBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,50 @@
use StoutLogic\AcfBuilder\GroupBuilder as GroupBuilderBase;

/**
* @method AccordionBuilder addAccordion(string $label, array $args = [])
* @method Builder addLayout(string|FieldsBuilder $layout, array $args = [])
* @method Builder endFlexibleContent()
* @method Builder endGroup()
* @method Builder endRepeater()
* @method ChoiceFieldBuilder addButtonGroup(string $name, array $args = [])
* @method ChoiceFieldBuilder addCheckbox(string $name, array $args = [])
* @method ChoiceFieldBuilder addChoiceField(string $name, string $type, array $args = [])
* @method ChoiceFieldBuilder addRadio(string $name, array $args = [])
* @method ChoiceFieldBuilder addSelect(string $name, array $args = [])
* @method FieldBuilder addColorPicker(string $name, array $args = [])
* @method FieldBuilder addDatePicker(string $name, array $args = [])
* @method FieldBuilder addDateTimePicker(string $name, array $args = [])
* @method FieldBuilder addEmail(string $name, array $args = [])
* @method FieldBuilder addField(string $name, string $type, array $args = [])
* @method FieldBuilder addFields(FieldsBuilder|array $fields)
* @method FieldBuilder addFile(string $name, array $args = [])
* @method FieldBuilder addGallery(string $name, array $args = [])
* @method FieldBuilder addGoogleMap(string $name, array $args = [])
* @method FieldBuilder addImage(string $name, array $args = [])
* @method FieldBuilder addLink(string $name, array $args = [])
* @method FieldBuilder addMessage(string $label, string $message, array $args = [])
* @method FieldBuilder addNumber(string $name, array $args = [])
* @method FieldBuilder addOembed(string $name, array $args = [])
* @method FieldBuilder addPageLink(string $name, array $args = [])
* @method FieldBuilder addPartial(string $partial)
* @method FieldBuilder addPassword(string $name, array $args = [])
* @method FieldBuilder addPostObject(string $name, array $args = [])
* @method FieldBuilder addRange(string $name, array $args = [])
* @method FieldBuilder addRelationship(string $name, array $args = [])
* @method FieldBuilder addTaxonomy(string $name, array $args = [])
* @method FieldBuilder addText(string $name, array $args = [])
* @method FieldBuilder addTextarea(string $name, array $args = [])
* @method FieldBuilder addTimePicker(string $name, array $args = [])
* @method FieldBuilder addTrueFalse(string $name, array $args = [])
* @method FieldBuilder addUrl(string $name, array $args = [])
* @method FieldBuilder addUser(string $name, array $args = [])
* @method FieldBuilder addWysiwyg(string $name, array $args = [])
* @method FlexibleContentBuilder addFlexibleContent(string $name, array $args = [])
* @method GroupBuilder addGroup(string $name, array $args = [])
* @method GroupBuilder end()
* @method LocationBuilder setLocation(string $param, string $operator, string $value)
* @method RepeaterBuilder addRepeater(string $name, array $args = [])
* @method TabBuilder addTab(string $label, array $args = [])
*/
class GroupBuilder extends GroupBuilderBase
{
Expand Down
Loading

0 comments on commit bf075f9

Please sign in to comment.