Giter VIP home page Giter VIP logo

nova-detached-actions's Introduction

Laravel Nova Detached Actions Tool

Status: ABANDONED No Maintenance Intended

Deprecation Notice ⚠️

GoBrightspot is no longer maintaining this project. Please fork it to continue development.

Intro

A Laravel Nova tool to allow for placing actions in the Nova toolbar, detached from the checkbox selection mechanism.

⚠️ Keep in mind, since the action is detached from the row selection checkboxes in the resource table, you will not have a collection of models to iterate over. Detached actions are intended to be independent of the selection in the table.

⚠️ Also, keep in mind, pivot actions are not supported and have not been tested.

screenshot

Installation

You can install the package in to a Laravel app that uses Nova via composer:

composer require gobrightspot/nova-detached-actions

The tool will be automatically registered via the ToolServiceProvider

Usage

Create a custom Nova Action file:

php artisan nova:action ExportUsers

Instead of extending the ExportUsers class with the Laravel\Nova\Actions\Action class, swap it with the Brightspot\Nova\Tools\DetachedActions\DetachedAction class.

Since we won't receive a collection of $models, you can remove the variable from the handle method, so that the signature is public function handle(ActionFields $fields).

You can also customize the button label, by overriding the label() method. If you do not override the label, it will 'humanize' the class name, in the example ExportUsers would become Export Users.

By default, the detached action will only appear on the Index Toolbar.

If you want to also show the action on the resource index view (when users select a row with a checkbox), set the $public $showOnIndex = true; If you want to also show the action on the resource detail view (when user selects the action from the dropdown), set the $public $showOnDetail = true;

Here's a full example:

<?php

namespace App\Nova\Actions;

use Brightspot\Nova\Tools\DetachedActions\DetachedAction;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Laravel\Nova\Fields\ActionFields;

class ExportUsers extends DetachedAction
{
    use InteractsWithQueue, Queueable, SerializesModels;
    
    /**
     * Get the displayable label of the button.
     *
     * @return string
     */
    public function label()
    {
        return __('Export Users');
    }

    /**
     * Perform the action.
     *
     * @param  ActionFields  $fields
     *
     * @return mixed
     */
    public function handle(ActionFields $fields)
    {
        // Do work to export records

        return DetachedAction::message('It worked!');
    }

    /**
     * Get the fields available on the action.
     *
     * @return array
     */
    public function fields()
    {
        return [];
    }
}

Register the action on your resource:

/**
 * Get the actions available for the resource.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function actions(Request $request)
{
    return [
        new App\Nova\Actions\ExportUsers
    ];
}

Chunking and repetitive calls to the handle()

If you initiate an action on the background Nova will chunk up the total amount of records and call the handle() function of your DetachedAction for each chunk. This could have unexpected performance impact as the system will perform your action for each chunk of records. This happens in the handleRequest() function of \Laravel\Nova\Actions\Action.php.

To prevent this the simplest way is to overrule this function in your DetachedAction. this is a bare example dispatching just a job without any checks or other logic:

/** @return array<int,string> */
public function handleRequest(ActionRequest $request): array
{
    dispatch(new GenerateTicketReport($request->resolveFields()));
    return DetachedAction::message('Nice job!');
}

Display on different screens

showOnIndexToolbar()

Show the detached action buttons on the index page toolbar (i.e. the default location). Do not show on the index grid action dropdown,

onlyOnIndexToolbar()

Only show the detached action buttons on the index toolbar. Do not show them anywhere else.

exceptOnIndexToolbar

Show the detached action buttons everywhere except the index toolbar.

onlyOnIndex

Show the detached action buttons only on the index view. Allows them to be displayed on the standalone dropdown or in the grid action dropdown.

showOnDetailToolbar()

Show the detached action buttons on the detail page toolbar (i.e. the default location).

onlyOnDetailToolbar()

Only show the detached action buttons on the index toolbar. Do not show them anywhere else.

exceptOnDetailToolbar

Show the detached action buttons everywhere except the detail toolbar.

onlyOnDetail

Show the detached action buttons only on the detail view. Allows them to be displayed on the standalone dropdown or in the action dropdown.

Usage with the Laravel Nova Excel DownloadExcel action

You can easily integrate the DetachedAction tool with the Laravel Nova Excel DownloadExcel action by simply passing some additional data along using withMeta().

/**
  * Get the actions available for the resource.
  *
  * @param  \Illuminate\Http\Request  $request
  * @return array
  */
 public function actions(Request $request)
 {
     return [
         (new DownloadExcel)->withHeadings()->askForWriterType()->withMeta([
             'detachedAction' => true,
             'label' => 'Export',
             'name' => 'Export',
             'showOnIndexToolbar' => true
         ])->confirmButtonText('Export'),
     ];
 }

Customizing Buttons

Visible vs Invisible Buttons

By default, the component will show the first 3 buttons and put the rest into a dropdown menu. If you want to change the number of buttons visible per resource, you can do so by using the additionalInformation method, like so:

public static function additionalInformation(Request $request)
{
    return [
        'visibleActionsLimit' => 4
    ];
}

You can also change the icon type and whether or not you want to display a dropdown arrow for the invisible action menu:

public static function additionalInformation(Request $request)
{
    return [
        'visibleActionsLimit' => 2,
        'showInvisibleActionsArrow' => true,
        'invisibleActionsIcon' => 'menu'
    ];
}

Customizing Button Classes

The package ships with some common sense default HTML classes that are applied to the action buttons. In the component, we automatically assign the following:

btn btn-default ml-3 detached-action-button flex justify-center items-center

The action buttons are buttons so it makes sense to assign the btn and btn-default classes, we also want consistent spacing between buttons, so we apply ml-3 and to line up the icons and text inside the button, we use flex justify-center items-center. Further, in order to allow theme developers to set a specific class name to hook into, we apply detached-action-button on both the Index and Detail views.

On top of these classes, the DetachedAction class provides btn-primary as a default, that will give the buttons the default button color, i.e. blue in the default Nova theme.

A developer can add classes on the fly, using the extraClassesWithDefault() and extraClasses() methods on the DetachedAction class.

The extraClassesWithDefault() method

If you want to keep the default classes but add extra classes alongside them, then you probably want to use this method. You can pass an array of single class names or multiple class names separated by spaces.

return [
    (new ImportUsers)->extraClassesWithDefault('bg-info')
];

The extraClasses() method

You are free to use any tailwind/nova class.

return [
   (new ImportUsers)->extraClasses('bg-logo text-white hover:black')
];

Adding an icon

You can use any of the 104 Heroicon icons by specifying the icon name in lowercase:

return [
   (new ImportUsers)->icon('add')
];

You can also customize the display of that icon using iconClasses:

return [
   (new ImportUsers)->icon('upload')->iconClasses('mr-3 -ml-2')
];

screenshot

License

The MIT License (MIT). Please see License File for more information.

nova-detached-actions's People

Contributors

ahmed-mohammed1 avatar ali-raza-saleem avatar antoniovazevedo avatar dependabot[bot] avatar eoghanobrien avatar ewawiktor avatar gobrightspot avatar hariesnurikhwan avatar louishrg avatar lucidlogic avatar matthewhallcom avatar nrobates avatar remkobrenters avatar shaffe-fr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

nova-detached-actions's Issues

Can't make the button appear on Index

Hi,

I want to use your plugin, but I follow the docs, and the button never shows.

Here is my model:

<?php

namespace App\Nova;

use App\Nova\Actions\FillMissingData;
use App\Nova\Actions\ScanMissingData;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\Badge;
use Laravel\Nova\Fields\BelongsTo;
use Laravel\Nova\Fields\Date;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Text;

class MissingData extends Resource
{
    public static function label()
    {
        return 'Trous de données';
    }

    /**
     * The model the resource corresponds to.
     *
     * @var string
     */
    public static $model = \App\MissingData::class;

    /**
     * The single value that should be used to represent the resource when being displayed.
     *
     * @var string
     */
    public static $title = 'id';

    /**
     * The columns that should be searched.
     *
     * @var array
     */
    public static $search = [
        'id',
    ];

    /**
     * Get the fields displayed by the resource.
     *
     * @param \Illuminate\Http\Request $request
     * @return array
     */
    public function fields(Request $request)
    {
        return [
            ID::make(__('ID'), 'id')->hide(),
            BelongsTo::make('Opération', 'operation', 'App\Nova\Operation')->sortable()->required()->withoutTrashed(),
            BelongsTo::make('Compteur', 'meter', 'App\Nova\Meter')->sortable()->required()->withoutTrashed(),
            Date::make('Date de début', 'date_ini')->sortable(),
            Date::make('Date de fin', 'date_end')->sortable(),
            Text::make('Taille', function () {
                return 0;
            })->exceptOnForms(),
            Badge::make('Status')->map([
                'Non traité' => 'danger',
                'Traité' => 'success',
            ]),
        ];
    }

    /**
     * Get the cards available for the request.
     *
     * @param \Illuminate\Http\Request $request
     * @return array
     */
    public function cards(Request $request)
    {
        return [];
    }

    /**
     * Get the filters available for the resource.
     *
     * @param \Illuminate\Http\Request $request
     * @return array
     */
    public function filters(Request $request)
    {
        return [];
    }

    /**
     * Get the lenses available for the resource.
     *
     * @param \Illuminate\Http\Request $request
     * @return array
     */
    public function lenses(Request $request)
    {
        return [];
    }

    /**
     * Get the actions available for the resource.
     *
     * @param \Illuminate\Http\Request $request
     * @return array
     */
    public function actions(Request $request)
    {
        return [
            new ScanMissingData,

        ];
    }

    public static function availableForNavigation(Request $request)
    {
        return auth()->user()->isSuperAdmin();
    }
}

And here is my action:

<?php

namespace App\Nova\Actions;

use Brightspot\Nova\Tools\DetachedActions\DetachedAction;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\InteractsWithQueue;
use Laravel\Nova\Fields\ActionFields;


class ScanMissingData extends DetachedAction
{
    use InteractsWithQueue, Queueable;

    /**
     * Perform the action on the given models.
     *
     * @param  \Laravel\Nova\Fields\ActionFields  $fields
     * @return mixed
     */
    public function handle(ActionFields $fields)
    {
        return DetachedAction::message('It worked!');
    }

    /**
     * Get the fields available on the action.
     *
     * @return array
     */
    public function fields()
    {
        return [
        ];
    }
}

Relevant data: PHP 7.4, Nova 3.8.3, Laravel 7.25, I'm using gregoriohc/laravel-nova-theme-responsive

Am I missing something ?

canSee() not working with DetachedActions

I'm trying to add action buttons to a resource detail screen.

This module seems to load /resources/actions separately without a resourceId so the canSee() function is called without a resource, thus not being able to filter which actions should be available.

Is this for standalone actions only ?

Using action response modals

I'd like to use an action response modals to display a result (it's a bulk file importer, and some files might fail with a validation message). Is there any way to get this library to work with these modals, or should I stick to the toast notifications for now?

Note there was a recent fix out for modals not showing on the index page (https://nova.laravel.com/releases/3.21.1), but this doesn't seem to have solved it for detached actions.

Many thanks.

Applying filters

Thanks for this nice package!

In my use case, I want to export a filtered result - but looks like the filter values are not passed to the action url?

Is there any way to access the filtered result set or would it be necessary to improve this package to add filters to the action url?

Problem when using visibleActionsLimit = 0

In my case I have a resource with many detached actions, over 15 of them, so it doesn't make sense to show 1 or 2 and then show the rest in the menu, instead I just want to show all of them in the drop down menu. So when I set 'visibleActionsLimit' => 0, then it works, but because the menu popover shows on the right, it ends up going off-screen.

Screen Shot 2022-02-28 at 12 19 06 AM

Would it be possible to customize this behaviour so that it would open to the left instead of the the right when the limit is set to 0 ?

Or ideally this would be configurable, but if it would at least automatically default to the left when set to 0 then that would be great.

Thank you for this great package!

Reload resource after action is executed

I'm using this package to have ability to create a multiple resources at one (I have only one field that user needs to fill in, so I'm giving user text area, and later exploding text, and just saving all content). Issue that I have currently is that after saving is done, resource page is not updated, so I'm still looking at old resource, and I need manually reload page to see new data.

It would be nice to have option, where I could set, that after action is done, reload resource data.

Not Refreshing Resource List

It works perfectly fine on Laravel Nova 4 but on the list page action after calling action it doesn't refresh the list.

Getting a success message on the handle and everything.

can we hide the detached action from the dropdown actions when selecting models ?

I have the detached actions working perfectly with laravel-nova-excel. That is, they are shown in the upper toolbar next to "create user".

The issue is that when I select some users using the checkbox, they are also shown in the dropdown below that shows non-detached actions.

Is it possible to hide them from there and only have them shown at the top? Again this is specific for the laravel-nova-excel which you include an example code for.

Many thanks

jsonSerialize Error Nova 4

Declaration of Brightspot\Nova\Tools\DetachedActions\DetachedAction::jsonSerialize() must be compatible with Laravel\Nova\Actions\Action::jsonSerialize(): array

How to get resourceId from detached action from details?

Hi! I define action:

            (new ScriptCreate() )->iconClasses('mr-3 -ml-2')
                ->confirmButtonText(__('Create') )
                ->showOnDetailToolbar()

How to get resource Id in ScriptCreate::handle?

image

request()->all() contains:

request()->all() = {array} [10]
 resources = "all"
 action = "script-create"
 pivotAction = "false"
 search = null
 filters = null
 trashed = null
 viaResource = null
 viaResourceId = null
 viaRelationship = null

Add customization options for dropdowns

Hello. Thx for your work!

Have a look at this screenshot:

example

As you can see, I’ve used your plugin to only show the dropdown button … but there occured some issues. I’ve added some CSS to get there (screenshot), but it is not a nice way to do it (that’s why I don’t show it here).

Here are the problems I ran through:

  • the options-popover is aligned on the left edge of the button, for this reason the popover was cut off by the browser
  • the dropdown-button is not customizable. can’t change the style or add classes like on the other buttons
  • can’t change content of dropdown-button. you can only change the icon-class, but you can’t disable icons and use text instead or in addition

So it would be nice if you could add those features!

action button bug

When I click the buttons in the index view, the sorting of the action button is changed.

Beginning
image

Clicked
image

After run action
image

Enhancement: default handleRequest method

Hi, I'm building tool to create resources with fake data and I've came across one error due to no actual database rows for that resource when executing action (nova checks that by default). And I noticed that this package already has overridden DispatchAction::forModels() (and removed check there) but it's not actually overriding handleRequest method on DetachedAction which is also doing that check and causing the error message "Sorry! You are not authorized to perform this action.".

My proposition is to create trait for overriding handleRequest (for backwards compatibility with default nova action behaviour)

Declaration of Brightspot\Nova\Tools\DetachedActions\DetachedAction::jsonSerialize() must be compatible with Laravel\Nova\Actions\Action::jsonSerialize(): array

I have received the following error after installing this through Composer in my Laravel Nova app and attaching it to a Contact resource model as per instructions:

Declaration of Brightspot\Nova\Tools\DetachedActions\DetachedAction::jsonSerialize() must be compatible with Laravel\Nova\Actions\Action::jsonSerialize(): array

Please provide any input to fix this. Thank you!

Action not independent of the table rather accessible from dropdown

Hi,

Any reason why this is happening? I thought the button should show left of Create User, rather than being placed within a dropdown. I used the sample code by the way and just changed the title to refresh instead. This is probably me not reading the docs properly but it would be really helpful if you could just point me in the right direction, sorry to waste anyone's time with this.

Example

<?php

namespace App\Nova\Actions;

use Brightspot\Nova\Tools\DetachedActions\DetachedAction;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Collection;
use Laravel\Nova\Actions\Action;
use Laravel\Nova\Fields\ActionFields;

class Refresh extends Action
{
    use InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Get the displayable label of the button.
     *
     * @return string
     */
    public function label()
    {
        return __('Export Users');
    }

    /**
     * Perform the action.
     *
     * @param  ActionFields  $fields
     *
     * @return mixed
     */
    public function handle(ActionFields $fields)
    {
        // Do work to export records

        return DetachedAction::message('It worked!');
    }

    /**
     * Get the fields available on the action.
     *
     * @return array
     */
    public function fields()
    {
        return [];
    }
}

Not working with laravel/octane

Hi, been using it for two months with no issues but now we're trying out laravel octane with sail and the package stopped working, nothing shows up on console nor the log. Do you have any idea of what the issue might be? Thanks!

withoutConfirmation option has no effect

public $withoutConfirmation = true;

I want to prevent the modal after clicking the button. But it doesn’t work. It works with Action class but not with DetachedAction class.

Chunking and performing the 'handle()' multiple times

When implementing this on a fairly large set of records I noticed the handle() in the action was triggered multiple times (as in my total set of records divided by 200) which drew my (read my smarter colleague's) attention to the handleRequest() in the default Nova action.

This function was chunking up data to dispatch individual events for each chunk. In our case we just wanted to start one dispatched job which would perform it's tasks in the background.

We resolved this for now by overruling this function with basically nothing:

public function handleRequest(ActionRequest $request)
{
     dispatch(new GenerateTicketReport($request->resolveFields()->toArray()));
}

Maybe this something worth mentioning in the documentation as I can imagine more people run into this situation (probably sometimes not even knowing their action is running multiple times without being noticed).

Poll: Would you prefer that the DetachedAction button style match the Nova primary button?

We had an early contribution from @milewski posing the question/asserting his opinion about whether we should match the style of the default primary button style in Nova or whether we should use a 'secondary' color based on the navigation menu background color as we've done in the first iteration of the package.

Option 1: Switch to Nova primary button and provide css classes allow developer to create styles in a custom theme

We could switch to btn-primary but keep the package css class, .btn-detached-action. Instead of actually providing css styles for those classes, we would remove them and allow developers to style using the existing custom theme documentation. @milewski also argued that it wasn't worth the extra HTTP request for the styles. He may have a point.

Option 2: Keep the button style as is and still allow the developer to theme

Since we already use .btn-detached-action, developers could still easily provide styles via a custom theme.

Vote

If you care about either option, please leave a vote below, just write Option 1 or Option 2 if you would like to leave your opinion too, that's definitely appreciated.

If you don't want to write a comment, feel free to just add a reaction:
❤️for Option 1
👍for Option 2

I'll leave the issue open for a while to see if we can get some votes in.

Thanks!

buttons are in table but not on toolbar

I have this in my code.

ImportUsersAction::make()
   ->standalone()
   ->onlyOnIndexToolbar()

but the buttons are not on the toolbar but inside the user's table.

image

is there any config that I am missing?

Unauthorized to perform this action

Laravel: 7.26.0
Nova: 3.8.4

If I try to use an action on a resource that doesn't have any entries. I get an error "Sorry! You are not authorized to perform this action.".
Knowing that If I upgraded nova to 3.10.0 this will be fixed because nova introduced standalone actions in that version.
Which if I did I won't be needing this package but I can't upgrade my nova version.
So I consider this as a bug.
Please help thank you :)

Add support for hiding visibility of an action from the Toolbar

One thing we currently cannot do with this package, is use the default Nova Action visibility properties, (e.g. public $showOnIndex = false;) to effect the DetachedAction button in order to hide it on the Index view.

We may need to add a property and helper method to DetachedAction in order to set the visibility for the Vue component:

<?php

namespace Brightspot\Nova\Tools\DetachedActions;

use Laravel\Nova\Actions\Action;
use Laravel\Nova\Actions\ActionMethod;
use Laravel\Nova\Exceptions\MissingActionHandlerException;
use Laravel\Nova\Http\Requests\ActionRequest;
use Laravel\Nova\Nova;

abstract class DetachedAction extends Action
{
...
    /**
     * Indicates if this action is only available on the custom index toolbar.
     *
     * @var bool
     */
    public $showOnIndexToolbar = true;

    /**
     * Determine if the action is to be shown on the custom index toolbar.
     *
     * @return bool
     */
    public function shownOnIndexToolbar()
    {
        return $this->showOnIndexToolbar;
    }

    /**
     * Prepare the action for JSON serialization.
     *
     * @return array
     */
    public function jsonSerialize()
    {
        return array_merge([
            'detachedAction' => true,
            'label' => $this->label(),
            'showOnIndexToolbar' => $this->shownOnIndexToolbar(),
        ], parent::jsonSerialize(), $this->meta());
    }
...

Laravel Nova 4.0 Support

  Problem 1
    - gobrightspot/nova-detached-actions is locked to version 1.1.1 and an update of this package was not requested.
    - gobrightspot/nova-detached-actions 1.1.1 requires laravel/nova ^3.0 -> found laravel/nova[dev-master, v3.0.0, ..., 3.x-dev (alias of dev-master)] but it conflicts with your root composer.json require (~4.0).
   

when updating to Laravel Nova v4.

Handle action

Can the handle method fron my option class redirect me to another page or it can only show message?

Update resource table after action executed

Hi! I use this package for a quick resource creating but after the action was executed resource table doesn't update its state.
I think it's because there is no event emitted (in nova original action it named as "actionExecuted").
Maybe you can add some additional configurable property to manage this kinda situation?

this package conflicts with other resource tools that modify the custom-index-toolbar component

Hello,

Following up on the issues I described in #5

After some debugging and trying it out on a fresh install of Laravel / Nova I realized the problem was somewhere on my end and eventually figured it out.

I had previously managed to add custom buttons to the toolbar (next to create button) using the method I describe here laravel/nova-issues#786 (comment)

It's also thanks to posting this reply that I found out about your own package when someone else replied the next day

Anyway that method involves overriding the custom-index-toolbar component to allow the loading of resource-specific custom buttons.

Commenting this line and rebuilding my resource tool makes your buttons appear again (and breaks my custom tool):

Vue.component('custom-index-toolbar', require('./components/CustomIndexToolbar'));

Now I realize that this particular use-case where I needed to have a custom button display a modal with a form can 100% be replaced by the use of your package which is great and much simpler. However if you needed to do something more complex in that modal it may still be necessary to create a resource tool, or maybe it could be accomplished by creating custom fields.. I haven't run into a situation yet where I need to create a custom button that opens a modal in which there's something a custom field can't accomplish.

Anyway food for thought.. I suppose as of 1.0.4 you too have begun overriding the custom-index-toolbar component which is why I started having the issue.. this conflict may be avoidable? I'm not sure.. anyway feel free to close this : ) and thanks for your quick improvements!

The handleRequest override method needs to send different collection type.

In the DetachedAction file the handleRequest method does the following:

$results = DispatchAction::forModels(
            $request,
            $this,
            $method,
            collect([]),
            $fields
);

The problem with this is that the 4th parameter for DispatchAction::forModels method is expecting an instance of Illuminate\Database\Eloquent\Collection and because of collect([]) it is getting an instance of Illuminate\Support\Collection. As a result, this is the exception that gets thrown:

Argument 4 passed to Laravel\Nova\Actions\CallQueuedAction::__construct() must be an instance of Illuminate\Database\Eloquent\Collection, instance of Illuminate\Support\Collection given

Handle method not executing

Thank you for a great package.
However, I am having trouble using it, the handle method in my action is not being executed.

It appears the reason is that DetachedAction class is using Laravel\Nova\Actions\DispatchAction instead of the local DispatchAction.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.