Installation:
composer require omnia-digital/library
Publish the package assets (if needed):
php artisan vendor:publish --provider="OmniaDigital\Library\LibraryServiceProvider"
First Use Case:
WithModal trait in a Livewire component:
use OmniaDigital\Library\Traits\WithModal;
class MyComponent extends Component
{
use WithModal;
public function mount()
{
$this->modal('example-modal', 'Example Title', 'This is a modal content.');
}
public function render()
{
return view('livewire.my-component');
}
}
WithNotification to show toasts:
use OmniaDigital\Library\Traits\WithNotification;
class MyComponent extends Component
{
use WithNotification;
public function showSuccess()
{
$this->notify('Success!', 'Operation completed.', 'success');
}
}
Blade Components: Include a form component in your Blade view:
@livewire('my-component')
<x-library.text-input wire:model="name" label="Name" />
Component Composition:
Combine traits for complex functionality (e.g., WithModal + WithStripe for payment modals):
use OmniaDigital\Library\Traits\{WithModal, WithStripe};
class PaymentComponent extends Component
{
use WithModal, WithStripe;
public function mount()
{
$this->modal('payment-modal', 'Payment', view('livewire.payment-form'));
}
public function handlePayment()
{
$this->processStripePayment();
}
}
Data Handling:
WithSorting to manage table columns:
use OmniaDigital\Library\Traits\WithSorting;
class DataTable extends Component
{
use WithSorting;
protected $sortable = ['name', 'created_at'];
public function render()
{
return view('livewire.data-table', [
'items' => $this->sortData($this->query()->get()),
]);
}
}
WithCachedRows for large datasets:
use OmniaDigital\Library\Traits\WithCachedRows;
class LargeDataset extends Component
{
use WithCachedRows;
protected $cacheKey = 'large_dataset';
protected $cacheDuration = 60; // seconds
public function getItemsProperty()
{
return $this->getCachedRows(fn() => $this->query()->get());
}
}
Third-Party Integrations:
mount():
use OmniaDigital\Library\Traits\WithStripe;
class Checkout extends Component
{
use WithStripe;
public function mount()
{
$this->initStripe('pk_test_...');
}
}
WithMap for interactive maps:
use OmniaDigital\Library\Traits\WithMap;
class LocationPicker extends Component
{
use WithMap;
public function mount()
{
$this->initMap('map-container', [
'center' => [40.7128, -74.0060],
'zoom' => 12,
]);
}
}
Layout Switching:
Use WithLayoutSwitcher for grid/list toggles:
use OmniaDigital\Library\Traits\WithLayoutSwitcher;
class ProductList extends Component
{
use WithLayoutSwitcher;
protected $layouts = ['grid', 'list'];
protected $defaultLayout = 'grid';
public function render()
{
return view('livewire.product-list', [
'products' => $this->getProducts(),
]);
}
}
Livewire 3.x Migration:
wire:model with wire:model.live if using Livewire 3.emit() → dispatch() for events).Blade Component Aliasing:
Add to AppServiceProvider to shorten component names:
Blade::component('library.text-input', 'text-input');
Customizing Components:
Extend Blade components in resources/views/vendor/library/ to override defaults.
Testing:
Use Livewire::test() with traits:
public function test_notification()
{
Livewire::test(MyComponent::class)
->call('showSuccess')
->assertSee('Success!');
}
Trait Method Conflicts:
WithModal or WithNotification may override existing Livewire methods (e.g., render). Rename or alias if conflicts arise:
public function renderModal()
{
return $this->renderModalContent();
}
Livewire 2.x vs. 3.x:
wire:model). Test thoroughly in Livewire 3.x.Caching Quirks:
WithCachedRows uses Laravel’s cache. Clear cache manually if data staleness occurs:
php artisan cache:clear
Stripe Integration:
WithStripe is initialized after the component is mounted (e.g., in mount()).try {
$this->processStripePayment();
} catch (\Exception $e) {
$this->notify('Error', $e->getMessage(), 'error');
}
Modal Z-Index:
.omnia-modal {
z-index: 9999 !important;
}
Trait Methods:
dd() or dump() to inspect trait properties/methods:
public function debugModal()
{
dump($this->modalData);
}
Livewire Events:
modal-opened):
$this->listen('modal-opened', function ($modal) {
dump($modal);
});
Blade Component Debugging:
php artisan view:clear
composer dump-autoload
Custom Traits:
namespace App\Traits;
use OmniaDigital\Library\Traits\WithModal;
trait WithCustomModal
{
use WithModal;
public function customModal()
{
$this->modal('custom-modal', 'Custom Title', view('custom.view'));
}
}
Component Overrides:
resources/views/vendor/library/:
resources/
views/
vendor/
library/
components/
text-input.blade.php
Configuration:
php artisan vendor:publish --tag="library-config"
config/library.php for global settings (e.g., default modal options).Testing Traits:
$component = Livewire::test(MyComponent::class)
->withGlobalTraits([WithModal::class]);
How can I help you explore Laravel packages today?