Skip to content

Commit e897e86

Browse files
author
oleg.khalin
committed
Compatability fix for Nova 4 🏄
Minor design changes
1 parent 2a7fe50 commit e897e86

12 files changed

+77
-59
lines changed

.github/images/demo.png

36.2 KB
Loading

README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ Searchable Nova filter for belongsTo relationships.
33

44
### Demo
55

6-
![demo](https://user-images.githubusercontent.com/4764281/69803436-76184200-11dc-11ea-9c19-4eacf1ba3b4c.gif)
6+
![demo](./.github/images/demo.png)
77

88
### Prerequisites
99

1010
This package assumes you have a text-search setup for your Eloquent models. See [Laravel Scout](https://laravel.com/docs/master/scout).
1111

1212
### Installation
1313

14-
`composer require suenerds/nova-searchable-belongs-to-filter`
14+
`composer require khalin/nova4-searchable-belongs-to-filter`
1515

1616
### Usage
1717

@@ -23,7 +23,7 @@ By default the filter will display the name of the `fieldAttribute` you passed o
2323
```php
2424
// app/Nova/User.php
2525

26-
use Suenerds\NovaSearchableBelongsToFilter\NovaSearchableBelongsToFilter
26+
use Khalin\Nova4SearchableBelongsToFilter\NovaSearchableBelongsToFilter
2727

2828
public function filters(Request $request)
2929
{

composer.json

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
11
{
2-
"name": "suenerds/nova-searchable-belongs-to-filter",
3-
"description": "Searchable Nova filter for belongsTo relationships.",
2+
"name": "khalin/nova4-searchable-belongs-to-filter",
3+
"description": "Searchable Nova 4 filter for belongsTo relationships.",
44
"keywords": [
55
"laravel",
66
"nova",
7-
"filter",
8-
"belongs-to"
7+
"nova-4",
8+
"filter",
9+
"belongs-to"
910
],
1011
"license": "MIT",
1112
"require": {
12-
"php": ">=7.1.0"
13+
"php": ">=7.1.0",
14+
"laravel/nova": "^4.0"
1315
},
1416
"autoload": {
1517
"psr-4": {
16-
"Suenerds\\NovaSearchableBelongsToFilter\\": "src/"
18+
"Khalin\\Nova4SearchableBelongsToFilter\\": "src/"
1719
}
1820
},
1921
"extra": {
2022
"laravel": {
2123
"providers": [
22-
"Suenerds\\NovaSearchableBelongsToFilter\\FilterServiceProvider"
24+
"Khalin\\Nova4SearchableBelongsToFilter\\FilterServiceProvider"
2325
]
2426
}
2527
},

dist/css/filter.css

Whitespace-only changes.

dist/js/filter.js

-1
This file was deleted.

dist/mix-manifest.json

-4
This file was deleted.

package.json

+9-5
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,23 @@
22
"private": true,
33
"scripts": {
44
"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",
5+
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --config=node_modules/laravel-mix/setup/webpack.config.js",
6+
"watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --config=node_modules/laravel-mix/setup/webpack.config.js",
77
"watch-poll": "npm run watch -- --watch-poll",
88
"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",
99
"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"
10+
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --config=node_modules/laravel-mix/setup/webpack.config.js"
1111
},
1212
"devDependencies": {
13+
"@vue/compiler-sfc": "^3.2.33",
1314
"cross-env": "^5.0.0",
14-
"laravel-mix": "^1.0"
15+
"laravel-mix": "^4.0.7|^6.0",
16+
"resolve-url-loader": "^5.0.0",
17+
"sass": "^1.50.0",
18+
"sass-loader": "^12.1.0",
19+
"vue-loader": "^16.2.0"
1520
},
1621
"dependencies": {
17-
"laravel-nova": "^1.0.9",
1822
"vue": "^2.5.0"
1923
}
2024
}

resources/js/components/Filter.vue

+34-33
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<template>
2-
<div>
3-
<h3 class="text-sm uppercase tracking-wide text-80 bg-30 p-3">
2+
<div class="pt-2 pb-3">
3+
<h3 class="px-3 text-xs uppercase font-bold tracking-wide">
44
{{ filter.name }}
55
</h3>
66

@@ -15,49 +15,50 @@
1515
trackBy="value"
1616
searchBy="display"
1717
>
18-
<div
19-
slot="default"
20-
v-if="value"
21-
class="flex items-center"
18+
<template
19+
#default
2220
>
23-
<div
24-
v-if="value.avatar"
25-
class="mr-3"
26-
>
27-
<img
28-
:src="value.avatar"
29-
class="w-8 h-8 rounded-full block"
30-
/>
31-
</div>
21+
<div v-if="value"
22+
class="flex items-center">
23+
<div
24+
v-if="value.avatar"
25+
class="mr-3"
26+
>
27+
<img
28+
:src="value.avatar"
29+
class="w-8 h-8 rounded-full block"
30+
/>
31+
</div>
3232

33-
{{ value.display }}
34-
</div>
33+
{{ value.display }}
34+
</div>
35+
</template>
3536

36-
<div
37-
slot="option"
38-
slot-scope="{ option, selected }"
39-
class="flex items-center"
40-
>
37+
<template #option="{ option, selected }">
4138
<div
42-
v-if="option.avatar"
43-
class="mr-3"
39+
class="flex items-center"
4440
>
45-
<img
46-
:src="option.avatar"
47-
class="w-8 h-8 rounded-full block"
48-
/>
49-
</div>
41+
<div
42+
v-if="option.avatar"
43+
class="mr-3"
44+
>
45+
<img
46+
:src="option.avatar"
47+
class="w-8 h-8 rounded-full block"
48+
/>
49+
</div>
5050

51-
{{ option.display }}
52-
</div>
51+
{{ option.display }}
52+
</div>
53+
</template>
5354
</search-input>
5455

5556
</div>
5657
</div>
5758
</template>
5859

5960
<script>
60-
import { PerformsSearches } from "laravel-nova"
61+
import PerformsSearches from "laravel-nova-performs-searches"
6162
import storage from '../storage/BelongsToFieldStorage'
6263
6364
export default {
@@ -84,7 +85,7 @@ export default {
8485
search: this.search,
8586
},
8687
}
87-
).then(({ data: { resources } }) => {
88+
).then(({data: {resources}}) => {
8889
this.availableResources = resources;
8990
});
9091
},

resources/js/filter.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import Filter from "./components/Filter"
2+
13
Nova.booting((Vue, router, store) => {
2-
Vue.component('nova-searchable-belongs-to-filter', require('./components/Filter'))
4+
Vue.component('nova-searchable-belongs-to-filter', Filter)
35
})

src/FilterServiceProvider.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace Suenerds\NovaSearchableBelongsToFilter;
3+
namespace Khalin\Nova4SearchableBelongsToFilter;
44

55
use Illuminate\Support\ServiceProvider;
66
use Laravel\Nova\Events\ServingNova;

src/NovaSearchableBelongsToFilter.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace Suenerds\NovaSearchableBelongsToFilter;
3+
namespace Khalin\Nova4SearchableBelongsToFilter;
44

55
use Illuminate\Http\Request;
66
use Laravel\Nova\Filters\Filter;

webpack.mix.js

+17-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,20 @@
11
let mix = require('laravel-mix')
2+
let path = require('path')
23

34
mix
4-
.setPublicPath('dist')
5-
.js('resources/js/filter.js', 'js')
6-
.sass('resources/sass/filter.scss', 'css')
5+
.setPublicPath('dist')
6+
.alias({
7+
'laravel-nova': path.join(__dirname, '../../vendor/laravel/nova/resources/js/mixins/packages.js'),
8+
'laravel-nova-performs-searches': path.join(__dirname, '../../vendor/laravel/nova/resources/js/mixins/PerformsSearches.js'),
9+
})
10+
.vue({version: 3})
11+
.webpackConfig({
12+
externals: {
13+
vue: 'Vue',
14+
},
15+
output: {
16+
uniqueName: 'vendor/package',
17+
}
18+
})
19+
.js('resources/js/filter.js', 'js')
20+
.sass('resources/sass/filter.scss', 'css')

0 commit comments

Comments
 (0)