https://github.com/outl1ne/nova-notes-field
This Laravel Nova package adds a notes field to Nova's arsenal of fields.
https://github.com/outl1ne/nova-notes-field
Last synced: 13 days ago
JSON representation
This Laravel Nova package adds a notes field to Nova's arsenal of fields.
- Host: GitHub
- URL: https://github.com/outl1ne/nova-notes-field
- Owner: outl1ne
- License: mit
- Created: 2019-10-22T08:14:26.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2025-02-22T14:33:29.000Z (3 months ago)
- Last Synced: 2025-05-14T14:04:23.801Z (15 days ago)
- Language: PHP
- Homepage:
- Size: 1.87 MB
- Stars: 52
- Watchers: 4
- Forks: 39
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Nova Notes Field
[](https://packagist.org/packages/outl1ne/nova-notes-field)
[](https://packagist.org/packages/outl1ne/nova-notes-field)This [Laravel Nova](https://nova.laravel.com) package adds a notes field to Nova's arsenal of fields.
## Requirements
- `php: >=8.0`
- `laravel/nova: ^4.0`## Features
- Notes field on Detail view
- Differentiation between user-added and system-added notes
- Ability to add notes through the UI or programmatically
- Ability to edit user-made notes
- Ability to delete user-made notes (w/ confirmation modal)
- Customizable placeholder support
- Set ability to hide or show the 'Add Note' button## Screenshots

## Installation
```bash
# Install the package via Composer
composer require outl1ne/nova-notes-field# Run automatically loaded migration(s)
php artisan migrate
```## Usage
Add `HasNotes` trait to the model that has the notes:
```php
use Outl1ne\NovaNotesField\Traits\HasNotes;class ExampleModel extends Model
{
use HasNotes;
}
```Add `NotesField` to the matching resource:
```php
use Outl1ne\NovaNotesField\NotesField;class SomeResource extends Resource
{
// ...public function fields(Request $request)
{
return [
// ...
NotesField::make('Notes')
->placeholder('Add note') // Optional
->addingNotesEnabled(false) // Optional
->fullWidth(), // Optional
]
}
}
```## Adding notes programmatically
To add notes programmatically, use the method provided by the `HasNotes` trait:
```php
/**
* Creates a new note and attaches it to the model.
*
* @param string $note The note text which can contain raw HTML.
* @param bool $user Enables or disables the use of `Auth::guard(config('nova.guard'))->user()` to set as the creator.
* @param bool $system Defines whether the note is system created and can be deleted or not.
* @return \Outl1ne\NovaNotesField\Models\Note
**/
public function addNote($note, $user = true, $system = true)
```## Editing notes programmatically
To edit notes programmatically, use the `editNote` method provided by the `HasNotes` trait:
```php
/**
* Edit a note with the given ID and text.
*
* @param int|string $noteId The ID of the note to edit.
* @param string $text The note text which can contain raw HTML.
* @return \Outl1ne\NovaNotesField\Models\Note
**/
public function editNote($noteId, $text)
```_Alternatively, you can simply update an existing Note record that's already in memory via standard Eloquent methods:_
```php
$note = $notable->notes()->where('id', '=', $noteId)->first();$note->update([
'text' => $noteText,
]);// Or...
$note->text = $noteText;
$note->save();
```## Configuration
### Publish configuration
You can publish the configuration by running:
```bash
php artisan vendor:publish --provider="Outl1ne\NovaNotesField\NotesFieldServiceProvider" --tag="config"
```The available configuration option(s):
| Config | Type | description |
| ----------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| get_avatar_url | callable or string | Either enter the url attribute name on your model or a callable which allows you to generate your own URL for the user. The input parameter is the user model. By default, Gravatar is used for the user's avatars. |
| table_name | string | Optionally provide your own table name for the notes table. Default is `nova_notes`. |
| notes_model | string | Optionally provide your own Note model. |
| use_trix_input | boolean | Optionally enable Trix WYSIWYG input by setting this to `true`. |
| full_width_inputs | boolean | Optionally force all notes fields to display in full width. |
| display_order | string | Optionally set the sort order for notes. Default is `DESC`. |## Custom edit & delete authorization
By default, only the user that wrote the note can edit/delete it and no one can edit/delete system notes.
You can define which user(s) can edit/delete which notes by defining a new Laravel authorization Gate called `edit-nova-note` and `delete-note-note` respectively.
In your `AuthServiceProvider.php` add a Gate definition like so:
```php
use Illuminate\Support\Facades\Gate;
use Outl1ne\NovaNotesField\Models\Note;// ...
public function boot()
{
Gate::define('edit-nova-note', function ($user, Note $note) {
// Do whatever here to add custom edit authorization logic, ie:
return $note->created_by === $user->id || $user->isAdmin;
});
Gate::define('delete-nova-note', function ($user, Note $note) {
// Do whatever here to add custom delete authorization logic, ie:
return $note->created_by === $user->id || $user->isAdmin;
});
}
```## Localization
The translation file(s) can be published by using the following publish command:
```bash
php artisan vendor:publish --provider="Outl1ne\NovaNotesField\NotesFieldServiceProvider" --tag="translations"
```You can add your translations to `resources/lang/vendor/nova-notes-field/` by creating a new translations file with the locale name (ie `se.json`) and copying the JSON from the existing `en.json`.
## Publishing migrations (optional)
If you want to edit the migration(s), you can publish the migrations like so:
```bash
php artisan vendor:publish --provider="Outl1ne\NovaNotesField\NotesFieldServiceProvider" --tag="migrations"
```## Credits
- [Tarvo Reinpalu](https://github.com/Tarpsvo)
## License
This project is open-sourced software licensed under the [MIT license](LICENSE.md).