Downloads
Stars
Version
This package lets you add a status card on your resource detail page and you can directly edit the status on the card.
Possible breaking changes from v0.0.9. See how to migrate to v1 for more information.
This package utilize bensampo/laravel-enum package to store status data as enum class. So, make sure to check out the installation instructions there first.
After that, you can install this package via composer:
composer require joshua060198/nova-editable-status-card
// app/Nova/Order.php
use Joshua060198\EditableStatusCard\EditableStatusCard;
class Order extends Resource {
...
public function fields(Request $request) {
return [
EditableStatusCard::make(
MyEnumClass::class,
$this->order_status_column
'Order Status',
'order_status_column',
),
// with extra customization
EditableStatusCard::make(
MyEnumClass::class,
$this->getStatusValue()
'Other Status',
'my_other_status_colum',
)
// with icon
->withIcon('https://icon.com/my-icon.png')
// with sizing utility
->cardSize('w-1/3')
->titleSize('text-2xl')
->statusSize('text-lg')
->iconSize('50px'),
// with edit permission (e.g using spatie/laravel-permission)
EditableStatusCard::make(
MyEnumClass::class,
$this->getStatusValue()
'Other Status',
'my_other_status_colum',
)
->canEdit(function() use($request) {
return $request->user()->can('edit status card');
})
]
}
...
}
You have to use EditableStatus
trait in your Enum
classes as well as override getMappedBackgroundColor()
and 'getMappedTextColor()` method.
<?php
namespace App\Enums;
use BenSampo\Enum\Enum;
use Joshua060198\EditableStatusCard\EditableStatus;
final class OrderDetailStatus extends Enum
{
use EditableStatus;
const Declined = 0;
const WatitingForApproval = 1;
const Accepted = 2;
public static function getMappedBackgroundColor() {
return [
'Declined' => 'black',
'WatitingForApproval' => '#2fbb21',
'Accepted' => 'rgba(230,132,240,0.2)',
];
}
public static function getMappedTextColor() {
return [
'Declined' => 'rgb(0,0,0)',
'WatitingForApproval' => 'whitesmoke',
'Accepted' => '#fff',
];
}
}
If you want to restrict the editing capability, you can use canEdit()
method that receive either a boolean or a function that will be evaluated later.
// app/Nova/Order.php
use Joshua060198\EditableStatusCard\EditableStatusCard;
class Order extends Resource {
...
public function fields(Request $request) {
return [
EditableStatusCard::make(
MyEnumClass::class,
$this->getStatusValue()
'Other Status',
'my_other_status_colum',
)
->canEdit(function() use($request) {
return $request->user()->can('edit status card');
}),
// or to disable editing
EditableStatusCard::make(
MyEnumClass::class,
$this->getStatusValue()
'Other Status',
'my_other_status_colum',
)
->canEdit(false)
]
}
...
}
There are 2 required parameters and 2 more additional parameter for this component.
$class
(required)
Enum class that holds the status data.
$value
(required)
Current value to be displayed
$title
(optional, default = 'Status')
The title of the card
$attribute
(optional, default = null)
The column name that will stored the edited status value.
compact()
Card content will use less spacing.
// app/Nova/Order.php
use Joshua060198\EditableStatusCard\EditableStatusCard;
class Order extends Resource {
...
public function fields(Request $request) {
return [
EditableStatusCard::make(...)
->compact()
]
}
...
}
withIcon($icon)
Set the icon for the corresponding card.
// app/Nova/Order.php
use Joshua060198\EditableStatusCard\EditableStatusCard;
class Order extends Resource {
...
public function fields(Request $request) {
return [
EditableStatusCard::make(...)
->dataFromArray('order')
->withIcon('https://myicon.com/icon.png')
]
}
...
}
canEdit($callback)
Set the permission for the editing capability in this particular card.
// app/Nova/Order.php
use Joshua060198\EditableStatusCard\EditableStatusCard;
class Order extends Resource {
...
public function fields(Request $request) {
return [
EditableStatusCard::make(...)
->canEdit(false),
// or
EditableStatusCard::make(...)
->canEdit(function () use($request) {
return $request->user()->id == 1;
})
]
}
...
}
cardSize($class)
Set the card size (the width of the card).
// app/Nova/Order.php
use Joshua060198\EditableStatusCard\EditableStatusCard;
class Order extends Resource {
...
public function fields(Request $request) {
return [
EditableStatusCard::make(...)
->cardSize('w-1/3')
// or using your own
EditableStatusCard::make(...)
->cardSize('my-custom-width')
]
}
...
}
titleSize($class)
Set the title size (the one above horizontal line).
// app/Nova/Order.php
use Joshua060198\EditableStatusCard\EditableStatusCard;
class Order extends Resource {
...
public function fields(Request $request) {
return [
EditableStatusCard::make(...)
->titleSize('text-lg')
// or using your own
EditableStatusCard::make(...)
->titleSize('my-custom-text-size')
]
}
...
}
statusSize($class)
Set the status size (the one below horizontal line).
// app/Nova/Order.php
use Joshua060198\EditableStatusCard\EditableStatusCard;
class Order extends Resource {
...
public function fields(Request $request) {
return [
EditableStatusCard::make(...)
->statusSize('text-sm')
// or using your own
EditableStatusCard::make(...)
->statusSize('my-custom-status-size')
]
}
...
}
editFieldSize($class)
Set the edit field size.
// app/Nova/Order.php
use Joshua060198\EditableStatusCard\EditableStatusCard;
class Order extends Resource {
...
public function fields(Request $request) {
return [
EditableStatusCard::make(...)
->editFieldSize('w-1/3')
// or using your own
EditableStatusCard::make(...)
->editFieldSize('my-custom-width')
]
}
...
}
iconSize($class)
Set the edit icon size (width = height).
// app/Nova/Order.php
use Joshua060198\EditableStatusCard\EditableStatusCard;
class Order extends Resource {
...
public function fields(Request $request) {
return [
EditableStatusCard::make(...)
->iconSize('w-32')
// or using your own
EditableStatusCard::make(...)
->iconSize('my-custom-icon-size')
]
}
...
}
saveButtonSize($class)
Set the edit save button text size.
// app/Nova/Order.php
use Joshua060198\EditableStatusCard\EditableStatusCard;
class Order extends Resource {
...
public function fields(Request $request) {
return [
EditableStatusCard::make(...)
->saveButtonSize('text-lg')
// or using your own
EditableStatusCard::make(...)
->saveButtonSize('my-custom-save-button')
]
}
...
}
choicesSize($class)
Set the choices button size.
// app/Nova/Order.php
use Joshua060198\EditableStatusCard\EditableStatusCard;
class Order extends Resource {
...
public function fields(Request $request) {
return [
EditableStatusCard::make(...)
->choicesSize('200px')
// or
EditableStatusCard::make(...)
->choicesSize('2.5rem')
]
}
...
}
Thanks to @BenSampo for creating such a powerful enumeration implementation on laravel :)
The MIT license.