joshua060198/nova-editable-status-card

Laravel Nova的可编辑状态卡片

1.0.6 2020-12-26 08:11 UTC

This package is auto-updated.

Last update: 2024-09-26 16:36:54 UTC


README

Total Downloads GitHub issues GitHub Version

此包允许你在资源详情页上添加状态卡片,并且可以直接在卡片上编辑状态。

警告

从v0.0.9可能存在重大更改。有关如何迁移到v1的更多信息,请参阅迁移说明

安装

此包利用bensampo/laravel-enum包将状态数据存储为枚举类。因此,请首先查看那里的安装说明。

之后,你可以通过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');
                })
        ]
    }

    ...
}

背景色和文字色

你必须在你的Enum类中使用EditableStatus特质,并重写getMappedBackgroundColor()和'getMappedTextColor()`方法。

<?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',
        ];
    }
}

权限(可选)

如果你想限制编辑功能,可以使用接收布尔值或稍后评估的函数的canEdit()方法。

// 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)
        ]
    }

    ...
}

构造函数

此组件有两个必填参数和两个可选参数。

  • $class(必填)

    包含状态数据的枚举类。

  • $value(必填)

    要显示的当前值

  • $title(可选,默认 = '状态')

    卡片的标题

  • $attribute(可选,默认 = null)存储已编辑状态值的列名。

方法

compact()

卡片内容将使用更少的间距。

示例

// app/Nova/Order.php

use Joshua060198\EditableStatusCard\EditableStatusCard;

class Order extends Resource {

    ...

    public function fields(Request $request) {

        return [
            EditableStatusCard::make(...)
                ->compact()
        ]
    }

    ...
}

withIcon($icon)

为相应的卡片设置图标。

参数

  • $icon = 图标的URL或完整路径。

示例

// 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)

设置此特定卡片编辑能力的权限。

参数

  • $callback = 确定编辑按钮(及其功能)可见性的布尔值或函数。

示例

// 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)

设置卡片大小(卡片的宽度)。

参数

  • $class = 用于确定宽度的类名。您可以使用tailwind.css类或创建自己的类。

示例

// 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)

title size

设置标题大小(横线上的标题)。

参数

  • $class = 用于确定标题大小的类名。您可以使用tailwind.css类或创建自己的类。

示例

// 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)

status size

设置状态大小(横线下的状态)。

参数

  • $class = 用于确定状态大小的类名。您可以使用tailwind.css类或创建自己的类。

示例

// 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)

edit field size

设置编辑字段大小。

参数

  • $class = 用于确定宽度的类名。您可以使用tailwind.css类或创建自己的类。

示例

// 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)

设置编辑图标大小(宽度 = 高度)。

参数

  • $class = 用于确定图标宽度和高度的类名。您可以使用tailwind.css类或创建自己的类。

示例

// 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)

save button size

设置编辑保存按钮文本大小。

参数

  • $class = 用于确定保存按钮的类名。您可以使用tailwind.css类或创建自己的类。

示例

// 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)

choices size

设置选择按钮大小。

参数

  • $class = 用于确定选择按钮大小的类名。**注意:不要使用类名**。

示例

// 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')
        ]
    }

    ...
}

特别感谢

感谢@BenSampo为laravel创建如此强大的枚举实现:)

许可证

MIT许可证。