Skip to content

Commit

Permalink
feat: add support for workbench
Browse files Browse the repository at this point in the history
  • Loading branch information
KasparRosin committed Jan 11, 2024
1 parent 5527fd8 commit c2f447f
Show file tree
Hide file tree
Showing 12 changed files with 538 additions and 67 deletions.
154 changes: 87 additions & 67 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,71 +1,91 @@
{
"name": "outl1ne/nova-detached-filters",
"description": "This Laravel Nova package allows you to detach filters from the filter dropdown",
"keywords": [
"laravel",
"nova",
"card",
"filter",
"persist"
],
"license": "MIT",
"authors": [
{
"name": "Kaspar Rosin",
"email": "kaspar.rosin@gmail.com",
"role": "Developer"
"name": "outl1ne/nova-detached-filters",
"description": "This Laravel Nova package allows you to detach filters from the filter dropdown",
"keywords": [
"laravel",
"nova",
"card",
"filter",
"persist"
],
"license": "MIT",
"authors": [
{
"name": "Kaspar Rosin",
"email": "kaspar.rosin@gmail.com",
"role": "Developer"
},
{
"name": "Tarvo Reinpalu",
"email": "tarvoreinpalu@gmail.com",
"role": "Developer"
},
{
"name": "Outl1ne",
"email": "info@outl1ne.com",
"role": "Maintainer"
}
],
"require": {
"php": ">=8.0.0",
"laravel/nova": "~4.0",
"nova-kit/nova-packages-tool": "^1.14"
},
{
"name": "Tarvo Reinpalu",
"email": "tarvoreinpalu@gmail.com",
"role": "Developer"
"require-dev": {
"laravel/pint": "^0.2.1",
"nova-kit/nova-devtool": "^1.5",
"orchestra/testbench": "^7.0.0",
"phpunit/phpunit": "^9.5"
},
{
"name": "Outl1ne",
"email": "info@outl1ne.com",
"role": "Maintainer"
}
],
"require": {
"php": ">=8.0.0",
"laravel/nova": "~4.0"
},
"require-dev": {
"laravel/pint": "^0.2.1",
"orchestra/testbench": "^7.0.0",
"phpunit/phpunit": "^9.5"
},
"autoload": {
"psr-4": {
"Outl1ne\\NovaDetachedFilters\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Outl1ne\\NovaDetachedFilters\\Tests\\": "tests/"
}
},
"extra": {
"laravel": {
"providers": [
"Outl1ne\\NovaDetachedFilters\\CardServiceProvider"
]
}
},
"config": {
"sort-packages": true
},
"repositories": [
{
"type": "composer",
"url": "https://nova.laravel.com"
"autoload": {
"psr-4": {
"Outl1ne\\NovaDetachedFilters\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Outl1ne\\NovaDetachedFilters\\Tests\\": "tests/",
"Workbench\\App\\": "workbench/app/",
"Workbench\\Database\\Factories\\": "workbench/database/factories/",
"Workbench\\Database\\Seeders\\": "workbench/database/seeders/"
}
},
"extra": {
"laravel": {
"providers": [
"Outl1ne\\NovaDetachedFilters\\CardServiceProvider"
]
}
},
"config": {
"sort-packages": true
},
"repositories": [
{
"type": "composer",
"url": "https://nova.laravel.com"
}
],
"minimum-stability": "dev",
"prefer-stable": true,
"scripts": {
"test": [
"phpunit tests"
],
"post-autoload-dump": [
"@clear",
"@prepare"
],
"clear": "@php vendor/bin/testbench package:purge-skeleton --ansi",
"prepare": "@php vendor/bin/testbench package:discover --ansi",
"build": "@php vendor/bin/testbench workbench:build --ansi",
"serve": [
"Composer\\Config::disableProcessTimeout",
"@build",
"@php vendor/bin/testbench serve"
],
"lint": [
"@php vendor/bin/pint"
]
}
],
"minimum-stability": "dev",
"prefer-stable": true,
"scripts": {
"test": [
"phpunit tests"
]
}
}
}
24 changes: 24 additions & 0 deletions testbench.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
providers:
- Laravel\Nova\NovaCoreServiceProvider
- Workbench\App\Providers\NovaServiceProvider

migrations: true

seeders:
- Workbench\Database\Seeders\DatabaseSeeder

workbench:
start: /nova
build:
- asset-publish
- create-sqlite-db
- db:wipe
- migrate:refresh
assets:
- nova-assets
sync: []

purge:
directories:
- lang/*
- public/vendor/*
42 changes: 42 additions & 0 deletions workbench/app/Models/User.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

namespace Workbench\App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
use Notifiable;

/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'name',
'email',
'password',
];

/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
'password',
'remember_token',
];

/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
'email_verified_at' => 'datetime',
'football_teams' => 'json',
];
}
59 changes: 59 additions & 0 deletions workbench/app/Nova/Resource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?php

namespace Workbench\App\Nova;

use Laravel\Nova\Http\Requests\NovaRequest;
use Laravel\Nova\Resource as NovaResource;

abstract class Resource extends NovaResource
{
/**
* Build an "index" query for the given resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public static function indexQuery(NovaRequest $request, $query)
{
return $query;
}

/**
* Build a Scout search query for the given resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @param \Laravel\Scout\Builder $query
* @return \Laravel\Scout\Builder
*/
public static function scoutQuery(NovaRequest $request, $query)
{
return $query;
}

/**
* Build a "detail" query for the given resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public static function detailQuery(NovaRequest $request, $query)
{
return parent::detailQuery($request, $query);
}

/**
* Build a "relatable" query for the given resource.
*
* This query determines which instances of the model may be attached to other resources.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public static function relatableQuery(NovaRequest $request, $query)
{
return parent::relatableQuery($request, $query);
}
}
102 changes: 102 additions & 0 deletions workbench/app/Nova/User.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
<?php

namespace Workbench\App\Nova;

use Illuminate\Validation\Rules;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Password;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Http\Requests\NovaRequest;

class User extends Resource
{
/**
* The model the resource corresponds to.
*
* @var string
*/
public static $model = \Illuminate\Foundation\Auth\User::class;

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

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

/**
* Get the fields displayed by the resource.
*
* @return array
*/
public function fields(NovaRequest $request)
{
return [
ID::make()->sortable(),

Text::make('Name')
->sortable()
->rules('required', 'max:255'),

Text::make('Email')
->sortable()
->rules('required', 'email', 'max:254')
->creationRules('unique:users,email')
->updateRules('unique:users,email,{{resourceId}}'),

Password::make('Password')
->onlyOnForms()
->creationRules('required', Rules\Password::defaults())
->updateRules('nullable', Rules\Password::defaults()),
];
}

/**
* Get the cards available for the request.
*
* @return array
*/
public function cards(NovaRequest $request)
{
return [];
}

/**
* Get the filters available for the resource.
*
* @return array
*/
public function filters(NovaRequest $request)
{
return [];
}

/**
* Get the lenses available for the resource.
*
* @return array
*/
public function lenses(NovaRequest $request)
{
return [];
}

/**
* Get the actions available for the resource.
*
* @return array
*/
public function actions(NovaRequest $request)
{
return [];
}
}
Loading

0 comments on commit c2f447f

Please sign in to comment.