README.md
<p align="center">
<img src="https://github.com/the-3labs-team/nova-busy-resource-field/raw/HEAD/art/banner.png" width="100%"
alt="Logo Nova Busy Resource Field by The3LabsTeam">
</p>
# Laravel Nova Busy Resource Field
[![Latest Version on Packagist](https://img.shields.io/packagist/v/the-3labs-team/nova-busy-resource-field.svg?style=flat-square)](https://packagist.org/packages/the-3labs-team/nova-busy-resource-field)
[![Maintainability](https://api.codeclimate.com/v1/badges/ce66e15115ca64d52c96/maintainability)](https://codeclimate.com/github/The-3Labs-Team/nova-busy-resource-field/maintainability)
[![Total Downloads](https://img.shields.io/packagist/dt/the-3labs-team/nova-busy-resource-field.svg?style=flat-square)](https://packagist.org/packages/the-3labs-team/nova-busy-resource-field)
Have you ever dreamed of having a mechanism in Laravel Nova that would allow you to know if a resource is occupied by
another user?
Introducing **Nova Resource Busy Field**, the first package for Laravel Nova that lets you know if a resource is
occupied by another user.
<p align="center">
<img src="https://github.com/the-3labs-team/nova-busy-resource-field/raw/HEAD/art/demo.gif" width="100%"
alt="Demo Nova Busy Resource Field by The3LabsTeam">
</p>
From the secret labs of The3LabsTeam this is a completely opensource package designed to make life easier for those
using Laravel Nova as a multi-user CMS.
🌟 Here are some great features:
- It is model-agnostic, you can decide which resource will be considered "occupiable"
- Fully configurable, you can choose the threshold timeout and old logs to be deleted
- It is native to Laravel Nova, there is only one migration to launch
- It is fully reversible, no Laravel Nova models and/or views are touched
- Lets you know from the index of a resource if it is occupied
- Receive an alert if you enter an edit of a busy resource
## Installation
For install this package, in your `composer.json` add the repository:
```bash
composer require the-3labs-team/nova-busy-resource-field
```
You need to publish the migration file:
```bash
php artisan vendor:publish --tag=nova-busy-resource-field-migrations
```
Remember to launch the migrations:
```bash
php artisan migrate
```
Also, you can publish the config file:
```bash
php artisan vendor:publish --tag=nova-busy-resource-field-config
```
## Usage
First you need to make a model "busiable".
For example, if you want to make the Article model busiable, you need to add the
trait `The3labsTeam\NovaBusyResourceField\App\Traits\Busiable` to it:
```php
use The3labsTeam\NovaBusyResourceField\App\Traits\Busiable;
class Article extends Model{
use Busiable;
}
```
Then, in your Nova resource, you can add the field:
```php
use The3labsTeam\NovaBusyResourceField\NovaBusyResourceField;
public function fields(NovaRequest $request)
{
return [
// ...
NovaBusyResourceField::make('')->withMeta([
'saveEvery' => 30000 // In milliseconds
]),
// ...
];
}
```
For the best experience, you can delete old records in database.
For this, you need to add in your `App\Console\Kernel`, command for delete old records every minute.
```php
$schedule->command('nova-busy-resource-field:run')->everyMinute()->withoutOverlapping();
```