marshmallow / nova-activity
A Laravel Nova field.
Installs: 809
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Open Issues: 0
Language:Vue
Requires
- php: ^7.3|^8.0
- outl1ne/nova-translations-loader: ^5.0.0
Requires (Dev)
- laravel/nova: ^4.0
README
composer require marshmallow/nova-activity
php artisan vendor:publish --tag="nova-activity-config"
php artisan vendor:publish --tag="nova-activity-migrations"
php artisan vendor:publish --tag="nova-activiy-translations"
// Model use Marshmallow\NovaActivity\Traits\NovaActivities; use NovaActivities;
// Resource use Marshmallow\NovaActivity\Activity; Activity::make(__('Comments Field Name')) ->types(function () { return [ 2 => 'Klant gebeld en gesproken. Mailt aanvullende info', // ... ]; }) ->activityTitle(null) ->showOnPreview(),
->activityTitle('Activity toch!') ->activityTitle(null)
$model->addActivity( user_id: $request->user()->id, type: $request->type, label: $request->type_label, comment: $request->comment, created_at: Carbon::parse($request->date)->setTimeFromTimeString( now()->format('H:i:s') ), quick_replies: [ 'user_1' => 'sad', ], mentions: [ [ 'key' => 1, 'class' => User::class, ] ] );
// App\Models\User public function avatarPath() { return 'https://images.unsplash.com/photo-1550525811-e5869dd03032?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80'; }
'quick_replies' => [ 'exited' => [ 'name' => 'Exited', 'background' => '#ef4444', 'icon' => 'fire', 'solid_icon' => false, ],
->types(function () { return [ 2 => 'Klant gebel
->limit(3) // will limit on index, detail and forms ->limitOnDetail(null) ->limitOnIndex(3) ->limitOnForms(10) ->alwaysShowComments()
// momentjs format ->dateFormat('DD MMM YYYY')
// momentjs format ->setLocale('nl') ->setLocale(function () { return auth()->user()->locale; })
->mentions( function (): array { return User::get()->map(function ($user) { return [ 'model' => $user, 'value' => str_slug($user->name), 'avatar_url' => Activity::getUserAvatar($user), 'key' => $user->name, ]; })->toArray(); }, ) /** Check if this activity has any mentions. */ $activity->hasMentions(); /** Get a collection of all the classes that where mentioned. */ $activity->getMentions();
return [ 'use_comments' => false, ] useComments(false)
use App\Listeners\DoWhatEver; use Marshmallow\NovaActivity\Events\ActivityCreated; protected $listen = [ ActivityCreated::class => [ DoWhatEver::class ], ]; // Listeners class DoWhatEver { public function handle($event) { /** Get the model on which the activity was created. */ $event->model; /** Get the created activity. */ $event->activity; /** Check if this activity has any mentions. */ $event->activity->hasMentions(); /** Get a collection of all the classes that where mentioned. */ $event->activity->getMentions(); } }
Events
$event = ActivityCreated::class; $activity = $event->activity; $model = $event->activity->novaActivity;
$event = QuickReplyChanged::class; $activity = $event->activity; $model = $event->activity->novaActivity; $user = $event->user;
$event = ActivityPinned::class; $activity = $event->activity; $model = $event->activity->novaActivity; $user = $event->user;
$event = ActivityUnpinned::class; $activity = $event->activity; $model = $event->activity->novaActivity; $user = $event->user;
$event = ActivityCommentHidden::class; $activity = $event->activity; $model = $event->activity->novaActivity; $user = $event->user;
$event = ActivityCommentShow::class; $activity = $event->activity; $model = $event->activity->novaActivity; $user = $event->user;
$event = ActivityDeleted::class; $activity = $event->activity; $model = $event->activity->novaActivity; $user = $event->user;
/** Add this so the index button will work. */ public static $clickAction = 'ignore';
->dateFormat('Do MMM, YYYY') ->useHumanReadableDates(true) ->useQuickReplies(true) ->useFileUploads(true)