Fixes for merge

This commit is contained in:
David Bomba 2024-01-03 13:24:36 +11:00
commit e78ae16e3c
70 changed files with 561 additions and 19043 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;
@ -251,7 +251,7 @@ class BillingPortalPurchase extends Component
$company = $this->subscription->company; $company = $this->subscription->company;
$user = $this->subscription->user; $user = $this->subscription->user;
$user->setCompany($company); $user->setCompany($company);
$client_repo = new ClientRepository(new ClientContactRepository()); $client_repo = new ClientRepository(new ClientContactRepository());
$data = [ $data = [
@ -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');
} }
/** /**
@ -432,7 +432,7 @@ class BillingPortalPurchase extends Component
public function handlePaymentNotRequired() public function handlePaymentNotRequired()
{ {
$is_eligible = $this->subscription->service()->isEligible($this->contact); $is_eligible = $this->subscription->service()->isEligible($this->contact);
if ($is_eligible['status_code'] != 200) { if ($is_eligible['status_code'] != 200) {
$this->steps['not_eligible'] = true; $this->steps['not_eligible'] = true;
$this->steps['not_eligible_message'] = $is_eligible['message']; $this->steps['not_eligible_message'] = $is_eligible['message'];

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;
@ -190,9 +190,10 @@ class RequiredClientInfo extends Component
} }
if ($this->updateClientDetails($data)) { if ($this->updateClientDetails($data)) {
$this->emit('passed-required-fields-check', [ $this->dispatch(
'client_postal_code' => $this->contact->client->postal_code, 'passed-required-fields-check',
]); client_postal_code: $this->contact->client->postal_code
);
//if stripe is enabled, we want to update the customer at this point. //if stripe is enabled, we want to update the customer at this point.
@ -258,7 +259,6 @@ class RequiredClientInfo extends Component
} }
if (Str::startsWith($field['name'], 'contact_')) { if (Str::startsWith($field['name'], 'contact_')) {
if (empty($this->contact->{$_field}) || is_null($this->contact->{$_field}) || str_contains($this->contact->{$_field}, '@example.com')) { if (empty($this->contact->{$_field}) || is_null($this->contact->{$_field}) || str_contains($this->contact->{$_field}, '@example.com')) {
$this->show_form = true; $this->show_form = true;
} else { } else {
@ -289,14 +289,15 @@ class RequiredClientInfo extends Component
public function handleCopyBilling(): void public function handleCopyBilling(): void
{ {
$this->emit('update-shipping-data', [ $this->dispatch(
'client_shipping_address_line_1' => $this->contact->client->address1, 'update-shipping-data',
'client_shipping_address_line_2' => $this->contact->client->address2, client_shipping_address_line_1: $this->contact->client->address1,
'client_shipping_city' => $this->contact->client->city, client_shipping_address_line_2: $this->contact->client->address2,
'client_shipping_state' => $this->contact->client->state, client_shipping_city: $this->contact->client->city,
'client_shipping_postal_code' => $this->contact->client->postal_code, client_shipping_state: $this->contact->client->state,
'client_shipping_country_id' => $this->contact->client->country_id, client_shipping_postal_code: $this->contact->client->postal_code,
]); client_shipping_country_id: $this->contact->client->country_id,
);
} }
public function render() public function render()

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

@ -35,7 +35,7 @@ class StaticModel extends Model
{ {
use MakesHash; use MakesHash;
use Excludable; use Excludable;
protected $casts = [ protected $casts = [
'updated_at' => 'timestamp', 'updated_at' => 'timestamp',
'created_at' => 'timestamp', 'created_at' => 'timestamp',

View File

@ -11,23 +11,24 @@
namespace App\Providers; namespace App\Providers;
use App\Helpers\Mail\GmailTransport; use App\Utils\Ninja;
use App\Helpers\Mail\Office365MailTransport; use Livewire\Livewire;
use App\Http\Middleware\SetDomainNameDb;
use App\Models\Invoice; use App\Models\Invoice;
use App\Models\Proposal; use App\Models\Proposal;
use App\Utils\Ninja;
use App\Utils\TruthSource; use App\Utils\TruthSource;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Mail\Mailer; use Illuminate\Mail\Mailer;
use Illuminate\Queue\Events\JobProcessing;
use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Blade; use App\Helpers\Mail\GmailTransport;
use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\Facades\Queue; use Illuminate\Support\Facades\Queue;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use Livewire\Livewire; use App\Http\Middleware\SetDomainNameDb;
use Illuminate\Queue\Events\JobProcessing;
use App\Helpers\Mail\Office365MailTransport;
use Illuminate\Database\Eloquent\Relations\Relation;
class AppServiceProvider extends ServiceProvider class AppServiceProvider extends ServiceProvider
{ {
@ -72,6 +73,12 @@ class AppServiceProvider extends ServiceProvider
]); ]);
} }
Livewire::setUpdateRoute(function ($handle) {
return Route::post('/livewire/update', $handle)
->middleware('client');
});
/* Ensure we don't have stale state in jobs */ /* Ensure we don't have stale state in jobs */
Queue::before(function (JobProcessing $event) { Queue::before(function (JobProcessing $event) {
App::forgetInstance('truthsource'); App::forgetInstance('truthsource');
@ -96,11 +103,11 @@ class AppServiceProvider extends ServiceProvider
'transport' => 'postmark', 'transport' => 'postmark',
'token' => $postmark_key 'token' => $postmark_key
])); ]));
return $this; return $this;
}); });
Mailer::macro('mailgun_config', function (string $secret, string $domain, string $endpoint = 'api.mailgun.net') { Mailer::macro('mailgun_config', function (string $secret, string $domain, string $endpoint = 'api.mailgun.net') {
// @phpstan-ignore /** @phpstan-ignore-next-line **/ // @phpstan-ignore /** @phpstan-ignore-next-line **/
Mailer::setSymfonyTransport(app('mail.manager')->createSymfonyTransport([ Mailer::setSymfonyTransport(app('mail.manager')->createSymfonyTransport([
@ -110,7 +117,7 @@ class AppServiceProvider extends ServiceProvider
'endpoint' => $endpoint, 'endpoint' => $endpoint,
'scheme' => config('services.mailgun.scheme'), 'scheme' => config('services.mailgun.scheme'),
])); ]));
return $this; return $this;
}); });

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",

18737
composer.lock generated

File diff suppressed because it is too large Load Diff

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' => true,
/*
|---------------------------------------------------------------------------
| 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

@ -49,7 +49,6 @@
<!-- Scripts --> <!-- Scripts -->
@vite('resources/js/app.js') @vite('resources/js/app.js')
<script src="{{ asset('vendor/alpinejs@2.8.2/alpine.js') }}" defer></script>
<!-- Fonts --> <!-- Fonts -->
{{-- <link rel="dns-prefetch" href="https://fonts.gstatic.com"> --}} {{-- <link rel="dns-prefetch" href="https://fonts.gstatic.com"> --}}

View File

@ -19,7 +19,7 @@
<h1 class="text-center text-3xl mt-8">{{ ctrans('texts.register') }}</h1> <h1 class="text-center text-3xl mt-8">{{ ctrans('texts.register') }}</h1>
<p class="block text-center text-gray-600">{{ ctrans('texts.register_label') }}</p> <p class="block text-center text-gray-600">{{ ctrans('texts.register_label') }}</p>
<form id="register-form" action="{{ route('client.register', request()->route('company_key')) }}" method="POST" x-data="{more: false, busy: false, isSubmitted: false}" x-on:submit="isSubmitted = true"> <form id="register-form" action="{{ route('client.register', request()->route('company_key')) }}" method="POST" x-data="{more: false, busy: false, isSubmitted: false}" x-on:submit="busy = true; isSubmitted = true">
@if($register_company) @if($register_company)
<input type="hidden" name="company_key" value="{{ $register_company->company_key }}"> <input type="hidden" name="company_key" value="{{ $register_company->company_key }}">
@endif @endif
@ -32,8 +32,8 @@
@if($field['visible']) @if($field['visible'])
<div class="col-span-12 md:col-span-6"> <div class="col-span-12 md:col-span-6">
<section class="flex items-center"> <section class="flex items-center">
<label <label
for="{{ $field['key'] }}" for="{{ $field['key'] }}"
class="input-label"> class="input-label">
@if(in_array($field['key'], ['custom_value1','custom_value2','custom_value3','custom_value4'])) @if(in_array($field['key'], ['custom_value1','custom_value2','custom_value3','custom_value4']))
{{ (new App\Utils\Helpers())->makeCustomField($register_company->custom_fields, str_replace("custom_value","client", $field['key']))}} {{ (new App\Utils\Helpers())->makeCustomField($register_company->custom_fields, str_replace("custom_value","client", $field['key']))}}
@ -41,29 +41,29 @@
{{ ctrans("texts.{$field['key']}") }} {{ ctrans("texts.{$field['key']}") }}
@endif @endif
</label> </label>
@if($field['required']) @if($field['required'])
<section class="text-red-400 ml-1 text-sm">*</section> <section class="text-red-400 ml-1 text-sm">*</section>
@endif @endif
</section> </section>
@if($field['key'] === 'email') @if($field['key'] === 'email')
<input <input
id="{{ $field['key'] }}" id="{{ $field['key'] }}"
class="input w-full" class="input w-full"
type="email" type="email"
name="{{ $field['key'] }}" name="{{ $field['key'] }}"
value="{{ old($field['key']) }}" value="{{ old($field['key']) }}"
/> />
@elseif($field['key'] === 'password') @elseif($field['key'] === 'password')
<input <input
id="{{ $field['key'] }}" id="{{ $field['key'] }}"
class="input w-full" class="input w-full"
type="password" type="password"
name="{{ $field['key'] }}" name="{{ $field['key'] }}"
/> />
@elseif($field['key'] === 'currency_id') @elseif($field['key'] === 'currency_id')
<select <select
id="currency_id" id="currency_id"
class="input w-full form-select bg-white" class="input w-full form-select bg-white"
name="currency_id"> name="currency_id">
@ -75,7 +75,7 @@
@endforeach @endforeach
</select> </select>
@elseif($field['key'] === 'country_id') @elseif($field['key'] === 'country_id')
<select <select
id="shipping_country" id="shipping_country"
class="input w-full form-select bg-white" class="input w-full form-select bg-white"
name="country_id"> name="country_id">
@ -89,9 +89,9 @@
@endforeach @endforeach
</select> </select>
@else @else
<input <input
id="{{ $field['key'] }}" id="{{ $field['key'] }}"
class="input w-full" class="input w-full"
name="{{ $field['key'] }}" name="{{ $field['key'] }}"
value="{{ old($field['key']) }}" value="{{ old($field['key']) }}"
/> />
@ -104,24 +104,24 @@
@enderror @enderror
</div> </div>
@if($field['key'] === 'password') @if($field['key'] === 'password')
<div class="col-span-12 md:col-span-6"> <div class="col-span-12 md:col-span-6">
<section class="flex items-center"> <section class="flex items-center">
<label <label
for="password_confirmation" for="password_confirmation"
class="input-label"> class="input-label">
{{ ctrans('texts.password_confirmation') }} {{ ctrans('texts.password_confirmation') }}
</label> </label>
@if($field['required']) @if($field['required'])
<section class="text-red-400 ml-1 text-sm">*</section> <section class="text-red-400 ml-1 text-sm">*</section>
@endif @endif
</section> </section>
<input <input
id="password_confirmation" id="password_confirmation"
type="password" type="password"
class="input w-full" class="input w-full"
name="password_confirmation" name="password_confirmation"
/> />
</div> </div>
@ -132,7 +132,7 @@
</div> </div>
<div class="flex justify-between items-center mt-8"> <div class="flex justify-between items-center mt-8">
<a href="{{route('client.login')}}" class="button button-info bg-green-600 text-white">{{ ctrans('texts.login_label') }}</a> <a href="{{route('client.login')}}" class="button button-info bg-green-600 text-white">{{ ctrans('texts.login_label') }}</a>
<span class="inline-flex items-center" x-data="{ terms_of_service: false, privacy_policy: false }"> <span class="inline-flex items-center" x-data="{ terms_of_service: false, privacy_policy: false }">
@ -151,8 +151,8 @@
@enderror @enderror
</span> </span>
</span> </span>
<button class="button button-primary bg-blue-600" :disabled={{ $submitsForm == 'true' ? 'isSubmitted' : 'busy'}} x-on:click="busy = true"> <button class="button button-primary bg-blue-600" :disabled={{ $submitsForm == 'true' ? 'isSubmitted' : 'busy'}}>
{{ ctrans('texts.register')}} {{ ctrans('texts.register')}}
</button> </button>

View File

@ -11,7 +11,7 @@
<div class="relative inline-block text-left" x-data="{ open: false }"> <div class="relative inline-block text-left" x-data="{ open: false }">
<div> <div>
<span class="rounded shadow-sm"> <span class="rounded shadow-sm">
<button x-on:click="open = !open" x-on:click.away="open = false" type="button" class="inline-flex justify-center w-full rounded-md border border-gray-300 px-4 py-2 bg-white text-sm leading-5 font-medium text-gray-700 hover:text-gray-500 focus:outline-none focus:border-blue-300 focus:ring-blue active:bg-gray-50 active:text-gray-800 transition ease-in-out duration-150"> <button x-on:click="open = !open" x-on:click.outside="open = false" type="button" class="inline-flex justify-center w-full rounded-md border border-gray-300 px-4 py-2 bg-white text-sm leading-5 font-medium text-gray-700 hover:text-gray-500 focus:outline-none focus:border-blue-300 focus:ring-blue active:bg-gray-50 active:text-gray-800 transition ease-in-out duration-150">
<span class="hidden md:block mr-1">{{ auth()->guard('contact')->user()->company->present()->name }}</span> <span class="hidden md:block mr-1">{{ auth()->guard('contact')->user()->company->present()->name }}</span>
<svg class="md:-mr-1 md:ml-2 h-5 w-5" fill="currentColor" viewBox="0 0 20 20"> <svg class="md:-mr-1 md:ml-2 h-5 w-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd" /> <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd" />
@ -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">
@ -20,7 +20,7 @@
<div class="py-1"> <div class="py-1">
@foreach($methods as $index => $method) @foreach($methods as $index => $method)
@if($method['label'] == 'Custom') @if($method['label'] == 'Custom')
<a href="#" @click="{ open = false }" dusk="pay-with-custom" <a href="#" @click="open = false" dusk="pay-with-custom"
data-company-gateway-id="{{ $method['company_gateway_id'] }}" data-company-gateway-id="{{ $method['company_gateway_id'] }}"
data-gateway-type-id="{{ $method['gateway_type_id'] }}" data-gateway-type-id="{{ $method['gateway_type_id'] }}"
class="block px-4 py-2 text-sm leading-5 text-gray-700 dropdown-gateway-button hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900" class="block px-4 py-2 text-sm leading-5 text-gray-700 dropdown-gateway-button hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900"
@ -28,7 +28,7 @@
{{ \App\Models\CompanyGateway::find($method['company_gateway_id'])->firstOrFail()->getConfigField('name') }} {{ \App\Models\CompanyGateway::find($method['company_gateway_id'])->firstOrFail()->getConfigField('name') }}
</a> </a>
@elseif($total > 0) @elseif($total > 0)
<a href="#" @click="{ open = false }" dusk="pay-with-{{ $index }}" <a href="#" @click="open = false" dusk="pay-with-{{ $index }}"
data-company-gateway-id="{{ $method['company_gateway_id'] }}" data-company-gateway-id="{{ $method['company_gateway_id'] }}"
data-gateway-type-id="{{ $method['gateway_type_id'] }}" data-gateway-type-id="{{ $method['gateway_type_id'] }}"
class="block px-4 py-2 text-sm leading-5 text-gray-700 dropdown-gateway-button hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900" class="block px-4 py-2 text-sm leading-5 text-gray-700 dropdown-gateway-button hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900"

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

@ -1,4 +1,4 @@
<div class="container mx-auto grid grid-cols-12 mb-4" data-ref="required-fields-container"> <div wire:ignore.self class="container mx-auto grid grid-cols-12 mb-4" data-ref="required-fields-container">
<div class="col-span-12 lg:col-span-6 lg:col-start-4 overflow-hidden bg-white shadow rounded-lg"> <div class="col-span-12 lg:col-span-6 lg:col-start-4 overflow-hidden bg-white shadow rounded-lg">
<div class="px-4 py-5 border-b border-gray-200 sm:px-6"> <div class="px-4 py-5 border-b border-gray-200 sm:px-6">
<h3 class="text-lg font-medium leading-6 text-gray-900"> <h3 class="text-lg font-medium leading-6 text-gray-900">
@ -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" x-on:submit.prevent="$wire.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')))
@ -48,16 +48,16 @@
@if($show_terms) @if($show_terms)
@component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.terms_of_service') ]) @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.terms_of_service') ])
<div x-data="{ open: false }"> <div x-data="{ open: false }">
<input <input
wire:click="toggleTermsAccepted()" wire:click="toggleTermsAccepted()"
id="terms" id="terms"
name="terms_accepted" name="terms_accepted"
type="checkbox" type="checkbox"
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500" class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500"
/> />
<a href="#" class="group relative inline-block ml-4 text-blue-500 hover:text-red-500 duration-300 no-underline" @click="open = true">{{ ctrans('texts.agree_to_terms', ['terms' => ctrans('texts.terms')]) }}</a> <a href="#" class="group relative inline-block ml-4 text-blue-500 hover:text-red-500 duration-300 no-underline" @click="open = true">{{ ctrans('texts.agree_to_terms', ['terms' => ctrans('texts.terms')]) }}</a>
<div x-show="open" class="fixed bottom-0 inset-x-0 px-4 pb-4 sm:inset-0 sm:flex sm:items-center sm:justify-center z-50" <div x-show="open" class="fixed bottom-0 inset-x-0 px-4 pb-4 sm:inset-0 sm:flex sm:items-center sm:justify-center z-50"
@ -102,7 +102,7 @@
</div> </div>
@endcomponent @endcomponent

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

@ -15,4 +15,4 @@
<div class="flex flex-col"> <div class="flex flex-col">
@livewire('credits-table', ['company_id' => $company->id, 'db' => $company->db]) @livewire('credits-table', ['company_id' => $company->id, 'db' => $company->db])
</div> </div>
@endsection @endsection

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 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: true }">
<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>
@ -20,7 +20,7 @@
</p> </p>
</div> </div>
</div> </div>
</div> </div>
<div class="flex w-full mx-auto content-center"> <div class="flex w-full mx-auto content-center">
<p class="text-sm mx-auto content-center">{{ ctrans('texts.sign_here_ux_tip') }}</p> <p class="text-sm mx-auto content-center">{{ ctrans('texts.sign_here_ux_tip') }}</p>
@ -36,7 +36,7 @@
{{ ctrans('texts.close') }} {{ ctrans('texts.close') }}
</button> </button>
</div> </div>
</div> </div>
</div> </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: true }" 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">
<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>
@ -25,9 +25,9 @@
</div> </div>
<div class="mt-5 sm:mt-4 sm:flex sm:flex-row-reverse"> <div class="mt-5 sm:mt-4 sm:flex sm:flex-row-reverse">
<div class="flex w-full rounded-md shadow-sm sm:ml-3 sm:w-auto" x-data> <div class="flex w-full rounded-md shadow-sm sm:ml-3 sm:w-auto" x-data>
<button <button
type="button" type="button"
id="accept-terms-button" id="accept-terms-button"
onclick="setTimeout(() => this.disabled = true, 0); setTimeout(() => this.disabled = false, 5000); return true;" onclick="setTimeout(() => this.disabled = true, 0); setTimeout(() => this.disabled = false, 5000); return true;"
class="button button-primary bg-primary"> class="button button-primary bg-primary">
{{ ctrans('texts.i_agree') }} {{ ctrans('texts.i_agree') }}

View File

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

View File

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

View File

@ -66,7 +66,6 @@
@else @else
<script src="{{ str_replace("setup", "", Request::url())}}js/app.js" defer></script> <script src="{{ str_replace("setup", "", Request::url())}}js/app.js" defer></script>
@endif @endif
<script src="{{ asset('vendor/alpinejs@2.8.2/alpine.js') }}" defer></script>
<!-- Fonts --> <!-- Fonts -->
{{-- <link rel="dns-prefetch" href="https://fonts.gstatic.com"> --}} {{-- <link rel="dns-prefetch" href="https://fonts.gstatic.com"> --}}
@ -89,7 +88,7 @@
@else @else
<link href="{{ str_replace("setup", "", Request::url())}}css/app.css" rel="stylesheet"> <link href="{{ str_replace("setup", "", Request::url())}}css/app.css" rel="stylesheet">
@endif @endif
@if(auth()->guard('contact')->user() && !auth()->guard('contact')->user()->user->account->isPaid()) @if(auth()->guard('contact')->user() && !auth()->guard('contact')->user()->user->account->isPaid())
{{-- <link href="{{ mix('favicon.png') }}" rel="shortcut icon" type="image/png"> --}} {{-- <link href="{{ mix('favicon.png') }}" rel="shortcut icon" type="image/png"> --}}
@endif @endif

View File

@ -65,7 +65,6 @@
<!-- Scripts --> <!-- Scripts -->
@vite('resources/js/app.js') @vite('resources/js/app.js')
<script src="{{ asset('vendor/alpinejs@2.8.2/alpine.js') }}" defer></script>
<!-- Fonts --> <!-- Fonts -->
{{-- <link rel="dns-prefetch" href="https://fonts.gstatic.com"> --}} {{-- <link rel="dns-prefetch" href="https://fonts.gstatic.com"> --}}

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

@ -1,4 +1,4 @@
<form action="{{ route('client.quotes.bulk') }}" method="post" id="approve-form" /> <form action="{{ route('client.quotes.bulk') }}" method="post" id="approve-form">
@csrf @csrf
<input type="hidden" name="action" value="approve"> <input type="hidden" name="action" value="approve">
@ -11,18 +11,17 @@
<div class="px-4 py-5 sm:p-6"> <div class="px-4 py-5 sm:p-6">
<div class="sm:flex sm:items-start sm:justify-between"> <div class="sm:flex sm:items-start sm:justify-between">
<div> <div>
<h3 class="text-lg leading-6 font-medium text-gray-900"> <h3 class="text-lg leading-6 font-medium text-gray-900">
{{ ctrans('texts.approve') }} {{ ctrans('texts.approve') }}
</h3> </h3>
<div class="btn hidden md:block" data-clipboard-text="{{url("client/quote/{$key}")}}" aria-label="Copied!"> <div class="btn hidden md:block" data-clipboard-text="{{url("client/quote/{$key}")}}" aria-label="Copied!">
<div class="flex text-sm leading-6 font-medium text-gray-500"> <div class="flex text-sm leading-6 font-medium text-gray-500">
<p class="mr-2">{{url("client/quote/{$key}")}}</p> <p class="mr-2">{{url("client/quote/{$key}")}}</p>
<p><img class="h-5 w-5" src="{{ asset('assets/clippy.svg') }}" alt="Copy to clipboard"></p> <p><img class="h-5 w-5" src="{{ asset('assets/clippy.svg') }}" alt="Copy to clipboard"></p>
</div> </div>
</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">

View File

@ -11,7 +11,7 @@
})(window,document,'script','dataLayer','GTM-WMJ5W23');</script> })(window,document,'script','dataLayer','GTM-WMJ5W23');</script>
<!-- End Google Tag Manager --> <!-- End Google Tag Manager -->
@endif @endif
<!-- Error: {{ session('error') }} --> <!-- Error: {{ session('error') }} -->
@if (config('services.analytics.tracking_id')) @if (config('services.analytics.tracking_id'))
@ -58,7 +58,6 @@
<!-- Scripts --> <!-- Scripts -->
@vite('resources/js/app.js') @vite('resources/js/app.js')
<script src="{{ asset('vendor/alpinejs@2.8.2/alpine.js') }}" defer></script>
<!-- Fonts --> <!-- Fonts -->
{{-- <link rel="dns-prefetch" href="https://fonts.gstatic.com"> --}} {{-- <link rel="dns-prefetch" href="https://fonts.gstatic.com"> --}}
@ -75,7 +74,7 @@
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
} }
</style> </style>
<!-- Styles --> <!-- Styles -->
@vite('resources/sass/app.scss') @vite('resources/sass/app.scss')
@if(auth()->guard('contact')->user() && !auth()->guard('contact')->user()->user->account->isPaid()) @if(auth()->guard('contact')->user() && !auth()->guard('contact')->user()->user->account->isPaid())

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;