global search based on livewire improved
This commit is contained in:
		@@ -1,160 +0,0 @@
 | 
				
			|||||||
<?php
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace App\Http\Controllers\Common;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use App\Abstracts\Http\Controller;
 | 
					 | 
				
			||||||
use App\Events\Common\GlobalSearched;
 | 
					 | 
				
			||||||
use App\Models\Banking\Account;
 | 
					 | 
				
			||||||
use App\Models\Banking\Transaction;
 | 
					 | 
				
			||||||
use App\Models\Common\Contact;
 | 
					 | 
				
			||||||
use App\Models\Document\Document;
 | 
					 | 
				
			||||||
use App\Models\Common\Item;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class Search extends Controller
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Display a listing of the resource.
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @return Response
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public function index()
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        $user = user();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $search = new \stdClass();
 | 
					 | 
				
			||||||
        $search->results = [];
 | 
					 | 
				
			||||||
        $search->keyword = request('keyword');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ($user->can('read-banking-accounts')) {
 | 
					 | 
				
			||||||
            $accounts = Account::enabled()->usingSearchString($search->keyword)->take(setting('default.select_limit'))->get();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if ($accounts->count()) {
 | 
					 | 
				
			||||||
                foreach ($accounts as $account) {
 | 
					 | 
				
			||||||
                    $search->results[] = (object) [
 | 
					 | 
				
			||||||
                        'id'    => $account->id,
 | 
					 | 
				
			||||||
                        'name'  => $account->name,
 | 
					 | 
				
			||||||
                        'type'  => trans_choice('general.accounts', 1),
 | 
					 | 
				
			||||||
                        'color' => '#55588b',
 | 
					 | 
				
			||||||
                        'href'  => route('accounts.edit', $account->id),
 | 
					 | 
				
			||||||
                    ];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ($user->can('read-common-items')) {
 | 
					 | 
				
			||||||
            $items = Item::enabled()->usingSearchString($search->keyword)->take(setting('default.select_limit'))->get();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if ($items->count()) {
 | 
					 | 
				
			||||||
                foreach ($items as $item) {
 | 
					 | 
				
			||||||
                    $search->results[] = (object) [
 | 
					 | 
				
			||||||
                        'id'    => $item->id,
 | 
					 | 
				
			||||||
                        'name'  => $item->name,
 | 
					 | 
				
			||||||
                        'type'  => trans_choice('general.items', 1),
 | 
					 | 
				
			||||||
                        'color' => '#efad32',
 | 
					 | 
				
			||||||
                        'href'  => route('items.edit', $item->id),
 | 
					 | 
				
			||||||
                    ];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ($user->can('read-sales-invoices')) {
 | 
					 | 
				
			||||||
            $invoices = Document::invoice()->usingSearchString($search->keyword)->take(setting('default.select_limit'))->get();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if ($invoices->count()) {
 | 
					 | 
				
			||||||
                foreach ($invoices as $invoice) {
 | 
					 | 
				
			||||||
                    $search->results[] = (object) [
 | 
					 | 
				
			||||||
                        'id'    => $invoice->id,
 | 
					 | 
				
			||||||
                        'name'  => $invoice->document_number . ' - ' . $invoice->contact_name,
 | 
					 | 
				
			||||||
                        'type'  => trans_choice('general.invoices', 1),
 | 
					 | 
				
			||||||
                        'color' => '#6da252',
 | 
					 | 
				
			||||||
                        'href'  => route('invoices.show', $invoice->id),
 | 
					 | 
				
			||||||
                    ];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /*if ($user->can('read-sales-revenues')) {
 | 
					 | 
				
			||||||
            $revenues = Transaction::income()->usingSearchString($search->keyword)->take(setting('default.select_limit'))->get();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if ($revenues->count()) {
 | 
					 | 
				
			||||||
                foreach ($revenues as $revenue) {
 | 
					 | 
				
			||||||
                    $results[] = (object)[
 | 
					 | 
				
			||||||
                        'id'    => $revenue->id,
 | 
					 | 
				
			||||||
                        'name'  => $revenue->contact_name,
 | 
					 | 
				
			||||||
                        'type'  => trans_choice('general.revenues', 1),
 | 
					 | 
				
			||||||
                        'color' => '#00c0ef',
 | 
					 | 
				
			||||||
                        'href'  => route('revenues.edit', $revenue->id),
 | 
					 | 
				
			||||||
                    ];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ($user->can('read-sales-customers')) {
 | 
					 | 
				
			||||||
            $customers = Contact::customer()->enabled()->usingSearchString($search->keyword)->take(setting('default.select_limit'))->get();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if ($customers->count()) {
 | 
					 | 
				
			||||||
                foreach ($customers as $customer) {
 | 
					 | 
				
			||||||
                    $search->results[] = (object) [
 | 
					 | 
				
			||||||
                        'id'    => $customer->id,
 | 
					 | 
				
			||||||
                        'name'  => $customer->name,
 | 
					 | 
				
			||||||
                        'type'  => trans_choice('general.customers', 1),
 | 
					 | 
				
			||||||
                        'color' => '#328aef',
 | 
					 | 
				
			||||||
                        'href'  => route('customers.show', $customer->id),
 | 
					 | 
				
			||||||
                    ];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ($user->can('read-purchases-bills')) {
 | 
					 | 
				
			||||||
            $bills = Document::bill()->usingSearchString($search->keyword)->take(setting('default.select_limit'))->get();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if ($bills->count()) {
 | 
					 | 
				
			||||||
                foreach ($bills as $bill) {
 | 
					 | 
				
			||||||
                    $search->results[] = (object) [
 | 
					 | 
				
			||||||
                        'id'    => $bill->id,
 | 
					 | 
				
			||||||
                        'name'  => $bill->document_number . ' - ' . $bill->contact_name,
 | 
					 | 
				
			||||||
                        'type'  => trans_choice('general.bills', 1),
 | 
					 | 
				
			||||||
                        'color' => '#ef3232',
 | 
					 | 
				
			||||||
                        'href'  => route('bills.show', $bill->id),
 | 
					 | 
				
			||||||
                    ];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /*if ($user->can('read-purchases-payments')) {
 | 
					 | 
				
			||||||
            $payments = Transaction::expense()->usingSearchString($search->keyword)->take(setting('default.select_limit'))->get();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if ($payments->count()) {
 | 
					 | 
				
			||||||
                foreach ($payments as $payment) {
 | 
					 | 
				
			||||||
                    $results[] = (object)[
 | 
					 | 
				
			||||||
                        'id'    => $payment->id,
 | 
					 | 
				
			||||||
                        'name'  => $payment->contact_name,
 | 
					 | 
				
			||||||
                        'type'  => trans_choice('general.payments', 1),
 | 
					 | 
				
			||||||
                        'color' => '#00c0ef',
 | 
					 | 
				
			||||||
                        'href'  => route('payments.edit', $payment->id),
 | 
					 | 
				
			||||||
                    ];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ($user->can('read-purchases-vendors')) {
 | 
					 | 
				
			||||||
            $vendors = Contact::vendor()->enabled()->usingSearchString($search->keyword)->take(setting('default.select_limit'))->get();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if ($vendors->count()) {
 | 
					 | 
				
			||||||
                foreach ($vendors as $vendor) {
 | 
					 | 
				
			||||||
                    $search->results[] = (object) [
 | 
					 | 
				
			||||||
                        'id'    => $vendor->id,
 | 
					 | 
				
			||||||
                        'name'  => $vendor->name,
 | 
					 | 
				
			||||||
                        'type'  => trans_choice('general.vendors', 1),
 | 
					 | 
				
			||||||
                        'color' => '#efef32',
 | 
					 | 
				
			||||||
                        'href'  => route('vendors.show', $vendor->id),
 | 
					 | 
				
			||||||
                    ];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        event(new GlobalSearched($search));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return response()->json((object) $search->results);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										273
									
								
								app/Http/Livewire/Common/Search.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										273
									
								
								app/Http/Livewire/Common/Search.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,273 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Http\Livewire\Common;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\Events\Common\GlobalSearched;
 | 
				
			||||||
 | 
					use App\Models\Banking\Account;
 | 
				
			||||||
 | 
					use App\Models\Common\Contact;
 | 
				
			||||||
 | 
					use App\Models\Common\Item;
 | 
				
			||||||
 | 
					use App\Models\Document\Document;
 | 
				
			||||||
 | 
					use Livewire\Component;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Search extends Component
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public $user = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public $keyword = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public $results = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected $listeners = ['resetKeyword'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Rendering component.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function render()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->user = user();
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        $this->search();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return view('livewire.common.search');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Searching operation.
 | 
				
			||||||
 | 
					     * If the keyword is empty searching will be cancelled.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return void
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function search()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->results = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (empty($this->keyword)) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->searchOnAccounts();
 | 
				
			||||||
 | 
					        $this->searchOnItems();
 | 
				
			||||||
 | 
					        $this->searchOnInvoices();
 | 
				
			||||||
 | 
					        $this->searchOnCustomers();
 | 
				
			||||||
 | 
					        $this->searchOnBills();
 | 
				
			||||||
 | 
					        $this->searchOnVendors();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->dispatchGlobalSearched();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Resets keyword.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return void
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function resetKeyword()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->keyword = '';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Fires GlobalSearched event with the keyword and results.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return void
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function dispatchGlobalSearched()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $search = new \stdClass();
 | 
				
			||||||
 | 
					        $search->results = $this->results;
 | 
				
			||||||
 | 
					        $search->keyword = $this->keyword;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        event(new GlobalSearched($search));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->results = $search->results;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Searching on Banking Accounts with given keyword.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return void
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function searchOnAccounts()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (!$this->user->can('read-banking-accounts')) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $accounts = Account::enabled()
 | 
				
			||||||
 | 
					            ->usingSearchString($this->keyword)
 | 
				
			||||||
 | 
					            ->take(setting('default.select_limit'))
 | 
				
			||||||
 | 
					            ->get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($accounts->isEmpty()) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        foreach ($accounts as $account) {
 | 
				
			||||||
 | 
					            $this->results[] = (object) [
 | 
				
			||||||
 | 
					                'id' => $account->id,
 | 
				
			||||||
 | 
					                'name' => $account->name,
 | 
				
			||||||
 | 
					                'type' => trans_choice('general.accounts', 1),
 | 
				
			||||||
 | 
					                'color' => '#55588b',
 | 
				
			||||||
 | 
					                'href' => route('accounts.edit', $account->id),
 | 
				
			||||||
 | 
					            ];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Searching on Items with given keyword.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return void
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function searchOnItems()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (!$this->user->can('read-common-items')) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $items = Item::enabled()
 | 
				
			||||||
 | 
					            ->usingSearchString($this->keyword)
 | 
				
			||||||
 | 
					            ->take(setting('default.select_limit'))
 | 
				
			||||||
 | 
					            ->get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($items->isEmpty()) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        foreach ($items as $item) {
 | 
				
			||||||
 | 
					            $this->results[] = (object) [
 | 
				
			||||||
 | 
					                'id' => $item->id,
 | 
				
			||||||
 | 
					                'name' => $item->name,
 | 
				
			||||||
 | 
					                'type' => trans_choice('general.items', 1),
 | 
				
			||||||
 | 
					                'color' => '#efad32',
 | 
				
			||||||
 | 
					                'href' => route('items.edit', $item->id),
 | 
				
			||||||
 | 
					            ];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Searching on Invoices with given keyword.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return void
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function searchOnInvoices()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (!$this->user->can('read-sales-invoices')) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $invoices = Document::invoice()
 | 
				
			||||||
 | 
					            ->usingSearchString($this->keyword)
 | 
				
			||||||
 | 
					            ->take(setting('default.select_limit'))
 | 
				
			||||||
 | 
					            ->get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($invoices->isEmpty()) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        foreach ($invoices as $invoice) {
 | 
				
			||||||
 | 
					            $this->results[] = (object) [
 | 
				
			||||||
 | 
					                'id' => $invoice->id,
 | 
				
			||||||
 | 
					                'name' => $invoice->document_number . ' - ' . $invoice->contact_name,
 | 
				
			||||||
 | 
					                'type' => trans_choice('general.invoices', 1),
 | 
				
			||||||
 | 
					                'color' => '#6da252',
 | 
				
			||||||
 | 
					                'href' => route('invoices.show', $invoice->id),
 | 
				
			||||||
 | 
					            ];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Searching on Customers with given keyword.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return void
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function searchOnCustomers()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (!$this->user->can('read-sales-customers')) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $customers = Contact::customer()
 | 
				
			||||||
 | 
					            ->enabled()
 | 
				
			||||||
 | 
					            ->usingSearchString($this->keyword)
 | 
				
			||||||
 | 
					            ->take(setting('default.select_limit'))
 | 
				
			||||||
 | 
					            ->get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($customers->isEmpty()) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        foreach ($customers as $customer) {
 | 
				
			||||||
 | 
					            $this->results[] = (object) [
 | 
				
			||||||
 | 
					                'id' => $customer->id,
 | 
				
			||||||
 | 
					                'name' => $customer->name,
 | 
				
			||||||
 | 
					                'type' => trans_choice('general.customers', 1),
 | 
				
			||||||
 | 
					                'color' => '#328aef',
 | 
				
			||||||
 | 
					                'href' => route('customers.show', $customer->id),
 | 
				
			||||||
 | 
					            ];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Searching on Bills with given keyword.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return void
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function searchOnBills()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (!$this->user->can('read-purchases-bills')) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $bills = Document::bill()
 | 
				
			||||||
 | 
					            ->usingSearchString($this->keyword)
 | 
				
			||||||
 | 
					            ->take(setting('default.select_limit'))
 | 
				
			||||||
 | 
					            ->get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($bills->isEmpty()) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        foreach ($bills as $bill) {
 | 
				
			||||||
 | 
					            $this->results[] = (object) [
 | 
				
			||||||
 | 
					                'id' => $bill->id,
 | 
				
			||||||
 | 
					                'name' => $bill->document_number . ' - ' . $bill->contact_name,
 | 
				
			||||||
 | 
					                'type' => trans_choice('general.bills', 1),
 | 
				
			||||||
 | 
					                'color' => '#ef3232',
 | 
				
			||||||
 | 
					                'href' => route('bills.show', $bill->id),
 | 
				
			||||||
 | 
					            ];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Searching on Vendors with given keyword.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return void
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function searchOnVendors()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (!$this->user->can('read-purchases-vendors')) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $vendors = Contact::vendor()
 | 
				
			||||||
 | 
					            ->enabled()
 | 
				
			||||||
 | 
					            ->usingSearchString($this->keyword)
 | 
				
			||||||
 | 
					            ->take(setting('default.select_limit'))
 | 
				
			||||||
 | 
					            ->get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($vendors->isEmpty()) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        foreach ($vendors as $vendor) {
 | 
				
			||||||
 | 
					            $this->results[] = (object) [
 | 
				
			||||||
 | 
					                'id' => $vendor->id,
 | 
				
			||||||
 | 
					                'name' => $vendor->name,
 | 
				
			||||||
 | 
					                'type' => trans_choice('general.vendors', 1),
 | 
				
			||||||
 | 
					                'color' => '#efef32',
 | 
				
			||||||
 | 
					                'href' => route('vendors.show', $vendor->id),
 | 
				
			||||||
 | 
					            ];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -89,6 +89,7 @@
 | 
				
			|||||||
            "Database\\Seeds\\": "database/seeds/",
 | 
					            "Database\\Seeds\\": "database/seeds/",
 | 
				
			||||||
            "Illuminate\\Translation\\": "overrides/Illuminate/Translation/",
 | 
					            "Illuminate\\Translation\\": "overrides/Illuminate/Translation/",
 | 
				
			||||||
            "Illuminate\\View\\Concerns\\": "overrides/Illuminate/View/Concerns/",
 | 
					            "Illuminate\\View\\Concerns\\": "overrides/Illuminate/View/Concerns/",
 | 
				
			||||||
 | 
					            "Livewire\\": "overrides/livewire/",
 | 
				
			||||||
            "Maatwebsite\\Excel\\": "overrides/maatwebsite/excel/",
 | 
					            "Maatwebsite\\Excel\\": "overrides/maatwebsite/excel/",
 | 
				
			||||||
            "Modules\\": "modules/",
 | 
					            "Modules\\": "modules/",
 | 
				
			||||||
            "Symfony\\Component\\Process\\": "overrides/symfony/process/"
 | 
					            "Symfony\\Component\\Process\\": "overrides/symfony/process/"
 | 
				
			||||||
@@ -100,6 +101,7 @@
 | 
				
			|||||||
            "vendor/akaunting/laravel-module/src/Commands/InstallCommand.php",
 | 
					            "vendor/akaunting/laravel-module/src/Commands/InstallCommand.php",
 | 
				
			||||||
            "vendor/laravel/framework/src/Illuminate/Translation/MessageSelector.php",
 | 
					            "vendor/laravel/framework/src/Illuminate/Translation/MessageSelector.php",
 | 
				
			||||||
            "vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesStacks.php",
 | 
					            "vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesStacks.php",
 | 
				
			||||||
 | 
					            "vendor/livewire/livewire/src/LivewireServiceProvider.php",
 | 
				
			||||||
            "vendor/maatwebsite/excel/src/Fakes/ExcelFake.php",
 | 
					            "vendor/maatwebsite/excel/src/Fakes/ExcelFake.php",
 | 
				
			||||||
            "vendor/maatwebsite/excel/src/QueuedWriter.php",
 | 
					            "vendor/maatwebsite/excel/src/QueuedWriter.php",
 | 
				
			||||||
            "vendor/symfony/process/PhpExecutableFinder.php"
 | 
					            "vendor/symfony/process/PhpExecutableFinder.php"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										352
									
								
								overrides/livewire/LivewireServiceProvider.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										352
									
								
								overrides/livewire/LivewireServiceProvider.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,352 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Livewire;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Illuminate\View\View;
 | 
				
			||||||
 | 
					use Illuminate\Testing\TestResponse;
 | 
				
			||||||
 | 
					use Illuminate\Filesystem\Filesystem;
 | 
				
			||||||
 | 
					use Illuminate\Support\Facades\Blade;
 | 
				
			||||||
 | 
					use Illuminate\Support\ServiceProvider;
 | 
				
			||||||
 | 
					use Illuminate\View\ComponentAttributeBag;
 | 
				
			||||||
 | 
					use Livewire\Controllers\FileUploadHandler;
 | 
				
			||||||
 | 
					use Livewire\Controllers\FilePreviewHandler;
 | 
				
			||||||
 | 
					use Livewire\Controllers\HttpConnectionHandler;
 | 
				
			||||||
 | 
					use Livewire\Controllers\LivewireJavaScriptAssets;
 | 
				
			||||||
 | 
					use Illuminate\Support\Facades\Route as RouteFacade;
 | 
				
			||||||
 | 
					use Illuminate\Foundation\Http\Middleware\TrimStrings;
 | 
				
			||||||
 | 
					use Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull;
 | 
				
			||||||
 | 
					use Livewire\Commands\{
 | 
				
			||||||
 | 
					    CpCommand,
 | 
				
			||||||
 | 
					    MvCommand,
 | 
				
			||||||
 | 
					    RmCommand,
 | 
				
			||||||
 | 
					    CopyCommand,
 | 
				
			||||||
 | 
					    MakeCommand,
 | 
				
			||||||
 | 
					    MoveCommand,
 | 
				
			||||||
 | 
					    StubsCommand,
 | 
				
			||||||
 | 
					    TouchCommand,
 | 
				
			||||||
 | 
					    DeleteCommand,
 | 
				
			||||||
 | 
					    PublishCommand,
 | 
				
			||||||
 | 
					    ComponentParser,
 | 
				
			||||||
 | 
					    DiscoverCommand,
 | 
				
			||||||
 | 
					    S3CleanupCommand,
 | 
				
			||||||
 | 
					    MakeLivewireCommand,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					use Livewire\HydrationMiddleware\{
 | 
				
			||||||
 | 
					    RenderView,
 | 
				
			||||||
 | 
					    PerformActionCalls,
 | 
				
			||||||
 | 
					    CallHydrationHooks,
 | 
				
			||||||
 | 
					    PerformEventEmissions,
 | 
				
			||||||
 | 
					    HydratePublicProperties,
 | 
				
			||||||
 | 
					    PerformDataBindingUpdates,
 | 
				
			||||||
 | 
					    CallPropertyHydrationHooks,
 | 
				
			||||||
 | 
					    SecureHydrationWithChecksum,
 | 
				
			||||||
 | 
					    HashDataPropertiesForDirtyDetection,
 | 
				
			||||||
 | 
					    NormalizeServerMemoSansDataForJavaScript,
 | 
				
			||||||
 | 
					    NormalizeComponentPropertiesForJavaScript,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					use Livewire\Macros\ViewMacros;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LivewireServiceProvider extends ServiceProvider
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public function register()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->registerConfig();
 | 
				
			||||||
 | 
					        $this->registerTestMacros();
 | 
				
			||||||
 | 
					        $this->registerLivewireSingleton();
 | 
				
			||||||
 | 
					        $this->registerComponentAutoDiscovery();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function boot()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->registerViews();
 | 
				
			||||||
 | 
					        $this->registerRoutes();
 | 
				
			||||||
 | 
					        $this->registerCommands();
 | 
				
			||||||
 | 
					        $this->registerRenameMes();
 | 
				
			||||||
 | 
					        $this->registerViewMacros();
 | 
				
			||||||
 | 
					        $this->registerTagCompiler();
 | 
				
			||||||
 | 
					        $this->registerPublishables();
 | 
				
			||||||
 | 
					        $this->registerBladeDirectives();
 | 
				
			||||||
 | 
					        $this->registerViewCompilerEngine();
 | 
				
			||||||
 | 
					        $this->registerHydrationMiddleware();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Bypass specific middlewares during Livewire requests.
 | 
				
			||||||
 | 
					        // These are usually helpful during a typical request, but
 | 
				
			||||||
 | 
					        // during Livewire requests, they can damage data properties.
 | 
				
			||||||
 | 
					        $this->bypassTheseMiddlewaresDuringLivewireRequests([
 | 
				
			||||||
 | 
					            TrimStrings::class,
 | 
				
			||||||
 | 
					            ConvertEmptyStringsToNull::class,
 | 
				
			||||||
 | 
					            // If the app overrode "TrimStrings".
 | 
				
			||||||
 | 
					            \App\Http\Middleware\TrimStrings::class,
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected function registerLivewireSingleton()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->app->singleton('livewire', LivewireManager::class);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected function registerComponentAutoDiscovery()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // Rather than forcing users to register each individual component,
 | 
				
			||||||
 | 
					        // we will auto-detect the component's class based on its kebab-cased
 | 
				
			||||||
 | 
					        // alias. For instance: 'examples.foo' => App\Http\Livewire\Examples\Foo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // We will generate a manifest file so we don't have to do the lookup every time.
 | 
				
			||||||
 | 
					        $defaultManifestPath = $this->app['livewire']->isOnVapor()
 | 
				
			||||||
 | 
					            ? '/tmp/storage/bootstrap/cache/livewire-components.php'
 | 
				
			||||||
 | 
					            : app()->bootstrapPath('cache/livewire-components.php');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->app->singleton(LivewireComponentsFinder::class, function () use ($defaultManifestPath) {
 | 
				
			||||||
 | 
					            return new LivewireComponentsFinder(
 | 
				
			||||||
 | 
					                new Filesystem,
 | 
				
			||||||
 | 
					                config('livewire.manifest_path') ?: $defaultManifestPath,
 | 
				
			||||||
 | 
					                ComponentParser::generatePathFromNamespace(
 | 
				
			||||||
 | 
					                    config('livewire.class_namespace')
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected function registerConfig()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->mergeConfigFrom(__DIR__.'/../../vendor/livewire/livewire/config/livewire.php', 'livewire');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected function registerViews()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // This is mainly for overriding Laravel's pagination views
 | 
				
			||||||
 | 
					        // when a user applies the WithPagination trait to a component.
 | 
				
			||||||
 | 
					        $this->loadViewsFrom(
 | 
				
			||||||
 | 
					            __DIR__.'/../../vendor/livewire/livewire/src'.DIRECTORY_SEPARATOR.'views'.DIRECTORY_SEPARATOR.'pagination',
 | 
				
			||||||
 | 
					            'livewire'
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected function registerRoutes()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        RouteFacade::post('/{company_id}/livewire/message/{name}', HttpConnectionHandler::class)
 | 
				
			||||||
 | 
					            ->name('livewire.message')
 | 
				
			||||||
 | 
					            ->middleware(config('livewire.middleware_group', ''));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        RouteFacade::post('/{company_id}/livewire/upload-file', [FileUploadHandler::class, 'handle'])
 | 
				
			||||||
 | 
					            ->name('livewire.upload-file')
 | 
				
			||||||
 | 
					            ->middleware(config('livewire.middleware_group', ''));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        RouteFacade::get('/{company_id}/livewire/preview-file/{filename}', [FilePreviewHandler::class, 'handle'])
 | 
				
			||||||
 | 
					            ->name('livewire.preview-file')
 | 
				
			||||||
 | 
					            ->middleware(config('livewire.middleware_group', ''));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        RouteFacade::get('/livewire/livewire.js', [LivewireJavaScriptAssets::class, 'source']);
 | 
				
			||||||
 | 
					        RouteFacade::get('/livewire/livewire.js.map', [LivewireJavaScriptAssets::class, 'maps']);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected function registerCommands()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (! $this->app->runningInConsole()) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->commands([
 | 
				
			||||||
 | 
					            MakeLivewireCommand::class, // make:livewire
 | 
				
			||||||
 | 
					            MakeCommand::class,         // livewire:make
 | 
				
			||||||
 | 
					            TouchCommand::class,        // livewire:touch
 | 
				
			||||||
 | 
					            CopyCommand::class,         // livewire:copy
 | 
				
			||||||
 | 
					            CpCommand::class,           // livewire:cp
 | 
				
			||||||
 | 
					            DeleteCommand::class,       // livewire:delete
 | 
				
			||||||
 | 
					            RmCommand::class,           // livewire:rm
 | 
				
			||||||
 | 
					            MoveCommand::class,         // livewire:move
 | 
				
			||||||
 | 
					            MvCommand::class,           // livewire:mv
 | 
				
			||||||
 | 
					            StubsCommand::class,        // livewire:stubs
 | 
				
			||||||
 | 
					            DiscoverCommand::class,     // livewire:discover
 | 
				
			||||||
 | 
					            S3CleanupCommand::class,    // livewire:configure-s3-upload-cleanup
 | 
				
			||||||
 | 
					            PublishCommand::class,      // livewire:publish
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected function registerTestMacros()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // Usage: $this->assertSeeLivewire('counter');
 | 
				
			||||||
 | 
					        TestResponse::macro('assertSeeLivewire', function ($component) {
 | 
				
			||||||
 | 
					            $escapedComponentName = trim(htmlspecialchars(json_encode(['name' => $component])), '{}');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            \PHPUnit\Framework\Assert::assertStringContainsString(
 | 
				
			||||||
 | 
					                $escapedComponentName,
 | 
				
			||||||
 | 
					                $this->getContent(),
 | 
				
			||||||
 | 
					                'Cannot find Livewire component ['.$component.'] rendered on page.'
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return $this;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Usage: $this->assertDontSeeLivewire('counter');
 | 
				
			||||||
 | 
					        TestResponse::macro('assertDontSeeLivewire', function ($component) {
 | 
				
			||||||
 | 
					            $escapedComponentName = trim(htmlspecialchars(json_encode(['name' => $component])), '{}');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            \PHPUnit\Framework\Assert::assertStringNotContainsString(
 | 
				
			||||||
 | 
					                $escapedComponentName,
 | 
				
			||||||
 | 
					                $this->getContent(),
 | 
				
			||||||
 | 
					                'Found Livewire component ['.$component.'] rendered on page.'
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return $this;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected function registerViewMacros()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // Early versions of Laravel 7.x don't have this method.
 | 
				
			||||||
 | 
					        if (method_exists(ComponentAttributeBag::class, 'macro')) {
 | 
				
			||||||
 | 
					            ComponentAttributeBag::macro('wire', function ($name) {
 | 
				
			||||||
 | 
					                $entries = head($this->whereStartsWith('wire:'.$name));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                $directive = head(array_keys($entries));
 | 
				
			||||||
 | 
					                $value = head(array_values($entries));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                return new WireDirective($name, $directive, $value);
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        View::mixin(new ViewMacros);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected function registerTagCompiler()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (method_exists($this->app['blade.compiler'], 'precompiler')) {
 | 
				
			||||||
 | 
					            $this->app['blade.compiler']->precompiler(function ($string) {
 | 
				
			||||||
 | 
					                return app(LivewireTagCompiler::class)->compile($string);
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected function registerPublishables()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->publishesToGroups([
 | 
				
			||||||
 | 
					            __DIR__.'/../../vendor/livewire/livewire/dist' => public_path('vendor/livewire'),
 | 
				
			||||||
 | 
					        ], ['livewire', 'livewire:assets']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->publishesToGroups([
 | 
				
			||||||
 | 
					            __DIR__.'/../../vendor/livewire/livewire/config/livewire.php' => base_path('config/livewire.php'),
 | 
				
			||||||
 | 
					        ], ['livewire', 'livewire:config']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->publishesToGroups([
 | 
				
			||||||
 | 
					            __DIR__.'/../../vendor/livewire/livewire/src/views/pagination' => $this->app->resourcePath('views/vendor/livewire'),
 | 
				
			||||||
 | 
					        ], ['livewire', 'livewire:pagination']);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected function registerBladeDirectives()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Blade::directive('this', [LivewireBladeDirectives::class, 'this']);
 | 
				
			||||||
 | 
					        Blade::directive('entangle', [LivewireBladeDirectives::class, 'entangle']);
 | 
				
			||||||
 | 
					        Blade::directive('livewire', [LivewireBladeDirectives::class, 'livewire']);
 | 
				
			||||||
 | 
					        Blade::directive('livewireStyles', [LivewireBladeDirectives::class, 'livewireStyles']);
 | 
				
			||||||
 | 
					        Blade::directive('livewireScripts', [LivewireBladeDirectives::class, 'livewireScripts']);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected function registerViewCompilerEngine()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // This is a custom view engine that gets used when rendering
 | 
				
			||||||
 | 
					        // Livewire views. Things like letting certain exceptions bubble
 | 
				
			||||||
 | 
					        // to the handler, and registering custom directives like: "@this".
 | 
				
			||||||
 | 
					        $this->app->make('view.engine.resolver')->register('blade', function () {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // If the application is using Ignition, make sure Livewire's view compiler
 | 
				
			||||||
 | 
					            // uses a version that extends Ignition's so it can continue to report errors
 | 
				
			||||||
 | 
					            // correctly. Don't change this class without first submitting a PR to Ignition.
 | 
				
			||||||
 | 
					            if (class_exists(\Facade\Ignition\IgnitionServiceProvider::class)) {
 | 
				
			||||||
 | 
					                return new CompilerEngineForIgnition($this->app['blade.compiler']);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return new LivewireViewCompilerEngine($this->app['blade.compiler']);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected function registerRenameMes()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        RenameMe\SupportEvents::init();
 | 
				
			||||||
 | 
					        RenameMe\SupportLocales::init();
 | 
				
			||||||
 | 
					        RenameMe\SupportChildren::init();
 | 
				
			||||||
 | 
					        RenameMe\SupportRedirects::init();
 | 
				
			||||||
 | 
					        RenameMe\SupportValidation::init();
 | 
				
			||||||
 | 
					        RenameMe\SupportFileUploads::init();
 | 
				
			||||||
 | 
					        RenameMe\OptimizeRenderedDom::init();
 | 
				
			||||||
 | 
					        RenameMe\SupportFileDownloads::init();
 | 
				
			||||||
 | 
					        RenameMe\SupportActionReturns::init();
 | 
				
			||||||
 | 
					        RenameMe\SupportBrowserHistory::init();
 | 
				
			||||||
 | 
					        RenameMe\SupportComponentTraits::init();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected function registerHydrationMiddleware()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        LifecycleManager::registerHydrationMiddleware([
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /* This is the core middleware stack of Livewire. It's important */
 | 
				
			||||||
 | 
					            /* to understand that the request goes through each class by the */
 | 
				
			||||||
 | 
					            /* order it is listed in this array, and is reversed on response */
 | 
				
			||||||
 | 
					            /*                                                               */
 | 
				
			||||||
 | 
					            /* ↓    Incoming Request                  Outgoing Response    ↑ */
 | 
				
			||||||
 | 
					            /* ↓                                                           ↑ */
 | 
				
			||||||
 | 
					            /* ↓    Secure Stuff                                           ↑ */
 | 
				
			||||||
 | 
					            /* ↓ */ SecureHydrationWithChecksum::class, /* --------------- ↑ */
 | 
				
			||||||
 | 
					            /* ↓ */ NormalizeServerMemoSansDataForJavaScript::class, /* -- ↑ */
 | 
				
			||||||
 | 
					            /* ↓ */ HashDataPropertiesForDirtyDetection::class, /* ------- ↑ */
 | 
				
			||||||
 | 
					            /* ↓                                                           ↑ */
 | 
				
			||||||
 | 
					            /* ↓    Hydrate Stuff                                          ↑ */
 | 
				
			||||||
 | 
					            /* ↓ */ HydratePublicProperties::class, /* ------------------- ↑ */
 | 
				
			||||||
 | 
					            /* ↓ */ CallPropertyHydrationHooks::class, /* ---------------- ↑ */
 | 
				
			||||||
 | 
					            /* ↓ */ CallHydrationHooks::class, /* ------------------------ ↑ */
 | 
				
			||||||
 | 
					            /* ↓                                                           ↑ */
 | 
				
			||||||
 | 
					            /* ↓    Update Stuff                                           ↑ */
 | 
				
			||||||
 | 
					            /* ↓ */ PerformDataBindingUpdates::class, /* ----------------- ↑ */
 | 
				
			||||||
 | 
					            /* ↓ */ PerformActionCalls::class, /* ------------------------ ↑ */
 | 
				
			||||||
 | 
					            /* ↓ */ PerformEventEmissions::class, /* --------------------- ↑ */
 | 
				
			||||||
 | 
					            /* ↓                                                           ↑ */
 | 
				
			||||||
 | 
					            /* ↓    Output Stuff                                           ↑ */
 | 
				
			||||||
 | 
					            /* ↓ */ RenderView::class, /* -------------------------------- ↑ */
 | 
				
			||||||
 | 
					            /* ↓ */ NormalizeComponentPropertiesForJavaScript::class, /* - ↑ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        LifecycleManager::registerInitialDehydrationMiddleware([
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /* Initial Response */
 | 
				
			||||||
 | 
					            /* ↑ */ [SecureHydrationWithChecksum::class, 'dehydrate'],
 | 
				
			||||||
 | 
					            /* ↑ */ [NormalizeServerMemoSansDataForJavaScript::class, 'dehydrate'],
 | 
				
			||||||
 | 
					            /* ↑ */ [HydratePublicProperties::class, 'dehydrate'],
 | 
				
			||||||
 | 
					            /* ↑ */ [CallPropertyHydrationHooks::class, 'dehydrate'],
 | 
				
			||||||
 | 
					            /* ↑ */ [CallHydrationHooks::class, 'initialDehydrate'],
 | 
				
			||||||
 | 
					            /* ↑ */ [RenderView::class, 'dehydrate'],
 | 
				
			||||||
 | 
					            /* ↑ */ [NormalizeComponentPropertiesForJavaScript::class, 'dehydrate'],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        LifecycleManager::registerInitialHydrationMiddleware([
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                [CallHydrationHooks::class, 'initialHydrate'],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected function bypassTheseMiddlewaresDuringLivewireRequests(array $middlewareToExclude)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (! Livewire::isProbablyLivewireRequest()) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $kernel = $this->app->make(\Illuminate\Contracts\Http\Kernel::class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $openKernel = new ObjectPrybar($kernel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $middleware = $openKernel->getProperty('middleware');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $openKernel->setProperty('middleware', array_diff($middleware, $middlewareToExclude));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected function publishesToGroups(array $paths, $groups = null)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (is_null($groups)) {
 | 
				
			||||||
 | 
					            $this->publishes($paths);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        foreach ((array) $groups as $group) {
 | 
				
			||||||
 | 
					            $this->publishes($paths, $group);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										62
									
								
								resources/assets/js/views/common/search.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										62
									
								
								resources/assets/js/views/common/search.js
									
									
									
									
										vendored
									
									
								
							@@ -1,62 +0,0 @@
 | 
				
			|||||||
/**
 | 
					 | 
				
			||||||
 * First we will load all of this project's JavaScript dependencies which
 | 
					 | 
				
			||||||
 * includes Vue and other libraries. It is a great starting point when
 | 
					 | 
				
			||||||
 * building robust, powerful web applications using Vue and Laravel.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
require('./../../bootstrap');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import Vue from 'vue';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import axios from 'axios';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import NProgress from 'nprogress';
 | 
					 | 
				
			||||||
import 'nprogress/nprogress.css';
 | 
					 | 
				
			||||||
import NProgressAxios from './../../plugins/nprogress-axios';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import clickOutside from './../../directives/click-ouside.js';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Vue.directive('click-outside', clickOutside);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const search = new Vue({
 | 
					 | 
				
			||||||
    el: '#global-search',
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    data: function () {
 | 
					 | 
				
			||||||
        return {
 | 
					 | 
				
			||||||
            show: false,
 | 
					 | 
				
			||||||
            count:0,
 | 
					 | 
				
			||||||
            keyword: '',
 | 
					 | 
				
			||||||
            items: {}
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    methods:{
 | 
					 | 
				
			||||||
        onChange() {
 | 
					 | 
				
			||||||
            this.show = false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (this.keyword.length) {
 | 
					 | 
				
			||||||
                axios.get(url + '/common/search', {
 | 
					 | 
				
			||||||
                    params: {
 | 
					 | 
				
			||||||
                        keyword: this.keyword
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                  })
 | 
					 | 
				
			||||||
                .then(response => {
 | 
					 | 
				
			||||||
                    this.items = response.data;
 | 
					 | 
				
			||||||
                    this.count = Object.keys(this.items).length;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if (this.count) {
 | 
					 | 
				
			||||||
                        this.show = true;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                })
 | 
					 | 
				
			||||||
                .catch(error => {
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        closeResult() {
 | 
					 | 
				
			||||||
            this.show = false;
 | 
					 | 
				
			||||||
            this.count = 0;
 | 
					 | 
				
			||||||
            this.items = {};
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
							
								
								
									
										42
									
								
								resources/views/livewire/common/search.blade.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								resources/views/livewire/common/search.blade.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					<form wire:click.stop class="navbar-search navbar-search-light form-inline mb-0" id="navbar-search-main" autocomplete="off">
 | 
				
			||||||
 | 
					    <div class="form-group mb-0 mr-sm-3">
 | 
				
			||||||
 | 
					        <div class="input-group input-group-alternative input-group-merge">
 | 
				
			||||||
 | 
					            <div class="input-group-prepend">
 | 
				
			||||||
 | 
					                <span class="input-group-text"><i class="fa fa-search"></i></span>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <input type="text" name="search" wire:model.debounce.500ms="keyword" class="form-control" autocomplete="off" placeholder="{{ trans('general.search') }}">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            @if($results)
 | 
				
			||||||
 | 
					            <div class="dropdown-menu dropdown-menu-xl dropdown-menu-center show" ref="menu">
 | 
				
			||||||
 | 
					                <div class="list-group list-group-flush">
 | 
				
			||||||
 | 
					                @foreach($results as $result)
 | 
				
			||||||
 | 
					                <a class="list-group-item list-group-item-action" href="{{ $result->href }}">
 | 
				
			||||||
 | 
					                    <div class="row align-items-center">
 | 
				
			||||||
 | 
					                        <div class="col ml--2">
 | 
				
			||||||
 | 
					                            <div class="d-flex justify-content-between align-items-center">
 | 
				
			||||||
 | 
					                                <div>
 | 
				
			||||||
 | 
					                                    <div class="name">{{ $result->name }}</div>
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
 | 
					                                <div class="text-muted">
 | 
				
			||||||
 | 
					                                    <span class="type">{{ $result->type }}</span>
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </a>
 | 
				
			||||||
 | 
					                @endforeach
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            @endif
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</form>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@push('scripts_end')
 | 
				
			||||||
 | 
					<script type="text/javascript">
 | 
				
			||||||
 | 
					    $(window).click(function() {
 | 
				
			||||||
 | 
					        Livewire.emit('resetKeyword');
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					@endpush
 | 
				
			||||||
@@ -5,40 +5,7 @@
 | 
				
			|||||||
            @stack('navbar_search')
 | 
					            @stack('navbar_search')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            @can('read-common-search')
 | 
					            @can('read-common-search')
 | 
				
			||||||
                <form class="navbar-search navbar-search-light form-inline mb-0" id="navbar-search-main" autocomplete="off">
 | 
					                <livewire:common.search />
 | 
				
			||||||
                    <div id="global-search" class="form-group mb-0 mr-sm-3">
 | 
					 | 
				
			||||||
                        <div class="input-group input-group-alternative input-group-merge">
 | 
					 | 
				
			||||||
                            <div class="input-group-prepend">
 | 
					 | 
				
			||||||
                                <span class="input-group-text"><i class="fa fa-search"></i></span>
 | 
					 | 
				
			||||||
                            </div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            <input type="text" name="search" v-model="keyword" @input="onChange" v-click-outside="closeResult" class="form-control" autocomplete="off" placeholder="{{ trans('general.search') }}">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            <div class="dropdown-menu dropdown-menu-xl dropdown-menu-center" ref="menu" :class="[{show: show}]">
 | 
					 | 
				
			||||||
                                <div class="list-group list-group-flush">
 | 
					 | 
				
			||||||
                                    <a class="list-group-item list-group-item-action" :href="item.href" v-for="(item, index) in items">
 | 
					 | 
				
			||||||
                                        <div class="row align-items-center">
 | 
					 | 
				
			||||||
                                            <div class="col ml--2">
 | 
					 | 
				
			||||||
                                                <div class="d-flex justify-content-between align-items-center">
 | 
					 | 
				
			||||||
                                                    <div>
 | 
					 | 
				
			||||||
                                                        <div class="name" v-text="item.name"></div>
 | 
					 | 
				
			||||||
                                                    </div>
 | 
					 | 
				
			||||||
                                                    <div class="text-muted">
 | 
					 | 
				
			||||||
                                                        <span class="type" v-text="item.type"></span>
 | 
					 | 
				
			||||||
                                                    </div>
 | 
					 | 
				
			||||||
                                                </div>
 | 
					 | 
				
			||||||
                                            </div>
 | 
					 | 
				
			||||||
                                        </div>
 | 
					 | 
				
			||||||
                                    </a>
 | 
					 | 
				
			||||||
                                </div>
 | 
					 | 
				
			||||||
                            </div>
 | 
					 | 
				
			||||||
                        </div>
 | 
					 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    <button type="button" class="close" data-action="search-close" data-target="#navbar-search-main" aria-label="Close">
 | 
					 | 
				
			||||||
                        <span aria-hidden="true">×</span>
 | 
					 | 
				
			||||||
                    </button>
 | 
					 | 
				
			||||||
                </form>
 | 
					 | 
				
			||||||
            @endcan
 | 
					            @endcan
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <ul class="navbar-nav align-items-center ml-md-auto">
 | 
					            <ul class="navbar-nav align-items-center ml-md-auto">
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,8 +5,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @stack('scripts_start')
 | 
					    @stack('scripts_start')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <script src="{{ asset('public/js/common/search.js?v=' . version('short')) }}"></script>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @stack('charts')
 | 
					    @stack('charts')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <script src="{{ asset('public/vendor/chart.js/dist/Chart.min.js') }}"></script>
 | 
					    <script src="{{ asset('public/vendor/chart.js/dist/Chart.min.js') }}"></script>
 | 
				
			||||||
@@ -137,4 +135,9 @@
 | 
				
			|||||||
    @stack('body_scripts')
 | 
					    @stack('body_scripts')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @livewireScripts
 | 
					    @livewireScripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Livewire -->
 | 
				
			||||||
 | 
					    <script type="text/javascript">
 | 
				
			||||||
 | 
					        window.livewire_app_url = {{ company_id() }};
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
@stack('scripts_end')
 | 
					@stack('scripts_end')
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,8 +39,6 @@ Route::group(['prefix' => 'common'], function () {
 | 
				
			|||||||
    Route::get('items/{item}/disable', 'Common\Items@disable')->name('items.disable');
 | 
					    Route::get('items/{item}/disable', 'Common\Items@disable')->name('items.disable');
 | 
				
			||||||
    Route::resource('items', 'Common\Items', ['middleware' => ['money', 'dropzone']]);
 | 
					    Route::resource('items', 'Common\Items', ['middleware' => ['money', 'dropzone']]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Route::resource('search', 'Common\Search');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Route::post('notifications/disable', 'Common\Notifications@disable')->name('notifications.disable');
 | 
					    Route::post('notifications/disable', 'Common\Notifications@disable')->name('notifications.disable');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Route::post('bulk-actions/{group}/{type}', 'Common\BulkActions@action')->name('bulk-actions.action');
 | 
					    Route::post('bulk-actions/{group}/{type}', 'Common\BulkActions@action')->name('bulk-actions.action');
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								webpack.mix.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								webpack.mix.js
									
									
									
									
										vendored
									
									
								
							@@ -44,7 +44,6 @@ mix
 | 
				
			|||||||
    .js('resources/assets/js/views/common/imports.js', 'public/js/common')
 | 
					    .js('resources/assets/js/views/common/imports.js', 'public/js/common')
 | 
				
			||||||
    .js('resources/assets/js/views/common/items.js', 'public/js/common')
 | 
					    .js('resources/assets/js/views/common/items.js', 'public/js/common')
 | 
				
			||||||
    .js('resources/assets/js/views/common/reports.js', 'public/js/common')
 | 
					    .js('resources/assets/js/views/common/reports.js', 'public/js/common')
 | 
				
			||||||
    .js('resources/assets/js/views/common/search.js', 'public/js/common')
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Sales
 | 
					    // Sales
 | 
				
			||||||
    .js('resources/assets/js/views/sales/revenues.js', 'public/js/sales')
 | 
					    .js('resources/assets/js/views/sales/revenues.js', 'public/js/sales')
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user