├── resources
├── sass
│ └── tool.scss
└── js
│ ├── tool.js
│ └── components
│ ├── CustomDetailToolbar.vue
│ ├── QuoteDetailToolbar.vue
│ └── QuoteItemsDetailToolbar.vue
├── .gitattributes
├── webpack.mix.js
├── .gitignore
├── routes
└── api.php
├── src
├── CustomResourceToolbar.php
└── ToolServiceProvider.php
├── composer.json
└── package.json
/resources/sass/tool.scss:
--------------------------------------------------------------------------------
1 | // Nova Tool CSS
2 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/webpack.mix.js:
--------------------------------------------------------------------------------
1 | let mix = require('laravel-mix')
2 |
3 | mix.setPublicPath('dist')
4 | .js('resources/js/tool.js', 'js')
5 | .sass('resources/sass/tool.scss', 'css')
6 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /.idea
2 | /vendor
3 | /node_modules
4 | package-lock.json
5 | composer.phar
6 | composer.lock
7 | phpunit.xml
8 | .phpunit.result.cache
9 | .DS_Store
10 | Thumbs.db
11 |
--------------------------------------------------------------------------------
/resources/js/tool.js:
--------------------------------------------------------------------------------
1 | Nova.booting((Vue, router) => {
2 | Vue.component('custom-detail-toolbar', require('./components/CustomDetailToolbar'));
3 |
4 | Vue.component('quote-items-detail-toolbar', require('./components/QuoteItemsDetailToolbar'));
5 |
6 | Vue.component('quotes-detail-toolbar', require('./components/QuoteDetailToolbar'));
7 | })
--------------------------------------------------------------------------------
/routes/api.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/CustomResourceToolbar.php:
--------------------------------------------------------------------------------
1 | =7.1.0"
11 | },
12 | "autoload": {
13 | "psr-4": {
14 | "Lynndigital\\CustomResourceToolbar\\": "src/"
15 | }
16 | },
17 | "extra": {
18 | "laravel": {
19 | "providers": [
20 | "Lynndigital\\CustomResourceToolbar\\ToolServiceProvider"
21 | ]
22 | }
23 | },
24 | "config": {
25 | "sort-packages": true
26 | },
27 | "minimum-stability": "dev",
28 | "prefer-stable": true
29 | }
30 |
--------------------------------------------------------------------------------
/resources/js/components/QuoteDetailToolbar.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "scripts": {
4 | "dev": "npm run development",
5 | "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
6 | "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
7 | "watch-poll": "npm run watch -- --watch-poll",
8 | "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
9 | "prod": "npm run production",
10 | "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
11 | },
12 | "devDependencies": {
13 | "cross-env": "^5.0.0",
14 | "laravel-mix": "^1.0"
15 | },
16 | "dependencies": {
17 | "vue": "^2.5.0"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/ToolServiceProvider.php:
--------------------------------------------------------------------------------
1 | app->booted(function () {
20 | $this->routes();
21 | });
22 |
23 | Nova::serving(function (ServingNova $event) {
24 | Nova::script('custom-resource-toolbar', __DIR__.'/../dist/js/tool.js');
25 | Nova::style('custom-resource-toolbar', __DIR__.'/../dist/css/tool.css');
26 | });
27 | }
28 |
29 | /**
30 | * Register the tool's routes.
31 | *
32 | * @return void
33 | */
34 | protected function routes()
35 | {
36 | if ($this->app->routesAreCached()) {
37 | return;
38 | }
39 |
40 | Route::middleware(['nova'])
41 | ->prefix('nova-vendor/custom-resource-toolbar')
42 | ->group(__DIR__.'/../routes/api.php');
43 | }
44 |
45 | /**
46 | * Register any application services.
47 | *
48 | * @return void
49 | */
50 | public function register()
51 | {
52 | //
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/resources/js/components/QuoteItemsDetailToolbar.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 |
--------------------------------------------------------------------------------