├── 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 | 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 | 13 | 14 | --------------------------------------------------------------------------------