mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2026-01-10 12:30:54 -05:00
* Client login, reset and update password page * Client dashboard, sidebar, PortalComposer.php * wip * Personal page & update for details * Invoices, paying & pagination.blade.php * Invoices, recurring invoice & buttons * Payments, link component * Payment methods * Breadcrums, clean up & wrap up * Remove format_date() method to formatDate on object * Payments - $this->render is now proxy for render() - Removed logic from Controller.php to ClientPortal.php - Added MakesDates to ClientGatewayToken.php - StripePaymentDriver.php now returns correct views - Refactor of adding new payment method - Ignoring all local builds for public/js/clients/* * Signature, wip * Fix "Pay now" on single invoice * Payments: - Added ProcessInvoicesInBulk request class - Refactor InvoiceController::bulk() - Displaying terms & payments - New signature.blade.php - Removed comment from webpack.mix.js * Quotes: - Refactor ProcessInvoicesInBulk.php to ProcessInvoicesInBulkRequest.php - Add new 'Quotes' field inside of PortalComposer.php - Added MakesDates to Quote.php - Added Quote::badgeForStatus() - Cleanup payment.blade.php - Quote showing and approving - New resource 'quotes' in client.php - New image for quotes, align-left.svg * Credits: - New 'credits' resource in client.php - Fixes for client.php typo * Breadcrumbs: - Quotes - Credits * Placeholder for translations. * Restore whereIn & client scope Co-authored-by: David Bomba <turbo124@gmail.com>
66 lines
4.2 KiB
PHP
66 lines
4.2 KiB
PHP
<div class="relative z-10 flex-shrink-0 flex h-16 bg-white shadow" xmlns:x-transition="http://www.w3.org/1999/xhtml">
|
|
<button @click.stop="sidebarOpen = true"
|
|
class="px-4 border-r border-gray-200 text-gray-500 focus:outline-none focus:bg-gray-100 focus:text-gray-600 md:hidden">
|
|
<svg class="h-6 w-6" stroke="currentColor" fill="none" viewBox="0 0 24 24">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h7"/>
|
|
</svg>
|
|
</button>
|
|
<div class="flex-1 px-4 flex justify-between">
|
|
<div class="flex-1 flex">
|
|
<div class="w-full flex md:ml-0">
|
|
<label for="search_field" class="sr-only">{{ ctrans('texts.search') }}</label>
|
|
<div class="relative w-full text-gray-400 focus-within:text-gray-600">
|
|
<div class="absolute inset-y-0 left-0 flex items-center pointer-events-none">
|
|
<svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20">
|
|
<path fill-rule="evenodd" clip-rule="evenodd"
|
|
d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z"/>
|
|
</svg>
|
|
</div>
|
|
<input id="search_field"
|
|
class="block w-full h-full pl-8 pr-3 py-2 rounded-md text-gray-900 placeholder-gray-500 focus:outline-none focus:placeholder-gray-400 sm:text-sm"
|
|
placeholder="Search"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="ml-4 flex items-center md:ml-6">
|
|
<button
|
|
class="p-1 text-gray-400 rounded-full hover:bg-gray-100 hover:text-gray-500 focus:outline-none focus:shadow-outline focus:text-gray-500">
|
|
<svg class="h-6 w-6" stroke="currentColor" fill="none" viewBox="0 0 24 24">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
|
d="M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9"/>
|
|
</svg>
|
|
</button>
|
|
<div @click.away="open = false" class="ml-3 relative" x-data="{ open: false }">
|
|
<div>
|
|
<button @click="open = !open"
|
|
class="max-w-xs flex items-center text-sm rounded-full focus:outline-none focus:shadow-outline">
|
|
<img class="h-8 w-8 rounded-full"
|
|
src="{{ auth()->user()->avatar() }}"
|
|
alt=""/>
|
|
<span class="ml-2">{{ auth()->user()->present()->name() }}</span>
|
|
</button>
|
|
</div>
|
|
<div x-show="open"
|
|
x-transition:enter="transition ease-out duration-100"
|
|
x-transition:enter-start="transform opacity-0 scale-95"
|
|
x-transition:enter-end="transform opacity-100 scale-100"
|
|
x-transition:leave="transition ease-in duration-75"
|
|
x-transition:leave-start="transform opacity-100 scale-100"
|
|
x-transition:leave-end="transform opacity-0 scale-95"
|
|
class="origin-top-right absolute right-0 mt-2 w-48 rounded-md shadow-lg">
|
|
<div class="py-1 rounded-md bg-white shadow-xs">
|
|
<a href="{{ route('client.profile.edit', ['client_contact' => auth()->user()->hashed_id]) }}"
|
|
class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 transition ease-in-out duration-150">
|
|
{{ ctrans('texts.profile') }}
|
|
</a>
|
|
<a href="{{ route('client.logout') }}"
|
|
class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 transition ease-in-out duration-150">
|
|
{{ ctrans('texts.logout') }}
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|