phoenix-lib/nova-nested-tree-attach-many

Nova vue-tree-select field for management nested category relations.

1.6.0 2021-03-03 08:25 UTC

This package is auto-updated.

Last update: 2021-05-01 00:20:59 UTC


README

License: MIT Latest Version on Github Total Downloads

Belongs To Many Field for simple manage Nested relation tree. Enables attaching relationships easily.

nova-nested-tree-attach-many

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

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.

Hope this package will be useful for you.