phoenix-lib / nova-nested-tree-attach-many
Nova vue-tree-select field for management nested category relations.
Installs: 66 871
Dependents: 3
Suggesters: 0
Security: 0
Stars: 35
Watchers: 3
Forks: 14
Open Issues: 8
Requires
- php: >=7.1.0
- kalnoy/nestedset: ^6.0
README
Belongs To Many Field for simple manage Nested relation tree. Enables attaching relationships easily.
RoadMap
- Validation
- Show selected categories on Detail
- Ability to pass your own tree
- Ability to
Delayed Loading
data when tree has many records ( example 10k+ ).
Installation
composer require phoenix-lib/nova-nested-tree-attach-many
Usage
This field uses tree provided by kalnoy/nestedset package
This field uses riophae/vue-treeselect under the hood
use PhoenixLib\NestedTreeAttachMany\NestedTreeAttachManyField;
public function fields(Request $request) { return [ NestedTreeAttachManyField::make('Offer Categories',"categories","App\Nova\Category"), ]; }
Your model should has NodeTrait form package kalnoy/nestedset see RoadMap
class Category extends Model { use NodeTrait; }
Options
Here are a few customization options
->searchable(bool $searchable)
->withIdKey(string $idKey = 'id')
// - id column name in your nested model->withLabelKey(string $labelKey = 'name')
// - label column name in your nested model->withActiveKey(string $activeKey)
// - active_status column name in your nested model used for disable options->withChildrenKey(string $childrenKey)
// - children key in your nested model->withPlaceholder(string $placeholder)
// - placeholder in tree select->withMaxHeight(int $maxHeight)
->withSortValueBy(string $sortBy)
// - @see https://vue-treeselect.js.org/#flat-mode-and-sort-values->withAlwaysOpen(bool $alwaysOpen)
// - by default select is open, but you can change it behavior->withFlatten(bool $flatten)
// - by default flatten is enabled, but you can change it behavior->useSingleSelect()
// - ability for select only one value->useAsField()
// - ability to write result to field without relations
Example of use with package whitecube/nova-flexible-content
use Whitecube\NovaFlexibleContent\Flexible; use PhoenixLib\NovaNestedTreeAttachMany\NestedTreeAttachManyField; /** * Get the fields displayed by the resource. * * @param \Illuminate\Http\Request $request * @return array */ public function fields(Request $request) { return [ // ... Flexible::make('Content') ->addLayout('Simple content section', 'tree_section', [ NestedTreeAttachManyField::make('Tree',"tree","App\Nova\Category") ->useAsField(), ]) ]; }
Authorization
This field also respects policies: ie Role / Permission
- RolePolicy: attachAnyPermission($user, $role)
- RolePolicy: attachPermission($user, $role, $permission)
- PermissionPolicy: viewAny($user)
Validation
You can set min, max, size, required or custom rule objects
->rules('min:5', 'max:10', 'size:10', 'required', new CustomRule)`
Contributing
Feel free to suggest changes, ask for new features or fix bugs yourself.