Start upgrading Livewire to v3

This commit is contained in:
Jason Beggs 2023-12-13 11:52:49 -05:00
parent 63c1bfbf80
commit e27ee40ff3
61 changed files with 505 additions and 250 deletions

View File

@ -9,7 +9,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\DataMapper\ClientSettings; use App\DataMapper\ClientSettings;
use App\Factory\ClientFactory; use App\Factory\ClientFactory;
@ -411,7 +411,7 @@ class BillingPortalPurchase extends Component
'campaign' => $this->campaign, 'campaign' => $this->campaign,
], now()->addMinutes(60)); ], now()->addMinutes(60));
$this->emit('beforePaymentEventsCompleted'); $this->dispatch('beforePaymentEventsCompleted');
} }
/** /**

View File

@ -9,7 +9,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\DataMapper\ClientSettings; use App\DataMapper\ClientSettings;
use App\Factory\ClientFactory; use App\Factory\ClientFactory;
@ -542,7 +542,7 @@ class BillingPortalPurchasev2 extends Component
'bundle' => $this->bundle, 'bundle' => $this->bundle,
], now()->addMinutes(60)); ], now()->addMinutes(60));
$this->emit('beforePaymentEventsCompleted'); $this->dispatch('beforePaymentEventsCompleted');
return $this; return $this;
} }

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\Company; use App\Models\Company;

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\Client; use App\Models\Client;

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\Company; use App\Models\Company;

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use Livewire\Component; use Livewire\Component;

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire\PaymentMethods; namespace App\Livewire\PaymentMethods;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use Livewire\Component; use Livewire\Component;
@ -46,7 +46,7 @@ class UpdateDefaultMethod extends Component
$this->token->is_default = 1; $this->token->is_default = 1;
$this->token->save(); $this->token->save();
$this->emit('UpdateDefaultMethod::method-updated'); $this->dispatch('UpdateDefaultMethod::method-updated');
} }
public function render() public function render()

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Http\Livewire; namespace App\Livewire;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\Client; use App\Models\Client;

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\Company; use App\Models\Company;

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\Jobs\Invoice\CreateEInvoice; use App\Jobs\Invoice\CreateEInvoice;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire\Profile\Settings; namespace App\Livewire\Profile\Settings;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Livewire\Component; use Livewire\Component;

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Http\Livewire\Profile\Settings; namespace App\Livewire\Profile\Settings;
use Livewire\Component; use Livewire\Component;

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Http\Livewire\Profile\Settings; namespace App\Livewire\Profile\Settings;
use Livewire\Component; use Livewire\Component;

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Http\Livewire\Profile\Settings; namespace App\Livewire\Profile\Settings;
use Livewire\Component; use Livewire\Component;

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\Invoice; use App\Models\Invoice;

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\Company; use App\Models\Company;

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\RecurringInvoice; use App\Models\RecurringInvoice;

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire\RecurringInvoices; namespace App\Livewire\RecurringInvoices;
use App\Models\Invoice; use App\Models\Invoice;
use Livewire\Component; use Livewire\Component;

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\RecurringInvoice; use App\Models\RecurringInvoice;

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\ClientContact; use App\Models\ClientContact;

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\ClientContact; use App\Models\ClientContact;
@ -122,7 +122,7 @@ class SubscriptionPlanSwitch extends Component
$this->handlePaymentNotRequired(); $this->handlePaymentNotRequired();
} }
$this->emit('beforePaymentEventsCompleted'); $this->dispatch('beforePaymentEventsCompleted');
} }
/** /**
@ -153,7 +153,7 @@ class SubscriptionPlanSwitch extends Component
$this->hide_button = true; $this->hide_button = true;
$this->dispatchBrowserEvent('redirectRoute', ['route' => $response]); $this->dispatch('redirectRoute', ['route' => $response]);
// return redirect($response); // return redirect($response);
} }

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\RecurringInvoice; use App\Models\RecurringInvoice;

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\RecurringInvoice; use App\Models\RecurringInvoice;

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\Task; use App\Models\Task;

View File

@ -10,7 +10,7 @@
* @license https://www.elastic.co/licensing/elastic-license * @license https://www.elastic.co/licensing/elastic-license
*/ */
namespace App\Http\Livewire; namespace App\Livewire;
use App\DataMapper\FeesAndLimits; use App\DataMapper\FeesAndLimits;
use App\Factory\CompanyGatewayFactory; use App\Factory\CompanyGatewayFactory;

View File

@ -68,7 +68,7 @@
"league/flysystem-aws-s3-v3": "^3.0", "league/flysystem-aws-s3-v3": "^3.0",
"league/fractal": "^0.20.0", "league/fractal": "^0.20.0",
"league/omnipay": "^3.1", "league/omnipay": "^3.1",
"livewire/livewire": "^2.10", "livewire/livewire": "^3.0",
"microsoft/microsoft-graph": "^1.69", "microsoft/microsoft-graph": "^1.69",
"mollie/mollie-api-php": "^2.36", "mollie/mollie-api-php": "^2.36",
"nelexa/zip": "^4.0", "nelexa/zip": "^4.0",

33
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "28b57fe6eac3d71c607125cda9a6a537", "content-hash": "a0ba564c418c368cf4df13ff888b4ede",
"packages": [ "packages": [
{ {
"name": "afosto/yaac", "name": "afosto/yaac",
@ -5843,33 +5843,34 @@
}, },
{ {
"name": "livewire/livewire", "name": "livewire/livewire",
"version": "v2.12.6", "version": "v3.3.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/livewire/livewire.git", "url": "https://github.com/livewire/livewire.git",
"reference": "7d3a57b3193299cf1a0639a3935c696f4da2cf92" "reference": "7c1f609515e74ef1197c08e56a5606571b3ec1d9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/livewire/livewire/zipball/7d3a57b3193299cf1a0639a3935c696f4da2cf92", "url": "https://api.github.com/repos/livewire/livewire/zipball/7c1f609515e74ef1197c08e56a5606571b3ec1d9",
"reference": "7d3a57b3193299cf1a0639a3935c696f4da2cf92", "reference": "7c1f609515e74ef1197c08e56a5606571b3ec1d9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"illuminate/database": "^7.0|^8.0|^9.0|^10.0", "illuminate/database": "^10.0",
"illuminate/support": "^7.0|^8.0|^9.0|^10.0", "illuminate/support": "^10.0",
"illuminate/validation": "^7.0|^8.0|^9.0|^10.0", "illuminate/validation": "^10.0",
"league/mime-type-detection": "^1.9", "league/mime-type-detection": "^1.9",
"php": "^7.2.5|^8.0", "php": "^8.1",
"symfony/http-kernel": "^5.0|^6.0" "symfony/http-kernel": "^6.2"
}, },
"require-dev": { "require-dev": {
"calebporzio/sushi": "^2.1", "calebporzio/sushi": "^2.1",
"laravel/framework": "^7.0|^8.0|^9.0|^10.0", "laravel/framework": "^10.0",
"laravel/prompts": "^0.1.6",
"mockery/mockery": "^1.3.1", "mockery/mockery": "^1.3.1",
"orchestra/testbench": "^5.0|^6.0|^7.0|^8.0", "orchestra/testbench": "^8.0",
"orchestra/testbench-dusk": "^5.2|^6.0|^7.0|^8.0", "orchestra/testbench-dusk": "^8.0",
"phpunit/phpunit": "^8.4|^9.0", "phpunit/phpunit": "^9.0",
"psy/psysh": "@stable" "psy/psysh": "@stable"
}, },
"type": "library", "type": "library",
@ -5904,7 +5905,7 @@
"description": "A front-end framework for Laravel.", "description": "A front-end framework for Laravel.",
"support": { "support": {
"issues": "https://github.com/livewire/livewire/issues", "issues": "https://github.com/livewire/livewire/issues",
"source": "https://github.com/livewire/livewire/tree/v2.12.6" "source": "https://github.com/livewire/livewire/tree/v3.3.0"
}, },
"funding": [ "funding": [
{ {
@ -5912,7 +5913,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2023-08-11T04:02:34+00:00" "time": "2023-12-11T18:04:00+00:00"
}, },
{ {
"name": "maennchen/zipstream-php", "name": "maennchen/zipstream-php",

View File

@ -3,156 +3,157 @@
return [ return [
/* /*
|-------------------------------------------------------------------------- |---------------------------------------------------------------------------
| Class Namespace | Class Namespace
|-------------------------------------------------------------------------- |---------------------------------------------------------------------------
| |
| This value sets the root namespace for Livewire component classes in | This value sets the root class namespace for Livewire component classes in
| your application. This value affects component auto-discovery and | your application. This value will change where component auto-discovery
| any Livewire file helper commands, like `artisan make:livewire`. | finds components. It's also referenced by the file creation commands.
|
| After changing this item, run: `php artisan livewire:discover`.
| |
*/ */
'class_namespace' => 'App\\Http\\Livewire', 'class_namespace' => 'App\\Livewire',
/* /*
|-------------------------------------------------------------------------- |---------------------------------------------------------------------------
| View Path | View Path
|-------------------------------------------------------------------------- |---------------------------------------------------------------------------
| |
| This value sets the path for Livewire component views. This affects | This value is used to specify where Livewire component Blade templates are
| file manipulation helper commands like `artisan make:livewire`. | stored when running file creation commands like `artisan make:livewire`.
| It is also used if you choose to omit a component's render() method.
| |
*/ */
'view_path' => resource_path('views/livewire'), 'view_path' => resource_path('views/livewire'),
/* /*
|-------------------------------------------------------------------------- |---------------------------------------------------------------------------
| Layout | Layout
|-------------------------------------------------------------------------- |---------------------------------------------------------------------------
| The default layout view that will be used when rendering a component via | The view that will be used as the layout when rendering a single component
| Route::get('/some-endpoint', SomeComponent::class);. In this case the | as an entire page via `Route::get('/post/create', CreatePost::class);`.
| the view returned by SomeComponent will be wrapped in "layouts.app" | In this case, the view returned by CreatePost will render into $slot.
| |
*/ */
'layout' => 'layouts.app', 'layout' => 'layouts.app',
/* /*
|-------------------------------------------------------------------------- |---------------------------------------------------------------------------
| Livewire Assets URL | Lazy Loading Placeholder
|-------------------------------------------------------------------------- |---------------------------------------------------------------------------
| | Livewire allows you to lazy load components that would otherwise slow down
| This value sets the path to Livewire JavaScript assets, for cases where | the initial page load. Every component can have a custom placeholder or
| your app's domain root is not the correct path. By default, Livewire | you can define the default placeholder view for all components below.
| will load its JavaScript assets from the app's "relative root".
|
| Examples: "/assets", "myurl.com/app".
| |
*/ */
'asset_url' => null, 'lazy_placeholder' => null,
/* /*
|-------------------------------------------------------------------------- |---------------------------------------------------------------------------
| Livewire App URL | Temporary File Uploads
|-------------------------------------------------------------------------- |---------------------------------------------------------------------------
|
| This value should be used if livewire assets are served from CDN.
| Livewire will communicate with an app through this url.
|
| Examples: "https://my-app.com", "myurl.com/app".
|
*/
'app_url' => null,
/*
|--------------------------------------------------------------------------
| Livewire Endpoint Middleware Group
|--------------------------------------------------------------------------
|
| This value sets the middleware group that will be applied to the main
| Livewire "message" endpoint (the endpoint that gets hit everytime
| a Livewire component updates). It is set to "web" by default.
|
*/
'middleware_group' => 'web',
/*
|--------------------------------------------------------------------------
| Livewire Temporary File Uploads Endpoint Configuration
|--------------------------------------------------------------------------
| |
| Livewire handles file uploads by storing uploads in a temporary directory | Livewire handles file uploads by storing uploads in a temporary directory
| before the file is validated and stored permanently. All file uploads | before the file is stored permanently. All file uploads are directed to
| are directed to a global endpoint for temporary storage. The config | a global endpoint for temporary storage. You may configure this below:
| items below are used for customizing the way the endpoint works.
| |
*/ */
'temporary_file_upload' => [ 'temporary_file_upload' => [
'disk' => null, // Example: 'local', 's3' Default: 'default' 'disk' => null, // Example: 'local', 's3' | Default: 'default'
'rules' => null, // Example: ['file', 'mimes:png,jpg'] Default: ['required', 'file', 'max:12288'] (12MB) 'rules' => null, // Example: ['file', 'mimes:png,jpg'] | Default: ['required', 'file', 'max:12288'] (12MB)
'directory' => null, // Example: 'tmp' Default 'livewire-tmp' 'directory' => null, // Example: 'tmp' | Default: 'livewire-tmp'
'middleware' => null, // Example: 'throttle:5,1' Default: 'throttle:60,1' 'middleware' => null, // Example: 'throttle:5,1' | Default: 'throttle:60,1'
'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs. 'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs...
'png', 'gif', 'bmp', 'svg', 'wav', 'mp4', 'png', 'gif', 'bmp', 'svg', 'wav', 'mp4',
'mov', 'avi', 'wmv', 'mp3', 'm4a', 'mov', 'avi', 'wmv', 'mp3', 'm4a',
'jpg', 'jpeg', 'mpga', 'webp', 'wma', 'jpg', 'jpeg', 'mpga', 'webp', 'wma',
], ],
'max_upload_time' => 5, // Max duration (in minutes) before an upload gets invalidated. 'max_upload_time' => 5, // Max duration (in minutes) before an upload is invalidated...
], ],
/* /*
|-------------------------------------------------------------------------- |---------------------------------------------------------------------------
| Manifest File Path
|--------------------------------------------------------------------------
|
| This value sets the path to the Livewire manifest file.
| The default should work for most cases (which is
| "<app_root>/bootstrap/cache/livewire-components.php"), but for specific
| cases like when hosting on Laravel Vapor, it could be set to a different value.
|
| Example: for Laravel Vapor, it would be "/tmp/storage/bootstrap/cache/livewire-components.php".
|
*/
'manifest_path' => null,
/*
|--------------------------------------------------------------------------
| Back Button Cache
|--------------------------------------------------------------------------
|
| This value determines whether the back button cache will be used on pages
| that contain Livewire. By disabling back button cache, it ensures that
| the back button shows the correct state of components, instead of
| potentially stale, cached data.
|
| Setting it to "false" (default) will disable back button cache.
|
*/
'back_button_cache' => false,
/*
|--------------------------------------------------------------------------
| Render On Redirect | Render On Redirect
|-------------------------------------------------------------------------- |---------------------------------------------------------------------------
| |
| This value determines whether Livewire will render before it's redirected | This value determines if Livewire will run a component's `render()` method
| or not. Setting it to "false" (default) will mean the render method is | after a redirect has been triggered using something like `redirect(...)`
| skipped when redirecting. And "true" will mean the render method is | Setting this to true will render the view once more before redirecting
| run before redirecting. Browsers bfcache can store a potentially
| stale view if render is skipped on redirect.
| |
*/ */
'render_on_redirect' => false, 'render_on_redirect' => false,
/*
|---------------------------------------------------------------------------
| Eloquent Model Binding
|---------------------------------------------------------------------------
|
| Previous versions of Livewire supported binding directly to eloquent model
| properties using wire:model by default. However, this behavior has been
| deemed too "magical" and has therefore been put under a feature flag.
|
*/
'legacy_model_binding' => false,
/*
|---------------------------------------------------------------------------
| Auto-inject Frontend Assets
|---------------------------------------------------------------------------
|
| By default, Livewire automatically injects its JavaScript and CSS into the
| <head> and <body> of pages containing Livewire components. By disabling
| this behavior, you need to use @livewireStyles and @livewireScripts.
|
*/
'inject_assets' => true,
/*
|---------------------------------------------------------------------------
| Navigate (SPA mode)
|---------------------------------------------------------------------------
|
| By adding `wire:navigate` to links in your Livewire application, Livewire
| will prevent the default link handling and instead request those pages
| via AJAX, creating an SPA-like effect. Configure this behavior here.
|
*/
'navigate' => [
'show_progress_bar' => true,
'progress_bar_color' => '#2299dd',
],
/*
|---------------------------------------------------------------------------
| HTML Morph Markers
|---------------------------------------------------------------------------
|
| Livewire intelligently "morphs" existing HTML into the newly rendered HTML
| after each update. To make this process more reliable, Livewire injects
| "markers" into the rendered Blade surrounding @if, @class & @foreach.
|
*/
'inject_morph_markers' => true,
/*
|---------------------------------------------------------------------------
| Pagination Theme
|---------------------------------------------------------------------------
|
| When enabling Livewire's pagination feature by using the `WithPagination`
| trait, Livewire will use Tailwind templates to render pagination views
| on the page. If you want Bootstrap CSS, you can specify: "bootstrap"
|
*/
'pagination_theme' => 'tailwind',
]; ];

View File

@ -33,7 +33,7 @@
</div> </div>
</div> </div>
@endif @endif
<div @click.away="open = false" class="ml-3 relative" x-data="{ open: false }"> <div @click.outside="open = false" class="ml-3 relative" x-data="{ open: false }">
<div> <div>
<button data-ref="client-profile-dropdown" @click="open = !open" <button data-ref="client-profile-dropdown" @click="open = !open"
class="max-w-xs flex items-center text-sm rounded-full focus:outline-none focus:ring"> class="max-w-xs flex items-center text-sm rounded-full focus:outline-none focus:ring">

View File

@ -7,8 +7,7 @@
<div class="flex-1 px-3 md:px-8 flex justify-between items-center"> <div class="flex-1 px-3 md:px-8 flex justify-between items-center">
<span class="text-xl text-gray-900" data-ref="meta-title">@yield('meta_title')</span> <span class="text-xl text-gray-900" data-ref="meta-title">@yield('meta_title')</span>
<div class="flex items-center md:ml-6 md:mr-2"> <div class="flex items-center md:ml-6 md:mr-2">
<div @click.outside="open = false" class="ml-3 relative" x-data="{ open: false }">
<div @click.away="open = false" class="ml-3 relative" x-data="{ open: false }">
<div> <div>
<button data-ref="client-profile-dropdown" @click="open = !open" <button data-ref="client-profile-dropdown" @click="open = !open"
class="max-w-xs flex items-center text-sm rounded-full focus:outline-none focus:ring"> class="max-w-xs flex items-center text-sm rounded-full focus:outline-none focus:ring">

View File

@ -161,14 +161,14 @@
@endif @endif
</div> </div>
@elseif(!$steps['payment_required']) @elseif(!$steps['payment_required'])
<form wire:submit.prevent="handlePaymentNotRequired" class="mt-8"> <form wire:submit="handlePaymentNotRequired" class="mt-8">
@csrf @csrf
<button class="px-3 py-2 border rounded mr-4 hover:border-blue-600"> <button class="px-3 py-2 border rounded mr-4 hover:border-blue-600">
{{ ctrans('texts.click_to_continue') }} {{ ctrans('texts.click_to_continue') }}
</button> </button>
</form> </form>
@elseif($steps['show_start_trial']) @elseif($steps['show_start_trial'])
<form wire:submit.prevent="handleTrial" class="mt-8"> <form wire:submit="handleTrial" class="mt-8">
@csrf @csrf
<button class="px-3 py-2 border rounded mr-4 hover:border-blue-600"> <button class="px-3 py-2 border rounded mr-4 hover:border-blue-600">
{{ ctrans('texts.trial_call_to_action') }} {{ ctrans('texts.trial_call_to_action') }}
@ -176,12 +176,12 @@
</form> </form>
@else @else
<form wire:submit.prevent="authenticate" class="mt-8"> <form wire:submit="authenticate" class="mt-8">
@csrf @csrf
<label for="email_address"> <label for="email_address">
<span class="input-label">{{ ctrans('texts.email_address') }}</span> <span class="input-label">{{ ctrans('texts.email_address') }}</span>
<input wire:model.defer="email" type="email" class="input w-full"/> <input wire:model="email" type="email" class="input w-full"/>
@error('email') @error('email')
<p class="validation validation-fail block w-full" role="alert"> <p class="validation validation-fail block w-full" role="alert">
@ -193,7 +193,7 @@
@if($steps['existing_user']) @if($steps['existing_user'])
<label for="password" class="block mt-2"> <label for="password" class="block mt-2">
<span class="input-label">{{ ctrans('texts.password') }}</span> <span class="input-label">{{ ctrans('texts.password') }}</span>
<input wire:model.defer="password" type="password" class="input w-full" autofocus/> <input wire:model="password" type="password" class="input w-full" autofocus/>
@error('password') @error('password')
<p class="validation validation-fail block w-full" role="alert"> <p class="validation validation-fail block w-full" role="alert">
@ -229,11 +229,11 @@
</div> </div>
</div> </div>
<form wire:submit.prevent="handleCoupon" class="flex items-center mt-4"> <form wire:submit="handleCoupon" class="flex items-center mt-4">
@csrf @csrf
<label class="w-full mr-2"> <label class="w-full mr-2">
<input type="text" wire:model.defer="coupon" class="input w-full m-0"/> <input type="text" wire:model="coupon" class="input w-full m-0"/>
</label> </label>
<button class="button button-primary bg-primary">{{ ctrans('texts.apply') }}</button> <button class="button button-primary bg-primary">{{ ctrans('texts.apply') }}</button>

View File

@ -30,7 +30,7 @@
</div> </div>
@endif @endif
<form wire:submit.prevent="submit"> <form wire:submit="submit">
<!-- Recurring Plan Products--> <!-- Recurring Plan Products-->
<ul role="list" class="-my-6 divide-y divide-gray-200"> <ul role="list" class="-my-6 divide-y divide-gray-200">
@if(!empty($subscription->recurring_product_ids)) @if(!empty($subscription->recurring_product_ids))
@ -62,7 +62,7 @@
@else @else
<p class="text-sm font-light text-gray-700 text-right mr-2 mt-2">{{ ctrans('texts.qty') }}</p> <p class="text-sm font-light text-gray-700 text-right mr-2 mt-2">{{ ctrans('texts.qty') }}</p>
@endif @endif
<select wire:model.debounce.300ms="data.{{ $index }}.recurring_qty" class="rounded-md border-gray-300 shadow-sm sm:text-sm" <select wire:model.live.debounce.300ms="data.{{ $index }}.recurring_qty" class="rounded-md border-gray-300 shadow-sm sm:text-sm"
@if($subscription->use_inventory_management && $product->in_stock_quantity == 0) @if($subscription->use_inventory_management && $product->in_stock_quantity == 0)
disabled disabled
@endif @endif
@ -164,7 +164,7 @@
@else @else
<p class="text-sm font-light text-gray-700 text-right mr-2 mt-2">{{ ctrans('texts.qty') }}</p> <p class="text-sm font-light text-gray-700 text-right mr-2 mt-2">{{ ctrans('texts.qty') }}</p>
@endif @endif
<select wire:model.debounce.300ms="data.{{ $index }}.optional_recurring_qty" class="rounded-md border-gray-300 shadow-sm sm:text-sm" <select wire:model.live.debounce.300ms="data.{{ $index }}.optional_recurring_qty" class="rounded-md border-gray-300 shadow-sm sm:text-sm"
@if($subscription->use_inventory_management && $product->in_stock_quantity == 0) @if($subscription->use_inventory_management && $product->in_stock_quantity == 0)
disabled disabled
@endif @endif
@ -210,7 +210,7 @@
@else @else
<p class="text-sm font-light text-gray-700 text-right mr-2 mt-2">{{ ctrans('texts.qty') }}</p> <p class="text-sm font-light text-gray-700 text-right mr-2 mt-2">{{ ctrans('texts.qty') }}</p>
@endif @endif
<select wire:model.debounce.300ms="data.{{ $index }}.optional_qty" class="rounded-md border-gray-300 shadow-sm sm:text-sm"> <select wire:model.live.debounce.300ms="data.{{ $index }}.optional_qty" class="rounded-md border-gray-300 shadow-sm sm:text-sm">
<option value="0" selected="selected">0</option> <option value="0" selected="selected">0</option>
@for ($i = 1; $i <= ($subscription->use_inventory_management ? min($product->in_stock_quantity, min(100,$product->max_quantity)) : min(100,$product->max_quantity)); $i++) @for ($i = 1; $i <= ($subscription->use_inventory_management ? min($product->in_stock_quantity, min(100,$product->max_quantity)) : min(100,$product->max_quantity)); $i++)
<option value="{{$i}}">{{$i}}</option> <option value="{{$i}}">{{$i}}</option>
@ -250,7 +250,7 @@
@endforeach @endforeach
@if(!empty($subscription->promo_code) && !$subscription->trial_enabled) @if(!empty($subscription->promo_code) && !$subscription->trial_enabled)
<form wire:submit.prevent="handleCoupon" class=""> <form wire:submit="handleCoupon" class="">
@csrf @csrf
<div class="mt-4"> <div class="mt-4">
<label for="coupon" class="block text-sm font-medium text-white">{{ ctrans('texts.promo_code') }}</label> <label for="coupon" class="block text-sm font-medium text-white">{{ ctrans('texts.promo_code') }}</label>
@ -258,7 +258,7 @@
<div class="relative flex flex-grow items-stretch focus-within:z-10"> <div class="relative flex flex-grow items-stretch focus-within:z-10">
<div class="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"> <div class="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3">
</div> </div>
<input type="text" wire:model.defer="coupon" class="block w-full rounded-none rounded-l-md border-gray-300 pl-2 focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm text-gray-700" placeholder=""> <input type="text" wire:model="coupon" class="block w-full rounded-none rounded-l-md border-gray-300 pl-2 focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm text-gray-700" placeholder="">
</div> </div>
<button class="relative -ml-px inline-flex items-center space-x-2 rounded-r-md border border-gray-300 bg-gray-50 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-100 focus:border-indigo-500 focus:outline-none focus:ring-1 focus:ring-indigo-500"> <button class="relative -ml-px inline-flex items-center space-x-2 rounded-r-md border border-gray-300 bg-gray-50 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-100 focus:border-indigo-500 focus:outline-none focus:ring-1 focus:ring-indigo-500">
@ -305,7 +305,7 @@
<span>{{ $total }}</span> <span>{{ $total }}</span>
</div> </div>
<div class="mx-auto text-center mt-20 content-center" x-data="{open: @entangle('payment_started'), toggle: @entangle('payment_confirmed'), buttonDisabled: false}" x-show.important="open" x-transition> <div class="mx-auto text-center mt-20 content-center" x-data="{open: @entangle('payment_started').live, toggle: @entangle('payment_confirmed').live, buttonDisabled: false}" x-show.important="open" x-transition>
<h2 class="text-2xl font-bold tracking-wide border-b-2 pb-4">{{ $heading_text ?? ctrans('texts.checkout') }}</h2> <h2 class="text-2xl font-bold tracking-wide border-b-2 pb-4">{{ $heading_text ?? ctrans('texts.checkout') }}</h2>
@if (session()->has('message')) @if (session()->has('message'))
@component('portal.ninja2020.components.message') @component('portal.ninja2020.components.message')
@ -313,7 +313,7 @@
@endcomponent @endcomponent
@endif @endif
@if($subscription->trial_enabled) @if($subscription->trial_enabled)
<form wire:submit.prevent="handleTrial" class="mt-8"> <form wire:submit="handleTrial" class="mt-8">
@csrf @csrf
<button class="relative -ml-px inline-flex items-center space-x-2 rounded border border-gray-300 bg-gray-50 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-100 focus:border-indigo-500 focus:outline-none focus:ring-1 focus:ring-indigo-500"> <button class="relative -ml-px inline-flex items-center space-x-2 rounded border border-gray-300 bg-gray-50 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-100 focus:border-indigo-500 focus:outline-none focus:ring-1 focus:ring-indigo-500">
{{ ctrans('texts.trial_call_to_action') }} {{ ctrans('texts.trial_call_to_action') }}
@ -331,7 +331,7 @@
@endforeach @endforeach
</div> </div>
@elseif(intval($float_amount_total) == 0) @elseif(intval($float_amount_total) == 0)
<form wire:submit.prevent="handlePaymentNotRequired" class="mt-8"> <form wire:submit="handlePaymentNotRequired" class="mt-8">
@csrf @csrf
<button class="relative -ml-px inline-flex items-center space-x-2 rounded border border-gray-300 bg-gray-50 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-100 focus:border-indigo-500 focus:outline-none focus:ring-1 focus:ring-indigo-500"> <button class="relative -ml-px inline-flex items-center space-x-2 rounded border border-gray-300 bg-gray-50 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-100 focus:border-indigo-500 focus:outline-none focus:ring-1 focus:ring-indigo-500">
{{ ctrans('texts.click_to_continue') }} {{ ctrans('texts.click_to_continue') }}
@ -358,7 +358,7 @@
</div> </div>
@if(!$email || $errors->has('email')) @if(!$email || $errors->has('email'))
<form wire:submit.prevent="handleEmail" class=""> <form wire:submit="handleEmail" class="">
@csrf @csrf
<div class="mt-4"> <div class="mt-4">
<label for="email" class="block text-sm font-medium text-white">{{ ctrans('texts.email') }}</label> <label for="email" class="block text-sm font-medium text-white">{{ ctrans('texts.email') }}</label>
@ -366,7 +366,7 @@
<div class="relative flex flex-grow items-stretch focus-within:z-10"> <div class="relative flex flex-grow items-stretch focus-within:z-10">
<div class="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"> <div class="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3">
</div> </div>
<input type="text" wire:model.defer="email" class="block w-full rounded-none rounded-l-md border-gray-300 pl-2 focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm text-gray-700" placeholder=""> <input type="text" wire:model="email" class="block w-full rounded-none rounded-l-md border-gray-300 pl-2 focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm text-gray-700" placeholder="">
</div> </div>
<button class="relative -ml-px inline-flex items-center space-x-2 rounded-r-md border border-gray-300 bg-gray-50 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-100 focus:border-indigo-500 focus:outline-none focus:ring-1 focus:ring-indigo-500"> <button class="relative -ml-px inline-flex items-center space-x-2 rounded-r-md border border-gray-300 bg-gray-50 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-100 focus:border-indigo-500 focus:outline-none focus:ring-1 focus:ring-indigo-500">
@ -388,7 +388,7 @@
<p class="w-full p-2">{{ ctrans('texts.otp_code_message', ['email' => $email])}}</p> <p class="w-full p-2">{{ ctrans('texts.otp_code_message', ['email' => $email])}}</p>
</div> </div>
<div class="pb-6 px-6 w-80 mx-auto text-center"> <div class="pb-6 px-6 w-80 mx-auto text-center">
<form wire:submit.prevent="handleLogin" class="" x-data="otpForm()"> <form wire:submit="handleLogin" class="" x-data="otpForm()">
<p class="mb-4"></p> <p class="mb-4"></p>
<div class="flex justify-between"> <div class="flex justify-between">
<template x-for="(input, index) in length" :key="index"> <template x-for="(input, index) in length" :key="index">

View File

@ -2,7 +2,7 @@
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
<span class="mr-2 text-sm hidden md:block">{{ ctrans('texts.per_page') }}</span> <span class="mr-2 text-sm hidden md:block">{{ ctrans('texts.per_page') }}</span>
<select wire:model="per_page" class="form-select py-1 text-sm"> <select wire:model.live="per_page" class="form-select py-1 text-sm">
<option>5</option> <option>5</option>
<option selected>10</option> <option selected>10</option>
<option>15</option> <option>15</option>

View File

@ -52,7 +52,7 @@
<div class="flex items-center justify-between mt-6"> <div class="flex items-center justify-between mt-6">
<div class="flex items-center"> <div class="flex items-center">
<span class="mr-2 text-sm hidden md:block">{{ ctrans('texts.per_page') }}</span> <span class="mr-2 text-sm hidden md:block">{{ ctrans('texts.per_page') }}</span>
<select wire:model="per_page" class="form-select py-1 text-sm"> <select wire:model.live="per_page" class="form-select py-1 text-sm">
<option>5</option> <option>5</option>
<option selected>10</option> <option selected>10</option>
<option>15</option> <option>15</option>

View File

@ -2,7 +2,7 @@
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
<span class="hidden mr-2 text-sm md:block">{{ ctrans('texts.per_page') }}</span> <span class="hidden mr-2 text-sm md:block">{{ ctrans('texts.per_page') }}</span>
<select wire:model="per_page" class="py-1 text-sm form-select"> <select wire:model.live="per_page" class="py-1 text-sm form-select">
<option>5</option> <option>5</option>
<option selected>10</option> <option selected>10</option>
<option>15</option> <option>15</option>
@ -11,15 +11,15 @@
</div> </div>
<div class="flex items-center"> <div class="flex items-center">
<div class="mr-3"> <div class="mr-3">
<input wire:model="status" value="paid" type="checkbox" class="cursor-pointer form-checkbox" id="paid-checkbox"> <input wire:model.live="status" value="paid" type="checkbox" class="cursor-pointer form-checkbox" id="paid-checkbox">
<label for="paid-checkbox" class="text-sm cursor-pointer">{{ ctrans('texts.status_paid') }}</label> <label for="paid-checkbox" class="text-sm cursor-pointer">{{ ctrans('texts.status_paid') }}</label>
</div> </div>
<div class="mr-3"> <div class="mr-3">
<input wire:model="status" value="unpaid" type="checkbox" class="cursor-pointer form-checkbox" id="unpaid-checkbox"> <input wire:model.live="status" value="unpaid" type="checkbox" class="cursor-pointer form-checkbox" id="unpaid-checkbox">
<label for="unpaid-checkbox" class="text-sm cursor-pointer">{{ ctrans('texts.status_unpaid') }}</label> <label for="unpaid-checkbox" class="text-sm cursor-pointer">{{ ctrans('texts.status_unpaid') }}</label>
</div> </div>
<div class="mr-3"> <div class="mr-3">
<input wire:model="status" value="overdue" type="checkbox" class="cursor-pointer form-checkbox" id="overdue-checkbox"> <input wire:model.live="status" value="overdue" type="checkbox" class="cursor-pointer form-checkbox" id="overdue-checkbox">
<label for="overdue-checkbox" class="text-sm cursor-pointer">{{ ctrans('texts.past_due') }}</label> <label for="overdue-checkbox" class="text-sm cursor-pointer">{{ ctrans('texts.past_due') }}</label>
</div> </div>
</div> </div>

View File

@ -1,6 +1,6 @@
<div> <div>
@unless(count($methods) == 0) @unless(count($methods) == 0)
<div x-data="{ open: false }" @keydown.window.escape="open = false" @click.away="open = false" <div x-data="{ open: false }" @keydown.window.escape="open = false" @click.outside="open = false"
class="relative inline-block text-left" dusk="payment-methods-dropdown"> class="relative inline-block text-left" dusk="payment-methods-dropdown">
<div> <div>
<div class="rounded-md shadow-sm"> <div class="rounded-md shadow-sm">

View File

@ -2,7 +2,7 @@
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
<span class="mr-2 text-sm hidden md:block">{{ ctrans('texts.per_page') }}</span> <span class="mr-2 text-sm hidden md:block">{{ ctrans('texts.per_page') }}</span>
<select wire:model="per_page" class="form-select py-1 text-sm"> <select wire:model.live="per_page" class="form-select py-1 text-sm">
<option>5</option> <option>5</option>
<option selected>10</option> <option selected>10</option>
<option>15</option> <option>15</option>

View File

@ -2,7 +2,7 @@
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
<span class="mr-2 text-sm hidden md:block">{{ ctrans('texts.per_page') }}</span> <span class="mr-2 text-sm hidden md:block">{{ ctrans('texts.per_page') }}</span>
<select wire:model="per_page" class="form-select py-1 text-sm"> <select wire:model.live="per_page" class="form-select py-1 text-sm">
<option>5</option> <option>5</option>
<option selected>10</option> <option selected>10</option>
<option>15</option> <option>15</option>

View File

@ -2,7 +2,7 @@
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
<span class="hidden mr-2 text-sm md:block">{{ ctrans('texts.per_page') }}</span> <span class="hidden mr-2 text-sm md:block">{{ ctrans('texts.per_page') }}</span>
<select wire:model="per_page" class="py-1 text-sm form-select"> <select wire:model.live="per_page" class="py-1 text-sm form-select">
<option>5</option> <option>5</option>
<option selected>10</option> <option selected>10</option>
<option>15</option> <option>15</option>
@ -11,11 +11,11 @@
</div> </div>
<div class="flex items-center"> <div class="flex items-center">
<div class="mr-3"> <div class="mr-3">
<input wire:model="status" value="sent" type="checkbox" class="cursor-pointer form-checkbox" id="paid-checkbox"> <input wire:model.live="status" value="sent" type="checkbox" class="cursor-pointer form-checkbox" id="paid-checkbox">
<label for="paid-checkbox" class="text-sm cursor-pointer">{{ ctrans('texts.status_sent') }}</label> <label for="paid-checkbox" class="text-sm cursor-pointer">{{ ctrans('texts.status_sent') }}</label>
</div> </div>
<div class="mr-3"> <div class="mr-3">
<input wire:model="status" value="accepted" type="checkbox" class="cursor-pointer form-checkbox" id="unpaid-checkbox"> <input wire:model.live="status" value="accepted" type="checkbox" class="cursor-pointer form-checkbox" id="unpaid-checkbox">
<label for="unpaid-checkbox" class="text-sm cursor-pointer">{{ ctrans('texts.accepted') }}</label> <label for="unpaid-checkbox" class="text-sm cursor-pointer">{{ ctrans('texts.accepted') }}</label>
</div> </div>
</div> </div>

View File

@ -2,7 +2,7 @@
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
<span class="hidden mr-2 text-sm md:block">{{ ctrans('texts.per_page') }}</span> <span class="hidden mr-2 text-sm md:block">{{ ctrans('texts.per_page') }}</span>
<select wire:model="per_page" class="py-1 text-sm form-select"> <select wire:model.live="per_page" class="py-1 text-sm form-select">
<option>5</option> <option>5</option>
<option selected>10</option> <option selected>10</option>
<option>15</option> <option>15</option>
@ -11,15 +11,15 @@
</div> </div>
<div class="flex items-center"> <div class="flex items-center">
<div class="mr-3"> <div class="mr-3">
<input wire:model="status" value="{{ App\Models\Quote::STATUS_SENT }}" value="sent" type="checkbox" class="cursor-pointer form-checkbox" id="sent-checkbox"> <input wire:model.live="status" value="{{ App\Models\Quote::STATUS_SENT }}" value="sent" type="checkbox" class="cursor-pointer form-checkbox" id="sent-checkbox">
<label for="sent-checkbox" class="text-sm cursor-pointer">{{ ctrans('texts.status_pending') }}</label> <label for="sent-checkbox" class="text-sm cursor-pointer">{{ ctrans('texts.status_pending') }}</label>
</div> </div>
<div class="mr-3"> <div class="mr-3">
<input wire:model="status" value="{{ App\Models\Quote::STATUS_APPROVED }}" value="approved" type="checkbox" class="cursor-pointer form-checkbox" id="approved-checkbox"> <input wire:model.live="status" value="{{ App\Models\Quote::STATUS_APPROVED }}" value="approved" type="checkbox" class="cursor-pointer form-checkbox" id="approved-checkbox">
<label for="approved-checkbox" class="text-sm cursor-pointer">{{ ctrans('texts.approved') }}</label> <label for="approved-checkbox" class="text-sm cursor-pointer">{{ ctrans('texts.approved') }}</label>
</div> </div>
<div class="mr-3"> <div class="mr-3">
<input wire:model="status" value="{{ App\Models\Quote::STATUS_EXPIRED }}" value="expired" type="checkbox" class="cursor-pointer form-checkbox" id="expired-checkbox"> <input wire:model.live="status" value="{{ App\Models\Quote::STATUS_EXPIRED }}" value="expired" type="checkbox" class="cursor-pointer form-checkbox" id="expired-checkbox">
<label for="expired-checkbox" class="text-sm cursor-pointer">{{ ctrans('texts.expired') }}</label> <label for="expired-checkbox" class="text-sm cursor-pointer">{{ ctrans('texts.expired') }}</label>
</div> </div>
</div> </div>

View File

@ -2,7 +2,7 @@
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
<span class="mr-2 text-sm hidden md:block">{{ ctrans('texts.per_page') }}</span> <span class="mr-2 text-sm hidden md:block">{{ ctrans('texts.per_page') }}</span>
<select wire:model="per_page" class="form-select py-1 text-sm"> <select wire:model.live="per_page" class="form-select py-1 text-sm">
<option>5</option> <option>5</option>
<option selected>10</option> <option selected>10</option>
<option>15</option> <option>15</option>

View File

@ -10,12 +10,12 @@
</p> </p>
</div> </div>
<form id="required-client-info-form" wire:submit.prevent="handleSubmit(Object.fromEntries(new FormData(document.getElementById('required-client-info-form'))))"> <form id="required-client-info-form" wire:submit="handleSubmit(Object.fromEntries(new FormData(document.getElementById('required-client-info-form'))))">
@foreach($fields as $field) @foreach($fields as $field)
@if(!array_key_exists('filled', $field)) @if(!array_key_exists('filled', $field))
@component('portal.ninja2020.components.general.card-element', ['title' => $field['label']]) @component('portal.ninja2020.components.general.card-element', ['title' => $field['label']])
@if($field['name'] == 'client_country_id' || $field['name'] == 'client_shipping_country_id') @if($field['name'] == 'client_country_id' || $field['name'] == 'client_shipping_country_id')
<select id="client_country" class="input w-full form-select bg-white" name="{{ $field['name'] }}" wire:model.defer="{{ str_replace(["client_","_line_","contact_"], ["client.","","contact."], $field['name']) }}"> <select id="client_country" class="input w-full form-select bg-white" name="{{ $field['name'] }}" wire:model="{{ str_replace(["client_","_line_","contact_"], ["client.","","contact."], $field['name']) }}">
<option value="none"></option> <option value="none"></option>
@foreach($countries as $country) @foreach($countries as $country)
@ -25,7 +25,7 @@
@endforeach @endforeach
</select> </select>
@else @else
<input class="input w-full" type="{{ $field['type'] ?? 'text' }}" name="{{ $field['name'] }}" wire:model.defer="{{ str_replace(["client_","_line_","contact_"], ["client.","","contact."], $field['name']) }}"> <input class="input w-full" type="{{ $field['type'] ?? 'text' }}" name="{{ $field['name'] }}" wire:model="{{ str_replace(["client_","_line_","contact_"], ["client.","","contact."], $field['name']) }}">
@endif @endif
@if(session()->has('validation_errors') && array_key_exists($field['name'], session('validation_errors'))) @if(session()->has('validation_errors') && array_key_exists($field['name'], session('validation_errors')))

View File

@ -2,7 +2,7 @@
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
<span class="mr-2 text-sm hidden md:block">{{ ctrans('texts.per_page') }}</span> <span class="mr-2 text-sm hidden md:block">{{ ctrans('texts.per_page') }}</span>
<select wire:model="per_page" class="form-select py-1 text-sm"> <select wire:model.live="per_page" class="form-select py-1 text-sm">
<option>5</option> <option>5</option>
<option selected>10</option> <option selected>10</option>
<option>15</option> <option>15</option>

View File

@ -2,7 +2,7 @@
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
<span class="mr-2 text-sm hidden md:block">{{ ctrans('texts.per_page') }}</span> <span class="mr-2 text-sm hidden md:block">{{ ctrans('texts.per_page') }}</span>
<select wire:model="per_page" class="form-select py-1 text-sm"> <select wire:model.live="per_page" class="form-select py-1 text-sm">
<option>5</option> <option>5</option>
<option selected>10</option> <option selected>10</option>
<option>15</option> <option>15</option>

View File

@ -2,7 +2,7 @@
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
<span class="mr-2 text-sm hidden md:block">{{ ctrans('texts.per_page') }}</span> <span class="mr-2 text-sm hidden md:block">{{ ctrans('texts.per_page') }}</span>
<select wire:model="per_page" class="form-select py-1 text-sm"> <select wire:model.live="per_page" class="form-select py-1 text-sm">
<option>5</option> <option>5</option>
<option selected>10</option> <option selected>10</option>
<option>15</option> <option>15</option>

View File

@ -14,7 +14,7 @@
</div> </div>
</div> </div>
<div class="mt-5 sm:mt-0 sm:ml-6 sm:flex-shrink-0 sm:flex sm:items-center"> <div class="mt-5 sm:mt-0 sm:ml-6 sm:flex-shrink-0 sm:flex sm:items-center">
<form wire:submit.prevent="makeDefault"> <form wire:submit="makeDefault">
<button class="button button-primary bg-primary" {{ $token->is_default ? 'disabled' : '' }}> <button class="button button-primary bg-primary" {{ $token->is_default ? 'disabled' : '' }}>
{{ ctrans('texts.save_as_default') }} {{ ctrans('texts.save_as_default') }}
</button> </button>

View File

@ -1,6 +1,6 @@
<div class="flex flex-col justify-center items-center my-10"> <div class="flex flex-col justify-center items-center my-10">
<form wire:submit.prevent="submit"> <form wire:submit="submit">
@csrf @csrf
@method('POST') @method('POST')
<div class="shadow overflow-hidden rounded"> <div class="shadow overflow-hidden rounded">
@ -8,7 +8,7 @@
<div class="grid grid-cols-6 gap-6 max-w-4xl"> <div class="grid grid-cols-6 gap-6 max-w-4xl">
<div class="col-span-6 sm:col-span-3"> <div class="col-span-6 sm:col-span-3">
<label for="first_name" class="input-label">@lang('texts.first_name')</label> <label for="first_name" class="input-label">@lang('texts.first_name')</label>
<input id="first_name" class="input w-full" name="first_name" wire:model.defer="first_name"/> <input id="first_name" class="input w-full" name="first_name" wire:model="first_name"/>
@error('first_name') @error('first_name')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -18,7 +18,7 @@
<div class="col-span-6 sm:col-span-3"> <div class="col-span-6 sm:col-span-3">
<label for="last_name" class="input-label">@lang('texts.last_name')</label> <label for="last_name" class="input-label">@lang('texts.last_name')</label>
<input id="last_name" class="input w-full" name="last_name" wire:model.defer="last_name"/> <input id="last_name" class="input w-full" name="last_name" wire:model="last_name"/>
@error('last_name') @error('last_name')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -29,7 +29,7 @@
<div class="col-span-6 sm:col-span-4"> <div class="col-span-6 sm:col-span-4">
<label for="email_address" class="input-label">@lang('texts.email_address')</label> <label for="email_address" class="input-label">@lang('texts.email_address')</label>
<input id="email_address" class="input w-full" type="email" name="email" <input id="email_address" class="input w-full" type="email" name="email"
wire:model.defer="email" disabled="true"/> wire:model="email" disabled="true"/>
@error('email') @error('email')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -40,7 +40,7 @@
<div class="col-span-6 sm:col-span-4"> <div class="col-span-6 sm:col-span-4">
<label for="company_name" class="input-label">@lang('texts.company_name')</label> <label for="company_name" class="input-label">@lang('texts.company_name')</label>
<input id="company_name" class="input w-full" name="company_name" <input id="company_name" class="input w-full" name="company_name"
wire:model.defer="company_name"/> wire:model="company_name"/>
@error('company_name') @error('company_name')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -53,19 +53,19 @@
<div class="radio mr-4"> <div class="radio mr-4">
<input class="form-radio cursor-pointer" type="radio" value="US" name="country" checked <input class="form-radio cursor-pointer" type="radio" value="US" name="country" checked
wire:model.defer="country"> wire:model="country">
<span>{{ ctrans('texts.country_United States') }}</span> <span>{{ ctrans('texts.country_United States') }}</span>
</div> </div>
<div class="radio mr-4"> <div class="radio mr-4">
<input class="form-radio cursor-pointer" type="radio" value="CA" name="country" <input class="form-radio cursor-pointer" type="radio" value="CA" name="country"
wire:model.defer="country"> wire:model="country">
<span>{{ ctrans('texts.country_Canada') }}</span> <span>{{ ctrans('texts.country_Canada') }}</span>
</div> </div>
<div class="radio mr-4"> <div class="radio mr-4">
<input class="form-radio cursor-pointer" type="radio" value="GB" name="country" <input class="form-radio cursor-pointer" type="radio" value="GB" name="country"
wire:model.defer="country"> wire:model="country">
<span>{{ ctrans('texts.country_United Kingdom') }}</span> <span>{{ ctrans('texts.country_United Kingdom') }}</span>
</div> </div>
@ -76,7 +76,7 @@
<label for="country" class="input-label">@lang('texts.debit_cards')</label> <label for="country" class="input-label">@lang('texts.debit_cards')</label>
<div class="checkbox"> <div class="checkbox">
<input class="form-checkbox cursor-pointer mr-2" type="checkbox" name="debit_cards" value="1" wire:model.defer="debit_cards"> <input class="form-checkbox cursor-pointer mr-2" type="checkbox" name="debit_cards" value="1" wire:model="debit_cards">
<span>{{ ctrans('texts.accept_debit_cards') }}</span> <span>{{ ctrans('texts.accept_debit_cards') }}</span>
</div> </div>
</div> </div>
@ -87,7 +87,7 @@
<div class="col-span-6 sm:col-span-4 {{ $country != 'US' ? 'hidden' : 'block' }}"> <div class="col-span-6 sm:col-span-4 {{ $country != 'US' ? 'hidden' : 'block' }}">
<label for="country" class="input-label">@lang('texts.ach')</label> <label for="country" class="input-label">@lang('texts.ach')</label>
<div class="checkbox"> <div class="checkbox">
<input class="form-checkbox cursor-pointer mr-2" type="checkbox" name="ach" value="1" wire:model="ach"> <input class="form-checkbox cursor-pointer mr-2" type="checkbox" name="ach" value="1" wire:model.live="ach">
<span>{{ ctrans('texts.enable_ach')}}</span> <span>{{ ctrans('texts.enable_ach')}}</span>
</div> </div>
</div> </div>
@ -96,7 +96,7 @@
<div class="col-span-6 sm:col-span-4"> <div class="col-span-6 sm:col-span-4">
<label for="country" class="input-label"></label> <label for="country" class="input-label"></label>
<div class="checkbox"> <div class="checkbox">
<input class="form-checkbox cursor-pointer mr-2" type="checkbox" name="wepay_payment_tos_agree" value="1" wire:model.defer="wepay_payment_tos_agree"> <input class="form-checkbox cursor-pointer mr-2" type="checkbox" name="wepay_payment_tos_agree" value="1" wire:model="wepay_payment_tos_agree">
<span>{!! ctrans('texts.wepay_payment_tos_agree', ['terms' => $terms, 'privacy_policy' => $privacy_policy]) !!}</span> <span>{!! ctrans('texts.wepay_payment_tos_agree', ['terms' => $terms, 'privacy_policy' => $privacy_policy]) !!}</span>
</div> </div>
@error('wepay_payment_tos_agree') @error('wepay_payment_tos_agree')

View File

@ -1,4 +1,4 @@
<div style="display: none;" id="displaySignatureModal" class="fixed bottom-0 inset-x-0 px-4 pb-4 sm:inset-0 sm:flex sm:items-center sm:justify-center" x-data> <div x-data="{ open: false }" style="display: none;" id="displaySignatureModal" class="fixed bottom-0 inset-x-0 px-4 pb-4 sm:inset-0 sm:flex sm:items-center sm:justify-center" x-data="{ open: false }">
<div x-show="open" x-transition:enter="ease-out duration-300" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" class="fixed inset-0 transition-opacity"> <div x-show="open" x-transition:enter="ease-out duration-300" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" class="fixed inset-0 transition-opacity">
<div class="absolute inset-0 bg-gray-500 opacity-75"></div> <div class="absolute inset-0 bg-gray-500 opacity-75"></div>
</div> </div>

View File

@ -1,4 +1,4 @@
<div style="display: none;" id="displayTermsModal" class="fixed bottom-0 inset-x-0 px-4 pb-4 sm:inset-0 sm:flex sm:items-center sm:justify-center" x-data> <div x-data="{ open: false }" style="display: none;" id="displayTermsModal" class="fixed bottom-0 inset-x-0 px-4 pb-4 sm:inset-0 sm:flex sm:items-center sm:justify-center" x-data>
<div x-show="open" x-transition:enter="ease-out duration-300" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" class="fixed inset-0 transition-opacity"> <div x-show="open" x-transition:enter="ease-out duration-300" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" class="fixed inset-0 transition-opacity">
<div class="absolute inset-0 bg-gray-500 opacity-75"></div> <div class="absolute inset-0 bg-gray-500 opacity-75"></div>
</div> </div>

View File

@ -65,7 +65,7 @@
<!-- Scripts --> <!-- Scripts -->
@vite('resources/js/app.js') @vite('resources/js/app.js')
<script src="{{ asset('vendor/alpinejs@2.8.2/alpine.js') }}" defer></script> {{-- <script src="{{ asset('vendor/alpinejs@2.8.2/alpine.js') }}" defer></script> --}}
<!-- Fonts --> <!-- Fonts -->
<style> <style>

View File

@ -7,7 +7,7 @@
</div> <!-- End of left-side --> </div> <!-- End of left-side -->
<div class="mt-5 md:mt-0 md:col-span-2"> <div class="mt-5 md:mt-0 md:col-span-2">
<form wire:submit.prevent="submit" id="update_client"> <form wire:submit="submit" id="update_client">
@csrf @csrf
@method('PUT') @method('PUT')
<div class="shadow overflow-hidden rounded"> <div class="shadow overflow-hidden rounded">
@ -17,7 +17,7 @@
<label for="first_name" class="input-label">@lang('texts.first_name')</label> <label for="first_name" class="input-label">@lang('texts.first_name')</label>
<input id="contact_first_name" <input id="contact_first_name"
class="input w-full {{ in_array('contact_first_name', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}" class="input w-full {{ in_array('contact_first_name', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}"
name="first_name" wire:model.defer="first_name"/> name="first_name" wire:model="first_name"/>
@error('first_name') @error('first_name')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -29,7 +29,7 @@
<label for="last_name" class="input-label">@lang('texts.last_name')</label> <label for="last_name" class="input-label">@lang('texts.last_name')</label>
<input id="contact_last_name" <input id="contact_last_name"
class="input w-full {{ in_array('contact_last_name', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}" class="input w-full {{ in_array('contact_last_name', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}"
name="last_name" wire:model.defer="last_name"/> name="last_name" wire:model="last_name"/>
@error('last_name') @error('last_name')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -41,7 +41,7 @@
<label for="email_address" class="input-label">@lang('texts.email_address')</label> <label for="email_address" class="input-label">@lang('texts.email_address')</label>
<input id="contact_email_address" <input id="contact_email_address"
class="input w-full {{ in_array('contact_email', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}" class="input w-full {{ in_array('contact_email', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}"
type="email" name="email" wire:model.defer="email"/> type="email" name="email" wire:model="email"/>
@error('email') @error('email')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -52,7 +52,7 @@
<div class="col-span-6 sm:col-span-4"> <div class="col-span-6 sm:col-span-4">
<label for="contact_phone" class="input-label">@lang('texts.phone')</label> <label for="contact_phone" class="input-label">@lang('texts.phone')</label>
<input id="contact_phone" class="input w-full" name="phone" <input id="contact_phone" class="input w-full" name="phone"
wire:model.defer="phone"/> wire:model="phone"/>
@error('phone') @error('phone')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -63,7 +63,7 @@
<div class="col-span-6 sm:col-span-6 lg:col-span-3"> <div class="col-span-6 sm:col-span-6 lg:col-span-3">
<label for="contact_password" class="input-label">@lang('texts.password')</label> <label for="contact_password" class="input-label">@lang('texts.password')</label>
<input id="contact_password" class="input w-full" name="password" <input id="contact_password" class="input w-full" name="password"
wire:model.defer="password" type="password"/> wire:model="password" type="password"/>
@error('password') @error('password')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -76,7 +76,7 @@
class="input-label">@lang('texts.confirm_password')</label> class="input-label">@lang('texts.confirm_password')</label>
<input id="contact_password_confirmation" class="input w-full" <input id="contact_password_confirmation" class="input w-full"
name="password_confirmation" name="password_confirmation"
wire:model.defer="password_confirmation" type="password"/> wire:model="password_confirmation" type="password"/>
@error('password_confirmation') @error('password_confirmation')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}

View File

@ -7,14 +7,14 @@
</div> <!-- End of left side --> </div> <!-- End of left side -->
<div class="mt-5 md:mt-0 md:col-span-2"> <div class="mt-5 md:mt-0 md:col-span-2">
<form wire:submit.prevent="submit" method="POST" id="update_contact"> <form wire:submit="submit" method="POST" id="update_contact">
@csrf @csrf
<div class="shadow overflow-hidden rounded"> <div class="shadow overflow-hidden rounded">
<div class="px-4 py-5 bg-white sm:p-6"> <div class="px-4 py-5 bg-white sm:p-6">
<div class="grid grid-cols-6 gap-6"> <div class="grid grid-cols-6 gap-6">
<div class="col-span-6 sm:col-span-3"> <div class="col-span-6 sm:col-span-3">
<label for="client_name" class="input-label">{{ ctrans('texts.name') }}</label> <label for="client_name" class="input-label">{{ ctrans('texts.name') }}</label>
<input id="client_name" class="input w-full" name="name" wire:model.defer="name"/> <input id="client_name" class="input w-full" name="name" wire:model="name"/>
@error('name') @error('name')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -26,7 +26,7 @@
<label for="client_vat_number" <label for="client_vat_number"
class="input-label">{{ ctrans('texts.vat_number') }}</label> class="input-label">{{ ctrans('texts.vat_number') }}</label>
<input id="client_vat_number" class="input w-full" name="vat_number" <input id="client_vat_number" class="input w-full" name="vat_number"
wire:model.defer="vat_number"/> wire:model="vat_number"/>
@error('vat_number') @error('vat_number')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -36,7 +36,7 @@
<div class="col-span-6 sm:col-span-3"> <div class="col-span-6 sm:col-span-3">
<label for="client_phone" class="input-label">{{ ctrans('texts.phone') }}</label> <label for="client_phone" class="input-label">{{ ctrans('texts.phone') }}</label>
<input id="client_phone" class="input w-full" name="phone" wire:model.defer="phone"/> <input id="client_phone" class="input w-full" name="phone" wire:model="phone"/>
@error('phone') @error('phone')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -51,7 +51,7 @@
<span class="text-xs ml-2 text-gray-600">E.g. https://example.com</span> <span class="text-xs ml-2 text-gray-600">E.g. https://example.com</span>
</div> </div>
<input id="client_website" class="input w-full" name="website" <input id="client_website" class="input w-full" name="website"
wire:model.defer="website"/> wire:model="website"/>
@error('website') @error('website')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}

View File

@ -6,13 +6,13 @@
</div> </div>
</div> </div>
<div class="mt-5 md:mt-0 md:col-span-2"> <div class="mt-5 md:mt-0 md:col-span-2">
<form wire:submit.prevent="submit" method="POST" id="update_billing_address"> <form wire:submit="submit" method="POST" id="update_billing_address">
@csrf @csrf
<div class="px-4 py-5 bg-white sm:p-6"> <div class="px-4 py-5 bg-white sm:p-6">
<div class="grid grid-cols-6 gap-6"> <div class="grid grid-cols-6 gap-6">
<div class="col-span-6 sm:col-span-4"> <div class="col-span-6 sm:col-span-4">
<label for="address1" class="input-label">{{ ctrans('texts.address1') }}</label> <label for="address1" class="input-label">{{ ctrans('texts.address1') }}</label>
<input id="address1" class="input w-full {{ in_array('billing_address1', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}" name="address1" wire:model.defer="address1" /> <input id="address1" class="input w-full {{ in_array('billing_address1', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}" name="address1" wire:model="address1" />
@error('address1') @error('address1')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -21,7 +21,7 @@
</div> </div>
<div class="col-span-6 sm:col-span-3"> <div class="col-span-6 sm:col-span-3">
<label for="address2" class="input-label">{{ ctrans('texts.address2') }}</label> <label for="address2" class="input-label">{{ ctrans('texts.address2') }}</label>
<input id="address2" class="input w-full {{ in_array('billing_address2', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}" name="address2" wire:model.defer="address2" /> <input id="address2" class="input w-full {{ in_array('billing_address2', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}" name="address2" wire:model="address2" />
@error('address2') @error('address2')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -30,7 +30,7 @@
</div> </div>
<div class="col-span-6 sm:col-span-3"> <div class="col-span-6 sm:col-span-3">
<label for="city" class="input-label">{{ ctrans('texts.city') }}</label> <label for="city" class="input-label">{{ ctrans('texts.city') }}</label>
<input id="city" class="input w-full {{ in_array('billing_city', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}" name="city" wire:model.defer="city" /> <input id="city" class="input w-full {{ in_array('billing_city', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}" name="city" wire:model="city" />
@error('city') @error('city')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -39,7 +39,7 @@
</div> </div>
<div class="col-span-6 sm:col-span-2"> <div class="col-span-6 sm:col-span-2">
<label for="state" class="input-label">{{ ctrans('texts.state') }}</label> <label for="state" class="input-label">{{ ctrans('texts.state') }}</label>
<input id="state" class="input w-full {{ in_array('billing_state', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}" name="state" wire:model.defer="state" /> <input id="state" class="input w-full {{ in_array('billing_state', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}" name="state" wire:model="state" />
@error('state') @error('state')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -48,7 +48,7 @@
</div> </div>
<div class="col-span-6 sm:col-span-2"> <div class="col-span-6 sm:col-span-2">
<label for="postal_code" class="input-label">{{ ctrans('texts.postal_code') }}</label> <label for="postal_code" class="input-label">{{ ctrans('texts.postal_code') }}</label>
<input id="postal_code" class="input w-full {{ in_array('billing_postal_code', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}" name="postal_code" wire:model.defer="postal_code" /> <input id="postal_code" class="input w-full {{ in_array('billing_postal_code', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}" name="postal_code" wire:model="postal_code" />
@error('postal_code') @error('postal_code')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -57,7 +57,7 @@
</div> </div>
<div class="col-span-6 sm:col-span-2"> <div class="col-span-6 sm:col-span-2">
<label for="country" class="input-label">@lang('texts.country')</label> <label for="country" class="input-label">@lang('texts.country')</label>
<select id="country" class="input w-full form-select bg-white {{ in_array('billing_country', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}" wire:model.defer="country_id"> <select id="country" class="input w-full form-select bg-white {{ in_array('billing_country', (array) session('missing_required_fields')) ? 'border border-red-400' : '' }}" wire:model="country_id">
<option value="none"></option> <option value="none"></option>
@foreach($countries as $country) @foreach($countries as $country)
<option value="{{ $country->id }}"> <option value="{{ $country->id }}">

View File

@ -6,14 +6,14 @@
</div> </div>
</div> </div>
<div class="mt-5 md:mt-0 md:col-span-2"> <div class="mt-5 md:mt-0 md:col-span-2">
<form wire:submit.prevent="submit" method="POST" id="update_shipping_address"> <form wire:submit="submit" method="POST" id="update_shipping_address">
@csrf @csrf
<div class="shadow overflow-hidden rounded"> <div class="shadow overflow-hidden rounded">
<div class="px-4 py-5 bg-white sm:p-6"> <div class="px-4 py-5 bg-white sm:p-6">
<div class="grid grid-cols-6 gap-6"> <div class="grid grid-cols-6 gap-6">
<div class="col-span-6 sm:col-span-4"> <div class="col-span-6 sm:col-span-4">
<label for="shipping_address1" class="input-label">{{ ctrans('texts.shipping_address1') }}</label> <label for="shipping_address1" class="input-label">{{ ctrans('texts.shipping_address1') }}</label>
<input id="shipping_address1" class="input w-full" name="shipping_address1" wire:model.defer="shipping_address1" /> <input id="shipping_address1" class="input w-full" name="shipping_address1" wire:model="shipping_address1" />
@error('shipping_address1') @error('shipping_address1')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -22,7 +22,7 @@
</div> </div>
<div class="col-span-6 sm:col-span-3"> <div class="col-span-6 sm:col-span-3">
<label for="shipping_address2" class="input-label">@lang('texts.shipping_address2')</label> <label for="shipping_address2" class="input-label">@lang('texts.shipping_address2')</label>
<input id="shipping_address2" class="input w-full" name="shipping_address2" wire:model.defer="shipping_address2" /> <input id="shipping_address2" class="input w-full" name="shipping_address2" wire:model="shipping_address2" />
@error('shipping_address2') @error('shipping_address2')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -31,7 +31,7 @@
</div> </div>
<div class="col-span-6 sm:col-span-3"> <div class="col-span-6 sm:col-span-3">
<label for="shipping_city" class="input-label">@lang('texts.shipping_city')</label> <label for="shipping_city" class="input-label">@lang('texts.shipping_city')</label>
<input id="shipping_city" class="input w-full" name="shipping_city" wire:model.defer="shipping_city" /> <input id="shipping_city" class="input w-full" name="shipping_city" wire:model="shipping_city" />
@error('shipping_city') @error('shipping_city')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -40,7 +40,7 @@
</div> </div>
<div class="col-span-6 sm:col-span-2"> <div class="col-span-6 sm:col-span-2">
<label for="shipping_state" class="input-label">@lang('texts.shipping_state')</label> <label for="shipping_state" class="input-label">@lang('texts.shipping_state')</label>
<input id="shipping_state" class="input w-full" name="shipping_state" wire:model.defer="shipping_state" /> <input id="shipping_state" class="input w-full" name="shipping_state" wire:model="shipping_state" />
@error('shipping_state') @error('shipping_state')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -49,7 +49,7 @@
</div> </div>
<div class="col-span-6 sm:col-span-2"> <div class="col-span-6 sm:col-span-2">
<label for="shipping_postal_code" class="input-label">@lang('texts.shipping_postal_code')</label> <label for="shipping_postal_code" class="input-label">@lang('texts.shipping_postal_code')</label>
<input id="shipping_postal_code" class="input w-full" name="shipping_postal_code" wire:model.defer="shipping_postal_code" /> <input id="shipping_postal_code" class="input w-full" name="shipping_postal_code" wire:model="shipping_postal_code" />
@error('shipping_postal_code') @error('shipping_postal_code')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}
@ -58,7 +58,7 @@
</div> </div>
<div class="col-span-4 sm:col-span-2"> <div class="col-span-4 sm:col-span-2">
<label for="shipping_country" class="input-label">@lang('texts.shipping_country')</label> <label for="shipping_country" class="input-label">@lang('texts.shipping_country')</label>
<select id="shipping_country" class="input w-full form-select bg-white" wire:model.defer="shipping_country_id"> <select id="shipping_country" class="input w-full form-select bg-white" wire:model="shipping_country_id">
<option value="none"></option> <option value="none"></option>
@foreach($countries as $country) @foreach($countries as $country)
<option value="{{ $country->id }}"> <option value="{{ $country->id }}">

View File

@ -0,0 +1,60 @@
@php
if (! isset($scrollTo)) {
$scrollTo = 'body';
}
$scrollIntoViewJsSnippet = ($scrollTo !== false)
? <<<JS
(\$el.closest('{$scrollTo}') || document.querySelector('{$scrollTo}')).scrollIntoView()
JS
: '';
@endphp
<div>
@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span class="page-link" aria-hidden="true">&lsaquo;</span>
</li>
@else
<li class="page-item">
<button type="button" dusk="previousPage{{ $paginator->getPageName() == 'page' ? '' : '.' . $paginator->getPageName() }}" class="page-link" wire:click="previousPage('{{ $paginator->getPageName() }}')" x-on:click="{{ $scrollIntoViewJsSnippet }}" wire:loading.attr="disabled" rel="prev" aria-label="@lang('pagination.previous')">&lsaquo;</button>
</li>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="page-item disabled" aria-disabled="true"><span class="page-link">{{ $element }}</span></li>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="page-item active" wire:key="paginator-{{ $paginator->getPageName() }}-page-{{ $page }}" aria-current="page"><span class="page-link">{{ $page }}</span></li>
@else
<li class="page-item" wire:key="paginator-{{ $paginator->getPageName() }}-page-{{ $page }}"><button type="button" class="page-link" wire:click="gotoPage({{ $page }}, '{{ $paginator->getPageName() }}')" x-on:click="{{ $scrollIntoViewJsSnippet }}">{{ $page }}</button></li>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<button type="button" dusk="nextPage{{ $paginator->getPageName() == 'page' ? '' : '.' . $paginator->getPageName() }}" class="page-link" wire:click="nextPage('{{ $paginator->getPageName() }}')" x-on:click="{{ $scrollIntoViewJsSnippet }}" wire:loading.attr="disabled" rel="next" aria-label="@lang('pagination.next')">&rsaquo;</button>
</li>
@else
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span class="page-link" aria-hidden="true">&rsaquo;</span>
</li>
@endif
</ul>
</nav>
@endif
</div>

View File

@ -1,3 +1,15 @@
@php
if (! isset($scrollTo)) {
$scrollTo = 'body';
}
$scrollIntoViewJsSnippet = ($scrollTo !== false)
? <<<JS
(\$el.closest('{$scrollTo}') || document.querySelector('{$scrollTo}')).scrollIntoView()
JS
: '';
@endphp
<div> <div>
@if ($paginator->hasPages()) @if ($paginator->hasPages())
<nav> <nav>
@ -10,11 +22,11 @@
@else @else
@if(method_exists($paginator,'getCursorName')) @if(method_exists($paginator,'getCursorName'))
<li class="page-item"> <li class="page-item">
<button dusk="previousPage" type="button" class="page-link" wire:click="setPage('{{$paginator->previousCursor()->encode()}}','{{ $paginator->getCursorName() }}')" wire:loading.attr="disabled" rel="prev">@lang('pagination.previous')</button> <button dusk="previousPage" type="button" class="page-link" wire:key="cursor-{{ $paginator->getCursorName() }}-{{ $paginator->previousCursor()->encode() }}" wire:click="setPage('{{$paginator->previousCursor()->encode()}}','{{ $paginator->getCursorName() }}')" x-on:click="{{ $scrollIntoViewJsSnippet }}" wire:loading.attr="disabled" rel="prev">@lang('pagination.previous')</button>
</li> </li>
@else @else
<li class="page-item"> <li class="page-item">
<button type="button" dusk="previousPage{{ $paginator->getPageName() == 'page' ? '' : '.' . $paginator->getPageName() }}" class="page-link" wire:click="previousPage('{{ $paginator->getPageName() }}')" wire:loading.attr="disabled" rel="prev">@lang('pagination.previous')</button> <button type="button" dusk="previousPage{{ $paginator->getPageName() == 'page' ? '' : '.' . $paginator->getPageName() }}" class="page-link" wire:click="previousPage('{{ $paginator->getPageName() }}')" x-on:click="{{ $scrollIntoViewJsSnippet }}" wire:loading.attr="disabled" rel="prev">@lang('pagination.previous')</button>
</li> </li>
@endif @endif
@endif @endif
@ -23,11 +35,11 @@
@if ($paginator->hasMorePages()) @if ($paginator->hasMorePages())
@if(method_exists($paginator,'getCursorName')) @if(method_exists($paginator,'getCursorName'))
<li class="page-item"> <li class="page-item">
<button dusk="nextPage" type="button" class="page-link" wire:click="setPage('{{$paginator->nextCursor()->encode()}}','{{ $paginator->getCursorName() }}')" wire:loading.attr="disabled" rel="next">@lang('pagination.next')</button> <button dusk="nextPage" type="button" class="page-link" wire:key="cursor-{{ $paginator->getCursorName() }}-{{ $paginator->nextCursor()->encode() }}" wire:click="setPage('{{$paginator->nextCursor()->encode()}}','{{ $paginator->getCursorName() }}')" x-on:click="{{ $scrollIntoViewJsSnippet }}" wire:loading.attr="disabled" rel="next">@lang('pagination.next')</button>
</li> </li>
@else @else
<li class="page-item"> <li class="page-item">
<button type="button" dusk="nextPage{{ $paginator->getPageName() == 'page' ? '' : '.' . $paginator->getPageName() }}" class="page-link" wire:click="nextPage('{{ $paginator->getPageName() }}')" wire:loading.attr="disabled" rel="next">@lang('pagination.next')</button> <button type="button" dusk="nextPage{{ $paginator->getPageName() == 'page' ? '' : '.' . $paginator->getPageName() }}" class="page-link" wire:click="nextPage('{{ $paginator->getPageName() }}')" x-on:click="{{ $scrollIntoViewJsSnippet }}" wire:loading.attr="disabled" rel="next">@lang('pagination.next')</button>
</li> </li>
@endif @endif
@else @else

View File

@ -0,0 +1,56 @@
@php
if (! isset($scrollTo)) {
$scrollTo = 'body';
}
$scrollIntoViewJsSnippet = ($scrollTo !== false)
? <<<JS
(\$el.closest('{$scrollTo}') || document.querySelector('{$scrollTo}')).scrollIntoView()
JS
: '';
@endphp
<div>
@if ($paginator->hasPages())
<nav role="navigation" aria-label="Pagination Navigation" class="flex justify-between">
<span>
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<span class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5 rounded-md select-none">
{!! __('pagination.previous') !!}
</span>
@else
@if(method_exists($paginator,'getCursorName'))
<button type="button" dusk="previousPage" wire:key="cursor-{{ $paginator->getCursorName() }}-{{ $paginator->previousCursor()->encode() }}" wire:click="setPage('{{$paginator->previousCursor()->encode()}}','{{ $paginator->getCursorName() }}')" x-on:click="{{ $scrollIntoViewJsSnippet }}" wire:loading.attr="disabled" class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-500 focus:outline-none focus:shadow-outline-blue focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150">
{!! __('pagination.previous') !!}
</button>
@else
<button
type="button" wire:click="previousPage('{{ $paginator->getPageName() }}')" x-on:click="{{ $scrollIntoViewJsSnippet }}" wire:loading.attr="disabled" dusk="previousPage{{ $paginator->getPageName() == 'page' ? '' : '.' . $paginator->getPageName() }}" class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-500 focus:outline-none focus:shadow-outline-blue focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150">
{!! __('pagination.previous') !!}
</button>
@endif
@endif
</span>
<span>
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
@if(method_exists($paginator,'getCursorName'))
<button type="button" dusk="nextPage" wire:key="cursor-{{ $paginator->getCursorName() }}-{{ $paginator->nextCursor()->encode() }}" wire:click="setPage('{{$paginator->nextCursor()->encode()}}','{{ $paginator->getCursorName() }}')" x-on:click="{{ $scrollIntoViewJsSnippet }}" wire:loading.attr="disabled" class="relative inline-flex items-center px-4 py-2 ml-3 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-500 focus:outline-none focus:shadow-outline-blue focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150">
{!! __('pagination.next') !!}
</button>
@else
<button type="button" wire:click="nextPage('{{ $paginator->getPageName() }}')" x-on:click="{{ $scrollIntoViewJsSnippet }}" wire:loading.attr="disabled" dusk="nextPage{{ $paginator->getPageName() == 'page' ? '' : '.' . $paginator->getPageName() }}" class="relative inline-flex items-center px-4 py-2 ml-3 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-500 focus:outline-none focus:shadow-outline-blue focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150">
{!! __('pagination.next') !!}
</button>
@endif
@else
<span class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5 rounded-md select-none">
{!! __('pagination.next') !!}
</span>
@endif
</span>
</nav>
@endif
</div>

View File

@ -0,0 +1,126 @@
@php
if (! isset($scrollTo)) {
$scrollTo = 'body';
}
$scrollIntoViewJsSnippet = ($scrollTo !== false)
? <<<JS
(\$el.closest('{$scrollTo}') || document.querySelector('{$scrollTo}')).scrollIntoView()
JS
: '';
@endphp
<div>
@if ($paginator->hasPages())
<nav role="navigation" aria-label="Pagination Navigation" class="flex items-center justify-between">
<div class="flex justify-between flex-1 sm:hidden">
<span>
@if ($paginator->onFirstPage())
<span class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5 rounded-md select-none">
{!! __('pagination.previous') !!}
</span>
@else
<button type="button" wire:click="previousPage('{{ $paginator->getPageName() }}')" x-on:click="{{ $scrollIntoViewJsSnippet }}" wire:loading.attr="disabled" dusk="previousPage{{ $paginator->getPageName() == 'page' ? '' : '.' . $paginator->getPageName() }}.before" class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-500 focus:outline-none focus:shadow-outline-blue focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150">
{!! __('pagination.previous') !!}
</button>
@endif
</span>
<span>
@if ($paginator->hasMorePages())
<button type="button" wire:click="nextPage('{{ $paginator->getPageName() }}')" x-on:click="{{ $scrollIntoViewJsSnippet }}" wire:loading.attr="disabled" dusk="nextPage{{ $paginator->getPageName() == 'page' ? '' : '.' . $paginator->getPageName() }}.before" class="relative inline-flex items-center px-4 py-2 ml-3 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-500 focus:outline-none focus:shadow-outline-blue focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150">
{!! __('pagination.next') !!}
</button>
@else
<span class="relative inline-flex items-center px-4 py-2 ml-3 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5 rounded-md select-none">
{!! __('pagination.next') !!}
</span>
@endif
</span>
</div>
<div class="hidden sm:flex-1 sm:flex sm:items-center sm:justify-between">
<div>
<p class="text-sm text-gray-700 leading-5">
<span>{!! __('Showing') !!}</span>
<span class="font-medium">{{ $paginator->firstItem() }}</span>
<span>{!! __('to') !!}</span>
<span class="font-medium">{{ $paginator->lastItem() }}</span>
<span>{!! __('of') !!}</span>
<span class="font-medium">{{ $paginator->total() }}</span>
<span>{!! __('results') !!}</span>
</p>
</div>
<div>
<span class="relative z-0 inline-flex rounded-md shadow-sm">
<span>
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<span aria-disabled="true" aria-label="{{ __('pagination.previous') }}">
<span class="relative inline-flex items-center px-2 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default rounded-l-md leading-5" aria-hidden="true">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" clip-rule="evenodd" />
</svg>
</span>
</span>
@else
<button type="button" wire:click="previousPage('{{ $paginator->getPageName() }}')" x-on:click="{{ $scrollIntoViewJsSnippet }}" dusk="previousPage{{ $paginator->getPageName() == 'page' ? '' : '.' . $paginator->getPageName() }}.after" rel="prev" class="relative inline-flex items-center px-2 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-l-md leading-5 hover:text-gray-400 focus:z-10 focus:outline-none focus:border-blue-300 focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 transition ease-in-out duration-150" aria-label="{{ __('pagination.previous') }}">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" clip-rule="evenodd" />
</svg>
</button>
@endif
</span>
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<span aria-disabled="true">
<span class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 cursor-default leading-5 select-none">{{ $element }}</span>
</span>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
<span wire:key="paginator-{{ $paginator->getPageName() }}-page{{ $page }}">
@if ($page == $paginator->currentPage())
<span aria-current="page">
<span class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5 select-none">{{ $page }}</span>
</span>
@else
<button type="button" wire:click="gotoPage({{ $page }}, '{{ $paginator->getPageName() }}')" x-on:click="{{ $scrollIntoViewJsSnippet }}" class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 hover:text-gray-500 focus:z-10 focus:outline-none focus:border-blue-300 focus:shadow-outline-blue active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150" aria-label="{{ __('Go to page :page', ['page' => $page]) }}">
{{ $page }}
</button>
@endif
</span>
@endforeach
@endif
@endforeach
<span>
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<button type="button" wire:click="nextPage('{{ $paginator->getPageName() }}')" x-on:click="{{ $scrollIntoViewJsSnippet }}" dusk="nextPage{{ $paginator->getPageName() == 'page' ? '' : '.' . $paginator->getPageName() }}.after" rel="next" class="relative inline-flex items-center px-2 py-2 -ml-px text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-r-md leading-5 hover:text-gray-400 focus:z-10 focus:outline-none focus:border-blue-300 focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 transition ease-in-out duration-150" aria-label="{{ __('pagination.next') }}">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
</svg>
</button>
@else
<span aria-disabled="true" aria-label="{{ __('pagination.next') }}">
<span class="relative inline-flex items-center px-2 py-2 -ml-px text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default rounded-r-md leading-5" aria-hidden="true">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
</svg>
</span>
</span>
@endif
</span>
</span>
</div>
</div>
</nav>
@endif
</div>

View File

@ -14,7 +14,7 @@ namespace Tests\Feature\ClientPortal;
use App\DataMapper\ClientSettings; use App\DataMapper\ClientSettings;
use App\DataMapper\CompanySettings; use App\DataMapper\CompanySettings;
use App\Http\Livewire\CreditsTable; use App\Livewire\CreditsTable;
use App\Models\Account; use App\Models\Account;
use App\Models\Client; use App\Models\Client;
use App\Models\ClientContact; use App\Models\ClientContact;

View File

@ -12,7 +12,7 @@
namespace Tests\Feature\ClientPortal; namespace Tests\Feature\ClientPortal;
use App\Http\Livewire\InvoicesTable; use App\Livewire\InvoicesTable;
use App\Models\Account; use App\Models\Account;
use App\Models\Client; use App\Models\Client;
use App\Models\ClientContact; use App\Models\ClientContact;