Compare commits
10 Commits
66862df44b
...
abf5ced6d7
| Author | SHA1 | Date | |
|---|---|---|---|
| abf5ced6d7 | |||
| 2a10f9af38 | |||
| b8cc8bd421 | |||
| dd950b5aba | |||
| 124ab46507 | |||
| 206ea2d35c | |||
| 027278c216 | |||
| 22dfb12948 | |||
| 5cd8c05a7c | |||
| 341421d2a0 |
@@ -0,0 +1,223 @@
|
||||
# Shiplogic Integration Testing Guide
|
||||
|
||||
This guide explains how to test the Shiplogic API integration with mocked responses.
|
||||
|
||||
## Files Created
|
||||
|
||||
### 1. **routes/shiplogic-mock.php** - Mock API Endpoints
|
||||
Routes that simulate the Shiplogic API responses for local testing without hitting the live API.
|
||||
|
||||
**Endpoints:**
|
||||
- `POST /api/v1/mock/rates` - Returns available shipping rates/service levels
|
||||
- `POST /api/v1/mock/shipments` - Returns created shipment confirmation
|
||||
- `GET /api/v1/mock/shipments/label` - Returns waybill/label PDF
|
||||
- `GET /api/v1/mock/shipments/label/stickers` - Returns sticker labels PDF
|
||||
|
||||
**To Enable:**
|
||||
Add this line to `routes/web.php`:
|
||||
```php
|
||||
include base_path('routes/shiplogic-mock.php');
|
||||
```
|
||||
|
||||
Then mock routes are available at `http://localhost:8000/api/v1/mock/*`
|
||||
|
||||
### 2. **app/Testing/ShiplogicMockClient.php** - Test Helper
|
||||
PHP class for setting up HTTP mocking in tests. Uses Laravel's `Http::fake()` to intercept HTTP requests.
|
||||
|
||||
**Usage in Tests:**
|
||||
```php
|
||||
public function test_something()
|
||||
{
|
||||
ShiplogicMockClient::setup();
|
||||
|
||||
// Now all requests to shiplogic.* URLs will return mocked responses
|
||||
// Run your shipment creation logic here
|
||||
}
|
||||
```
|
||||
|
||||
### 3. **tests/Feature/ShipmentCreationTest.php** - Example Tests
|
||||
Two example test cases demonstrating:
|
||||
- End-to-end shipment creation workflow
|
||||
- ECO service level selection verification
|
||||
|
||||
## Test Flow
|
||||
|
||||
### Local Testing with Mock Routes
|
||||
|
||||
1. **Start Laravel server:**
|
||||
```bash
|
||||
php artisan serve
|
||||
```
|
||||
|
||||
2. **Update CourierService.php** to point to mock endpoints temporarily:
|
||||
```php
|
||||
// In CourierService.php constructor or config
|
||||
// Change: $this->baseUrl = config('services.shiplogic.api_base_url');
|
||||
// To test locally: $this->baseUrl = 'http://localhost:8000/api/v1/mock';
|
||||
```
|
||||
|
||||
3. **Trigger shipment creation** via Filament UI or directly:
|
||||
```php
|
||||
// Create an order
|
||||
$order = Order::factory()->create([...]);
|
||||
|
||||
// Trigger ReadyToShipIntent event
|
||||
event(new App\Events\ReadyToShipIntent($order));
|
||||
```
|
||||
|
||||
4. **Check logs** for detailed request/response logging:
|
||||
```bash
|
||||
tail -f storage/logs/laravel.log
|
||||
```
|
||||
|
||||
### Unit/Feature Testing with HTTP Mocking
|
||||
|
||||
1. **Run the test:**
|
||||
```bash
|
||||
php artisan test tests/Feature/ShipmentCreationTest.php
|
||||
```
|
||||
|
||||
2. **Test will:**
|
||||
- Mock all HTTP requests to shiplogic API
|
||||
- Create test order with required fields
|
||||
- Trigger shipment creation
|
||||
- Assert order has shipment metadata
|
||||
- Assert PDFs were stored locally
|
||||
|
||||
## Logging Details
|
||||
|
||||
The enhanced CourierService now logs at each stage:
|
||||
|
||||
### GET Rates Request
|
||||
```
|
||||
INFO: Fetching shipping rates from Shiplogic
|
||||
- order_uuid: 019b8335-4b47-7087-8b93-73f6aa39ee7a
|
||||
- api_url: https://api.shiplogic.com/rates
|
||||
- collection_address: {...}
|
||||
- delivery_address: {...}
|
||||
- parcel_dimensions: {...}
|
||||
```
|
||||
|
||||
### GET Rates Response
|
||||
```
|
||||
INFO: Rates API response received
|
||||
- status: 200
|
||||
- successful: true
|
||||
|
||||
OR
|
||||
|
||||
ERROR: Rates API error response
|
||||
- status: 400 (or other error code)
|
||||
- error_message: Invalid address format
|
||||
- full_response: {...}
|
||||
```
|
||||
|
||||
### CREATE Shipment Request
|
||||
```
|
||||
INFO: Creating Shiplogic shipment
|
||||
- order_uuid: 019b8335-4b47-7087-8b93-73f6aa39ee7a
|
||||
- order_number: ORDER-001
|
||||
- customer: John Doe
|
||||
- delivery_address: Apt 5B, 123 Main Street
|
||||
- service_level: FEDEX_INTERNATIONAL_ECONOMY
|
||||
- api_url: https://api.shiplogic.com/shipments
|
||||
- payload: {...}
|
||||
```
|
||||
|
||||
### CREATE Shipment Response
|
||||
```
|
||||
INFO: Shipment created in API
|
||||
- shipment_id: 550e8400-e29b-41d4-a716-446655440002
|
||||
- tracking_reference: SHP123456789
|
||||
```
|
||||
|
||||
## Debugging "Unknown Error"
|
||||
|
||||
If you see `ERROR: Failed to get shipping rates {"error":"Failed to fetch rates: Unknown error"}`:
|
||||
|
||||
1. **Enable detailed logging** - Now included in updated CourierService
|
||||
2. **Check the full API response** - Logs will now show the actual error response
|
||||
3. **Common issues:**
|
||||
- Invalid API key format
|
||||
- Missing required address fields
|
||||
- Invalid parcel dimensions
|
||||
- API endpoint URL incorrect
|
||||
- Network/SSL certificate issues
|
||||
|
||||
## Running Tests
|
||||
|
||||
```bash
|
||||
# Run all shipment creation tests
|
||||
php artisan test tests/Feature/ShipmentCreationTest.php
|
||||
|
||||
# Run specific test
|
||||
php artisan test tests/Feature/ShipmentCreationTest.php::test_shipment_creation_with_mock_api
|
||||
|
||||
# Run with verbose output
|
||||
php artisan test tests/Feature/ShipmentCreationTest.php -v
|
||||
|
||||
# Run and dump test database
|
||||
php artisan test tests/Feature/ShipmentCreationTest.php --debug
|
||||
```
|
||||
|
||||
## Mock Response Structure
|
||||
|
||||
All mock responses follow the actual Shiplogic API structure:
|
||||
|
||||
### Rates Response
|
||||
```json
|
||||
{
|
||||
"id": "550e8400-e29b-41d4-a716-446655440001",
|
||||
"company_shipment_rates": [
|
||||
{
|
||||
"id": "9f67ff00-7a82-4d81-9481-4c5d8c8f1a01",
|
||||
"company_code": "FEDEX",
|
||||
"company_name": "FedEx",
|
||||
"service_level": {
|
||||
"id": "123456790",
|
||||
"code": "FEDEX_INTERNATIONAL_ECONOMY",
|
||||
"name": "International Economy",
|
||||
"description": "Economy service (ECO)"
|
||||
},
|
||||
"rate": 45.75,
|
||||
"currency": "GBP",
|
||||
"transit_days": "5-7",
|
||||
"delivery_guarantee_date": "2026-01-09"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Shipments Response
|
||||
```json
|
||||
{
|
||||
"id": "550e8400-e29b-41d4-a716-446655440002",
|
||||
"short_tracking_reference": "SHP123456789",
|
||||
"tracking_reference": "SHP-123456789-ABC",
|
||||
"customer_reference": "ORDER-12345",
|
||||
"company_code": "FEDEX",
|
||||
"service_level": {
|
||||
"code": "FEDEX_INTERNATIONAL_ECONOMY",
|
||||
"name": "International Economy"
|
||||
},
|
||||
"collection_min_date": "2026-01-04",
|
||||
"delivery_min_date": "2026-01-09",
|
||||
"status": "created",
|
||||
"created_at": "2026-01-03T12:42:56.000000Z"
|
||||
}
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. ✅ Add detailed logging to CourierService
|
||||
2. ✅ Create mock API routes and test helper
|
||||
3. **TODO:** Test with actual order to capture real error
|
||||
4. **TODO:** Fix identified Shiplogic API integration issue
|
||||
5. **TODO:** Verify PDFs are being fetched and attached correctly
|
||||
|
||||
## Configuration Reference
|
||||
|
||||
Key configuration files for Shiplogic:
|
||||
- `config/services.php` - API credentials and collection address
|
||||
- `config/courier.php` - Courier service settings
|
||||
- `.env` - Environment variables (SHIPLOGIC_API_URL, SHIPLOGIC_API_KEY, collection address details)
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Events;
|
||||
|
||||
use App\Models\Order;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class InspectionFailed
|
||||
{
|
||||
use Dispatchable, SerializesModels;
|
||||
|
||||
public function __construct(
|
||||
public Order $order,
|
||||
public string $reason = '',
|
||||
) {}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Events;
|
||||
|
||||
use App\Models\Order;
|
||||
use Illuminate\Broadcasting\Channel;
|
||||
use Illuminate\Broadcasting\InteractsWithBroadcasting;
|
||||
use Illuminate\Broadcasting\PrivateChannel;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class InspectionPassed
|
||||
{
|
||||
use Dispatchable, SerializesModels;
|
||||
|
||||
public function __construct(
|
||||
public Order $order,
|
||||
) {}
|
||||
|
||||
public function broadcastOn(): array
|
||||
{
|
||||
return [
|
||||
new PrivateChannel('channel-name'),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Events;
|
||||
|
||||
use App\Models\Order;
|
||||
use App\Models\CustomOrder;
|
||||
use Illuminate\Broadcasting\InteractsWithSockets;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class OrderMovedToAwaitingApproval
|
||||
{
|
||||
use Dispatchable, InteractsWithSockets, SerializesModels;
|
||||
|
||||
public function __construct(
|
||||
public Order|CustomOrder $order
|
||||
) {}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Events;
|
||||
|
||||
use App\Models\Order;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class OrderMovedToInspection
|
||||
{
|
||||
use Dispatchable, SerializesModels;
|
||||
|
||||
public function __construct(
|
||||
public Order $order,
|
||||
) {}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Events;
|
||||
|
||||
use App\Models\Order;
|
||||
use App\Models\CustomOrder;
|
||||
use Illuminate\Broadcasting\InteractsWithSockets;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class OrderMovedToPrep
|
||||
{
|
||||
use Dispatchable, InteractsWithSockets, SerializesModels;
|
||||
|
||||
public function __construct(
|
||||
public Order|CustomOrder $order
|
||||
) {}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Events;
|
||||
|
||||
use App\Models\Order;
|
||||
use App\Models\CustomOrder;
|
||||
use Illuminate\Broadcasting\InteractsWithSockets;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class OrderMovedToPrinting
|
||||
{
|
||||
use Dispatchable, InteractsWithSockets, SerializesModels;
|
||||
|
||||
public function __construct(
|
||||
public Order|CustomOrder $order
|
||||
) {}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Events;
|
||||
|
||||
use App\Models\Order;
|
||||
use App\Models\CustomOrder;
|
||||
use Illuminate\Broadcasting\InteractsWithSockets;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class OrderMovedToReadyForPrint
|
||||
{
|
||||
use Dispatchable, InteractsWithSockets, SerializesModels;
|
||||
|
||||
public function __construct(
|
||||
public Order|CustomOrder $order
|
||||
) {}
|
||||
}
|
||||
@@ -14,6 +14,7 @@ class OrderPacked
|
||||
public Order $order,
|
||||
public float $width,
|
||||
public float $length,
|
||||
public float $height,
|
||||
public float $weight,
|
||||
public ?int $packedBy = null,
|
||||
) {
|
||||
|
||||
@@ -79,6 +79,7 @@ class OpsController extends Controller
|
||||
$order->update([
|
||||
'packing_width' => $validated['width'],
|
||||
'packing_length' => $validated['length'],
|
||||
'packing_height' => $validated['height'],
|
||||
'packing_weight' => $validated['weight'],
|
||||
'packing_completed_at' => now(),
|
||||
'packed_by' => auth()->id(),
|
||||
@@ -92,7 +93,14 @@ class OpsController extends Controller
|
||||
]);
|
||||
|
||||
// Emit event to trigger Slack notification and Trello update
|
||||
\App\Events\OrderPacked::dispatch($order);
|
||||
\App\Events\OrderPacked::dispatch(
|
||||
$order,
|
||||
(float) $validated['width'],
|
||||
(float) $validated['length'],
|
||||
(float) $validated['height'],
|
||||
(float) $validated['weight'],
|
||||
auth()->id()
|
||||
);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
@@ -112,23 +120,23 @@ class OpsController extends Controller
|
||||
*/
|
||||
public function markInspectionPassed(Request $request, Order $order)
|
||||
{
|
||||
if ($order->status !== 'inspection') {
|
||||
if (! in_array($order->status, ['inspection', 'printing'])) {
|
||||
return response()->json([
|
||||
'error' => 'Order is not in inspection state',
|
||||
'error' => 'Order is not in inspection or printing state',
|
||||
'current_status' => $order->status,
|
||||
], 409);
|
||||
}
|
||||
|
||||
// Update status and emit event
|
||||
$order->update(['status' => 'packing']);
|
||||
// Update status to awaiting_collection (move to inspected list in Trello)
|
||||
$order->update(['status' => 'awaiting_collection']);
|
||||
|
||||
Log::info('Inspection passed via QR', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'marked_by' => auth()->user()->name,
|
||||
]);
|
||||
|
||||
// Emit event for listeners to handle Slack/Trello updates
|
||||
// TODO: Create InspectionPassed event
|
||||
// Emit event to trigger Slack/Trello updates
|
||||
\App\Events\InspectionPassed::dispatch($order);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
@@ -148,9 +156,9 @@ class OpsController extends Controller
|
||||
'issue_description' => ['required', 'string', 'max:500'],
|
||||
]);
|
||||
|
||||
if ($order->status !== 'inspection') {
|
||||
if (! in_array($order->status, ['inspection', 'printing'])) {
|
||||
return response()->json([
|
||||
'error' => 'Order is not in inspection state',
|
||||
'error' => 'Order is not in inspection or printing state',
|
||||
'current_status' => $order->status,
|
||||
], 409);
|
||||
}
|
||||
@@ -168,7 +176,7 @@ class OpsController extends Controller
|
||||
]);
|
||||
|
||||
// Emit event for listeners to alert ops
|
||||
// TODO: Create InspectionFailed event
|
||||
\App\Events\InspectionFailed::dispatch($order, $validated['issue_description']);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
@@ -182,23 +190,19 @@ class OpsController extends Controller
|
||||
*/
|
||||
private function getAvailableActions(Order $order): array
|
||||
{
|
||||
$actions = [];
|
||||
|
||||
match ($order->status) {
|
||||
'inspection' => [
|
||||
$actions['markInspectionPassed'] = true,
|
||||
$actions['flagInspectionIssue'] = true,
|
||||
return match ($order->status) {
|
||||
'inspection', 'printing' => [
|
||||
'markInspectionPassed' => true,
|
||||
'flagInspectionIssue' => true,
|
||||
],
|
||||
'packing' => [
|
||||
$actions['confirmPacking'] = true,
|
||||
'confirmPacking' => true,
|
||||
],
|
||||
'ready_to_ship', 'awaiting_collection', 'in_transit' => [
|
||||
$actions['readOnly'] = true,
|
||||
'readOnly' => true,
|
||||
],
|
||||
default => []
|
||||
};
|
||||
|
||||
return $actions;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -235,4 +239,119 @@ class OpsController extends Controller
|
||||
"QR-{$order->order_number}.pdf"
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-download shipment PDFs from Shiplogic API
|
||||
*
|
||||
* POST /ops/orders/{id}/redownload-pdfs
|
||||
*/
|
||||
public function redownloadShipmentPdfs(Order $order)
|
||||
{
|
||||
// Authorize
|
||||
if (! auth()->user()->can('access-ops')) {
|
||||
abort(403, 'Unauthorized to access ops interface');
|
||||
}
|
||||
|
||||
// Only allow for orders with shipments
|
||||
if (! $order->courier_shipment_id) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'No shipment exists for this order',
|
||||
], 422);
|
||||
}
|
||||
|
||||
try {
|
||||
$courierService = new \App\Services\CourierService();
|
||||
$result = $courierService->redownloadShipmentPdfs($order);
|
||||
|
||||
Log::info('Shipment PDFs re-downloaded via ops', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'order_number' => $order->order_number,
|
||||
'user_id' => auth()->id(),
|
||||
'user_name' => auth()->user()->name,
|
||||
'success' => $result['success'],
|
||||
]);
|
||||
|
||||
if ($result['success']) {
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => $result['message'],
|
||||
'sticker_path' => $result['sticker_path'],
|
||||
'waybill_path' => $result['waybill_path'],
|
||||
]);
|
||||
} else {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => $result['message'],
|
||||
], 500);
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Failed to re-download shipment PDFs via ops', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'Failed to re-download PDFs: ' . $e->getMessage(),
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark order as ready for collection and move Trello card
|
||||
*
|
||||
* POST /ops/orders/{id}/ready-for-collection
|
||||
*/
|
||||
public function markReadyForCollection(Order $order)
|
||||
{
|
||||
// Authorize
|
||||
if (! auth()->user()->can('access-ops')) {
|
||||
abort(403, 'Unauthorized to access ops interface');
|
||||
}
|
||||
|
||||
// Only allow for orders with shipments in ready_to_ship status
|
||||
if (! $order->courier_shipment_id || $order->status !== 'ready_to_ship') {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'Order must have a shipment and be in Ready to Ship status',
|
||||
], 422);
|
||||
}
|
||||
|
||||
try {
|
||||
// Update order status
|
||||
$order->update([
|
||||
'status' => 'awaiting_collection',
|
||||
'courier_status' => 'awaiting_collection',
|
||||
]);
|
||||
|
||||
// Move Trello card to Awaiting Collection
|
||||
if ($order->trello_card_id) {
|
||||
$trelloService = new \App\Services\TrelloService();
|
||||
$trelloService->moveCard($order->trello_card_id, 'Awaiting Collection');
|
||||
}
|
||||
|
||||
Log::info('Order marked ready for collection via ops', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'order_number' => $order->order_number,
|
||||
'user_id' => auth()->id(),
|
||||
'user_name' => auth()->user()->name,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => 'Order moved to Awaiting Collection',
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Failed to mark order ready for collection', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'Failed to mark ready for collection: ' . $e->getMessage(),
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -116,7 +116,15 @@ class OrderController extends Controller
|
||||
'customer_name' => 'required|string|max:255',
|
||||
'customer_email' => 'required|email',
|
||||
'customer_phone' => 'required|string|max:20',
|
||||
'shipping_address' => 'required|string|max:500',
|
||||
'shipping_street_address' => 'required|string|max:255',
|
||||
'shipping_unit_number' => 'nullable|string|max:255',
|
||||
'shipping_local_area' => 'required|string|max:255',
|
||||
'shipping_city' => 'required|string|max:255',
|
||||
'shipping_zone' => 'required|string|max:255',
|
||||
'shipping_postcode' => 'required|string|max:20',
|
||||
'shipping_country' => 'required|string|max:255',
|
||||
'shipping_type' => 'required|in:residential,business',
|
||||
'business_name' => 'nullable|string|max:255',
|
||||
'notes' => 'nullable|string|max:500'
|
||||
]);
|
||||
|
||||
@@ -219,7 +227,15 @@ class OrderController extends Controller
|
||||
'customer_name' => $request->input('customer_name'),
|
||||
'customer_email' => $request->input('customer_email'),
|
||||
'customer_phone' => $request->input('customer_phone'),
|
||||
'shipping_address' => $request->input('shipping_address'),
|
||||
'shipping_street_address' => $request->input('shipping_street_address'),
|
||||
'shipping_unit_number' => $request->input('shipping_unit_number'),
|
||||
'shipping_local_area' => $request->input('shipping_local_area'),
|
||||
'shipping_city' => $request->input('shipping_city'),
|
||||
'shipping_zone' => $request->input('shipping_zone'),
|
||||
'shipping_postcode' => $request->input('shipping_postcode'),
|
||||
'shipping_country' => $request->input('shipping_country'),
|
||||
'shipping_type' => $request->input('shipping_type'),
|
||||
'business_name' => $request->input('business_name'),
|
||||
];
|
||||
|
||||
if ($request->filled('notes')) {
|
||||
|
||||
@@ -47,6 +47,7 @@ class PackingController extends Controller
|
||||
$order->update([
|
||||
'packing_width' => $validated['width'],
|
||||
'packing_length' => $validated['length'],
|
||||
'packing_height' => $validated['height'],
|
||||
'packing_weight' => $validated['weight'],
|
||||
'packing_completed_at' => now(),
|
||||
'packed_by' => Auth::id(),
|
||||
|
||||
@@ -3,6 +3,11 @@
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Events\ReadyToShipIntent;
|
||||
use App\Events\OrderMovedToPrep;
|
||||
use App\Events\OrderMovedToAwaitingApproval;
|
||||
use App\Events\OrderMovedToReadyForPrint;
|
||||
use App\Events\OrderMovedToPrinting;
|
||||
use App\Events\OrderMovedToInspection;
|
||||
use App\Models\Order;
|
||||
use App\Models\CustomOrder;
|
||||
use Illuminate\Http\Request;
|
||||
@@ -106,15 +111,48 @@ class TrelloWebhookController extends Controller
|
||||
|
||||
// Handle list-specific actions
|
||||
match ($listName) {
|
||||
'Ready to Ship' => $this->handleReadyToShipIntent($order, $cardId),
|
||||
'Awaiting Collection' => $this->handleAwaitingCollectionIntent($order, $cardId),
|
||||
'In Transit' => Log::info('Card in transit', ['order_uuid' => $order->uuid]),
|
||||
'Done' => Log::info('Card completed', ['order_uuid' => $order->uuid]),
|
||||
'Prep/Design' => (function () use ($order) {
|
||||
$order->update(['status' => 'prep']);
|
||||
OrderMovedToPrep::dispatch($order);
|
||||
})(),
|
||||
'Awaiting Customer Approval' => (function () use ($order) {
|
||||
$order->update(['status' => 'awaiting_approval']);
|
||||
OrderMovedToAwaitingApproval::dispatch($order);
|
||||
})(),
|
||||
'Ready for Print' => (function () use ($order) {
|
||||
$order->update(['status' => 'ready_for_print']);
|
||||
OrderMovedToReadyForPrint::dispatch($order);
|
||||
})(),
|
||||
'Printing' => (function () use ($order) {
|
||||
$order->update(['status' => 'printing']);
|
||||
OrderMovedToPrinting::dispatch($order);
|
||||
})(),
|
||||
'Inspection' => (function () use ($order) {
|
||||
$order->update(['status' => 'inspection']);
|
||||
OrderMovedToInspection::dispatch($order);
|
||||
})(),
|
||||
'Packing' => $order->update(['status' => 'packing']),
|
||||
'Ready to Ship' => (function () use ($order, $cardId) {
|
||||
$order->update(['status' => 'ready_to_ship']);
|
||||
$this->handleReadyToShipIntent($order, $cardId);
|
||||
})(),
|
||||
'Awaiting Collection' => (function () use ($order, $cardId) {
|
||||
$order->update(['status' => 'awaiting_collection']);
|
||||
$this->handleAwaitingCollectionIntent($order, $cardId);
|
||||
})(),
|
||||
'In Transit' => $order->update(['status' => 'in_transit']),
|
||||
'Done' => $order->update(['status' => 'completed']),
|
||||
default => Log::debug('Card moved to list', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'list' => $listName,
|
||||
]),
|
||||
};
|
||||
|
||||
Log::info('Order status updated from Trello', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'list' => $listName,
|
||||
'status' => $order->status,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,17 +4,21 @@ namespace App\Listeners;
|
||||
|
||||
use App\Events\ReadyToShipIntent;
|
||||
use App\Services\CourierService;
|
||||
use App\Services\TrelloService;
|
||||
use App\Events\ShipmentCreated;
|
||||
use App\Events\ShipmentCreationFailed;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class CreateShipmentOnReadyToShip
|
||||
{
|
||||
/**
|
||||
* Create the event listener.
|
||||
*/
|
||||
public function __construct(protected CourierService $courierService)
|
||||
{
|
||||
public function __construct(
|
||||
protected CourierService $courierService,
|
||||
protected TrelloService $trelloService,
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -31,6 +35,11 @@ class CreateShipmentOnReadyToShip
|
||||
try {
|
||||
$result = $this->courierService->createShipmentForOrder($order);
|
||||
|
||||
// Attach shipment PDFs to Trello card
|
||||
if ($order->trello_card_id) {
|
||||
$this->attachShipmentDocumentsToTrello($order, $result);
|
||||
}
|
||||
|
||||
// Emit event to trigger Slack/Trello updates
|
||||
ShipmentCreated::dispatch(
|
||||
$order,
|
||||
@@ -49,4 +58,48 @@ class CreateShipmentOnReadyToShip
|
||||
ShipmentCreationFailed::dispatch($order, $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attach shipment documents (label and sticker) to the Trello card
|
||||
*/
|
||||
private function attachShipmentDocumentsToTrello($order, array $result): void
|
||||
{
|
||||
if (! $result['sticker_path'] && ! $result['waybill_path']) {
|
||||
Log::warning('No shipment documents to attach', ['order_uuid' => $order->uuid]);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// Attach sticker PDF
|
||||
if ($result['sticker_path'] && Storage::disk('public')->exists($result['sticker_path'])) {
|
||||
$stickerUrl = asset('storage/' . $result['sticker_path']);
|
||||
$this->trelloService->attachFile($order->trello_card_id, 'Shipment Sticker.pdf', $stickerUrl);
|
||||
Log::info('Sticker attached to Trello card', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'card_id' => $order->trello_card_id,
|
||||
]);
|
||||
}
|
||||
|
||||
// Attach waybill/label PDF
|
||||
if ($result['waybill_path'] && Storage::disk('public')->exists($result['waybill_path'])) {
|
||||
$waybillUrl = asset('storage/' . $result['waybill_path']);
|
||||
$this->trelloService->attachFile($order->trello_card_id, 'Shipment Label.pdf', $waybillUrl);
|
||||
Log::info('Waybill attached to Trello card', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'card_id' => $order->trello_card_id,
|
||||
]);
|
||||
}
|
||||
|
||||
Log::info('Shipment documents attached to Trello card', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'card_id' => $order->trello_card_id,
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Failed to attach shipment documents to Trello', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use App\Events\InspectionPassed;
|
||||
use App\Services\TrelloService;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class MoveCardToPackingOnInspectionPassed implements ShouldQueue
|
||||
{
|
||||
use InteractsWithQueue;
|
||||
|
||||
public function __construct(
|
||||
protected TrelloService $trello,
|
||||
) {}
|
||||
|
||||
public function handle(InspectionPassed $event): void
|
||||
{
|
||||
$order = $event->order;
|
||||
|
||||
if (!$order->trello_card_id) {
|
||||
Log::debug('No Trello card to move', ['order_uuid' => $order->uuid]);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// Move card to Packing list
|
||||
$success = $this->trello->moveCard($order->trello_card_id, 'Packing');
|
||||
|
||||
if ($success) {
|
||||
Log::info('Trello card moved to Packing', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'card_id' => $order->trello_card_id,
|
||||
]);
|
||||
} else {
|
||||
Log::warning('Failed to move Trello card to Packing', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'card_id' => $order->trello_card_id,
|
||||
]);
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Error moving Trello card to Packing', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use App\Events\OrderMovedToInspection;
|
||||
use App\Services\SlackNotifierService;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class NotifySlackOnCardMovedToInspection
|
||||
{
|
||||
public function __construct(
|
||||
protected SlackNotifierService $slack,
|
||||
) {}
|
||||
|
||||
public function handle(OrderMovedToInspection $event): void
|
||||
{
|
||||
$order = $event->order;
|
||||
|
||||
$message = "🔍 Order Moved to Inspection\n" .
|
||||
"Order: #{$order->order_number}\n" .
|
||||
"Status: Ready for Quality Check";
|
||||
|
||||
// Notify Slack #production
|
||||
$this->slack->production($message);
|
||||
|
||||
Log::info('Card moved to inspection notification sent to production', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'order_number' => $order->order_number,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use App\Events\InspectionFailed;
|
||||
use App\Services\SlackNotifierService;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class NotifySlackOnInspectionFailed
|
||||
{
|
||||
public function __construct(
|
||||
protected SlackNotifierService $slack,
|
||||
) {}
|
||||
|
||||
public function handle(InspectionFailed $event): void
|
||||
{
|
||||
$order = $event->order;
|
||||
|
||||
$message = "⚠️ Order Inspection Failed\n" .
|
||||
"Order: #{$order->order_number}\n" .
|
||||
"Reason: {$event->reason}\n" .
|
||||
"Status: Awaiting Review";
|
||||
|
||||
// Notify Slack #ops-alerts
|
||||
$this->slack->opsAlerts($message);
|
||||
|
||||
Log::info('Inspection failed notification sent to ops-alerts', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'order_number' => $order->order_number,
|
||||
'reason' => $event->reason,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use App\Events\InspectionPassed;
|
||||
use App\Services\SlackNotifierService;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class NotifySlackOnInspectionPassed
|
||||
{
|
||||
public function __construct(
|
||||
protected SlackNotifierService $slack,
|
||||
) {}
|
||||
|
||||
public function handle(InspectionPassed $event): void
|
||||
{
|
||||
$order = $event->order;
|
||||
|
||||
$message = "✅ Order Inspection Passed\n" .
|
||||
"Order: #{$order->order_number}\n" .
|
||||
"Status: Ready for Packing";
|
||||
|
||||
// Notify Slack #production
|
||||
$this->slack->production($message);
|
||||
|
||||
Log::info('Inspection passed notification sent to production', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'order_number' => $order->order_number,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use App\Events\OrderMovedToAwaitingApproval;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class NotifySlackOnOrderMovedToAwaitingApproval
|
||||
{
|
||||
public function handle(OrderMovedToAwaitingApproval $event): void
|
||||
{
|
||||
try {
|
||||
$order = $event->order;
|
||||
$webhook = config('services.slack.design_hook_url');
|
||||
|
||||
Log::info('Preparing Slack notification for order awaiting approval', [
|
||||
'webhook_configured' => !empty($webhook),
|
||||
'order_number' => $order->order_number,
|
||||
]);
|
||||
|
||||
if (! $webhook) {
|
||||
Log::warning('Slack design channel webhook not configured');
|
||||
return;
|
||||
}
|
||||
|
||||
$payload = [
|
||||
'text' => 'Order Awaiting Customer Approval',
|
||||
'blocks' => [
|
||||
[
|
||||
'type' => 'header',
|
||||
'text' => [
|
||||
'type' => 'plain_text',
|
||||
'text' => '⏳ Order Awaiting Customer Approval',
|
||||
],
|
||||
],
|
||||
[
|
||||
'type' => 'section',
|
||||
'fields' => [
|
||||
[
|
||||
'type' => 'mrkdwn',
|
||||
'text' => "*Order Number:*\n#{$order->order_number}",
|
||||
],
|
||||
[
|
||||
'type' => 'mrkdwn',
|
||||
'text' => "*Status:*\nAwaiting Approval",
|
||||
],
|
||||
],
|
||||
],
|
||||
[
|
||||
'type' => 'context',
|
||||
'elements' => [
|
||||
[
|
||||
'type' => 'mrkdwn',
|
||||
'text' => "Updated at " . now()->format('Y-m-d H:i:s'),
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
$response = Http::post($webhook, $payload);
|
||||
|
||||
Log::info('Slack notification sent for order awaiting approval', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'order_number' => $order->order_number,
|
||||
'channel' => 'design',
|
||||
'status_code' => $response->status(),
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
Log::error('Failed to send Slack notification for order awaiting approval', [
|
||||
'error' => $e->getMessage(),
|
||||
'trace' => $e->getTraceAsString(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use App\Events\OrderMovedToPrep;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class NotifySlackOnOrderMovedToPrep
|
||||
{
|
||||
public function handle(OrderMovedToPrep $event): void
|
||||
{
|
||||
try {
|
||||
$order = $event->order;
|
||||
$webhook = config('services.slack.design_hook_url');
|
||||
|
||||
Log::info('Preparing Slack notification for order moved to prep', [
|
||||
'webhook_configured' => !empty($webhook),
|
||||
'order_number' => $order->order_number,
|
||||
]);
|
||||
|
||||
if (! $webhook) {
|
||||
Log::warning('Slack design channel webhook not configured');
|
||||
return;
|
||||
}
|
||||
|
||||
$payload = [
|
||||
'text' => 'Order Moved to Prep/Design',
|
||||
'blocks' => [
|
||||
[
|
||||
'type' => 'header',
|
||||
'text' => [
|
||||
'type' => 'plain_text',
|
||||
'text' => '📋 Order Moved to Prep/Design',
|
||||
],
|
||||
],
|
||||
[
|
||||
'type' => 'section',
|
||||
'fields' => [
|
||||
[
|
||||
'type' => 'mrkdwn',
|
||||
'text' => "*Order Number:*\n#{$order->order_number}",
|
||||
],
|
||||
[
|
||||
'type' => 'mrkdwn',
|
||||
'text' => "*Status:*\n{$order->status}",
|
||||
],
|
||||
],
|
||||
],
|
||||
[
|
||||
'type' => 'context',
|
||||
'elements' => [
|
||||
[
|
||||
'type' => 'mrkdwn',
|
||||
'text' => "Updated at " . now()->format('Y-m-d H:i:s'),
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
$response = Http::post($webhook, $payload);
|
||||
|
||||
Log::info('Slack notification sent for order moved to prep', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'order_number' => $order->order_number,
|
||||
'channel' => 'design',
|
||||
'status_code' => $response->status(),
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
Log::error('Failed to send Slack notification for order moved to prep', [
|
||||
'error' => $e->getMessage(),
|
||||
'trace' => $e->getTraceAsString(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use App\Events\OrderMovedToPrinting;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class NotifySlackOnOrderMovedToPrinting
|
||||
{
|
||||
public function handle(OrderMovedToPrinting $event): void
|
||||
{
|
||||
try {
|
||||
$order = $event->order;
|
||||
$webhook = config('services.slack.production_hook_url');
|
||||
|
||||
Log::info('Preparing Slack notification for order printing started', [
|
||||
'webhook_configured' => !empty($webhook),
|
||||
'order_number' => $order->order_number,
|
||||
]);
|
||||
|
||||
if (! $webhook) {
|
||||
Log::warning('Slack production channel webhook not configured');
|
||||
return;
|
||||
}
|
||||
|
||||
$payload = [
|
||||
'text' => 'Order Printing Started',
|
||||
'blocks' => [
|
||||
[
|
||||
'type' => 'header',
|
||||
'text' => [
|
||||
'type' => 'plain_text',
|
||||
'text' => '🖨️ Order Printing Started',
|
||||
],
|
||||
],
|
||||
[
|
||||
'type' => 'section',
|
||||
'fields' => [
|
||||
[
|
||||
'type' => 'mrkdwn',
|
||||
'text' => "*Order Number:*\n#{$order->order_number}",
|
||||
],
|
||||
[
|
||||
'type' => 'mrkdwn',
|
||||
'text' => "*Status:*\nPrinting in Progress",
|
||||
],
|
||||
],
|
||||
],
|
||||
[
|
||||
'type' => 'context',
|
||||
'elements' => [
|
||||
[
|
||||
'type' => 'mrkdwn',
|
||||
'text' => "Updated at " . now()->format('Y-m-d H:i:s'),
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
$response = Http::post($webhook, $payload);
|
||||
|
||||
Log::info('Slack notification sent for order printing started', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'order_number' => $order->order_number,
|
||||
'channel' => 'production',
|
||||
'status_code' => $response->status(),
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
Log::error('Failed to send Slack notification for order printing started', [
|
||||
'error' => $e->getMessage(),
|
||||
'trace' => $e->getTraceAsString(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use App\Events\OrderMovedToReadyForPrint;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class NotifySlackOnOrderMovedToReadyForPrint
|
||||
{
|
||||
public function handle(OrderMovedToReadyForPrint $event): void
|
||||
{
|
||||
try {
|
||||
$order = $event->order;
|
||||
$webhook = config('services.slack.production_hook_url');
|
||||
|
||||
Log::info('Preparing Slack notification for order ready for print', [
|
||||
'webhook_configured' => !empty($webhook),
|
||||
'order_number' => $order->order_number,
|
||||
]);
|
||||
|
||||
if (! $webhook) {
|
||||
Log::warning('Slack production channel webhook not configured');
|
||||
return;
|
||||
}
|
||||
|
||||
$payload = [
|
||||
'text' => 'Order Ready for Print',
|
||||
'blocks' => [
|
||||
[
|
||||
'type' => 'header',
|
||||
'text' => [
|
||||
'type' => 'plain_text',
|
||||
'text' => '✅ Order Ready for Print',
|
||||
],
|
||||
],
|
||||
[
|
||||
'type' => 'section',
|
||||
'fields' => [
|
||||
[
|
||||
'type' => 'mrkdwn',
|
||||
'text' => "*Order Number:*\n#{$order->order_number}",
|
||||
],
|
||||
[
|
||||
'type' => 'mrkdwn',
|
||||
'text' => "*Status:*\nReady for Print",
|
||||
],
|
||||
],
|
||||
],
|
||||
[
|
||||
'type' => 'context',
|
||||
'elements' => [
|
||||
[
|
||||
'type' => 'mrkdwn',
|
||||
'text' => "Updated at " . now()->format('Y-m-d H:i:s'),
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
$response = Http::post($webhook, $payload);
|
||||
|
||||
Log::info('Slack notification sent for order ready for print', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'order_number' => $order->order_number,
|
||||
'channel' => 'production',
|
||||
'status_code' => $response->status(),
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
Log::error('Failed to send Slack notification for order ready for print', [
|
||||
'error' => $e->getMessage(),
|
||||
'trace' => $e->getTraceAsString(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -27,14 +27,25 @@ class NotifySlackOnOrderPacked
|
||||
|
||||
Log::info('Order packed notification sent', ['order_uuid' => $order->uuid]);
|
||||
|
||||
// Move Trello card to Packing list
|
||||
// Move Trello card to Ready to Ship and populate shipping dimensions as custom fields
|
||||
if ($order->trello_card_id) {
|
||||
$this->trello->moveCard($order->trello_card_id, 'Packing');
|
||||
// Move card to Ready to Ship list
|
||||
$this->trello->moveCard($order->trello_card_id, 'Ready to Ship');
|
||||
|
||||
// Populate custom fields with packing dimensions
|
||||
$this->trello->setNumberField($order->trello_card_id, 'ship_w', $event->width);
|
||||
$this->trello->setNumberField($order->trello_card_id, 'ship_h', $event->height);
|
||||
$this->trello->setNumberField($order->trello_card_id, 'ship_l', $event->length);
|
||||
$this->trello->setNumberField($order->trello_card_id, 'weight', $event->weight);
|
||||
|
||||
// Try to check off "Packed" item in checklist
|
||||
$this->trello->checkItem($order->trello_card_id, 'Packing', 'Packed');
|
||||
|
||||
Log::info('Trello card moved to Packing', ['order_uuid' => $order->uuid]);
|
||||
Log::info('Trello card moved to Ready to Ship and dimensions added', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'dimensions' => "{$event->width}x{$event->length}x{$event->height}cm",
|
||||
'weight' => "{$event->weight}kg",
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,22 +28,7 @@ class NotifySlackOnShipmentCreated
|
||||
|
||||
Log::info('Shipment created notification sent', ['order_uuid' => $order->uuid]);
|
||||
|
||||
// Attach shipping documents to Trello card
|
||||
if ($order->trello_card_id) {
|
||||
if ($event->stickerPath && Storage::disk('public')->exists($event->stickerPath)) {
|
||||
$stickerUrl = Storage::disk('public')->url($event->stickerPath);
|
||||
$this->trello->attachFile($order->trello_card_id, 'Sticker.pdf', $stickerUrl);
|
||||
}
|
||||
|
||||
if ($event->waybillPath && Storage::disk('public')->exists($event->waybillPath)) {
|
||||
$waybillUrl = Storage::disk('public')->url($event->waybillPath);
|
||||
$this->trello->attachFile($order->trello_card_id, 'Waybill.pdf', $waybillUrl);
|
||||
}
|
||||
|
||||
// Move card to Awaiting Collection
|
||||
$this->trello->moveCard($order->trello_card_id, 'Awaiting Collection');
|
||||
|
||||
Log::info('Trello card updated with shipment details', ['order_uuid' => $order->uuid]);
|
||||
}
|
||||
// Note: PDFs are already attached to Trello card by CreateShipmentOnReadyToShip listener
|
||||
// This listener only handles Slack notification
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ class CustomOrder extends Model
|
||||
'proof_approved_at',
|
||||
'packing_width',
|
||||
'packing_length',
|
||||
'packing_height',
|
||||
'packing_weight',
|
||||
'packing_completed_at',
|
||||
'packed_by',
|
||||
|
||||
@@ -26,6 +26,15 @@ class Order extends Model
|
||||
'customer_email',
|
||||
'customer_phone',
|
||||
'shipping_address',
|
||||
'shipping_street_address',
|
||||
'shipping_unit_number',
|
||||
'shipping_local_area',
|
||||
'shipping_city',
|
||||
'shipping_zone',
|
||||
'shipping_country',
|
||||
'shipping_postcode',
|
||||
'shipping_type',
|
||||
'business_name',
|
||||
'notes',
|
||||
'yoco_checkout_id',
|
||||
'yoco_redirect_url',
|
||||
@@ -33,12 +42,19 @@ class Order extends Model
|
||||
'yoco_payment_id',
|
||||
'packing_width',
|
||||
'packing_length',
|
||||
'packing_height',
|
||||
'packing_weight',
|
||||
'packing_completed_at',
|
||||
'packed_by',
|
||||
'courier_shipment_id',
|
||||
'courier_waybill_id',
|
||||
'courier_tracking_number',
|
||||
'courier_status',
|
||||
'courier_rate',
|
||||
'courier_service_level_code',
|
||||
'courier_service_level_id',
|
||||
'courier_collection_min_date',
|
||||
'courier_delivery_min_date',
|
||||
'delivered_at',
|
||||
'delivery_failure_reason',
|
||||
'trello_card_id',
|
||||
@@ -46,6 +62,19 @@ class Order extends Model
|
||||
'qr_generated_at',
|
||||
];
|
||||
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'packing_completed_at' => 'datetime',
|
||||
'delivered_at' => 'datetime',
|
||||
'qr_generated_at' => 'datetime',
|
||||
'courier_collection_min_date' => 'datetime',
|
||||
'courier_delivery_min_date' => 'datetime',
|
||||
'created_at' => 'datetime',
|
||||
'updated_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo(User::class);
|
||||
|
||||
@@ -4,7 +4,14 @@ namespace App\Providers;
|
||||
|
||||
use App\Events\BalancePaid;
|
||||
use App\Events\DepositPaid;
|
||||
use App\Events\InspectionPassed;
|
||||
use App\Events\InspectionFailed;
|
||||
use App\Events\OrderCreated;
|
||||
use App\Events\OrderMovedToPrep;
|
||||
use App\Events\OrderMovedToAwaitingApproval;
|
||||
use App\Events\OrderMovedToReadyForPrint;
|
||||
use App\Events\OrderMovedToPrinting;
|
||||
use App\Events\OrderMovedToInspection;
|
||||
use App\Events\OrderPacked;
|
||||
use App\Events\ParcelCollected;
|
||||
use App\Events\ParcelDelivered;
|
||||
@@ -18,13 +25,21 @@ use App\Events\ShipmentCreated;
|
||||
use App\Events\ShipmentCreationFailed;
|
||||
use App\Listeners\CreateShipmentOnReadyToShip;
|
||||
use App\Listeners\GenerateQrCodeOnOrderCreated;
|
||||
use App\Listeners\MoveCardToPackingOnInspectionPassed;
|
||||
use App\Listeners\NotifySlackOnOrderCreated;
|
||||
use App\Listeners\NotifySlackOnOrderMovedToPrep;
|
||||
use App\Listeners\NotifySlackOnOrderMovedToAwaitingApproval;
|
||||
use App\Listeners\NotifySlackOnOrderMovedToReadyForPrint;
|
||||
use App\Listeners\NotifySlackOnOrderMovedToPrinting;
|
||||
use App\Listeners\NotifySlackOnOrderPacked;
|
||||
use App\Listeners\NotifySlackOnParcelCollected;
|
||||
use App\Listeners\NotifySlackOnParcelDelivered;
|
||||
use App\Listeners\NotifySlackOnParcelFailedDelivery;
|
||||
use App\Listeners\NotifySlackOnShipmentCreated;
|
||||
use App\Listeners\NotifySlackOnShipmentCreationFailed;
|
||||
use App\Listeners\NotifySlackOnInspectionPassed;
|
||||
use App\Listeners\NotifySlackOnInspectionFailed;
|
||||
use App\Listeners\NotifySlackOnCardMovedToInspection;
|
||||
use Illuminate\Auth\Events\Registered;
|
||||
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||
@@ -43,16 +58,42 @@ class EventServiceProvider extends ServiceProvider
|
||||
GenerateQrCodeOnOrderCreated::class,
|
||||
],
|
||||
|
||||
// Trello card move events
|
||||
OrderMovedToPrep::class => [
|
||||
NotifySlackOnOrderMovedToPrep::class,
|
||||
],
|
||||
OrderMovedToAwaitingApproval::class => [
|
||||
NotifySlackOnOrderMovedToAwaitingApproval::class,
|
||||
],
|
||||
OrderMovedToReadyForPrint::class => [
|
||||
NotifySlackOnOrderMovedToReadyForPrint::class,
|
||||
],
|
||||
OrderMovedToPrinting::class => [
|
||||
NotifySlackOnOrderMovedToPrinting::class,
|
||||
],
|
||||
|
||||
// Packing events
|
||||
OrderPacked::class => [
|
||||
NotifySlackOnOrderPacked::class,
|
||||
],Ready to Ship intent (from Trello webhook)
|
||||
],
|
||||
|
||||
// Inspection events
|
||||
InspectionPassed::class => [
|
||||
MoveCardToPackingOnInspectionPassed::class,
|
||||
NotifySlackOnInspectionPassed::class,
|
||||
],
|
||||
InspectionFailed::class => [
|
||||
NotifySlackOnInspectionFailed::class,
|
||||
],
|
||||
OrderMovedToInspection::class => [
|
||||
NotifySlackOnCardMovedToInspection::class,
|
||||
],
|
||||
|
||||
// Ready to Ship intent (from Trello webhook)
|
||||
ReadyToShipIntent::class => [
|
||||
CreateShipmentOnReadyToShip::class,
|
||||
],
|
||||
|
||||
//
|
||||
|
||||
// Shipment events
|
||||
ShipmentCreated::class => [
|
||||
NotifySlackOnShipmentCreated::class,
|
||||
|
||||
+561
-109
@@ -6,6 +6,7 @@ use App\Models\Order;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class CourierService
|
||||
{
|
||||
@@ -15,11 +16,11 @@ class CourierService
|
||||
public function __construct()
|
||||
{
|
||||
$this->apiKey = config('courier.api_key');
|
||||
$this->baseUrl = config('courier.api_base_url', 'https://api.shiplogic.com/api');
|
||||
$this->baseUrl = config('courier.api_base_url', 'https://api.shiplogic.com');
|
||||
}
|
||||
|
||||
/**
|
||||
* Create shipment with full validation and database updates
|
||||
* Create shipment with full validation, rates fetching, and document retrieval
|
||||
*
|
||||
* @param Order $order
|
||||
* @return array{waybill_id: string, tracking_number: string, sticker_path: ?string, waybill_path: ?string}
|
||||
@@ -33,52 +34,103 @@ class CourierService
|
||||
if (! $this->validatePacking($order)) {
|
||||
throw new \Exception('Order not yet packed with valid dimensions');
|
||||
}
|
||||
Log::info('Packing validation passed', ['order_uuid' => $order->uuid]);
|
||||
|
||||
// Guard 2: Validate payment/approval
|
||||
if (! $this->validatePayment($order)) {
|
||||
throw new \Exception($order->is_custom_order ?
|
||||
'Custom order requires proof approved and balance paid' :
|
||||
'Standard order must be fully paid'
|
||||
throw new \Exception(
|
||||
$order->is_custom_order ?
|
||||
'Custom order requires proof approved and balance paid' :
|
||||
'Standard order must be fully paid'
|
||||
);
|
||||
}
|
||||
|
||||
Log::info('Payment validation passed', ['order_uuid' => $order->uuid]);
|
||||
// Guard 3: Validate order status
|
||||
if ($order->status !== 'ready_to_ship') {
|
||||
throw new \Exception('Order must be in Ready to Ship state');
|
||||
}
|
||||
|
||||
Log::info('Order status validation passed', ['order_uuid' => $order->uuid]);
|
||||
// Guard 4: Prevent duplicates
|
||||
if ($order->courier_waybill_id) {
|
||||
throw new \Exception('Shipment already exists for this order');
|
||||
}
|
||||
|
||||
Log::info('Duplicate shipment validation passed', ['order_uuid' => $order->uuid]);
|
||||
try {
|
||||
// Call API to create shipment
|
||||
// Step 1: Get rates and select ECO (cheapest) service level
|
||||
Log::info('Fetching shipping rates', ['order_uuid' => $order->uuid]);
|
||||
$rates = $this->getRates($order);
|
||||
if (empty($rates)) {
|
||||
throw new \Exception('No shipping rates available for this route');
|
||||
}
|
||||
Log::info('Shipping rates retrieved', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'rate_count' => count($rates),
|
||||
]);
|
||||
// Select ECO rate (should be cheapest)
|
||||
$selectedRate = $this->selectEcoRate($rates);
|
||||
if (!$selectedRate) {
|
||||
throw new \Exception('ECO service level not available for this route');
|
||||
}
|
||||
Log::info('Selected ECO service level', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'service_level' => $selectedRate['service_level']['code'],
|
||||
'rate' => $selectedRate['rate'],
|
||||
]);
|
||||
// Step 2: Build delivery address from order fields
|
||||
$deliveryAddress = $this->buildDeliveryAddress($order);
|
||||
Log::info('Built delivery address', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'delivery_address' => $deliveryAddress,
|
||||
]);
|
||||
// Step 3: Determine collection and delivery minimum dates
|
||||
[$collectionMinDate, $deliveryMinDate] = $this->getMinimumDates();
|
||||
Log::info('Determined minimum dates', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'collection_min_date' => $collectionMinDate,
|
||||
'delivery_min_date' => $deliveryMinDate,
|
||||
]);
|
||||
// Step 4: Call API to create shipment with all proper data
|
||||
$shipmentData = $this->callCreateShipmentApi(
|
||||
$order->id,
|
||||
$order->packing_width,
|
||||
$order->packing_length,
|
||||
$order->packing_weight,
|
||||
$order,
|
||||
$deliveryAddress,
|
||||
$selectedRate,
|
||||
$collectionMinDate,
|
||||
$deliveryMinDate,
|
||||
);
|
||||
|
||||
// Save shipment details to database
|
||||
Log::info('Shipment created via API', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'shipment_id' => $shipmentData['shipment_id'],
|
||||
'waybill_id' => $shipmentData['waybill_id'],
|
||||
'tracking_number' => $shipmentData['tracking_number'],
|
||||
]);
|
||||
// Step 5: Save shipment details to database
|
||||
$order->update([
|
||||
'courier_shipment_id' => $shipmentData['shipment_id'],
|
||||
'courier_waybill_id' => $shipmentData['waybill_id'],
|
||||
'courier_tracking_number' => $shipmentData['tracking_number'],
|
||||
'courier_rate' => $selectedRate['rate'],
|
||||
'courier_service_level_code' => $selectedRate['service_level']['code'],
|
||||
'courier_service_level_id' => $selectedRate['service_level']['id'],
|
||||
'courier_collection_min_date' => $collectionMinDate,
|
||||
'courier_delivery_min_date' => $deliveryMinDate,
|
||||
'courier_status' => 'awaiting_collection',
|
||||
'status' => 'awaiting_collection',
|
||||
]);
|
||||
|
||||
Log::info('Shipment created successfully', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'shipment_id' => $shipmentData['shipment_id'],
|
||||
'waybill_id' => $shipmentData['waybill_id'],
|
||||
'service_level' => $selectedRate['service_level']['code'],
|
||||
'rate' => $selectedRate['rate'],
|
||||
]);
|
||||
|
||||
// Fetch shipping documents
|
||||
$stickerPath = $this->fetchSticker($shipmentData['shipment_id'], $order->id);
|
||||
$waybillPath = $this->fetchWaybill($shipmentData['shipment_id'], $order->id);
|
||||
// Step 6: Fetch shipping documents
|
||||
$stickerPath = $this->fetchAndStoreSticker($shipmentData['shipment_id'], $order->uuid);
|
||||
$waybillPath = $this->fetchAndStoreWaybill($shipmentData['shipment_id'], $order->uuid);
|
||||
|
||||
return [
|
||||
'shipment_id' => $shipmentData['shipment_id'],
|
||||
'waybill_id' => $shipmentData['waybill_id'],
|
||||
'tracking_number' => $shipmentData['tracking_number'],
|
||||
'sticker_path' => $stickerPath,
|
||||
@@ -95,66 +147,474 @@ class CourierService
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a shipment with Shiplogic API
|
||||
*
|
||||
* @param string $orderId
|
||||
* @param float $width Width in cm
|
||||
* @param float $length Length in cm
|
||||
* @param float $weight Weight in kg
|
||||
* @return array{shipment_id: string, waybill_id: string, tracking_number: string}
|
||||
* @throws \Exception
|
||||
* Get available shipping rates for an order
|
||||
*/
|
||||
private function callCreateShipmentApi(string $orderId, float $width, float $length, float $weight): array
|
||||
private function getRates(Order $order): array
|
||||
{
|
||||
if (! $this->isConfigured()) {
|
||||
throw new \Exception('Courier API not configured');
|
||||
}
|
||||
|
||||
if ($width <= 0 || $length <= 0 || $weight <= 0) {
|
||||
throw new \Exception('Invalid dimensions or weight: all must be greater than 0');
|
||||
}
|
||||
|
||||
try {
|
||||
// Build shipment payload for Shiplogic
|
||||
$deliveryAddress = $this->buildDeliveryAddress($order);
|
||||
Log::info('Built delivery address for rates', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'delivery_address' => $deliveryAddress,
|
||||
]);
|
||||
$collectionAddress = config('services.shiplogic.collection_address');
|
||||
Log::info('Using collection address for rates', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'collection_address' => $collectionAddress,
|
||||
]);
|
||||
$payload = [
|
||||
'parcel' => [
|
||||
'weight' => $weight,
|
||||
'height' => 10, // TODO: Update when height is captured separately
|
||||
'width' => $width,
|
||||
'length' => $length,
|
||||
'collection_address' => $collectionAddress,
|
||||
'delivery_address' => $deliveryAddress,
|
||||
'parcels' => [
|
||||
[
|
||||
'submitted_length_cm' => (float) $order->packing_length,
|
||||
'submitted_width_cm' => (float) $order->packing_width,
|
||||
'submitted_height_cm' => (float) ($order->packing_height ?? 10),
|
||||
'submitted_weight_kg' => (float) $order->packing_weight,
|
||||
],
|
||||
],
|
||||
'destination' => [
|
||||
// TODO: Get from order's shipping address
|
||||
],
|
||||
'reference' => $orderId,
|
||||
];
|
||||
Log::info('Prepared rates request payload', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'payload' => $payload,
|
||||
]);
|
||||
|
||||
$ratesUrl = "{$this->baseUrl}/rates";
|
||||
Log::info('Fetching shipping rates from Shiplogic', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'base_url' => $this->baseUrl,
|
||||
'full_url' => $ratesUrl,
|
||||
'api_key_set' => ! empty($this->apiKey),
|
||||
'api_key_length' => strlen($this->apiKey ?? ''),
|
||||
'collection_address' => $collectionAddress,
|
||||
'delivery_address' => $deliveryAddress,
|
||||
'parcel_dimensions' => [
|
||||
'length' => $order->packing_length,
|
||||
'width' => $order->packing_width,
|
||||
'height' => $order->packing_height ?? 10,
|
||||
'weight' => $order->packing_weight,
|
||||
],
|
||||
]);
|
||||
|
||||
$response = Http::withHeaders([
|
||||
'Authorization' => "Bearer {$this->apiKey}",
|
||||
])->post("{$this->baseUrl}/shipments", $payload);
|
||||
])->post($ratesUrl, $payload);
|
||||
|
||||
Log::info('Rates API response received', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'status' => $response->status(),
|
||||
'successful' => $response->successful(),
|
||||
]);
|
||||
|
||||
if (! $response->successful()) {
|
||||
$errorMessage = $response->json('error.message', 'Unknown error');
|
||||
$errorData = $response->json();
|
||||
$errorMessage = $errorData['error']['message'] ?? $errorData['message'] ?? 'Unknown error';
|
||||
|
||||
Log::error('Rates API error response', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'status' => $response->status(),
|
||||
'error_message' => $errorMessage,
|
||||
'full_response' => $response->json(),
|
||||
]);
|
||||
|
||||
throw new \Exception("Failed to fetch rates: {$errorMessage}");
|
||||
}
|
||||
|
||||
$data = $response->json();
|
||||
|
||||
Log::info('Rates fetched successfully', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'rate_count' => count($data['rates'] ?? []),
|
||||
]);
|
||||
|
||||
return $data['rates'] ?? [];
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Failed to get shipping rates', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'error' => $e->getMessage(),
|
||||
'trace' => $e->getTraceAsString(),
|
||||
]);
|
||||
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Select the ECO (Economy) service level - should be the cheapest
|
||||
*/
|
||||
private function selectEcoRate(array $rates): ?array
|
||||
{
|
||||
foreach ($rates as $rate) {
|
||||
if (isset($rate['service_level']) && $rate['service_level']['code'] === 'ECO') {
|
||||
return $rate;
|
||||
}
|
||||
}
|
||||
|
||||
// If ECO not found, return the cheapest rate available
|
||||
if (empty($rates)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
usort($rates, function ($a, $b) {
|
||||
return ($a['rate'] ?? PHP_INT_MAX) <=> ($b['rate'] ?? PHP_INT_MAX);
|
||||
});
|
||||
|
||||
return $rates[0] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build complete delivery address from order shipping fields
|
||||
*/
|
||||
private function buildDeliveryAddress(Order $order): array
|
||||
{
|
||||
// Combine unit number and street address
|
||||
$streetAddress = $order->shipping_street_address;
|
||||
if ($order->shipping_unit_number) {
|
||||
$streetAddress = "{$order->shipping_unit_number}, {$streetAddress}";
|
||||
}
|
||||
|
||||
return [
|
||||
'type' => $order->shipping_type ?? 'residential',
|
||||
'company' => $order->business_name ?? '',
|
||||
'street_address' => $streetAddress,
|
||||
'local_area' => $order->shipping_local_area ?? '',
|
||||
'city' => $order->shipping_city ?? '',
|
||||
'zone' => $order->shipping_zone ?? '',
|
||||
'code' => $order->shipping_postcode ?? '',
|
||||
'country' => $order->shipping_country ?? 'ZA',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine collection and delivery minimum dates
|
||||
* If before noon: today
|
||||
* If after noon: tomorrow
|
||||
*/
|
||||
private function getMinimumDates(): array
|
||||
{
|
||||
$now = Carbon::now();
|
||||
$noon = Carbon::now()->setHour(12)->setMinute(0)->setSecond(0);
|
||||
|
||||
if ($now->isBefore($noon)) {
|
||||
$date = $now->startOfDay();
|
||||
} else {
|
||||
$date = $now->addDay()->startOfDay();
|
||||
}
|
||||
|
||||
return [$date, $date];
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a shipment with Shiplogic API
|
||||
*/
|
||||
private function callCreateShipmentApi(
|
||||
Order $order,
|
||||
array $deliveryAddress,
|
||||
array $selectedRate,
|
||||
\DateTime $collectionMinDate,
|
||||
\DateTime $deliveryMinDate,
|
||||
): array {
|
||||
if (! $this->isConfigured()) {
|
||||
throw new \Exception('Courier API not configured');
|
||||
}
|
||||
Log::info('Preparing to create shipment via API', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'order_number' => $order->order_number,
|
||||
]);
|
||||
// Validate required shipping info
|
||||
if (! $order->customer_name || ! $order->shipping_street_address) {
|
||||
throw new \Exception('Order missing required customer name or shipping address');
|
||||
}
|
||||
Log::info('Validated required shipping info', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'customer_name' => $order->customer_name,
|
||||
'shipping_street_address' => $order->shipping_street_address,
|
||||
]);
|
||||
if (! $order->customer_email && ! $order->customer_phone) {
|
||||
throw new \Exception('Order must have at least email or phone number');
|
||||
}
|
||||
Log::info('Validated contact information', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'customer_email' => $order->customer_email,
|
||||
'customer_phone' => $order->customer_phone,
|
||||
]);
|
||||
try {
|
||||
$collectionAddress = config('services.shiplogic.collection_address');
|
||||
$collectionContact = config('services.shiplogic.collection_contact');
|
||||
|
||||
$payload = [
|
||||
'collection_address' => $collectionAddress,
|
||||
'collection_contact' => $collectionContact,
|
||||
'delivery_address' => $deliveryAddress,
|
||||
'delivery_contact' => [
|
||||
'name' => $order->customer_name,
|
||||
'email' => $order->customer_email ?? '',
|
||||
'mobile_number' => $order->customer_phone ?? '',
|
||||
],
|
||||
'parcels' => [
|
||||
[
|
||||
'parcel_description' => $order->order_number,
|
||||
'submitted_length_cm' => (float) $order->packing_length,
|
||||
'submitted_width_cm' => (float) $order->packing_width,
|
||||
'submitted_height_cm' => (float) ($order->packing_height ?? 10),
|
||||
'submitted_weight_kg' => (float) $order->packing_weight,
|
||||
],
|
||||
],
|
||||
'service_level_code' => $selectedRate['service_level']['code'],
|
||||
'collection_min_date' => $collectionMinDate->format(DATE_ATOM),
|
||||
'delivery_min_date' => $deliveryMinDate->format(DATE_ATOM),
|
||||
'customer_reference' => $order->order_number,
|
||||
'mute_notifications' => false,
|
||||
];
|
||||
|
||||
$shipmentsUrl = "{$this->baseUrl}/shipments";
|
||||
Log::info('Creating Shiplogic shipment', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'order_number' => $order->order_number,
|
||||
'customer' => $order->customer_name,
|
||||
'delivery_address' => $deliveryAddress['street_address'],
|
||||
'service_level' => $selectedRate['service_level']['code'],
|
||||
'base_url' => $this->baseUrl,
|
||||
'full_url' => $shipmentsUrl,
|
||||
'api_key_set' => ! empty($this->apiKey),
|
||||
'api_key_length' => strlen($this->apiKey ?? ''),
|
||||
'payload' => $payload,
|
||||
]);
|
||||
|
||||
$response = Http::withHeaders([
|
||||
'Authorization' => "Bearer {$this->apiKey}",
|
||||
])->post($shipmentsUrl, $payload);
|
||||
|
||||
Log::info('Shipment API response received', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'status' => $response->status(),
|
||||
'successful' => $response->successful(),
|
||||
]);
|
||||
|
||||
if (! $response->successful()) {
|
||||
$errorData = $response->json();
|
||||
$errorMessage = $errorData['error']['message'] ?? $errorData['message'] ?? 'Unknown error';
|
||||
|
||||
Log::error('Shipment API error response', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'status' => $response->status(),
|
||||
'error_message' => $errorMessage,
|
||||
'full_response' => $response->json(),
|
||||
]);
|
||||
|
||||
throw new \Exception("Courier API error: {$errorMessage}");
|
||||
}
|
||||
|
||||
$data = $response->json();
|
||||
|
||||
Log::info('Shipment created in API', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'shipment_id' => $data['id'] ?? null,
|
||||
'tracking_reference' => $data['short_tracking_reference'] ?? null,
|
||||
]);
|
||||
|
||||
return [
|
||||
'shipment_id' => $data['id'] ?? null,
|
||||
'waybill_id' => $data['waybill_number'] ?? null,
|
||||
'tracking_number' => $data['tracking_number'] ?? null,
|
||||
'waybill_id' => $data['short_tracking_reference'] ?? $data['id'],
|
||||
'tracking_number' => $data['short_tracking_reference'] ?? null,
|
||||
];
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Failed to call courier API', [
|
||||
'order_id' => $orderId,
|
||||
Log::error('Failed to call courier shipment API', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'error' => $e->getMessage(),
|
||||
'trace' => $e->getTraceAsString(),
|
||||
]);
|
||||
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch and store shipment label (waybill) PDF from Shiplogic
|
||||
*/
|
||||
private function fetchAndStoreWaybill(string $shipmentId, string $orderUuid): ?string
|
||||
{
|
||||
if (! $this->isConfigured()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
$url = "{$this->baseUrl}/shipments/label?id={$shipmentId}";
|
||||
Log::info('Fetching waybill PDF', [
|
||||
'shipment_id' => $shipmentId,
|
||||
'order_uuid' => $orderUuid,
|
||||
'url' => $url,
|
||||
]);
|
||||
|
||||
$response = Http::withHeaders([
|
||||
'Authorization' => "Bearer {$this->apiKey}",
|
||||
])->get($url);
|
||||
|
||||
Log::info('Waybill PDF response received', [
|
||||
'shipment_id' => $shipmentId,
|
||||
'status' => $response->status(),
|
||||
'successful' => $response->successful(),
|
||||
'content_type' => $response->header('Content-Type'),
|
||||
]);
|
||||
|
||||
if ($response->successful()) {
|
||||
$data = $response->json();
|
||||
|
||||
// API returns a JSON with S3 URL, need to download the actual PDF
|
||||
if (isset($data['url'])) {
|
||||
Log::info('Got S3 URL for waybill PDF', [
|
||||
'shipment_id' => $shipmentId,
|
||||
's3_url' => $data['url'],
|
||||
'filename' => $data['filename'] ?? 'unknown',
|
||||
'file_size' => $data['file_size'] ?? 'unknown',
|
||||
]);
|
||||
|
||||
// Download the actual PDF from S3
|
||||
$pdfResponse = Http::get($data['url']);
|
||||
|
||||
if ($pdfResponse->successful()) {
|
||||
$directory = "shipments/{$orderUuid}";
|
||||
$path = "{$directory}/Shipment Label.pdf";
|
||||
|
||||
// Store the binary PDF content
|
||||
$content = $pdfResponse->body();
|
||||
Storage::disk('public')->put($path, $content);
|
||||
|
||||
Log::info('Waybill PDF stored successfully', [
|
||||
'shipment_id' => $shipmentId,
|
||||
'path' => $path,
|
||||
'file_size' => strlen($content),
|
||||
'exists' => Storage::disk('public')->exists($path),
|
||||
]);
|
||||
return $path;
|
||||
} else {
|
||||
Log::error('Failed to download waybill PDF from S3', [
|
||||
'shipment_id' => $shipmentId,
|
||||
's3_url' => $data['url'],
|
||||
'status' => $pdfResponse->status(),
|
||||
]);
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
Log::error('No S3 URL in waybill response', [
|
||||
'shipment_id' => $shipmentId,
|
||||
'response' => $data,
|
||||
]);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Log::warning('Failed to fetch waybill from courier', [
|
||||
'shipment_id' => $shipmentId,
|
||||
'status' => $response->status(),
|
||||
'response' => $response->json(),
|
||||
]);
|
||||
return null;
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Exception fetching waybill', [
|
||||
'shipment_id' => $shipmentId,
|
||||
'error' => $e->getMessage(),
|
||||
'trace' => $e->getTraceAsString(),
|
||||
]);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch and store shipment sticker label PDF from Shiplogic
|
||||
*/
|
||||
private function fetchAndStoreSticker(string $shipmentId, string $orderUuid): ?string
|
||||
{
|
||||
if (! $this->isConfigured()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
$url = "{$this->baseUrl}/shipments/label/stickers?id={$shipmentId}";
|
||||
Log::info('Fetching sticker PDF', [
|
||||
'shipment_id' => $shipmentId,
|
||||
'order_uuid' => $orderUuid,
|
||||
'url' => $url,
|
||||
]);
|
||||
|
||||
$response = Http::withHeaders([
|
||||
'Authorization' => "Bearer {$this->apiKey}",
|
||||
])->get($url);
|
||||
|
||||
Log::info('Sticker PDF response received', [
|
||||
'shipment_id' => $shipmentId,
|
||||
'status' => $response->status(),
|
||||
'successful' => $response->successful(),
|
||||
'content_type' => $response->header('Content-Type'),
|
||||
]);
|
||||
|
||||
if ($response->successful()) {
|
||||
$data = $response->json();
|
||||
|
||||
// API returns a JSON with S3 URL, need to download the actual PDF
|
||||
if (isset($data['url'])) {
|
||||
Log::info('Got S3 URL for sticker PDF', [
|
||||
'shipment_id' => $shipmentId,
|
||||
's3_url' => $data['url'],
|
||||
'filename' => $data['filename'] ?? 'unknown',
|
||||
'file_size' => $data['file_size'] ?? 'unknown',
|
||||
]);
|
||||
|
||||
// Download the actual PDF from S3
|
||||
$pdfResponse = Http::get($data['url']);
|
||||
|
||||
if ($pdfResponse->successful()) {
|
||||
$directory = "shipments/{$orderUuid}";
|
||||
$path = "{$directory}/Shipment Sticker.pdf";
|
||||
|
||||
// Store the binary PDF content
|
||||
$content = $pdfResponse->body();
|
||||
Storage::disk('public')->put($path, $content);
|
||||
|
||||
Log::info('Sticker PDF stored successfully', [
|
||||
'shipment_id' => $shipmentId,
|
||||
'path' => $path,
|
||||
'file_size' => strlen($content),
|
||||
'exists' => Storage::disk('public')->exists($path),
|
||||
]);
|
||||
return $path;
|
||||
} else {
|
||||
Log::error('Failed to download sticker PDF from S3', [
|
||||
'shipment_id' => $shipmentId,
|
||||
's3_url' => $data['url'],
|
||||
'status' => $pdfResponse->status(),
|
||||
]);
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
Log::error('No S3 URL in sticker response', [
|
||||
'shipment_id' => $shipmentId,
|
||||
'response' => $data,
|
||||
]);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Log::warning('Failed to fetch sticker from courier', [
|
||||
'shipment_id' => $shipmentId,
|
||||
'status' => $response->status(),
|
||||
'response' => $response->json(),
|
||||
]);
|
||||
return null;
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Exception fetching sticker', [
|
||||
'shipment_id' => $shipmentId,
|
||||
'error' => $e->getMessage(),
|
||||
'trace' => $e->getTraceAsString(),
|
||||
]);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate packing gate: order must be packed with dimensions
|
||||
*/
|
||||
@@ -203,68 +663,6 @@ class CourierService
|
||||
return $valid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch shipping label/sticker PDF from Shiplogic
|
||||
*/
|
||||
public function fetchSticker(string $shipmentId, string $orderId): ?string
|
||||
{
|
||||
if (! $this->isConfigured()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
$response = Http::withHeaders([
|
||||
'Authorization' => "Bearer {$this->apiKey}",
|
||||
])->get("{$this->baseUrl}/shipments/{$shipmentId}/sticker");
|
||||
|
||||
if ($response->successful()) {
|
||||
$path = "shipments/{$orderId}/sticker.pdf";
|
||||
Storage::disk('public')->put($path, $response->body());
|
||||
|
||||
return $path;
|
||||
}
|
||||
|
||||
Log::warning('Failed to fetch sticker from courier', ['shipment_id' => $shipmentId]);
|
||||
|
||||
return null;
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Exception fetching sticker', ['error' => $e->getMessage()]);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch waybill PDF from Shiplogic
|
||||
*/
|
||||
public function fetchWaybill(string $shipmentId, string $orderId): ?string
|
||||
{
|
||||
if (! $this->isConfigured()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
$response = Http::withHeaders([
|
||||
'Authorization' => "Bearer {$this->apiKey}",
|
||||
])->get("{$this->baseUrl}/shipments/{$shipmentId}/label");
|
||||
|
||||
if ($response->successful()) {
|
||||
$path = "shipments/{$orderId}/waybill.pdf";
|
||||
Storage::disk('public')->put($path, $response->body());
|
||||
|
||||
return $path;
|
||||
}
|
||||
|
||||
Log::warning('Failed to fetch waybill from courier', ['shipment_id' => $shipmentId]);
|
||||
|
||||
return null;
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Exception fetching waybill', ['error' => $e->getMessage()]);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if courier is configured
|
||||
*/
|
||||
@@ -272,4 +670,58 @@ class CourierService
|
||||
{
|
||||
return ! empty($this->apiKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* Public method to re-download shipment PDFs for an existing shipment
|
||||
*
|
||||
* @param Order $order
|
||||
* @return array{success: bool, sticker_path: ?string, waybill_path: ?string, message: string}
|
||||
*/
|
||||
public function redownloadShipmentPdfs(Order $order): array
|
||||
{
|
||||
if (! $order->courier_shipment_id) {
|
||||
return [
|
||||
'success' => false,
|
||||
'message' => 'No shipment exists for this order',
|
||||
'sticker_path' => null,
|
||||
'waybill_path' => null,
|
||||
];
|
||||
}
|
||||
|
||||
try {
|
||||
Log::info('Re-downloading shipment PDFs', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'shipment_id' => $order->courier_shipment_id,
|
||||
]);
|
||||
|
||||
$stickerPath = $this->fetchAndStoreSticker($order->courier_shipment_id, $order->uuid);
|
||||
$waybillPath = $this->fetchAndStoreWaybill($order->courier_shipment_id, $order->uuid);
|
||||
|
||||
Log::info('Shipment PDFs re-downloaded successfully', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'sticker_path' => $stickerPath,
|
||||
'waybill_path' => $waybillPath,
|
||||
]);
|
||||
|
||||
return [
|
||||
'success' => true,
|
||||
'message' => 'PDFs re-downloaded successfully',
|
||||
'sticker_path' => $stickerPath,
|
||||
'waybill_path' => $waybillPath,
|
||||
];
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Failed to re-download shipment PDFs', [
|
||||
'order_uuid' => $order->uuid,
|
||||
'error' => $e->getMessage(),
|
||||
'trace' => $e->getTraceAsString(),
|
||||
]);
|
||||
|
||||
return [
|
||||
'success' => false,
|
||||
'message' => 'Failed to re-download PDFs: ' . $e->getMessage(),
|
||||
'sticker_path' => null,
|
||||
'waybill_path' => null,
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,6 +112,20 @@ class TrelloService
|
||||
return $response->successful();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a comment to a card
|
||||
*/
|
||||
public function addComment(string $cardId, string $text): bool
|
||||
{
|
||||
$response = Http::post("{$this->baseUrl}/cards/{$cardId}/actions/comments", [
|
||||
'text' => $text,
|
||||
'key' => $this->apiKey,
|
||||
'token' => $this->apiToken,
|
||||
]);
|
||||
|
||||
return $response->successful();
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark checklist item complete
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
|
||||
namespace App\Testing;
|
||||
|
||||
use Illuminate\Http\Client\Request;
|
||||
use Illuminate\Http\Client\Response;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
/**
|
||||
* Mock HTTP Client for testing Shiplogic API interactions
|
||||
*
|
||||
* Usage in tests:
|
||||
* ShiplogicMockClient::setup();
|
||||
* // Now all HTTP requests to shiplogic will return mock responses
|
||||
*/
|
||||
class ShiplogicMockClient
|
||||
{
|
||||
/**
|
||||
* Setup mock HTTP responses for Shiplogic API
|
||||
*/
|
||||
public static function setup(): void
|
||||
{
|
||||
Http::fake([
|
||||
'shiplogic.*/rates' => Http::response(self::ratesResponse(), 200),
|
||||
'shiplogic.*/shipments' => Http::response(self::shipmentsResponse(), 201),
|
||||
'shiplogic.*/shipments/label' => Http::response(self::pdfResponse(), 200, [
|
||||
'Content-Type' => 'application/pdf',
|
||||
]),
|
||||
'shiplogic.*/shipments/label/stickers' => Http::response(self::pdfResponse(), 200, [
|
||||
'Content-Type' => 'application/pdf',
|
||||
]),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Mock response for /rates endpoint
|
||||
*/
|
||||
public static function ratesResponse(): array
|
||||
{
|
||||
return [
|
||||
'id' => '550e8400-e29b-41d4-a716-446655440001',
|
||||
'company_shipment_rates' => [
|
||||
[
|
||||
'id' => '9f67ff00-7a82-4d81-9481-4c5d8c8f1a00',
|
||||
'company_code' => 'FEDEX',
|
||||
'company_name' => 'FedEx',
|
||||
'service_level' => [
|
||||
'id' => '123456789',
|
||||
'code' => 'FEDEX_INTERNATIONAL_PRIORITY_EXPRESS',
|
||||
'name' => 'International Priority Express',
|
||||
'description' => 'Fastest service',
|
||||
],
|
||||
'rate' => 125.50,
|
||||
'currency' => 'GBP',
|
||||
'transit_days' => '1-2',
|
||||
'delivery_guarantee_date' => '2026-01-05',
|
||||
],
|
||||
[
|
||||
'id' => '9f67ff00-7a82-4d81-9481-4c5d8c8f1a01',
|
||||
'company_code' => 'FEDEX',
|
||||
'company_name' => 'FedEx',
|
||||
'service_level' => [
|
||||
'id' => '123456790',
|
||||
'code' => 'FEDEX_INTERNATIONAL_ECONOMY',
|
||||
'name' => 'International Economy',
|
||||
'description' => 'Economy service (ECO)',
|
||||
],
|
||||
'rate' => 45.75,
|
||||
'currency' => 'GBP',
|
||||
'transit_days' => '5-7',
|
||||
'delivery_guarantee_date' => '2026-01-09',
|
||||
],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Mock response for /shipments endpoint
|
||||
*/
|
||||
public static function shipmentsResponse(): array
|
||||
{
|
||||
return [
|
||||
'id' => '550e8400-e29b-41d4-a716-446655440002',
|
||||
'short_tracking_reference' => 'SHP123456789',
|
||||
'tracking_reference' => 'SHP-123456789-ABC',
|
||||
'customer_reference' => 'ORDER-12345',
|
||||
'company_code' => 'FEDEX',
|
||||
'service_level' => [
|
||||
'code' => 'FEDEX_INTERNATIONAL_ECONOMY',
|
||||
'name' => 'International Economy',
|
||||
],
|
||||
'collection_min_date' => '2026-01-04',
|
||||
'delivery_min_date' => '2026-01-09',
|
||||
'status' => 'created',
|
||||
'created_at' => now()->toIso8601String(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Mock PDF response
|
||||
*/
|
||||
public static function pdfResponse(): string
|
||||
{
|
||||
// Minimal valid PDF
|
||||
return "%PDF-1.4\n1 0 obj\n<< /Type /Catalog /Pages 2 0 R >>\nendobj\n2 0 obj\n<< /Type /Pages /Kids [3 0 R] /Count 1 >>\nendobj\n3 0 obj\n<< /Type /Page /Parent 2 0 R /Resources << /Font << /F1 4 0 R >> >> /MediaBox [0 0 612 792] /Contents 5 0 R >>\nendobj\n4 0 obj\n<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>\nendobj\n5 0 obj\n<< /Length 44 >>\nstream\nBT\n/F1 12 Tf\n100 700 Td\n(Mock PDF) Tj\nET\nendstream\nendobj\nxref\n0 6\n0000000000 65535 f\n0000000009 00000 n\n0000000058 00000 n\n0000000115 00000 n\n0000000273 00000 n\n0000000352 00000 n\ntrailer\n<< /Size 6 /Root 1 0 R >>\nstartxref\n446\n%%EOF";
|
||||
}
|
||||
}
|
||||
+5
-1
@@ -2,6 +2,10 @@
|
||||
|
||||
return [
|
||||
'api_key' => env('COURIER_API_KEY'),
|
||||
'api_base_url' => env('COURIER_API_BASE_URL', 'https://api.shiplogic.com/api'),
|
||||
'api_base_url' => env('COURIER_API_BASE_URL', 'https://api.shiplogic.com'),
|
||||
'webhook_secret' => env('COURIER_WEBHOOK_SECRET'),
|
||||
|
||||
// Use shiplogic config from services.php
|
||||
'shiplogic_collection_address' => config('services.shiplogic.collection_address'),
|
||||
'shiplogic_collection_contact' => config('services.shiplogic.collection_contact'),
|
||||
];
|
||||
|
||||
@@ -44,6 +44,11 @@ return [
|
||||
'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
|
||||
'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),
|
||||
],
|
||||
'design_hook_url' => env('SLACK_DESIGN_HOOK_URL'),
|
||||
'production_hook_url' => env('SLACK_PRODUCTION_HOOK_URL'),
|
||||
'orders_hook_url' => env('SLACK_ORDERS_HOOK_URL'),
|
||||
'shipping_hook_url' => env('SLACK_SHIPPING_HOOK_URL'),
|
||||
'opsalert_hook_url' => env('SLACK_OPSALERT_HOOK_URL'),
|
||||
],
|
||||
|
||||
'yoco' => [
|
||||
@@ -59,4 +64,28 @@ return [
|
||||
'redirect' => env('GOOGLE_REDIRECT_URI', '/auth/google/callback'),
|
||||
],
|
||||
|
||||
'google_places' => [
|
||||
'api_key' => env('GOOGLE_PLACES_API_KEY'),
|
||||
],
|
||||
|
||||
'shiplogic' => [
|
||||
'api_key' => env('COURIER_API_KEY'),
|
||||
'api_base_url' => env('COURIER_API_BASE_URL', 'https://api.shiplogic.com'),
|
||||
'collection_address' => [
|
||||
'type' => 'business',
|
||||
'company' => env('SHIPLOGIC_COLLECTION_COMPANY', 'Two Tales Designs'),
|
||||
'street_address' => env('SHIPLOGIC_COLLECTION_STREET', '194 Bancor Avenue'),
|
||||
'local_area' => env('SHIPLOGIC_COLLECTION_AREA', 'Menlyn'),
|
||||
'city' => env('SHIPLOGIC_COLLECTION_CITY', 'Cape Town'),
|
||||
'zone' => env('SHIPLOGIC_COLLECTION_ZONE', 'Western Cape'),
|
||||
'code' => env('SHIPLOGIC_COLLECTION_CODE', '8000'),
|
||||
'country' => env('SHIPLOGIC_COLLECTION_COUNTRY', 'ZA'),
|
||||
],
|
||||
'collection_contact' => [
|
||||
'name' => env('SHIPLOGIC_COLLECTION_CONTACT_NAME', 'Two Tales Designs'),
|
||||
'email' => env('SHIPLOGIC_COLLECTION_EMAIL', env('MAIL_FROM_ADDRESS')),
|
||||
'mobile_number' => env('SHIPLOGIC_COLLECTION_PHONE', '+27000000000'),
|
||||
],
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -9,7 +9,9 @@ return new class extends Migration
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('order_items', function (Blueprint $table) {
|
||||
$table->boolean('is_sample')->default(false)->after('type');
|
||||
if (!Schema::hasColumn('order_items', 'is_sample')) {
|
||||
$table->boolean('is_sample')->default(false)->after('type');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,9 @@ return new class extends Migration
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->decimal('shipping_fee', 10, 2)->default(0)->nullable()->after('total');
|
||||
if (!Schema::hasColumn('orders', 'shipping_fee')) {
|
||||
$table->decimal('shipping_fee', 10, 2)->default(0)->nullable()->after('total');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,9 @@ return new class extends Migration
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->string('invoice_path')->nullable()->after('shipping_fee');
|
||||
if (!Schema::hasColumn('orders', 'invoice_path')) {
|
||||
$table->string('invoice_path')->nullable()->after('shipping_fee');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
// Add new address component columns
|
||||
$table->string('shipping_street_address')->nullable()->after('shipping_address');
|
||||
$table->string('shipping_local_area')->nullable()->after('shipping_street_address');
|
||||
$table->string('shipping_city')->nullable()->after('shipping_local_area');
|
||||
$table->string('shipping_zone')->nullable()->after('shipping_city');
|
||||
$table->string('shipping_country')->default('ZA')->after('shipping_zone');
|
||||
$table->string('shipping_postcode')->nullable()->after('shipping_country');
|
||||
$table->enum('shipping_type', ['residential', 'business'])->default('residential')->after('shipping_postcode');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->dropColumn([
|
||||
'shipping_street_address',
|
||||
'shipping_local_area',
|
||||
'shipping_city',
|
||||
'shipping_zone',
|
||||
'shipping_country',
|
||||
'shipping_postcode',
|
||||
'shipping_type',
|
||||
]);
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
// Add individual address fields if they don't exist
|
||||
if (!Schema::hasColumn('orders', 'shipping_street_address')) {
|
||||
$table->string('shipping_street_address')->nullable()->after('shipping_address');
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('orders', 'shipping_unit_number')) {
|
||||
$table->string('shipping_unit_number')->nullable()->after('shipping_street_address');
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('orders', 'shipping_local_area')) {
|
||||
$table->string('shipping_local_area')->nullable()->after('shipping_unit_number');
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('orders', 'shipping_city')) {
|
||||
$table->string('shipping_city')->nullable()->after('shipping_local_area');
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('orders', 'shipping_zone')) {
|
||||
$table->string('shipping_zone')->nullable()->after('shipping_city');
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('orders', 'shipping_postcode')) {
|
||||
$table->string('shipping_postcode')->nullable()->after('shipping_zone');
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('orders', 'shipping_country')) {
|
||||
$table->string('shipping_country')->default('ZA')->after('shipping_postcode');
|
||||
}
|
||||
|
||||
if (!Schema::hasColumn('orders', 'shipping_type')) {
|
||||
$table->enum('shipping_type', ['residential', 'business'])->default('residential')->after('shipping_country');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->dropColumnIfExists([
|
||||
'shipping_street_address',
|
||||
'shipping_unit_number',
|
||||
'shipping_local_area',
|
||||
'shipping_city',
|
||||
'shipping_zone',
|
||||
'shipping_postcode',
|
||||
'shipping_country',
|
||||
'shipping_type'
|
||||
]);
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('orders', 'business_name')) {
|
||||
$table->string('business_name')->nullable()->after('shipping_type');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->dropColumnIfExists('business_name');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('orders', 'packing_height')) {
|
||||
$table->decimal('packing_height', 8, 2)->nullable()->comment('Height in cm')->after('packing_length');
|
||||
}
|
||||
});
|
||||
|
||||
Schema::table('custom_orders', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('custom_orders', 'packing_height')) {
|
||||
$table->decimal('packing_height', 8, 2)->nullable()->comment('Height in cm')->after('packing_length');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->dropColumnIfExists('packing_height');
|
||||
});
|
||||
|
||||
Schema::table('custom_orders', function (Blueprint $table) {
|
||||
$table->dropColumnIfExists('packing_height');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
// Shipment rate and service level information
|
||||
$table->decimal('courier_rate', 10, 2)->nullable()->after('courier_status');
|
||||
$table->string('courier_service_level_code')->nullable()->after('courier_rate');
|
||||
$table->integer('courier_service_level_id')->nullable()->after('courier_service_level_code');
|
||||
|
||||
// Collection and delivery date information
|
||||
$table->datetime('courier_collection_min_date')->nullable()->after('courier_service_level_id');
|
||||
$table->datetime('courier_delivery_min_date')->nullable()->after('courier_collection_min_date');
|
||||
|
||||
// Shipment ID from Shiplogic API
|
||||
$table->string('courier_shipment_id')->nullable()->after('courier_delivery_min_date');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->dropColumn([
|
||||
'courier_rate',
|
||||
'courier_service_level_code',
|
||||
'courier_service_level_id',
|
||||
'courier_collection_min_date',
|
||||
'courier_delivery_min_date',
|
||||
'courier_shipment_id',
|
||||
]);
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -43,7 +43,9 @@
|
||||
}
|
||||
|
||||
.form-group input,
|
||||
.form-group textarea {
|
||||
.form-group textarea,
|
||||
.form-group select,
|
||||
.address-search-group input {
|
||||
width: 100%;
|
||||
padding: 0.75rem;
|
||||
border: 1px solid #ddd;
|
||||
@@ -58,12 +60,52 @@
|
||||
}
|
||||
|
||||
.form-group input:focus,
|
||||
.form-group textarea:focus {
|
||||
.form-group textarea:focus,
|
||||
.form-group select:focus,
|
||||
.address-search-group input:focus {
|
||||
outline: none;
|
||||
border-color: var(--primary-color);
|
||||
box-shadow: 0 0 0 3px rgba(45, 80, 71, 0.1);
|
||||
}
|
||||
|
||||
/* Google Places Autocomplete styling */
|
||||
.pac-container {
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.pac-item {
|
||||
padding: 0.75rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.pac-item:hover {
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
|
||||
.address-search-group {
|
||||
margin-bottom: 1.5rem;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.address-clear-btn {
|
||||
position: absolute;
|
||||
right: 12px;
|
||||
top: 32px;
|
||||
background: none;
|
||||
border: none;
|
||||
color: #999;
|
||||
cursor: pointer;
|
||||
font-size: 1.2rem;
|
||||
padding: 0;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.address-clear-btn.show {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.order-summary {
|
||||
height: fit-content;
|
||||
}
|
||||
@@ -197,23 +239,74 @@
|
||||
<h2>Delivery Information</h2>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="customer_name">Full Name</label>
|
||||
<input type="text" id="customer_name" name="customer_name" value="{{ old('customer_name') }}" required>
|
||||
<label for="customer_name">Full Name<span style="color: red;">*</span></label>
|
||||
<input type="text" id="customer_name" name="customer_name" value="{{ old('customer_name', Auth::check() ? Auth::user()->name : '') }}" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="customer_email">Email Address</label>
|
||||
<input type="email" id="customer_email" name="customer_email" value="{{ old('customer_email') }}" required>
|
||||
<label for="customer_email">Email Address<span style="color: red;">*</span></label>
|
||||
<input type="email" id="customer_email" name="customer_email" value="{{ old('customer_email', Auth::check() ? Auth::user()->email : '') }}" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="customer_phone">Phone Number</label>
|
||||
<label for="customer_phone">Phone Number<span style="color: red;">*</span></label>
|
||||
<input type="tel" id="customer_phone" name="customer_phone" value="{{ old('customer_phone') }}" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="shipping_address">Delivery Address</label>
|
||||
<textarea id="shipping_address" name="shipping_address" required>{{ old('shipping_address') }}</textarea>
|
||||
<label for="shipping_type">Address Type <span style="color: red;">*</span></label>
|
||||
<select id="shipping_type" name="shipping_type" required>
|
||||
<option value="residential" {{ old('shipping_type') === 'residential' ? 'selected' : '' }}>Residential</option>
|
||||
<option value="business" {{ old('shipping_type') === 'business' ? 'selected' : '' }}>Business</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group" id="business_name_group" style="display: none;">
|
||||
<label for="business_name">Business Name <span style="color: red;">*</span></label>
|
||||
<input type="text" id="business_name" name="business_name" value="{{ old('business_name') }}" placeholder="Enter your business name">
|
||||
</div>
|
||||
|
||||
<div class="address-search-group">
|
||||
|
||||
<label for="address_search">Delivery Address (Type to search)</label>
|
||||
<input type="text" id="address_search" placeholder="Start typing your address..." autocomplete="off">
|
||||
<button type="button" class="address-clear-btn" id="address_clear_btn">✕</button>
|
||||
</div>
|
||||
|
||||
<div id="address_fields_group">
|
||||
<div class="form-group">
|
||||
<label for="shipping_unit_number">Apartment / Unit / Building Number (Optional)</label>
|
||||
<input type="text" id="shipping_unit_number" name="shipping_unit_number" placeholder="e.g. Apt 101, Unit B, Building 3" value="{{ old('shipping_unit_number') }}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="shipping_street_address">Street Address <span style="color: red;">*</span></label>
|
||||
<input type="text" id="shipping_street_address" name="shipping_street_address" value="{{ old('shipping_street_address') }}" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="shipping_local_area">Suburb<span style="color: red;">*</span></label>
|
||||
<input type="text" id="shipping_local_area" name="shipping_local_area" value="{{ old('shipping_local_area') }}" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="shipping_city">City <span style="color: red;">*</span></label>
|
||||
<input type="text" id="shipping_city" name="shipping_city" value="{{ old('shipping_city') }}" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="shipping_zone">Province<span style="color: red;">*</span></label>
|
||||
<input type="text" id="shipping_zone" name="shipping_zone" value="{{ old('shipping_zone') }}" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="shipping_postcode">Postal Code <span style="color: red;">*</span></label>
|
||||
<input type="text" id="shipping_postcode" name="shipping_postcode" value="{{ old('shipping_postcode') }}" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="shipping_country">Country</label>
|
||||
<input type="text" id="shipping_country" name="shipping_country" value="ZA" readonly>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
@@ -287,4 +380,182 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@php
|
||||
$apiKey = config('services.google_places.api_key');
|
||||
@endphp
|
||||
|
||||
@if(!$apiKey)
|
||||
<div style="background: #fff3cd; padding: 1rem; margin-bottom: 1rem; border-radius: 4px; color: #856404;">
|
||||
<strong>⚠️ Configuration Issue:</strong> Google Places API key is not configured. Please add <code>GOOGLE_PLACES_API_KEY</code> to your .env file.
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<script>
|
||||
// console.log('Checkout page loaded');
|
||||
// console.log('API Key configured:', {{ $apiKey ? 'true' : 'false' }});
|
||||
// @if($apiKey)
|
||||
// console.log('API Key length:', {{ strlen($apiKey) }});
|
||||
// @endif
|
||||
</script>
|
||||
|
||||
@if($apiKey)
|
||||
<script async defer src="https://maps.googleapis.com/maps/api/js?key={{ $apiKey }}&loading=async&libraries=places&callback=initializeAddressAutocomplete"></script>
|
||||
<!-- <script>
|
||||
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
|
||||
key: "{{ $apiKey }}",
|
||||
v: "weekly",
|
||||
|
||||
}); -->
|
||||
</script>
|
||||
|
||||
<script>
|
||||
// Handle shipping type change
|
||||
document.getElementById('shipping_type').addEventListener('change', function() {
|
||||
const businessNameGroup = document.getElementById('business_name_group');
|
||||
const businessNameInput = document.getElementById('business_name');
|
||||
|
||||
if (this.value === 'business') {
|
||||
businessNameGroup.style.display = 'block';
|
||||
businessNameInput.setAttribute('required', 'required');
|
||||
} else {
|
||||
businessNameGroup.style.display = 'none';
|
||||
businessNameInput.removeAttribute('required');
|
||||
businessNameInput.value = '';
|
||||
}
|
||||
});
|
||||
|
||||
// Check initial state on page load
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const shippingType = document.getElementById('shipping_type');
|
||||
if (shippingType && shippingType.value === 'business') {
|
||||
document.getElementById('business_name_group').style.display = 'block';
|
||||
}
|
||||
});
|
||||
|
||||
function initializeAddressAutocomplete() {
|
||||
console.log('✓ Google Maps API loaded');
|
||||
|
||||
const addressSearchInput = document.getElementById('address_search');
|
||||
const clearBtn = document.getElementById('address_clear_btn');
|
||||
|
||||
if (!addressSearchInput) {
|
||||
console.error('Address search input not found');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
console.log('Initializing Google Places Autocomplete...');
|
||||
|
||||
// Using modern Autocomplete with new API
|
||||
const autocomplete = new google.maps.places.Autocomplete(addressSearchInput, {
|
||||
componentRestrictions: { country: 'za' },
|
||||
types: ['geocode']
|
||||
});
|
||||
|
||||
console.log('✓ Google Places Autocomplete initialized');
|
||||
|
||||
// Prevent form submission on Enter when autocomplete dropdown is open
|
||||
addressSearchInput.addEventListener('keydown', function(e) {
|
||||
const pacContainer = document.querySelector('.pac-container:not([style*="display: none"])');
|
||||
if (e.key === 'Enter' && pacContainer) {
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
// When place is selected
|
||||
autocomplete.addListener('place_changed', function() {
|
||||
const place = autocomplete.getPlace();
|
||||
|
||||
if (!place.geometry) {
|
||||
console.warn('Selected place has no geometry');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('✓ Address selected:', place.formatted_address);
|
||||
|
||||
// Parse address components
|
||||
const addressComponents = {};
|
||||
place.address_components.forEach(component => {
|
||||
addressComponents[component.types[0]] = component.long_name;
|
||||
});
|
||||
|
||||
// Debug: log all available components
|
||||
console.log('Address components available:', Object.keys(addressComponents));
|
||||
|
||||
// Populate form fields
|
||||
document.getElementById('shipping_street_address').value =
|
||||
(addressComponents['street_number'] ? addressComponents['street_number'] + ' ' : '') +
|
||||
(addressComponents['route'] || '');
|
||||
|
||||
document.getElementById('shipping_local_area').value =
|
||||
addressComponents['political'] ||
|
||||
addressComponents['sublocality'] ||
|
||||
addressComponents['sublocality_level_1'] ||
|
||||
addressComponents['sublocality_level_2'] || '';
|
||||
|
||||
document.getElementById('shipping_city').value =
|
||||
addressComponents['locality'] || addressComponents['administrative_area_level_2'] || '';
|
||||
|
||||
document.getElementById('shipping_zone').value =
|
||||
addressComponents['administrative_area_level_1'] || '';
|
||||
|
||||
document.getElementById('shipping_postcode').value =
|
||||
addressComponents['postal_code'] || '';
|
||||
|
||||
document.getElementById('shipping_country').value =
|
||||
addressComponents['country'] || 'ZA';
|
||||
|
||||
// Show clear button
|
||||
clearBtn.classList.add('show');
|
||||
});
|
||||
|
||||
// Clear button functionality
|
||||
clearBtn.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
addressSearchInput.value = '';
|
||||
addressSearchInput.focus();
|
||||
clearBtn.classList.remove('show');
|
||||
|
||||
// Clear form fields
|
||||
document.getElementById('shipping_street_address').value = '';
|
||||
document.getElementById('shipping_unit_number').value = '';
|
||||
document.getElementById('shipping_local_area').value = '';
|
||||
document.getElementById('shipping_city').value = '';
|
||||
document.getElementById('shipping_zone').value = '';
|
||||
document.getElementById('shipping_postcode').value = '';
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('✗ Error initializing autocomplete:', error);
|
||||
showAddressFieldsManually();
|
||||
}
|
||||
}
|
||||
|
||||
function showAddressFieldsManually() {
|
||||
const addressSearchInput = document.getElementById('address_search');
|
||||
if (addressSearchInput) {
|
||||
addressSearchInput.style.display = 'none';
|
||||
document.querySelector('label[for="address_search"]').style.display = 'none';
|
||||
document.getElementById('address_clear_btn').style.display = 'none';
|
||||
|
||||
const fieldsGroup = document.getElementById('address_fields_group');
|
||||
if (fieldsGroup) {
|
||||
const notice = document.createElement('div');
|
||||
notice.style.cssText = 'background: #f0f0f0; padding: 1rem; border-radius: 4px; margin-bottom: 1.5rem; color: #666;';
|
||||
notice.innerHTML = '<strong>Note:</strong> Address search is not available. Please fill in your address details manually below.';
|
||||
fieldsGroup.parentNode.insertBefore(notice, fieldsGroup);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If Google API doesn't load after 5 seconds, show fallback
|
||||
setTimeout(() => {
|
||||
if (typeof google === 'undefined') {
|
||||
console.warn('Google Maps API failed to load');
|
||||
showAddressFieldsManually();
|
||||
}
|
||||
}, 5000);
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@endsection
|
||||
|
||||
@@ -2,47 +2,180 @@
|
||||
<div class="bg-blue-50 border-2 border-blue-200 rounded-lg p-6 mb-8">
|
||||
<div class="flex items-start">
|
||||
<div class="flex-1">
|
||||
<h2 class="text-2xl font-bold text-blue-900 mb-2">📋 Order Status: Read-Only</h2>
|
||||
<p class="text-blue-800 mb-4">
|
||||
This order is in the <strong>{{ str_replace('_', ' ', ucfirst($order->status)) }}</strong> phase.
|
||||
No actions are available at this stage.
|
||||
</p>
|
||||
<h2 class="text-2xl font-bold text-blue-900 mb-4">📋 Order Status: {{ str_replace('_', ' ', ucfirst($order->status)) }}</h2>
|
||||
|
||||
@if($order->status === 'ready_to_ship')
|
||||
<div class="bg-white border-l-4 border-blue-500 p-4 rounded">
|
||||
<p class="text-gray-700">
|
||||
<strong>Next Step:</strong> Move Trello card to "Ready to Ship" to trigger automatic shipment creation.
|
||||
<div class="bg-white border-l-4 border-blue-500 p-4 rounded mb-6">
|
||||
<p class="text-gray-700 font-semibold text-lg mb-4">
|
||||
✓ Shipment created and ready to print labels/stickers
|
||||
</p>
|
||||
|
||||
<div class="space-y-3">
|
||||
<p class="text-gray-700 font-semibold">Next Steps:</p>
|
||||
<ol class="list-decimal list-inside space-y-2 text-gray-700">
|
||||
<li>Print the shipment sticker label</li>
|
||||
<li>Print the shipment waybill/label</li>
|
||||
<li>Apply labels to parcel</li>
|
||||
<li>Move parcel to collection bay</li>
|
||||
<li>Click "Ready for Collection" button below</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<button
|
||||
type="button"
|
||||
onclick="markReadyForCollection('{{ $order->uuid }}')"
|
||||
class="mt-6 w-full bg-green-600 hover:bg-green-700 text-white font-bold py-4 px-6 rounded-lg text-lg transition duration-200"
|
||||
>
|
||||
✓ Ready for Collection
|
||||
</button>
|
||||
</div>
|
||||
@elseif($order->status === 'awaiting_collection')
|
||||
<div class="bg-white border-l-4 border-blue-500 p-4 rounded">
|
||||
<p class="text-gray-700">
|
||||
<strong>Status:</strong> Parcel is awaiting collection from courier.
|
||||
<div class="bg-white border-l-4 border-blue-500 p-4 rounded mb-6">
|
||||
<p class="text-gray-700 font-semibold text-lg mb-4">
|
||||
📦 Parcel awaiting collection from courier
|
||||
</p>
|
||||
@if($order->courier_waybill_id)
|
||||
<p class="text-gray-700 mt-2">
|
||||
<strong>Waybill:</strong> <code class="bg-gray-100 px-2 py-1 rounded">{{ $order->courier_waybill_id }}</code>
|
||||
<p class="text-gray-700 mt-4">
|
||||
<strong>Waybill:</strong> <code class="bg-gray-100 px-3 py-2 rounded block mt-2 text-base break-all">{{ $order->courier_waybill_id }}</code>
|
||||
</p>
|
||||
@endif
|
||||
|
||||
<!-- Re-download PDFs Button -->
|
||||
@if($order->courier_shipment_id)
|
||||
<button
|
||||
type="button"
|
||||
onclick="redownloadPdfs('{{ $order->uuid }}')"
|
||||
class="mt-6 w-full bg-orange-500 hover:bg-orange-600 text-white font-bold py-4 px-6 rounded-lg text-lg transition duration-200"
|
||||
>
|
||||
🔄 Re-download Shipment PDFs
|
||||
</button>
|
||||
<p class="text-gray-600 text-sm mt-3">If labels are damaged, re-download them.</p>
|
||||
@endif
|
||||
</div>
|
||||
@elseif($order->status === 'in_transit')
|
||||
<div class="bg-white border-l-4 border-green-500 p-4 rounded">
|
||||
<p class="text-gray-700">
|
||||
<strong>Status:</strong> Parcel is in transit to the customer.
|
||||
<div class="bg-white border-l-4 border-green-500 p-4 rounded mb-6">
|
||||
<p class="text-gray-700 font-semibold text-lg mb-4">
|
||||
✈️ Parcel in transit to customer
|
||||
</p>
|
||||
@if($order->courier_tracking_number)
|
||||
<p class="text-gray-700 mt-2">
|
||||
<strong>Tracking:</strong> <code class="bg-gray-100 px-2 py-1 rounded">{{ $order->courier_tracking_number }}</code>
|
||||
<p class="text-gray-700 mt-4">
|
||||
<strong>Tracking Number:</strong> <code class="bg-gray-100 px-3 py-2 rounded block mt-2 text-base break-all">{{ $order->courier_tracking_number }}</code>
|
||||
</p>
|
||||
@endif
|
||||
|
||||
<!-- Re-download PDFs Button -->
|
||||
@if($order->courier_shipment_id)
|
||||
<button
|
||||
type="button"
|
||||
onclick="redownloadPdfs('{{ $order->uuid }}')"
|
||||
class="mt-6 w-full bg-orange-500 hover:bg-orange-600 text-white font-bold py-4 px-6 rounded-lg text-lg transition duration-200"
|
||||
>
|
||||
🔄 Re-download Shipment PDFs
|
||||
</button>
|
||||
<p class="text-gray-600 text-sm mt-3">If labels are damaged, re-download them.</p>
|
||||
@endif
|
||||
</div>
|
||||
@else
|
||||
<div class="bg-white border-l-4 border-gray-500 p-4 rounded">
|
||||
<p class="text-gray-700">
|
||||
The order is progressing through the fulfillment pipeline.
|
||||
<p class="text-gray-700 font-semibold text-lg">
|
||||
Order is processing through the fulfillment pipeline
|
||||
</p>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
async function markReadyForCollection(orderUuid) {
|
||||
if (!confirm('Mark order as ready for collection?')) {
|
||||
return;
|
||||
}
|
||||
|
||||
const button = document.querySelector('[onclick*="markReadyForCollection"]');
|
||||
button.disabled = true;
|
||||
button.classList.add('opacity-50');
|
||||
const originalText = button.innerText;
|
||||
button.innerText = '⏳ Processing...';
|
||||
|
||||
try {
|
||||
const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content') ||
|
||||
document.querySelector('input[name="_token"]')?.value;
|
||||
|
||||
if (!csrfToken) {
|
||||
throw new Error('CSRF token not found on page');
|
||||
}
|
||||
|
||||
const response = await fetch(`/ops/orders/${orderUuid}/ready-for-collection`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'X-CSRF-Token': csrfToken,
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({}),
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (data.success) {
|
||||
alert('✓ Order moved to Awaiting Collection');
|
||||
location.reload();
|
||||
} else {
|
||||
alert('✗ Failed:\n' + data.message);
|
||||
}
|
||||
} catch (error) {
|
||||
alert('✗ Error: ' + error.message);
|
||||
} finally {
|
||||
button.disabled = false;
|
||||
button.classList.remove('opacity-50');
|
||||
button.innerText = originalText;
|
||||
}
|
||||
}
|
||||
|
||||
async function redownloadPdfs(orderUuid) {
|
||||
if (!confirm('Re-download shipment PDFs from Shiplogic API?')) {
|
||||
return;
|
||||
}
|
||||
|
||||
const button = document.querySelector('[onclick*="redownloadPdfs"]');
|
||||
button.disabled = true;
|
||||
button.classList.add('opacity-50');
|
||||
const originalText = button.innerText;
|
||||
button.innerText = '⏳ Downloading...';
|
||||
|
||||
try {
|
||||
const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content') ||
|
||||
document.querySelector('input[name="_token"]')?.value;
|
||||
|
||||
if (!csrfToken) {
|
||||
throw new Error('CSRF token not found on page');
|
||||
}
|
||||
|
||||
const response = await fetch(`/ops/orders/${orderUuid}/redownload-pdfs`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'X-CSRF-Token': csrfToken,
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({}),
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (data.success) {
|
||||
alert('✓ PDFs re-downloaded successfully!');
|
||||
location.reload();
|
||||
} else {
|
||||
alert('✗ Failed to re-download PDFs:\n' + data.message);
|
||||
}
|
||||
} catch (error) {
|
||||
alert('✗ Error: ' + error.message);
|
||||
} finally {
|
||||
button.disabled = false;
|
||||
button.classList.remove('opacity-50');
|
||||
button.innerText = originalText;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -1,54 +1,39 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container mx-auto px-4 py-8">
|
||||
<!-- Header -->
|
||||
<div class="w-full min-h-screen bg-gray-50 px-4 py-6 sm:px-6 lg:px-8">
|
||||
<!-- Mobile-friendly Header -->
|
||||
<div class="mb-8">
|
||||
<h1 class="text-3xl font-bold mb-2">Order {{ $order->order_number }}</h1>
|
||||
<p class="text-gray-600">{{ $order->uuid }}</p>
|
||||
<h1 class="text-4xl font-bold mb-2 break-words">{{ $order->order_number }}</h1>
|
||||
<p class="text-gray-600 text-sm break-all">{{ $order->uuid }}</p>
|
||||
</div>
|
||||
|
||||
<!-- Order Summary Card -->
|
||||
<div class="bg-white rounded-lg shadow-md p-6 mb-8">
|
||||
<div class="grid grid-cols-2 md:grid-cols-4 gap-4 mb-6">
|
||||
<div class="grid grid-cols-1 sm:grid-cols-2 gap-6 mb-6">
|
||||
<div>
|
||||
<p class="text-sm text-gray-600">Status</p>
|
||||
<p class="text-lg font-semibold capitalize">{{ str_replace('_', ' ', $order->status) }}</p>
|
||||
<p class="text-sm text-gray-600 font-semibold">Status</p>
|
||||
<p class="text-xl font-bold capitalize mt-2">{{ str_replace('_', ' ', $order->status) }}</p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-sm text-gray-600">Order Type</p>
|
||||
<p class="text-lg font-semibold">{{ $order->is_custom_order ? 'Custom' : 'Standard' }}</p>
|
||||
<p class="text-sm text-gray-600 font-semibold">Order Type</p>
|
||||
<p class="text-xl font-bold mt-2">{{ $order->is_custom_order ? 'Custom' : 'Standard' }}</p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-sm text-gray-600">Customer</p>
|
||||
<p class="text-lg font-semibold">{{ $order->user->name ?? 'N/A' }}</p>
|
||||
<p class="text-sm text-gray-600 font-semibold">Customer</p>
|
||||
<p class="text-xl font-bold mt-2">{{ $order->user->name ?? 'N/A' }}</p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-sm text-gray-600">Created</p>
|
||||
<p class="text-lg font-semibold">{{ $order->created_at->format('M d, Y') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- QR Code -->
|
||||
<div class="border-t pt-6">
|
||||
<div class="flex items-start justify-between mb-3">
|
||||
<div>
|
||||
<p class="text-sm text-gray-600 mb-3">Scan to access this order:</p>
|
||||
</div>
|
||||
<a href="{{ route('ops.order.sticker.download', $order) }}" class="inline-flex items-center px-3 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 text-sm">
|
||||
📥 Download Sticker (A6 PDF)
|
||||
</a>
|
||||
</div>
|
||||
<div class="inline-block bg-gray-50 p-4 rounded border">
|
||||
{!! file_get_contents(storage_path("app/public/qr-codes/{$order->uuid}.svg")) !!}
|
||||
<p class="text-sm text-gray-600 font-semibold">Created</p>
|
||||
<p class="text-xl font-bold mt-2">{{ $order->created_at->format('M d, Y') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- State-Specific Actions -->
|
||||
@if($order->status === 'inspection')
|
||||
@if($order->status === 'inspection' || $order->status === 'printing')
|
||||
@include('ops.actions.inspection')
|
||||
@elseif($order->status === 'packing' || $order->status === 'printing')
|
||||
@elseif($order->status === 'packing')
|
||||
@include('ops.actions.packing')
|
||||
@elseif(in_array($order->status, ['ready_to_ship', 'awaiting_collection', 'in_transit']))
|
||||
@include('ops.actions.read-only')
|
||||
@@ -108,7 +93,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-sm text-gray-600">Packed At</p>
|
||||
<p class="text-lg font-semibold">{{ $order->packing_completed_at->format('M d, H:i') }}</p>
|
||||
<p class="text-lg font-semibold">{{ $order->packing_completed_at ? $order->packing_completed_at->format('M d, H:i') : 'Not packed' }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Mock Shiplogic API Routes for Testing
|
||||
* These routes simulate the Shiplogic API responses
|
||||
* To use these routes, add to routes/web.php: include base_path('routes/shiplogic-mock.php');
|
||||
*/
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::prefix('api/v1/mock')->group(function () {
|
||||
/**
|
||||
* Mock /rates endpoint
|
||||
* Returns sample service level options
|
||||
*/
|
||||
Route::post('/rates', function () {
|
||||
return response()->json([
|
||||
'id' => '550e8400-e29b-41d4-a716-446655440001',
|
||||
'company_shipment_rates' => [
|
||||
[
|
||||
'id' => '9f67ff00-7a82-4d81-9481-4c5d8c8f1a00',
|
||||
'company_code' => 'FEDEX',
|
||||
'company_name' => 'FedEx',
|
||||
'service_level' => [
|
||||
'id' => '123456789',
|
||||
'code' => 'FEDEX_INTERNATIONAL_PRIORITY_EXPRESS',
|
||||
'name' => 'International Priority Express',
|
||||
'description' => 'Fastest service',
|
||||
],
|
||||
'rate' => 125.50,
|
||||
'currency' => 'GBP',
|
||||
'transit_days' => '1-2',
|
||||
'delivery_guarantee_date' => '2026-01-05',
|
||||
],
|
||||
[
|
||||
'id' => '9f67ff00-7a82-4d81-9481-4c5d8c8f1a01',
|
||||
'company_code' => 'FEDEX',
|
||||
'company_name' => 'FedEx',
|
||||
'service_level' => [
|
||||
'id' => '123456790',
|
||||
'code' => 'FEDEX_INTERNATIONAL_ECONOMY',
|
||||
'name' => 'International Economy',
|
||||
'description' => 'Economy service (ECO)',
|
||||
],
|
||||
'rate' => 45.75,
|
||||
'currency' => 'GBP',
|
||||
'transit_days' => '5-7',
|
||||
'delivery_guarantee_date' => '2026-01-09',
|
||||
],
|
||||
[
|
||||
'id' => '9f67ff00-7a82-4d81-9481-4c5d8c8f1a02',
|
||||
'company_code' => 'DHL',
|
||||
'company_name' => 'DHL',
|
||||
'service_level' => [
|
||||
'id' => '123456791',
|
||||
'code' => 'DHL_EXPRESS_WORLDWIDE',
|
||||
'name' => 'Express Worldwide',
|
||||
'description' => 'Standard express',
|
||||
],
|
||||
'rate' => 95.25,
|
||||
'currency' => 'GBP',
|
||||
'transit_days' => '2-3',
|
||||
'delivery_guarantee_date' => '2026-01-06',
|
||||
],
|
||||
],
|
||||
]);
|
||||
});
|
||||
|
||||
/**
|
||||
* Mock /shipments endpoint
|
||||
* Returns created shipment details
|
||||
*/
|
||||
Route::post('/shipments', function () {
|
||||
return response()->json([
|
||||
'id' => '550e8400-e29b-41d4-a716-446655440002',
|
||||
'short_tracking_reference' => 'SHP123456789',
|
||||
'tracking_reference' => 'SHP-123456789-ABC',
|
||||
'customer_reference' => 'ORDER-12345',
|
||||
'company_code' => 'FEDEX',
|
||||
'service_level' => [
|
||||
'code' => 'FEDEX_INTERNATIONAL_ECONOMY',
|
||||
'name' => 'International Economy',
|
||||
],
|
||||
'collection_min_date' => '2026-01-04',
|
||||
'delivery_min_date' => '2026-01-09',
|
||||
'status' => 'created',
|
||||
'created_at' => now()->toIso8601String(),
|
||||
]);
|
||||
});
|
||||
|
||||
/**
|
||||
* Mock /shipments/label endpoint (waybill/shipping label)
|
||||
* Returns PDF binary data
|
||||
*/
|
||||
Route::get('/shipments/label', function () {
|
||||
// Return a minimal PDF (you can replace with a real PDF file)
|
||||
$pdf = $this->generateMockPdf('Shipment Label');
|
||||
|
||||
return response($pdf, 200, [
|
||||
'Content-Type' => 'application/pdf',
|
||||
'Content-Disposition' => 'attachment; filename="label.pdf"',
|
||||
]);
|
||||
});
|
||||
|
||||
/**
|
||||
* Mock /shipments/label/stickers endpoint
|
||||
* Returns PDF with sticker labels
|
||||
*/
|
||||
Route::get('/shipments/label/stickers', function () {
|
||||
// Return a minimal PDF (you can replace with a real PDF file)
|
||||
$pdf = $this->generateMockPdf('Shipment Sticker');
|
||||
|
||||
return response($pdf, 200, [
|
||||
'Content-Type' => 'application/pdf',
|
||||
'Content-Disposition' => 'attachment; filename="stickers.pdf"',
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Generate a minimal valid PDF for testing
|
||||
* This is a very basic PDF structure that opens in most readers
|
||||
*/
|
||||
if (! function_exists('generateMockPdf')) {
|
||||
function generateMockPdf($title = 'Document')
|
||||
{
|
||||
$pdf = "%PDF-1.4\n";
|
||||
$pdf .= "1 0 obj\n<< /Type /Catalog /Pages 2 0 R >>\nendobj\n";
|
||||
$pdf .= "2 0 obj\n<< /Type /Pages /Kids [3 0 R] /Count 1 >>\nendobj\n";
|
||||
$pdf .= "3 0 obj\n<< /Type /Page /Parent 2 0 R /Resources << /Font << /F1 4 0 R >> >> /MediaBox [0 0 612 792] /Contents 5 0 R >>\nendobj\n";
|
||||
$pdf .= "4 0 obj\n<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>\nendobj\n";
|
||||
$pdf .= "5 0 obj\n<< /Length 44 >>\nstream\nBT\n/F1 12 Tf\n100 700 Td\n({$title}) Tj\nET\nendstream\nendobj\n";
|
||||
$pdf .= "xref\n0 6\n0000000000 65535 f\n0000000009 00000 n\n0000000058 00000 n\n0000000115 00000 n\n0000000273 00000 n\n0000000352 00000 n\n";
|
||||
$pdf .= "trailer\n<< /Size 6 /Root 1 0 R >>\nstartxref\n446\n%%EOF";
|
||||
|
||||
return $pdf;
|
||||
}
|
||||
}
|
||||
@@ -78,6 +78,8 @@ Route::middleware('auth')->group(function () {
|
||||
Route::post('/ops/orders/{order:uuid}/inspection-passed', [OpsController::class, 'markInspectionPassed'])->name('ops.order.inspection-passed');
|
||||
Route::post('/ops/orders/{order:uuid}/inspection-failed', [OpsController::class, 'flagInspectionIssue'])->name('ops.order.inspection-failed');
|
||||
Route::get('/ops/orders/{order:uuid}/sticker/download', [OpsController::class, 'downloadSticker'])->name('ops.order.sticker.download');
|
||||
Route::post('/ops/orders/{order:uuid}/redownload-pdfs', [OpsController::class, 'redownloadShipmentPdfs'])->name('ops.order.redownload-pdfs');
|
||||
Route::post('/ops/orders/{order:uuid}/ready-for-collection', [OpsController::class, 'markReadyForCollection'])->name('ops.order.ready-for-collection');
|
||||
Route::post('/custom-orders/{customOrder:uuid}/ship', [ShippingController::class, 'createShipment'])->name('custom-orders.ship');
|
||||
});
|
||||
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'circular' => true,
|
||||
'size' => 'md',
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'circular' => true,
|
||||
'size' => 'md',
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<img
|
||||
<?php echo e($attributes
|
||||
->class([
|
||||
'fi-avatar',
|
||||
'fi-circular' => $circular,
|
||||
match ($size) {
|
||||
'sm', 'md', 'lg' => "fi-size-{$size}",
|
||||
default => $size,
|
||||
},
|
||||
])); ?>
|
||||
|
||||
/>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/avatar.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'columnSpan' => [],
|
||||
'columnStart' => [],
|
||||
'height' => null,
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'columnSpan' => [],
|
||||
'columnStart' => [],
|
||||
'height' => null,
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<div
|
||||
<?php echo e(($attributes ?? new \Illuminate\View\ComponentAttributeBag)
|
||||
->gridColumn($columnSpan, $columnStart)
|
||||
->class(['fi-section fi-loading-section'])
|
||||
->style(['height: ' . ($height ?? '8rem')])); ?>
|
||||
|
||||
></div>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/loading-section.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,5 @@
|
||||
<div <?php echo e($attributes->class(['fi-dropdown-list'])); ?>>
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
</div>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/dropdown/list/index.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
use Illuminate\View\ComponentAttributeBag;
|
||||
?>
|
||||
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'debounce' => '500ms',
|
||||
'onBlur' => false,
|
||||
'placeholder' => __('filament-tables::table.fields.search.placeholder'),
|
||||
'wireModel' => 'tableSearch',
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'debounce' => '500ms',
|
||||
'onBlur' => false,
|
||||
'placeholder' => __('filament-tables::table.fields.search.placeholder'),
|
||||
'wireModel' => 'tableSearch',
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
$wireModelAttribute = $onBlur ? 'wire:model.blur' : "wire:model.live.debounce.{$debounce}";
|
||||
?>
|
||||
|
||||
<div
|
||||
x-id="['input']"
|
||||
<?php echo e($attributes->class(['fi-ta-search-field'])); ?>
|
||||
|
||||
>
|
||||
<label x-bind:for="$id('input')" class="fi-sr-only">
|
||||
<?php echo e(__('filament-tables::table.fields.search.label')); ?>
|
||||
|
||||
</label>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal505efd9768415fdb4543e8c564dad437 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal505efd9768415fdb4543e8c564dad437 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.input.wrapper','data' => ['inlinePrefix' => true,'prefixIcon' => \Filament\Support\Icons\Heroicon::MagnifyingGlass,'prefixIconAlias' => \Filament\Tables\View\TablesIconAlias::SEARCH_FIELD,'wire:target' => $wireModel]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::input.wrapper'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['inline-prefix' => true,'prefix-icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::MagnifyingGlass),'prefix-icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Tables\View\TablesIconAlias::SEARCH_FIELD),'wire:target' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($wireModel)]); ?>
|
||||
<?php if (isset($component)) { $__componentOriginal9ad6b66c56a2379ee0ba04e1e358c61e = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal9ad6b66c56a2379ee0ba04e1e358c61e = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.input.index','data' => ['attributes' =>
|
||||
(new ComponentAttributeBag)->merge([
|
||||
'autocomplete' => 'off',
|
||||
'inlinePrefix' => true,
|
||||
'maxlength' => 1000,
|
||||
'placeholder' => $placeholder,
|
||||
'type' => 'search',
|
||||
'wire:key' => $this->getId() . '.table.' . $wireModel . '.field.input',
|
||||
$wireModelAttribute => $wireModel,
|
||||
'x-bind:id' => '$id(\'input\')',
|
||||
'x-on:keyup' => 'if ($event.key === \'Enter\') { $wire.$refresh() }',
|
||||
], escape: false)
|
||||
]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::input'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['attributes' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(
|
||||
(new ComponentAttributeBag)->merge([
|
||||
'autocomplete' => 'off',
|
||||
'inlinePrefix' => true,
|
||||
'maxlength' => 1000,
|
||||
'placeholder' => $placeholder,
|
||||
'type' => 'search',
|
||||
'wire:key' => $this->getId() . '.table.' . $wireModel . '.field.input',
|
||||
$wireModelAttribute => $wireModel,
|
||||
'x-bind:id' => '$id(\'input\')',
|
||||
'x-on:keyup' => 'if ($event.key === \'Enter\') { $wire.$refresh() }',
|
||||
], escape: false)
|
||||
)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal9ad6b66c56a2379ee0ba04e1e358c61e)): ?>
|
||||
<?php $attributes = $__attributesOriginal9ad6b66c56a2379ee0ba04e1e358c61e; ?>
|
||||
<?php unset($__attributesOriginal9ad6b66c56a2379ee0ba04e1e358c61e); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal9ad6b66c56a2379ee0ba04e1e358c61e)): ?>
|
||||
<?php $component = $__componentOriginal9ad6b66c56a2379ee0ba04e1e358c61e; ?>
|
||||
<?php unset($__componentOriginal9ad6b66c56a2379ee0ba04e1e358c61e); ?>
|
||||
<?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal505efd9768415fdb4543e8c564dad437)): ?>
|
||||
<?php $attributes = $__attributesOriginal505efd9768415fdb4543e8c564dad437; ?>
|
||||
<?php unset($__attributesOriginal505efd9768415fdb4543e8c564dad437); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal505efd9768415fdb4543e8c564dad437)): ?>
|
||||
<?php $component = $__componentOriginal505efd9768415fdb4543e8c564dad437; ?>
|
||||
<?php unset($__componentOriginal505efd9768415fdb4543e8c564dad437); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/tables/resources/views/components/search-field.blade.php ENDPATH**/ ?>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,225 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'livewire' => null,
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'livewire' => null,
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
$renderHookScopes = $livewire?->getRenderHookScopes();
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html
|
||||
lang="<?php echo e(str_replace('_', '-', app()->getLocale())); ?>"
|
||||
dir="<?php echo e(__('filament-panels::layout.direction') ?? 'ltr'); ?>"
|
||||
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
|
||||
'fi',
|
||||
'dark' => filament()->hasDarkModeForced(),
|
||||
]); ?>"
|
||||
>
|
||||
<head>
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::HEAD_START, scopes: $renderHookScopes)); ?>
|
||||
|
||||
|
||||
<meta charset="utf-8" />
|
||||
<meta name="csrf-token" content="<?php echo e(csrf_token()); ?>" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($favicon = filament()->getFavicon()): ?>
|
||||
<link rel="icon" href="<?php echo e($favicon); ?>" />
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php
|
||||
$title = trim(strip_tags($livewire?->getTitle() ?? ''));
|
||||
$brandName = trim(strip_tags(filament()->getBrandName()));
|
||||
?>
|
||||
|
||||
<title>
|
||||
<?php echo e(filled($title) ? $title : null); ?>
|
||||
|
||||
<?php echo e(filled($brandName) && filled($title) ? ' - ' : null); ?>
|
||||
|
||||
<?php echo e(filled($brandName) ? $brandName : null); ?>
|
||||
|
||||
</title>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::STYLES_BEFORE, scopes: $renderHookScopes)); ?>
|
||||
|
||||
|
||||
<style>
|
||||
[x-cloak=''],
|
||||
[x-cloak='x-cloak'],
|
||||
[x-cloak='1'] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
[x-cloak='inline-flex'] {
|
||||
display: inline-flex !important;
|
||||
}
|
||||
|
||||
@media (max-width: 1023px) {
|
||||
[x-cloak='-lg'] {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
[x-cloak='lg'] {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<?php echo \Filament\Support\Facades\FilamentAsset::renderStyles() ?>
|
||||
|
||||
<?php echo e(filament()->getTheme()->getHtml()); ?>
|
||||
|
||||
<?php echo e(filament()->getFontHtml()); ?>
|
||||
|
||||
<?php echo e(filament()->getMonoFontHtml()); ?>
|
||||
|
||||
<?php echo e(filament()->getSerifFontHtml()); ?>
|
||||
|
||||
|
||||
<style>
|
||||
:root {
|
||||
--font-family: '<?php echo filament()->getFontFamily(); ?>';
|
||||
--mono-font-family: '<?php echo filament()->getMonoFontFamily(); ?>';
|
||||
--serif-font-family: '<?php echo filament()->getSerifFontFamily(); ?>';
|
||||
--sidebar-width: <?php echo e(filament()->getSidebarWidth()); ?>;
|
||||
--collapsed-sidebar-width: <?php echo e(filament()->getCollapsedSidebarWidth()); ?>;
|
||||
--default-theme-mode: <?php echo e(filament()->getDefaultThemeMode()->value); ?>;
|
||||
}
|
||||
</style>
|
||||
|
||||
<?php echo $__env->yieldPushContent('styles'); ?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::STYLES_AFTER, scopes: $renderHookScopes)); ?>
|
||||
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! filament()->hasDarkMode()): ?>
|
||||
<script>
|
||||
localStorage.setItem('theme', 'light')
|
||||
</script>
|
||||
<?php elseif(filament()->hasDarkModeForced()): ?>
|
||||
<script>
|
||||
localStorage.setItem('theme', 'dark')
|
||||
</script>
|
||||
<?php else: ?>
|
||||
<script>
|
||||
const loadDarkMode = () => {
|
||||
window.theme = localStorage.getItem('theme') ?? <?php echo \Illuminate\Support\Js::from(filament()->getDefaultThemeMode()->value)->toHtml() ?>
|
||||
|
||||
if (
|
||||
window.theme === 'dark' ||
|
||||
(window.theme === 'system' &&
|
||||
window.matchMedia('(prefers-color-scheme: dark)')
|
||||
.matches)
|
||||
) {
|
||||
document.documentElement.classList.add('dark')
|
||||
}
|
||||
}
|
||||
|
||||
loadDarkMode()
|
||||
|
||||
document.addEventListener('livewire:navigated', loadDarkMode)
|
||||
</script>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::HEAD_END, scopes: $renderHookScopes)); ?>
|
||||
|
||||
</head>
|
||||
|
||||
<body
|
||||
<?php echo e($attributes
|
||||
->merge($livewire?->getExtraBodyAttributes() ?? [], escape: false)
|
||||
->class([
|
||||
'fi-body',
|
||||
'fi-panel-' . filament()->getId(),
|
||||
])); ?>
|
||||
|
||||
>
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::BODY_START, scopes: $renderHookScopes)); ?>
|
||||
|
||||
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
|
||||
<?php
|
||||
$__split = function ($name, $params = []) {
|
||||
return [$name, $params];
|
||||
};
|
||||
[$__name, $__params] = $__split(Filament\Livewire\Notifications::class);
|
||||
|
||||
$key = null;
|
||||
|
||||
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-3970403317-0', null);
|
||||
|
||||
$__html = app('livewire')->mount($__name, $__params, $key);
|
||||
|
||||
echo $__html;
|
||||
|
||||
unset($__html);
|
||||
unset($__name);
|
||||
unset($__params);
|
||||
unset($__split);
|
||||
if (isset($__slots)) unset($__slots);
|
||||
?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SCRIPTS_BEFORE, scopes: $renderHookScopes)); ?>
|
||||
|
||||
|
||||
<?php echo \Filament\Support\Facades\FilamentAsset::renderScripts(withCore: true) ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filament()->hasBroadcasting() && config('filament.broadcasting.echo')): ?>
|
||||
<script data-navigate-once>
|
||||
window.Echo = new window.EchoFactory(<?php echo \Illuminate\Support\Js::from(config('filament.broadcasting.echo'))->toHtml() ?>)
|
||||
|
||||
window.dispatchEvent(new CustomEvent('EchoLoaded'))
|
||||
</script>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(filament()->hasDarkMode() && (! filament()->hasDarkModeForced())): ?>
|
||||
<script>
|
||||
loadDarkMode()
|
||||
</script>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php echo $__env->yieldPushContent('scripts'); ?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SCRIPTS_AFTER, scopes: $renderHookScopes)); ?>
|
||||
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::BODY_END, scopes: $renderHookScopes)); ?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/layout/base.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
use Filament\Support\Enums\IconPosition;
|
||||
use Filament\Widgets\View\Components\StatsOverviewWidgetComponent\StatComponent\DescriptionComponent;
|
||||
use Filament\Widgets\View\Components\StatsOverviewWidgetComponent\StatComponent\StatsOverviewWidgetStatChartComponent;
|
||||
use Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$chartColor = $getChartColor() ?? 'gray';
|
||||
$descriptionColor = $getDescriptionColor() ?? 'gray';
|
||||
$descriptionIcon = $getDescriptionIcon();
|
||||
$descriptionIconPosition = $getDescriptionIconPosition();
|
||||
$url = $getUrl();
|
||||
$tag = $url ? 'a' : 'div';
|
||||
$chartDataChecksum = $generateChartDataChecksum();
|
||||
?>
|
||||
|
||||
<<?php echo $tag; ?>
|
||||
|
||||
<?php if($url): ?>
|
||||
<?php echo e(\Filament\Support\generate_href_html($url, $shouldOpenUrlInNewTab())); ?>
|
||||
|
||||
<?php endif; ?>
|
||||
<?php echo e($getExtraAttributeBag()
|
||||
->class([
|
||||
'fi-wi-stats-overview-stat',
|
||||
])); ?>
|
||||
|
||||
>
|
||||
<div class="fi-wi-stats-overview-stat-content">
|
||||
<div class="fi-wi-stats-overview-stat-label-ctn">
|
||||
<?php echo e(\Filament\Support\generate_icon_html($getIcon())); ?>
|
||||
|
||||
|
||||
<span class="fi-wi-stats-overview-stat-label">
|
||||
<?php echo e($getLabel()); ?>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="fi-wi-stats-overview-stat-value">
|
||||
<?php echo e($getValue()); ?>
|
||||
|
||||
</div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($description = $getDescription()): ?>
|
||||
<div
|
||||
<?php echo e((new ComponentAttributeBag)->color(DescriptionComponent::class, $descriptionColor)->class(['fi-wi-stats-overview-stat-description'])); ?>
|
||||
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($descriptionIcon && in_array($descriptionIconPosition, [IconPosition::Before, 'before'])): ?>
|
||||
<?php echo e(\Filament\Support\generate_icon_html($descriptionIcon, attributes: (new \Illuminate\View\ComponentAttributeBag))); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<span>
|
||||
<?php echo e($description); ?>
|
||||
|
||||
</span>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($descriptionIcon && in_array($descriptionIconPosition, [IconPosition::After, 'after'])): ?>
|
||||
<?php echo e(\Filament\Support\generate_icon_html($descriptionIcon, attributes: (new \Illuminate\View\ComponentAttributeBag))); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($chart = $getChart()): ?>
|
||||
|
||||
<div x-data="{ statsOverviewStatChart() {} }">
|
||||
<div
|
||||
x-load
|
||||
x-load-src="<?php echo e(\Filament\Support\Facades\FilamentAsset::getAlpineComponentSrc('stats-overview/stat/chart', 'filament/widgets')); ?>"
|
||||
x-data="statsOverviewStatChart({
|
||||
dataChecksum: <?php echo \Illuminate\Support\Js::from($chartDataChecksum)->toHtml() ?>,
|
||||
labels: <?php echo \Illuminate\Support\Js::from(array_keys($chart))->toHtml() ?>,
|
||||
values: <?php echo \Illuminate\Support\Js::from(array_values($chart))->toHtml() ?>,
|
||||
})"
|
||||
<?php echo e((new ComponentAttributeBag)->color(StatsOverviewWidgetStatChartComponent::class, $chartColor)->class(['fi-wi-stats-overview-stat-chart'])); ?>
|
||||
|
||||
>
|
||||
<canvas x-ref="canvas"></canvas>
|
||||
|
||||
<span
|
||||
x-ref="backgroundColorElement"
|
||||
class="fi-wi-stats-overview-stat-chart-bg-color"
|
||||
></span>
|
||||
|
||||
<span
|
||||
x-ref="borderColorElement"
|
||||
class="fi-wi-stats-overview-stat-chart-border-color"
|
||||
></span>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</<?php echo $tag; ?>>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/widgets/resources/views/stats-overview-widget/stat.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,424 @@
|
||||
<?php $__env->startSection('title', 'Order #' . $customOrder->order_number . ' - Custom Order Details'); ?>
|
||||
|
||||
<?php $__env->startSection('styles'); ?>
|
||||
<style>
|
||||
/* Page-specific typography overrides */
|
||||
h1 {
|
||||
font-family: 'Abril Fatface', cursive;
|
||||
font-size: 2.5rem;
|
||||
color: var(--text-primary);
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-family: 'Abril Fatface', cursive;
|
||||
font-size: 1.6rem;
|
||||
color: var(--text-primary);
|
||||
margin-bottom: var(--spacing-md);
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-family: var(--font-sans);
|
||||
font-size: 1.1rem;
|
||||
font-weight: 600;
|
||||
color: var(--text-primary);
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.page-intro {
|
||||
margin-bottom: var(--spacing-lg);
|
||||
}
|
||||
|
||||
.page-intro p {
|
||||
color: var(--text-secondary);
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
/* Timeline-specific styles */
|
||||
.timeline-container {
|
||||
margin-bottom: var(--spacing-lg);
|
||||
}
|
||||
|
||||
.timeline-container.card:hover {
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.timeline-title {
|
||||
font-family: var(--font-serif);
|
||||
font-size: 1.3rem;
|
||||
color: var(--text-primary);
|
||||
margin-bottom: var(--spacing-lg);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.timeline {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0;
|
||||
position: relative;
|
||||
overflow-x: auto;
|
||||
padding: var(--spacing-md) 0;
|
||||
}
|
||||
|
||||
.timeline::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 2px;
|
||||
background-color: var(--border-color);
|
||||
z-index: 1;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
|
||||
.timeline-item {
|
||||
flex: 1;
|
||||
min-width: 140px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.timeline-circle {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
border-radius: 50%;
|
||||
background-color: white;
|
||||
border: 3px solid var(--border-color);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
transition: all 0.3s ease;
|
||||
font-weight: 900;
|
||||
font-size: 1.2rem;
|
||||
color: var(--text-primary);
|
||||
flex-shrink: 0;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.timeline-item.completed .timeline-circle {
|
||||
background-color: var(--accent-pink);
|
||||
border-color: var(--accent-pink);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.timeline-item.active .timeline-circle {
|
||||
background-color: var(--accent-light);
|
||||
border-color: var(--accent-dark);
|
||||
box-shadow: 0 0 0 4px var(--accent-light);
|
||||
}
|
||||
|
||||
.timeline-label {
|
||||
text-align: center;
|
||||
font-size: 0.85rem;
|
||||
font-weight: 600;
|
||||
color: var(--text-primary);
|
||||
line-height: 1.3;
|
||||
max-width: 120px;
|
||||
margin-top: 60px;
|
||||
}
|
||||
|
||||
.timeline-item.completed .timeline-label {
|
||||
color: var(--accent-pink);
|
||||
}
|
||||
|
||||
.timeline-item.active .timeline-label {
|
||||
color: var(--accent-dark);
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.content-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
|
||||
.image-gallery {
|
||||
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<?php $__env->stopSection(); ?>
|
||||
|
||||
<?php $__env->startSection('content'); ?>
|
||||
<div class="container">
|
||||
<div class="page-intro">
|
||||
<h1>Custom Order Details</h1>
|
||||
<p>Order #<?php echo e($customOrder->order_number); ?></p>
|
||||
</div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(session('success')): ?>
|
||||
<div class="alert alert-success">
|
||||
<?php echo e(session('success')); ?>
|
||||
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(session('info')): ?>
|
||||
<div class="alert alert-info">
|
||||
<?php echo e(session('info')); ?>
|
||||
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<!-- Timeline -->
|
||||
<div class="timeline-container card">
|
||||
<h2 class="timeline-title">Order Progress</h2>
|
||||
<div class="timeline">
|
||||
<?php
|
||||
$timelineSteps = [
|
||||
['status' => 'submitted', 'label' => 'Order\nSubmitted', 'completed' => $customOrder->status !== null],
|
||||
['status' => 'deposit_paid', 'label' => 'Deposit\nPaid', 'completed' => $customOrder->deposit_status === 'paid'],
|
||||
['status' => 'proof_sent', 'label' => 'Proofs\nSent', 'completed' => $customOrder->proofs()->exists()],
|
||||
['status' => 'proof_approved', 'label' => 'Proofs\nApproved', 'completed' => $customOrder->proofs()->where('status', 'approved')->exists()],
|
||||
['status' => 'processing', 'label' => 'Processing', 'completed' => $customOrder->status === 'processing'],
|
||||
['status' => 'shipped', 'label' => 'Order\nShipped', 'completed' => $customOrder->status === 'completed'],
|
||||
];
|
||||
|
||||
// Determine current step
|
||||
$currentStep = 0;
|
||||
if ($customOrder->status === 'completed') $currentStep = 5;
|
||||
elseif ($customOrder->status === 'processing') $currentStep = 4;
|
||||
elseif ($customOrder->proofs()->where('status', 'approved')->exists()) $currentStep = 3;
|
||||
elseif ($customOrder->proofs()->exists()) $currentStep = 2;
|
||||
elseif ($customOrder->deposit_status === 'paid') $currentStep = 1;
|
||||
?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $timelineSteps; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $index => $step): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<div class="timeline-item <?php if($index < $currentStep): ?> completed <?php elseif($index === $currentStep): ?> active <?php endif; ?>">
|
||||
<div class="timeline-circle">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($index < $currentStep): ?>
|
||||
✓
|
||||
<?php else: ?>
|
||||
<?php echo e($index + 1); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<div class="timeline-label"><?php echo e($step['label']); ?></div>
|
||||
</div>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content-grid">
|
||||
<!-- Main Content -->
|
||||
<div>
|
||||
<!-- Order Status -->
|
||||
<div class="card">
|
||||
<h2>Order Status</h2>
|
||||
<div class="card-section">
|
||||
<span class="status-badge <?php echo e($customOrder->status); ?>">
|
||||
<?php echo e(str_replace('_', ' ', ucfirst($customOrder->status))); ?>
|
||||
|
||||
</span>
|
||||
<p style="margin-top: var(--spacing-sm); color: var(--text-secondary); font-size: 0.9rem;">
|
||||
Submitted on <?php echo e($customOrder->created_at->format('d M Y \a\t H:i')); ?>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Design Requirements -->
|
||||
<div class="card">
|
||||
<h2>Design Requirements</h2>
|
||||
|
||||
<div class="card-section">
|
||||
<h3>Order Type</h3>
|
||||
<p style="color: var(--text-secondary); text-transform: capitalize;"><?php echo e($customOrder->type); ?></p>
|
||||
</div>
|
||||
|
||||
<div class="card-section">
|
||||
<h3>Dimensions</h3>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->specifications): ?>
|
||||
<dl style="color: var(--text-secondary);">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->specifications->length): ?>
|
||||
<div class="spec-group">
|
||||
<dt>Length:</dt>
|
||||
<dd><?php echo e($customOrder->specifications->length); ?>m</dd>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->specifications->width): ?>
|
||||
<div class="spec-group">
|
||||
<dt>Width:</dt>
|
||||
<dd><?php echo e($customOrder->specifications->width); ?>m</dd>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->specifications->height): ?>
|
||||
<div class="spec-group">
|
||||
<dt>Height:</dt>
|
||||
<dd><?php echo e($customOrder->specifications->height); ?>m</dd>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<div class="spec-group">
|
||||
<dt>Quantity:</dt>
|
||||
<dd><?php echo e($customOrder->specifications->quantity); ?></dd>
|
||||
</div>
|
||||
</dl>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="card-section">
|
||||
<h3>Print Material</h3>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->specifications->printStock): ?>
|
||||
<p style="color: var(--text-secondary);"><?php echo e($customOrder->specifications->printStock->name); ?></p>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="card-section">
|
||||
<h3>Design Brief</h3>
|
||||
<p style="color: var(--text-secondary);"><?php echo e($customOrder->customer_brief); ?></p>
|
||||
</div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->specifications->special_instructions): ?>
|
||||
<div class="card-section">
|
||||
<h3>Special Instructions</h3>
|
||||
<p style="color: var(--text-secondary);"><?php echo e($customOrder->specifications->special_instructions); ?></p>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- Reference Images -->
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->files->count() > 0): ?>
|
||||
<div class="card">
|
||||
<h2>Reference Images</h2>
|
||||
<div class="image-gallery">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $customOrder->files; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $file): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<a href="<?php echo e(Storage::url($file->file_path)); ?>" target="_blank" title="<?php echo e($file->original_filename); ?>">
|
||||
<img src="<?php echo e(Storage::url($file->file_path)); ?>" alt="<?php echo e($file->original_filename); ?>">
|
||||
</a>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<!-- Design Proofs -->
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->proofs->count() > 0): ?>
|
||||
<div class="card">
|
||||
<h2>Design Proofs</h2>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $customOrder->proofs; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $proof): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<div class="proof-item <?php echo e($proof->status === 'approved' ? 'approved' : ''); ?>">
|
||||
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-sm);">
|
||||
<h3>Proof <?php echo e($loop->iteration); ?></h3>
|
||||
<span class="status-badge <?php echo e($proof->status); ?>">
|
||||
<?php echo e(ucfirst($proof->status)); ?>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($proof->file_path): ?>
|
||||
<a href="<?php echo e(Storage::url($proof->file_path)); ?>" target="_blank" style="color: var(--accent-dark); text-decoration: underline; font-size: 0.9rem;">
|
||||
View Proof File
|
||||
</a>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($proof->feedback): ?>
|
||||
<div style="margin-top: var(--spacing-sm); padding: var(--spacing-sm); background: white; border-radius: 4px; border-left: 3px solid var(--accent-dark);">
|
||||
<strong style="color: var(--text-primary); font-size: 0.9rem;">Feedback:</strong>
|
||||
<p style="color: var(--text-secondary); font-size: 0.85rem; margin: var(--spacing-xs) 0 0 0;"><?php echo e($proof->feedback); ?></p>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div>
|
||||
<!-- Cost & Payment Summary -->
|
||||
<div class="card">
|
||||
<h2>Order Summary</h2>
|
||||
|
||||
<!-- Cost Summary -->
|
||||
<div class="payment-section">
|
||||
<div class="payment-row">
|
||||
<span>Design Fee:</span>
|
||||
<span>R<?php echo e(number_format($customOrder->design_fee, 2)); ?></span>
|
||||
</div>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->material_cost > 0): ?>
|
||||
<div class="payment-row">
|
||||
<span>Material Cost:</span>
|
||||
<span>R<?php echo e(number_format($customOrder->material_cost, 2)); ?></span>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<div class="payment-row total">
|
||||
<span>Total:</span>
|
||||
<span>R<?php echo e(number_format($customOrder->total_cost, 2)); ?></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Payment Status -->
|
||||
<h3 style="margin-top: var(--spacing-lg); margin-bottom: var(--spacing-md);">Payment Status</h3>
|
||||
|
||||
<div class="card" style="padding: var(--spacing-sm); background-color: var(--accent-light); margin-bottom: var(--spacing-md);">
|
||||
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-xs);">
|
||||
<strong>Deposit (20%)</strong>
|
||||
<span class="status-badge <?php echo e($customOrder->deposit_status); ?>"><?php echo e(ucfirst($customOrder->deposit_status)); ?></span>
|
||||
</div>
|
||||
<p style="color: var(--text-secondary); margin: 0; font-size: 0.9rem;">R<?php echo e(number_format($customOrder->deposit_amount, 2)); ?></p>
|
||||
</div>
|
||||
|
||||
<div class="card" style="padding: var(--spacing-sm); background-color: var(--accent-light); margin-bottom: var(--spacing-lg);">
|
||||
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-xs);">
|
||||
<strong>Balance (80%)</strong>
|
||||
<span class="status-badge <?php echo e($customOrder->balance_status); ?>"><?php echo e(ucfirst($customOrder->balance_status)); ?></span>
|
||||
</div>
|
||||
<p style="color: var(--text-secondary); margin: 0; font-size: 0.9rem;">R<?php echo e(number_format($customOrder->balance_amount, 2)); ?></p>
|
||||
</div>
|
||||
|
||||
<!-- Payment Buttons -->
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->deposit_status !== 'paid'): ?>
|
||||
<form method="POST" action="<?php echo e(route('yoco-custom-deposit')); ?>">
|
||||
<?php echo csrf_field(); ?>
|
||||
<input type="hidden" name="custom_order_id" value="<?php echo e($customOrder->id); ?>">
|
||||
<button type="submit" class="btn">Pay Deposit (R<?php echo e(number_format($customOrder->deposit_amount, 2)); ?>)</button>
|
||||
</form>
|
||||
<?php elseif($customOrder->deposit_status === 'paid' && $customOrder->proofs->where('status', 'approved')->count() > 0 && $customOrder->balance_status !== 'paid'): ?>
|
||||
<button class="btn" onclick="alert('Balance payment coming soon')">Pay Balance (R<?php echo e(number_format($customOrder->balance_amount, 2)); ?>)</button>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- Terms -->
|
||||
<div class="terms-box card--pink">
|
||||
<h3 style="color: var(--text-primary); margin-top: 0;">Payment Terms</h3>
|
||||
<ul>
|
||||
<li>The 20% deposit is non-refundable</li>
|
||||
<li>Balance of 80% must be paid before printing begins</li>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($customOrder->library_discount_applied): ?>
|
||||
<li>Design may be added to our library</li>
|
||||
<?php else: ?>
|
||||
<li>Bespoke, exclusive design</li>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const paymentForm = document.querySelector('form[action*="payment"]');
|
||||
if (paymentForm) {
|
||||
console.log('Payment form found:', paymentForm);
|
||||
console.log('Form action:', paymentForm.action);
|
||||
|
||||
paymentForm.addEventListener('submit', function(e) {
|
||||
console.log('Payment form submitted!');
|
||||
console.log('Form data:', new FormData(this));
|
||||
});
|
||||
} else {
|
||||
console.log('Payment form NOT found');
|
||||
console.log('All forms on page:', document.querySelectorAll('form'));
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<?php $__env->stopSection(); ?>
|
||||
|
||||
<?php echo $__env->make('layouts.app', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?><?php /**PATH /var/www/additional_design/resources/views/custom-orders/show.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php $layout->viewContext->mergeIntoNewEnvironment($__env); ?>
|
||||
|
||||
<?php $__env->startComponent($layout->view, $layout->params); ?>
|
||||
<?php $__env->slot($layout->slotOrSection); ?>
|
||||
<?php echo $content; ?>
|
||||
|
||||
<?php $__env->endSlot(); ?>
|
||||
|
||||
<?php
|
||||
// Manually forward slots defined in the Livewire template into the layout component...
|
||||
foreach ($layout->viewContext->slots[-1] ?? [] as $name => $slot) {
|
||||
$__env->slot($name, attributes: $slot->attributes->getAttributes());
|
||||
echo $slot->toHtml();
|
||||
$__env->endSlot();
|
||||
}
|
||||
?>
|
||||
<?php echo $__env->renderComponent(); ?><?php /**PATH /var/www/additional_design/storage/framework/views/4943bc92ebba41e8b0e508149542e0ad.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,141 @@
|
||||
|
||||
|
||||
<?php $__env->startSection('content'); ?>
|
||||
<div class="container mx-auto px-4 py-8">
|
||||
<!-- Header -->
|
||||
<div class="mb-8">
|
||||
<h1 class="text-3xl font-bold mb-2">Order <?php echo e($order->order_number); ?></h1>
|
||||
<p class="text-gray-600"><?php echo e($order->uuid); ?></p>
|
||||
</div>
|
||||
|
||||
<!-- Order Summary Card -->
|
||||
<div class="bg-white rounded-lg shadow-md p-6 mb-8">
|
||||
<div class="grid grid-cols-2 md:grid-cols-4 gap-4 mb-6">
|
||||
<div>
|
||||
<p class="text-sm text-gray-600">Status</p>
|
||||
<p class="text-lg font-semibold capitalize"><?php echo e(str_replace('_', ' ', $order->status)); ?></p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-sm text-gray-600">Order Type</p>
|
||||
<p class="text-lg font-semibold"><?php echo e($order->is_custom_order ? 'Custom' : 'Standard'); ?></p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-sm text-gray-600">Customer</p>
|
||||
<p class="text-lg font-semibold"><?php echo e($order->user->name ?? 'N/A'); ?></p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-sm text-gray-600">Created</p>
|
||||
<p class="text-lg font-semibold"><?php echo e($order->created_at->format('M d, Y')); ?></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- QR Code -->
|
||||
<div class="border-t pt-6">
|
||||
<div class="flex items-start justify-between mb-3">
|
||||
<div>
|
||||
<p class="text-sm text-gray-600 mb-3">Scan to access this order:</p>
|
||||
</div>
|
||||
<a href="<?php echo e(route('ops.order.sticker.download', $order)); ?>" class="inline-flex items-center px-3 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 text-sm">
|
||||
📥 Download Sticker (A6 PDF)
|
||||
</a>
|
||||
</div>
|
||||
<div class="inline-block bg-gray-50 p-4 rounded border">
|
||||
<?php echo file_get_contents(storage_path("app/public/qr-codes/{$order->uuid}.svg")); ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- State-Specific Actions -->
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($order->status === 'inspection'): ?>
|
||||
<?php echo $__env->make('ops.actions.inspection', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?>
|
||||
<?php elseif($order->status === 'packing' || $order->status === 'printing'): ?>
|
||||
<?php echo $__env->make('ops.actions.packing', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?>
|
||||
<?php elseif(in_array($order->status, ['ready_to_ship', 'awaiting_collection', 'in_transit'])): ?>
|
||||
<?php echo $__env->make('ops.actions.read-only', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?>
|
||||
<?php else: ?>
|
||||
<div class="bg-yellow-50 border border-yellow-200 rounded-lg p-4">
|
||||
<p class="text-yellow-800">No actions available for this order status.</p>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<!-- Order Items -->
|
||||
<div class="mt-8 bg-white rounded-lg shadow-md p-6">
|
||||
<h2 class="text-2xl font-bold mb-4">Order Items</h2>
|
||||
<div class="overflow-x-auto">
|
||||
<table class="w-full">
|
||||
<thead>
|
||||
<tr class="border-b">
|
||||
<th class="text-left py-3 px-4">Product</th>
|
||||
<th class="text-left py-3 px-4">Type</th>
|
||||
<th class="text-left py-3 px-4">Quantity</th>
|
||||
<th class="text-left py-3 px-4">Amount</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__empty_1 = true; $__currentLoopData = $order->items; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?>
|
||||
<tr class="border-b hover:bg-gray-50">
|
||||
<td class="py-3 px-4"><?php echo e($item->product->name ?? 'N/A'); ?></td>
|
||||
<td class="py-3 px-4"><?php echo e($item->product_type ?? 'N/A'); ?></td>
|
||||
<td class="py-3 px-4"><?php echo e($item->quantity); ?></td>
|
||||
<td class="py-3 px-4">R<?php echo e(number_format($item->unit_price * $item->quantity, 2)); ?></td>
|
||||
</tr>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?>
|
||||
<tr>
|
||||
<td colspan="4" class="py-3 px-4 text-center text-gray-500">No items</td>
|
||||
</tr>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Packing Details (if available) -->
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($order->packing_completed_at): ?>
|
||||
<div class="mt-8 bg-white rounded-lg shadow-md p-6">
|
||||
<h2 class="text-2xl font-bold mb-4">Packing Details</h2>
|
||||
<div class="grid grid-cols-2 md:grid-cols-4 gap-4">
|
||||
<div>
|
||||
<p class="text-sm text-gray-600">Width</p>
|
||||
<p class="text-lg font-semibold"><?php echo e($order->packing_width); ?> cm</p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-sm text-gray-600">Length</p>
|
||||
<p class="text-lg font-semibold"><?php echo e($order->packing_length); ?> cm</p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-sm text-gray-600">Weight</p>
|
||||
<p class="text-lg font-semibold"><?php echo e($order->packing_weight); ?> kg</p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-sm text-gray-600">Packed At</p>
|
||||
<p class="text-lg font-semibold"><?php echo e($order->packing_completed_at ? $order->packing_completed_at->format('M d, H:i') : 'Not packed'); ?></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<!-- Shipment Details (if available) -->
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($order->courier_waybill_id): ?>
|
||||
<div class="mt-8 bg-white rounded-lg shadow-md p-6">
|
||||
<h2 class="text-2xl font-bold mb-4">Shipment Details</h2>
|
||||
<div class="grid grid-cols-2 md:grid-cols-3 gap-4">
|
||||
<div>
|
||||
<p class="text-sm text-gray-600">Waybill ID</p>
|
||||
<p class="text-lg font-semibold font-mono"><?php echo e($order->courier_waybill_id); ?></p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-sm text-gray-600">Tracking Number</p>
|
||||
<p class="text-lg font-semibold font-mono"><?php echo e($order->courier_tracking_number ?? 'N/A'); ?></p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-sm text-gray-600">Status</p>
|
||||
<p class="text-lg font-semibold capitalize"><?php echo e(str_replace('_', ' ', $order->courier_status ?? 'pending')); ?></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php $__env->stopSection(); ?>
|
||||
|
||||
<?php echo $__env->make('layouts.app', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?><?php /**PATH /var/www/additional_design/resources/views/ops/order-detail.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,198 @@
|
||||
<?php
|
||||
use Filament\Support\Enums\Width;
|
||||
|
||||
$livewire ??= null;
|
||||
|
||||
$hasTopbar = filament()->hasTopbar();
|
||||
$isSidebarCollapsibleOnDesktop = filament()->isSidebarCollapsibleOnDesktop();
|
||||
$isSidebarFullyCollapsibleOnDesktop = filament()->isSidebarFullyCollapsibleOnDesktop();
|
||||
$hasTopNavigation = filament()->hasTopNavigation();
|
||||
$hasNavigation = filament()->hasNavigation();
|
||||
$renderHookScopes = $livewire?->getRenderHookScopes();
|
||||
$maxContentWidth ??= (filament()->getMaxContentWidth() ?? Width::SevenExtraLarge);
|
||||
|
||||
if (is_string($maxContentWidth)) {
|
||||
$maxContentWidth = Width::tryFrom($maxContentWidth) ?? $maxContentWidth;
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginale960ae7ad1b1ce9e3596e483505fadc9 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginale960ae7ad1b1ce9e3596e483505fadc9 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.layout.base','data' => ['livewire' => $livewire,'class' => \Illuminate\Support\Arr::toCssClasses([
|
||||
'fi-body-has-navigation' => $hasNavigation,
|
||||
'fi-body-has-sidebar-collapsible-on-desktop' => $isSidebarCollapsibleOnDesktop,
|
||||
'fi-body-has-sidebar-fully-collapsible-on-desktop' => $isSidebarFullyCollapsibleOnDesktop,
|
||||
'fi-body-has-topbar' => $hasTopbar,
|
||||
'fi-body-has-top-navigation' => $hasTopNavigation,
|
||||
])]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::layout.base'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['livewire' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($livewire),'class' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Illuminate\Support\Arr::toCssClasses([
|
||||
'fi-body-has-navigation' => $hasNavigation,
|
||||
'fi-body-has-sidebar-collapsible-on-desktop' => $isSidebarCollapsibleOnDesktop,
|
||||
'fi-body-has-sidebar-fully-collapsible-on-desktop' => $isSidebarFullyCollapsibleOnDesktop,
|
||||
'fi-body-has-topbar' => $hasTopbar,
|
||||
'fi-body-has-top-navigation' => $hasTopNavigation,
|
||||
]))]); ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasTopbar): ?>
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::TOPBAR_BEFORE, scopes: $renderHookScopes)); ?>
|
||||
|
||||
|
||||
<?php
|
||||
$__split = function ($name, $params = []) {
|
||||
return [$name, $params];
|
||||
};
|
||||
[$__name, $__params] = $__split(filament()->getTopbarLivewireComponent());
|
||||
|
||||
$key = null;
|
||||
|
||||
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-1155085427-0', null);
|
||||
|
||||
$__html = app('livewire')->mount($__name, $__params, $key);
|
||||
|
||||
echo $__html;
|
||||
|
||||
unset($__html);
|
||||
unset($__name);
|
||||
unset($__params);
|
||||
unset($__split);
|
||||
if (isset($__slots)) unset($__slots);
|
||||
?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::TOPBAR_AFTER, scopes: $renderHookScopes)); ?>
|
||||
|
||||
<?php elseif($hasNavigation): ?>
|
||||
<div
|
||||
<?php if($isSidebarFullyCollapsibleOnDesktop): ?>
|
||||
x-data="{}"
|
||||
x-bind:class="{ 'lg:fi-hidden': $store.sidebar.isOpen }"
|
||||
<?php endif; ?>
|
||||
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
|
||||
'fi-layout-sidebar-toggle-btn-ctn',
|
||||
'lg:fi-hidden' => ! $isSidebarFullyCollapsibleOnDesktop,
|
||||
]); ?>"
|
||||
>
|
||||
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => \Filament\Support\Icons\Heroicon::OutlinedBars3,'iconAlias' => \Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON,'iconSize' => 'lg','label' => __('filament-panels::layout.actions.sidebar.expand.label'),'xCloak' => true,'xData' => '{}','xOn:click' => '$store.sidebar.open()','class' => 'fi-layout-sidebar-toggle-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::icon-button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::OutlinedBars3),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON),'icon-size' => 'lg','label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('filament-panels::layout.actions.sidebar.expand.label')),'x-cloak' => true,'x-data' => '{}','x-on:click' => '$store.sidebar.open()','class' => 'fi-layout-sidebar-toggle-btn']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<div class="fi-layout">
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::LAYOUT_START, scopes: $renderHookScopes)); ?>
|
||||
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasNavigation): ?>
|
||||
<div
|
||||
x-cloak
|
||||
x-data="{}"
|
||||
x-on:click="$store.sidebar.close()"
|
||||
x-show="$store.sidebar.isOpen"
|
||||
x-transition.opacity.300ms
|
||||
class="fi-sidebar-close-overlay"
|
||||
></div>
|
||||
|
||||
<?php
|
||||
$__split = function ($name, $params = []) {
|
||||
return [$name, $params];
|
||||
};
|
||||
[$__name, $__params] = $__split(filament()->getSidebarLivewireComponent());
|
||||
|
||||
$key = null;
|
||||
|
||||
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-1155085427-1', null);
|
||||
|
||||
$__html = app('livewire')->mount($__name, $__params, $key);
|
||||
|
||||
echo $__html;
|
||||
|
||||
unset($__html);
|
||||
unset($__name);
|
||||
unset($__params);
|
||||
unset($__split);
|
||||
if (isset($__slots)) unset($__slots);
|
||||
?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<div
|
||||
<?php if($isSidebarCollapsibleOnDesktop): ?>
|
||||
x-data="{}"
|
||||
x-bind:class="{
|
||||
'fi-main-ctn-sidebar-open': $store.sidebar.isOpen,
|
||||
}"
|
||||
x-bind:style="'display: flex; opacity:1;'"
|
||||
|
||||
<?php elseif($isSidebarFullyCollapsibleOnDesktop): ?>
|
||||
x-data="{}"
|
||||
x-bind:class="{
|
||||
'fi-main-ctn-sidebar-open': $store.sidebar.isOpen,
|
||||
}"
|
||||
x-bind:style="'display: flex; opacity:1;'"
|
||||
|
||||
<?php elseif(! ($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop || $hasTopNavigation || (! $hasNavigation))): ?>
|
||||
x-data="{}"
|
||||
x-bind:style="'display: flex; opacity:1;'"
|
||||
<?php endif; ?>
|
||||
class="fi-main-ctn"
|
||||
>
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::CONTENT_BEFORE, scopes: $renderHookScopes)); ?>
|
||||
|
||||
|
||||
<main
|
||||
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
|
||||
'fi-main',
|
||||
($maxContentWidth instanceof Width) ? "fi-width-{$maxContentWidth->value}" : $maxContentWidth,
|
||||
]); ?>"
|
||||
>
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::CONTENT_START, scopes: $renderHookScopes)); ?>
|
||||
|
||||
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::CONTENT_END, scopes: $renderHookScopes)); ?>
|
||||
|
||||
</main>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::CONTENT_AFTER, scopes: $renderHookScopes)); ?>
|
||||
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::FOOTER, scopes: $renderHookScopes)); ?>
|
||||
|
||||
</div>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::LAYOUT_END, scopes: $renderHookScopes)); ?>
|
||||
|
||||
</div>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginale960ae7ad1b1ce9e3596e483505fadc9)): ?>
|
||||
<?php $attributes = $__attributesOriginale960ae7ad1b1ce9e3596e483505fadc9; ?>
|
||||
<?php unset($__attributesOriginale960ae7ad1b1ce9e3596e483505fadc9); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginale960ae7ad1b1ce9e3596e483505fadc9)): ?>
|
||||
<?php $component = $__componentOriginale960ae7ad1b1ce9e3596e483505fadc9; ?>
|
||||
<?php unset($__componentOriginale960ae7ad1b1ce9e3596e483505fadc9); ?>
|
||||
<?php endif; ?>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/layout/index.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
$brandName = filament()->getBrandName();
|
||||
$brandLogo = filament()->getBrandLogo();
|
||||
$brandLogoHeight = filament()->getBrandLogoHeight() ?? '1.5rem';
|
||||
$darkModeBrandLogo = filament()->getDarkModeBrandLogo();
|
||||
$hasDarkModeBrandLogo = filled($darkModeBrandLogo);
|
||||
|
||||
$getLogoClasses = fn (bool $isDarkMode): string => \Illuminate\Support\Arr::toCssClasses([
|
||||
'fi-logo',
|
||||
'fi-logo-light' => $hasDarkModeBrandLogo && (! $isDarkMode),
|
||||
'fi-logo-dark' => $isDarkMode,
|
||||
]);
|
||||
|
||||
$logoStyles = "height: {$brandLogoHeight}";
|
||||
?>
|
||||
|
||||
|
||||
<?php $content = (function ($args) {
|
||||
return function ($logo, $isDarkMode = false) use ($args) {
|
||||
extract($args, EXTR_SKIP);
|
||||
ob_start(); ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($logo instanceof \Illuminate\Contracts\Support\Htmlable): ?>
|
||||
<div
|
||||
<?php echo e($attributes
|
||||
->class([$getLogoClasses($isDarkMode)])
|
||||
->style([$logoStyles])); ?>
|
||||
|
||||
>
|
||||
<?php echo e($logo); ?>
|
||||
|
||||
</div>
|
||||
<?php elseif(filled($logo)): ?>
|
||||
<img
|
||||
alt="<?php echo e(__('filament-panels::layout.logo.alt', ['name' => $brandName])); ?>"
|
||||
src="<?php echo e($logo); ?>"
|
||||
<?php echo e($attributes
|
||||
->class([$getLogoClasses($isDarkMode)])
|
||||
->style([$logoStyles])); ?>
|
||||
|
||||
/>
|
||||
<?php else: ?>
|
||||
<div
|
||||
<?php echo e($attributes->class([
|
||||
$getLogoClasses($isDarkMode),
|
||||
])); ?>
|
||||
|
||||
>
|
||||
<?php echo e($brandName); ?>
|
||||
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php return new \Illuminate\Support\HtmlString(ob_get_clean()); };
|
||||
})(get_defined_vars()); ?>
|
||||
|
||||
|
||||
<?php echo e($content($brandLogo)); ?>
|
||||
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasDarkModeBrandLogo): ?>
|
||||
<?php echo e($content($darkModeBrandLogo, isDarkMode: true)); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/logo.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,164 @@
|
||||
<!-- Packing Action Form -->
|
||||
<div class="bg-white rounded-lg shadow-md p-6 mb-8">
|
||||
<h2 class="text-2xl font-bold mb-4">📦 Confirm Packing</h2>
|
||||
|
||||
<form id="packingForm" action="<?php echo e(route('ops.order.pack', $order)); ?>" method="POST" class="space-y-4">
|
||||
<?php echo csrf_field(); ?>
|
||||
|
||||
<div class="grid grid-cols-2 gap-4 md:grid-cols-4">
|
||||
<!-- Width -->
|
||||
<div>
|
||||
<label for="width" class="block text-sm font-medium text-gray-700 mb-1">
|
||||
Width (cm)
|
||||
</label>
|
||||
<input
|
||||
type="number"
|
||||
id="width"
|
||||
name="width"
|
||||
step="0.1"
|
||||
min="1"
|
||||
required
|
||||
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||
placeholder="e.g., 30"
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['width'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?>
|
||||
<p class="text-red-600 text-xs mt-1"><?php echo e($message); ?></p>
|
||||
<?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- Length -->
|
||||
<div>
|
||||
<label for="length" class="block text-sm font-medium text-gray-700 mb-1">
|
||||
Length (cm)
|
||||
</label>
|
||||
<input
|
||||
type="number"
|
||||
id="length"
|
||||
name="length"
|
||||
step="0.1"
|
||||
min="1"
|
||||
required
|
||||
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||
placeholder="e.g., 40"
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['length'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?>
|
||||
<p class="text-red-600 text-xs mt-1"><?php echo e($message); ?></p>
|
||||
<?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- Height -->
|
||||
<div>
|
||||
<label for="height" class="block text-sm font-medium text-gray-700 mb-1">
|
||||
Height (cm)
|
||||
</label>
|
||||
<input
|
||||
type="number"
|
||||
id="height"
|
||||
name="height"
|
||||
step="0.1"
|
||||
min="1"
|
||||
required
|
||||
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||
placeholder="e.g., 10"
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['height'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?>
|
||||
<p class="text-red-600 text-xs mt-1"><?php echo e($message); ?></p>
|
||||
<?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- Weight -->
|
||||
<div>
|
||||
<label for="weight" class="block text-sm font-medium text-gray-700 mb-1">
|
||||
Weight (kg)
|
||||
</label>
|
||||
<input
|
||||
type="number"
|
||||
id="weight"
|
||||
name="weight"
|
||||
step="0.1"
|
||||
min="0.1"
|
||||
required
|
||||
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||
placeholder="e.g., 2.5"
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['weight'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?>
|
||||
<p class="text-red-600 text-xs mt-1"><?php echo e($message); ?></p>
|
||||
<?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Submit Button -->
|
||||
<div class="flex gap-3 mt-6">
|
||||
<button
|
||||
type="submit"
|
||||
class="bg-green-600 hover:bg-green-700 text-white font-bold py-2 px-6 rounded-lg transition duration-200"
|
||||
>
|
||||
✓ Confirm Packed
|
||||
</button>
|
||||
<button
|
||||
type="reset"
|
||||
class="bg-gray-300 hover:bg-gray-400 text-gray-800 font-bold py-2 px-6 rounded-lg transition duration-200"
|
||||
>
|
||||
Clear
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
document.getElementById('packingForm').addEventListener('submit', async function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
const formData = new FormData(this);
|
||||
|
||||
try {
|
||||
const response = await fetch(this.action, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
},
|
||||
body: formData,
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (response.ok) {
|
||||
alert('✓ Order packed successfully!');
|
||||
window.location.reload();
|
||||
} else {
|
||||
alert('Error: ' + (data.message || data.error || 'Unknown error'));
|
||||
}
|
||||
} catch (error) {
|
||||
alert('Error submitting form: ' + error.message);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
<?php /**PATH /var/www/additional_design/resources/views/ops/actions/packing.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php $layout->viewContext->mergeIntoNewEnvironment($__env); ?>
|
||||
|
||||
@component($layout->view, $layout->params)
|
||||
@slot($layout->slotOrSection)
|
||||
{!! $content !!}
|
||||
@endslot
|
||||
|
||||
<?php
|
||||
// Manually forward slots defined in the Livewire template into the layout component...
|
||||
foreach ($layout->viewContext->slots[-1] ?? [] as $name => $slot) {
|
||||
$__env->slot($name, attributes: $slot->attributes->getAttributes());
|
||||
echo $slot->toHtml();
|
||||
$__env->endSlot();
|
||||
}
|
||||
?>
|
||||
@endcomponent
|
||||
@@ -0,0 +1,286 @@
|
||||
<?php
|
||||
use Filament\Support\Enums\IconPosition;
|
||||
use Filament\Support\Enums\IconSize;
|
||||
use Filament\Support\Enums\Size;
|
||||
use Filament\Support\View\Components\BadgeComponent;
|
||||
use Filament\Support\View\Components\ButtonComponent;
|
||||
use Illuminate\View\ComponentAttributeBag;
|
||||
?>
|
||||
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'badge' => null,
|
||||
'badgeColor' => 'primary',
|
||||
'badgeSize' => Size::ExtraSmall,
|
||||
'color' => 'primary',
|
||||
'disabled' => false,
|
||||
'form' => null,
|
||||
'formId' => null,
|
||||
'href' => null,
|
||||
'icon' => null,
|
||||
'iconAlias' => null,
|
||||
'iconPosition' => IconPosition::Before,
|
||||
'iconSize' => null,
|
||||
'keyBindings' => null,
|
||||
'labeledFrom' => null,
|
||||
'labelSrOnly' => false,
|
||||
'loadingIndicator' => true,
|
||||
'outlined' => false,
|
||||
'size' => Size::Medium,
|
||||
'spaMode' => null,
|
||||
'tag' => 'button',
|
||||
'target' => null,
|
||||
'tooltip' => null,
|
||||
'type' => 'button',
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'badge' => null,
|
||||
'badgeColor' => 'primary',
|
||||
'badgeSize' => Size::ExtraSmall,
|
||||
'color' => 'primary',
|
||||
'disabled' => false,
|
||||
'form' => null,
|
||||
'formId' => null,
|
||||
'href' => null,
|
||||
'icon' => null,
|
||||
'iconAlias' => null,
|
||||
'iconPosition' => IconPosition::Before,
|
||||
'iconSize' => null,
|
||||
'keyBindings' => null,
|
||||
'labeledFrom' => null,
|
||||
'labelSrOnly' => false,
|
||||
'loadingIndicator' => true,
|
||||
'outlined' => false,
|
||||
'size' => Size::Medium,
|
||||
'spaMode' => null,
|
||||
'tag' => 'button',
|
||||
'target' => null,
|
||||
'tooltip' => null,
|
||||
'type' => 'button',
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
if (! $iconPosition instanceof IconPosition) {
|
||||
$iconPosition = filled($iconPosition) ? (IconPosition::tryFrom($iconPosition) ?? $iconPosition) : null;
|
||||
}
|
||||
|
||||
if (! $size instanceof Size) {
|
||||
$size = filled($size) ? (Size::tryFrom($size) ?? $size) : null;
|
||||
}
|
||||
|
||||
if (! $badgeSize instanceof Size) {
|
||||
$badgeSize = filled($badgeSize) ? (Size::tryFrom($badgeSize) ?? $badgeSize) : null;
|
||||
}
|
||||
|
||||
if (filled($iconSize) && (! $iconSize instanceof IconSize)) {
|
||||
$iconSize = IconSize::tryFrom($iconSize) ?? $iconSize;
|
||||
}
|
||||
|
||||
$iconSize ??= match ($size) {
|
||||
Size::ExtraSmall, Size::Small => IconSize::Small,
|
||||
default => null,
|
||||
};
|
||||
|
||||
$wireTarget = $loadingIndicator ? $attributes->whereStartsWith(['wire:target', 'wire:click'])->filter(fn ($value): bool => filled($value))->first() : null;
|
||||
|
||||
$hasFormProcessingLoadingIndicator = $type === 'submit' && filled($form);
|
||||
$hasLoadingIndicator = filled($wireTarget) || $hasFormProcessingLoadingIndicator;
|
||||
|
||||
if ($hasLoadingIndicator) {
|
||||
$loadingIndicatorTarget = html_entity_decode($wireTarget ?: $form, ENT_QUOTES);
|
||||
}
|
||||
|
||||
$hasTooltip = filled($tooltip);
|
||||
?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($labeledFrom): ?>
|
||||
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['badge' => $badge,'badgeColor' => $badgeColor,'badgeSize' => $badgeSize,'color' => $color,'disabled' => $disabled,'form' => $form,'formId' => $formId,'href' => $href,'icon' => $icon,'iconAlias' => $iconAlias,'iconSize' => $iconSize,'keyBindings' => $keyBindings,'label' => $slot,'loadingIndicator' => $loadingIndicator,'size' => $size,'spaMode' => $spaMode,'tag' => $tag,'target' => $target,'tooltip' => $tooltip,'type' => $type,'attributes' => \Filament\Support\prepare_inherited_attributes($attributes)]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::icon-button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['badge' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($badge),'badge-color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($badgeColor),'badge-size' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($badgeSize),'color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($color),'disabled' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($disabled),'form' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($form),'form-id' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($formId),'href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($href),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($icon),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($iconAlias),'icon-size' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($iconSize),'key-bindings' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($keyBindings),'label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($slot),'loading-indicator' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($loadingIndicator),'size' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($size),'spa-mode' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($spaMode),'tag' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($tag),'target' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($target),'tooltip' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($tooltip),'type' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($type),'attributes' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\prepare_inherited_attributes($attributes))]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<<?php echo e($tag); ?>
|
||||
|
||||
<?php if(($tag === 'a') && (! ($disabled && $hasTooltip))): ?>
|
||||
<?php echo e(\Filament\Support\generate_href_html($href, $target === '_blank', $spaMode)); ?>
|
||||
|
||||
<?php endif; ?>
|
||||
<?php if($keyBindings): ?>
|
||||
x-bind:id="$id('key-bindings')"
|
||||
x-mousetrap.global.<?php echo e(collect($keyBindings)->map(fn (string $keyBinding): string => str_replace('+', '-', $keyBinding))->implode('.')); ?>="document.getElementById($el.id)?.click()"
|
||||
<?php endif; ?>
|
||||
<?php if($hasTooltip): ?>
|
||||
x-tooltip="{
|
||||
content: <?php echo \Illuminate\Support\Js::from($tooltip)->toHtml() ?>,
|
||||
theme: $store.theme,
|
||||
allowHTML: <?php echo \Illuminate\Support\Js::from($tooltip instanceof \Illuminate\Contracts\Support\Htmlable)->toHtml() ?>,
|
||||
}"
|
||||
<?php endif; ?>
|
||||
<?php if($hasFormProcessingLoadingIndicator): ?>
|
||||
x-data="filamentFormButton"
|
||||
x-bind:class="{ 'fi-processing': isProcessing }"
|
||||
<?php endif; ?>
|
||||
<?php echo e($attributes
|
||||
->merge([
|
||||
'aria-disabled' => $disabled ? 'true' : null,
|
||||
'aria-label' => $labelSrOnly ? trim(strip_tags($slot->toHtml())) : null,
|
||||
'disabled' => $disabled && blank($tooltip),
|
||||
'form' => $formId,
|
||||
'type' => $tag === 'button' ? $type : null,
|
||||
'wire:loading.attr' => $tag === 'button' ? 'disabled' : null,
|
||||
'wire:target' => ($hasLoadingIndicator && $loadingIndicatorTarget) ? $loadingIndicatorTarget : null,
|
||||
'x-bind:disabled' => $hasFormProcessingLoadingIndicator ? 'isProcessing' : null,
|
||||
'x-bind:aria-label' => ($labelSrOnly && $hasFormProcessingLoadingIndicator) ? ('isProcessing ? processingMessage : ' . \Illuminate\Support\Js::from(trim(strip_tags($slot->toHtml())))) : null,
|
||||
], escape: false)
|
||||
->when(
|
||||
$disabled && $hasTooltip,
|
||||
fn (ComponentAttributeBag $attributes) => $attributes->filter(
|
||||
fn (mixed $value, string $key): bool => ! str($key)->startsWith(['href', 'x-on:', 'wire:click']),
|
||||
),
|
||||
)
|
||||
->class([
|
||||
'fi-btn',
|
||||
'fi-disabled' => $disabled,
|
||||
'fi-outlined' => $outlined,
|
||||
($size instanceof Size) ? "fi-size-{$size->value}" : (is_string($size) ? $size : ''),
|
||||
is_string($labeledFrom) ? "fi-labeled-from-{$labeledFrom}" : null,
|
||||
])
|
||||
->color(app(ButtonComponent::class, ['isOutlined' => $outlined]), $color)); ?>
|
||||
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($iconPosition === IconPosition::Before): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($icon): ?>
|
||||
<?php echo e(\Filament\Support\generate_icon_html($icon, $iconAlias, (new \Illuminate\View\ComponentAttributeBag([
|
||||
'wire:loading.remove.delay.' . config('filament.livewire_loading_delay', 'default') => $hasLoadingIndicator,
|
||||
'wire:target' => $hasLoadingIndicator ? $loadingIndicatorTarget : false,
|
||||
])), size: $iconSize)); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasLoadingIndicator): ?>
|
||||
<?php echo e(\Filament\Support\generate_loading_indicator_html((new \Illuminate\View\ComponentAttributeBag([
|
||||
'wire:loading.delay.' . config('filament.livewire_loading_delay', 'default') => '',
|
||||
'wire:target' => $loadingIndicatorTarget,
|
||||
])), size: $iconSize)); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasFormProcessingLoadingIndicator): ?>
|
||||
<?php echo e(\Filament\Support\generate_loading_indicator_html((new \Illuminate\View\ComponentAttributeBag([
|
||||
'x-cloak' => 'x-cloak',
|
||||
'x-show' => 'isProcessing',
|
||||
])), size: $iconSize)); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! $labelSrOnly): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasFormProcessingLoadingIndicator): ?>
|
||||
<span x-show="! isProcessing">
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
</span>
|
||||
<?php else: ?>
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasFormProcessingLoadingIndicator && (! $labelSrOnly)): ?>
|
||||
<span
|
||||
x-cloak
|
||||
x-show="isProcessing"
|
||||
x-text="processingMessage"
|
||||
></span>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($iconPosition === IconPosition::After): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($icon): ?>
|
||||
<?php echo e(\Filament\Support\generate_icon_html($icon, $iconAlias, (new \Illuminate\View\ComponentAttributeBag([
|
||||
'wire:loading.remove.delay.' . config('filament.livewire_loading_delay', 'default') => $hasLoadingIndicator,
|
||||
'wire:target' => $hasLoadingIndicator ? $loadingIndicatorTarget : false,
|
||||
])), size: $iconSize)); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasLoadingIndicator): ?>
|
||||
<?php echo e(\Filament\Support\generate_loading_indicator_html((new \Illuminate\View\ComponentAttributeBag([
|
||||
'wire:loading.delay.' . config('filament.livewire_loading_delay', 'default') => '',
|
||||
'wire:target' => $loadingIndicatorTarget,
|
||||
])), size: $iconSize)); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasFormProcessingLoadingIndicator): ?>
|
||||
<?php echo e(\Filament\Support\generate_loading_indicator_html((new \Illuminate\View\ComponentAttributeBag([
|
||||
'x-cloak' => 'x-cloak',
|
||||
'x-show' => 'isProcessing',
|
||||
])), size: $iconSize)); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($badge)): ?>
|
||||
<div class="fi-btn-badge-ctn">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($badge instanceof \Illuminate\View\ComponentSlot): ?>
|
||||
<?php echo e($badge); ?>
|
||||
|
||||
<?php else: ?>
|
||||
<span
|
||||
<?php echo e((new ComponentAttributeBag)->color(BadgeComponent::class, $badgeColor)->class([
|
||||
'fi-badge',
|
||||
($badgeSize instanceof Size) ? "fi-size-{$badgeSize->value}" : (is_string($badgeSize) ? $badgeSize : ''),
|
||||
])); ?>
|
||||
|
||||
>
|
||||
<?php echo e($badge); ?>
|
||||
|
||||
</span>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</<?php echo e($tag); ?>>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/button/index.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,126 @@
|
||||
<!-- Read-Only State -->
|
||||
<div class="bg-blue-50 border-2 border-blue-200 rounded-lg p-6 mb-8">
|
||||
<div class="flex items-start">
|
||||
<div class="flex-1">
|
||||
<h2 class="text-2xl font-bold text-blue-900 mb-2">📋 Order Status: Read-Only</h2>
|
||||
<p class="text-blue-800 mb-4">
|
||||
This order is in the <strong><?php echo e(str_replace('_', ' ', ucfirst($order->status))); ?></strong> phase.
|
||||
No actions are available at this stage.
|
||||
</p>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($order->status === 'ready_to_ship'): ?>
|
||||
<div class="bg-white border-l-4 border-blue-500 p-4 rounded">
|
||||
<p class="text-gray-700">
|
||||
<strong>Next Step:</strong> Move Trello card to "Ready to Ship" to trigger automatic shipment creation.
|
||||
</p>
|
||||
</div>
|
||||
<?php elseif($order->status === 'awaiting_collection'): ?>
|
||||
<div class="bg-white border-l-4 border-blue-500 p-4 rounded">
|
||||
<p class="text-gray-700">
|
||||
<strong>Status:</strong> Parcel is awaiting collection from courier.
|
||||
</p>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($order->courier_waybill_id): ?>
|
||||
<p class="text-gray-700 mt-2">
|
||||
<strong>Waybill:</strong> <code class="bg-gray-100 px-2 py-1 rounded"><?php echo e($order->courier_waybill_id); ?></code>
|
||||
</p>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<!-- Re-download PDFs Button -->
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($order->courier_shipment_id): ?>
|
||||
<div class="mt-4">
|
||||
<button
|
||||
type="button"
|
||||
onclick="redownloadPdfs('<?php echo e($order->uuid); ?>')"
|
||||
class="bg-orange-500 hover:bg-orange-600 text-white font-bold py-2 px-4 rounded transition duration-200"
|
||||
>
|
||||
🔄 Re-download Shipment PDFs
|
||||
</button>
|
||||
<p class="text-gray-600 text-sm mt-2">If the shipment PDFs are corrupted, click this button to re-download them.</p>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php elseif($order->status === 'in_transit'): ?>
|
||||
<div class="bg-white border-l-4 border-green-500 p-4 rounded">
|
||||
<p class="text-gray-700">
|
||||
<strong>Status:</strong> Parcel is in transit to the customer.
|
||||
</p>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($order->courier_tracking_number): ?>
|
||||
<p class="text-gray-700 mt-2">
|
||||
<strong>Tracking:</strong> <code class="bg-gray-100 px-2 py-1 rounded"><?php echo e($order->courier_tracking_number); ?></code>
|
||||
</p>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<!-- Re-download PDFs Button -->
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($order->courier_shipment_id): ?>
|
||||
<div class="mt-4">
|
||||
<button
|
||||
type="button"
|
||||
onclick="redownloadPdfs('<?php echo e($order->uuid); ?>')"
|
||||
class="bg-orange-500 hover:bg-orange-600 text-white font-bold py-2 px-4 rounded transition duration-200"
|
||||
>
|
||||
🔄 Re-download Shipment PDFs
|
||||
</button>
|
||||
<p class="text-gray-600 text-sm mt-2">If the shipment PDFs are corrupted, click this button to re-download them.</p>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<div class="bg-white border-l-4 border-gray-500 p-4 rounded">
|
||||
<p class="text-gray-700">
|
||||
The order is progressing through the fulfillment pipeline.
|
||||
</p>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
async function redownloadPdfs(orderUuid) {
|
||||
if (!confirm('Re-download shipment PDFs from Shiplogic API?')) {
|
||||
return;
|
||||
}
|
||||
|
||||
const button = document.querySelector('[onclick*="redownloadPdfs"]');
|
||||
button.disabled = true;
|
||||
button.classList.add('opacity-50');
|
||||
const originalText = button.innerText;
|
||||
button.innerText = '⏳ Downloading...';
|
||||
|
||||
try {
|
||||
// Get CSRF token from the page
|
||||
const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content') ||
|
||||
document.querySelector('input[name="_token"]')?.value;
|
||||
|
||||
if (!csrfToken) {
|
||||
throw new Error('CSRF token not found on page');
|
||||
}
|
||||
|
||||
const response = await fetch(`/ops/orders/${orderUuid}/redownload-pdfs`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'X-CSRF-Token': csrfToken,
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({}),
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (data.success) {
|
||||
alert('✓ PDFs re-downloaded successfully!\n\nSticker: ' + data.sticker_path + '\nLabel: ' + data.waybill_path);
|
||||
location.reload();
|
||||
} else {
|
||||
alert('✗ Failed to re-download PDFs:\n' + data.message);
|
||||
}
|
||||
} catch (error) {
|
||||
alert('✗ Error: ' + error.message);
|
||||
} finally {
|
||||
button.disabled = false;
|
||||
button.classList.remove('opacity-50');
|
||||
button.innerText = originalText;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<?php /**PATH /var/www/additional_design/resources/views/ops/actions/read-only.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php if (isset($component)) { $__componentOriginal166a02a7c5ef5a9331faf66fa665c256 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal166a02a7c5ef5a9331faf66fa665c256 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.page.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::page'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo e($this->content); ?>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal166a02a7c5ef5a9331faf66fa665c256)): ?>
|
||||
<?php $attributes = $__attributesOriginal166a02a7c5ef5a9331faf66fa665c256; ?>
|
||||
<?php unset($__attributesOriginal166a02a7c5ef5a9331faf66fa665c256); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal166a02a7c5ef5a9331faf66fa665c256)): ?>
|
||||
<?php $component = $__componentOriginal166a02a7c5ef5a9331faf66fa665c256; ?>
|
||||
<?php unset($__componentOriginal166a02a7c5ef5a9331faf66fa665c256); ?>
|
||||
<?php endif; ?>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/pages/page.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,59 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'icon',
|
||||
'theme',
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'icon',
|
||||
'theme',
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
$label = __("filament-panels::layout.actions.theme_switcher.{$theme}.label");
|
||||
?>
|
||||
|
||||
<button
|
||||
aria-label="<?php echo e($label); ?>"
|
||||
type="button"
|
||||
x-on:click="(theme = <?php echo \Illuminate\Support\Js::from($theme)->toHtml() ?>) && close()"
|
||||
x-tooltip="{
|
||||
content: <?php echo \Illuminate\Support\Js::from($label)->toHtml() ?>,
|
||||
theme: $store.theme,
|
||||
}"
|
||||
x-bind:class="{ 'fi-active': theme === <?php echo \Illuminate\Support\Js::from($theme)->toHtml() ?> }"
|
||||
class="fi-theme-switcher-btn"
|
||||
>
|
||||
<?php echo e(\Filament\Support\generate_icon_html($icon, alias: match ($theme) {
|
||||
'light' => \Filament\View\PanelsIconAlias::THEME_SWITCHER_LIGHT_BUTTON,
|
||||
'dark' => \Filament\View\PanelsIconAlias::THEME_SWITCHER_DARK_BUTTON,
|
||||
'system' => \Filament\View\PanelsIconAlias::THEME_SWITCHER_SYSTEM_BUTTON,
|
||||
})); ?>
|
||||
|
||||
</button>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/theme-switcher/button.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
use Filament\Support\Enums\IconSize;
|
||||
use Filament\Support\View\Components\DropdownComponent\HeaderComponent;
|
||||
use Illuminate\View\ComponentAttributeBag;
|
||||
?>
|
||||
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'color' => 'gray',
|
||||
'icon' => null,
|
||||
'iconSize' => null,
|
||||
'tag' => 'div',
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'color' => 'gray',
|
||||
'icon' => null,
|
||||
'iconSize' => null,
|
||||
'tag' => 'div',
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
if (! ($iconSize instanceof IconSize)) {
|
||||
$iconSize = filled($iconSize) ? (IconSize::tryFrom($iconSize) ?? $iconSize) : null;
|
||||
}
|
||||
?>
|
||||
|
||||
<<?php echo e($tag); ?>
|
||||
|
||||
<?php echo e($attributes
|
||||
->class([
|
||||
'fi-dropdown-header',
|
||||
])
|
||||
->color(HeaderComponent::class, $color)); ?>
|
||||
|
||||
>
|
||||
<?php echo e(\Filament\Support\generate_icon_html($icon, size: $iconSize)); ?>
|
||||
|
||||
|
||||
<span>
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
</span>
|
||||
</<?php echo e($tag); ?>>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/dropdown/header.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
use Filament\Support\Enums\Alignment;
|
||||
use Filament\Support\Enums\VerticalAlignment;
|
||||
?>
|
||||
|
||||
<div>
|
||||
<div
|
||||
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
|
||||
'fi-no',
|
||||
'fi-align-' . static::$alignment->value,
|
||||
'fi-vertical-align-' . static::$verticalAlignment->value,
|
||||
]); ?>"
|
||||
role="status"
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $notifications; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $notification): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php echo e($notification); ?>
|
||||
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($broadcastChannel = $this->getBroadcastChannel()): ?>
|
||||
<?php
|
||||
$__scriptKey = '837482709-0';
|
||||
ob_start();
|
||||
?>
|
||||
<script>
|
||||
window.addEventListener('EchoLoaded', () => {
|
||||
window.Echo.private(<?php echo \Illuminate\Support\Js::from($broadcastChannel)->toHtml() ?>).notification(
|
||||
(notification) => {
|
||||
setTimeout(
|
||||
() =>
|
||||
$wire.handleBroadcastNotification(
|
||||
notification,
|
||||
),
|
||||
500,
|
||||
)
|
||||
},
|
||||
)
|
||||
})
|
||||
|
||||
if (window.Echo) {
|
||||
window.dispatchEvent(new CustomEvent('EchoLoaded'))
|
||||
}
|
||||
</script>
|
||||
<?php
|
||||
$__output = ob_get_clean();
|
||||
|
||||
\Livewire\store($this)->push('scripts', $__output, $__scriptKey)
|
||||
?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/notifications/resources/views/notifications.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,342 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'active' => false,
|
||||
'collapsible' => true,
|
||||
'icon' => null,
|
||||
'items' => [],
|
||||
'label' => null,
|
||||
'sidebarCollapsible' => true,
|
||||
'subNavigation' => false,
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'active' => false,
|
||||
'collapsible' => true,
|
||||
'icon' => null,
|
||||
'items' => [],
|
||||
'label' => null,
|
||||
'sidebarCollapsible' => true,
|
||||
'subNavigation' => false,
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
$sidebarCollapsible = $sidebarCollapsible && filament()->isSidebarCollapsibleOnDesktop();
|
||||
$hasDropdown = filled($label) && filled($icon) && $sidebarCollapsible;
|
||||
?>
|
||||
|
||||
<li
|
||||
x-data="{ label: <?php echo \Illuminate\Support\Js::from($subNavigation ? "sub_navigation_{$label}" : $label)->toHtml() ?> }"
|
||||
data-group-label="<?php echo e($subNavigation ? "sub_navigation_{$label}" : $label); ?>"
|
||||
x-bind:class="{ 'fi-collapsed': $store.sidebar.groupIsCollapsed(label) }"
|
||||
<?php echo e($attributes->class([
|
||||
'fi-sidebar-group',
|
||||
'fi-active' => $active,
|
||||
'fi-collapsible' => $collapsible,
|
||||
])); ?>
|
||||
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($label): ?>
|
||||
<div
|
||||
<?php if($collapsible): ?>
|
||||
x-on:click="$store.sidebar.toggleCollapsedGroup(label)"
|
||||
role="button"
|
||||
<?php endif; ?>
|
||||
<?php if($sidebarCollapsible): ?>
|
||||
x-show="$store.sidebar.isOpen"
|
||||
x-transition:enter="fi-transition-enter"
|
||||
x-transition:enter-start="fi-transition-enter-start"
|
||||
x-transition:enter-end="fi-transition-enter-end"
|
||||
<?php endif; ?>
|
||||
class="fi-sidebar-group-btn"
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($icon): ?>
|
||||
<?php echo e(\Filament\Support\generate_icon_html($icon, size: \Filament\Support\Enums\IconSize::Large)); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<span class="fi-sidebar-group-label">
|
||||
<?php echo e($label); ?>
|
||||
|
||||
</span>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($collapsible): ?>
|
||||
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => \Filament\Support\Icons\Heroicon::ChevronUp,'iconAlias' => \Filament\View\PanelsIconAlias::SIDEBAR_GROUP_COLLAPSE_BUTTON,'label' => $label,'xBind:ariaExpanded' => '! $store.sidebar.groupIsCollapsed(label)','xOn:click.stop' => '$store.sidebar.toggleCollapsedGroup(label)','class' => 'fi-sidebar-group-collapse-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::icon-button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::ChevronUp),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\View\PanelsIconAlias::SIDEBAR_GROUP_COLLAPSE_BUTTON),'label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($label),'x-bind:aria-expanded' => '! $store.sidebar.groupIsCollapsed(label)','x-on:click.stop' => '$store.sidebar.toggleCollapsedGroup(label)','class' => 'fi-sidebar-group-collapse-btn']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasDropdown): ?>
|
||||
<?php if (isset($component)) { $__componentOriginal22ab0dbc2c6619d5954111bba06f01db = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal22ab0dbc2c6619d5954111bba06f01db = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.index','data' => ['placement' => (__('filament-panels::layout.direction') === 'rtl') ? 'left-start' : 'right-start','xShow' => '! $store.sidebar.isOpen']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::dropdown'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['placement' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute((__('filament-panels::layout.direction') === 'rtl') ? 'left-start' : 'right-start'),'x-show' => '! $store.sidebar.isOpen']); ?>
|
||||
<?php $__env->slot('trigger', null, []); ?>
|
||||
<button
|
||||
x-data="{ tooltip: false }"
|
||||
x-effect="
|
||||
tooltip = $store.sidebar.isOpen
|
||||
? false
|
||||
: {
|
||||
content: <?php echo \Illuminate\Support\Js::from($label)->toHtml() ?>,
|
||||
placement: document.dir === 'rtl' ? 'left' : 'right',
|
||||
theme: $store.theme,
|
||||
}
|
||||
"
|
||||
x-tooltip.html="tooltip"
|
||||
class="fi-sidebar-group-dropdown-trigger-btn"
|
||||
>
|
||||
<?php echo e(\Filament\Support\generate_icon_html($icon, size: \Filament\Support\Enums\IconSize::Large)); ?>
|
||||
|
||||
</button>
|
||||
<?php $__env->endSlot(); ?>
|
||||
|
||||
<?php
|
||||
$lists = [];
|
||||
|
||||
foreach ($items as $item) {
|
||||
if ($childItems = $item->getChildItems()) {
|
||||
$lists[] = [
|
||||
$item,
|
||||
...$childItems,
|
||||
];
|
||||
$lists[] = [];
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (empty($lists)) {
|
||||
$lists[] = [$item];
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$lists[count($lists) - 1][] = $item;
|
||||
}
|
||||
|
||||
if (empty($lists[count($lists) - 1])) {
|
||||
array_pop($lists);
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($label)): ?>
|
||||
<?php if (isset($component)) { $__componentOriginal7a83b62094aac4ed8d85f403cf23f250 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal7a83b62094aac4ed8d85f403cf23f250 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.header','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::dropdown.header'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo e($label); ?>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal7a83b62094aac4ed8d85f403cf23f250)): ?>
|
||||
<?php $attributes = $__attributesOriginal7a83b62094aac4ed8d85f403cf23f250; ?>
|
||||
<?php unset($__attributesOriginal7a83b62094aac4ed8d85f403cf23f250); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal7a83b62094aac4ed8d85f403cf23f250)): ?>
|
||||
<?php $component = $__componentOriginal7a83b62094aac4ed8d85f403cf23f250; ?>
|
||||
<?php unset($__componentOriginal7a83b62094aac4ed8d85f403cf23f250); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $lists; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $list): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php if (isset($component)) { $__componentOriginal66687bf0670b9e16f61e667468dc8983 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal66687bf0670b9e16f61e667468dc8983 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.list.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::dropdown.list'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $list; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php
|
||||
$itemIsActive = $item->isActive();
|
||||
$itemBadge = $item->getBadge();
|
||||
$itemBadgeColor = $item->getBadgeColor();
|
||||
$itemBadgeTooltip = $item->getBadgeTooltip();
|
||||
$itemUrl = $item->getUrl();
|
||||
$itemIcon = $itemIsActive ? ($item->getActiveIcon() ?? $item->getIcon()) : $item->getIcon();
|
||||
$shouldItemOpenUrlInNewTab = $item->shouldOpenUrlInNewTab();
|
||||
?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal1bd4d8e254cc40cdb05bd99df3e63f78 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal1bd4d8e254cc40cdb05bd99df3e63f78 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.list.item','data' => ['badge' => $itemBadge,'badgeColor' => $itemBadgeColor,'badgeTooltip' => $itemBadgeTooltip,'color' => $itemIsActive ? 'primary' : 'gray','href' => $itemUrl,'icon' => $itemIcon,'tag' => 'a','target' => $shouldItemOpenUrlInNewTab ? '_blank' : null]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::dropdown.list.item'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['badge' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadge),'badge-color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadgeColor),'badge-tooltip' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadgeTooltip),'color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemIsActive ? 'primary' : 'gray'),'href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemUrl),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemIcon),'tag' => 'a','target' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($shouldItemOpenUrlInNewTab ? '_blank' : null)]); ?>
|
||||
<?php echo e($item->getLabel()); ?>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal1bd4d8e254cc40cdb05bd99df3e63f78)): ?>
|
||||
<?php $attributes = $__attributesOriginal1bd4d8e254cc40cdb05bd99df3e63f78; ?>
|
||||
<?php unset($__attributesOriginal1bd4d8e254cc40cdb05bd99df3e63f78); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal1bd4d8e254cc40cdb05bd99df3e63f78)): ?>
|
||||
<?php $component = $__componentOriginal1bd4d8e254cc40cdb05bd99df3e63f78; ?>
|
||||
<?php unset($__componentOriginal1bd4d8e254cc40cdb05bd99df3e63f78); ?>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal66687bf0670b9e16f61e667468dc8983)): ?>
|
||||
<?php $attributes = $__attributesOriginal66687bf0670b9e16f61e667468dc8983; ?>
|
||||
<?php unset($__attributesOriginal66687bf0670b9e16f61e667468dc8983); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal66687bf0670b9e16f61e667468dc8983)): ?>
|
||||
<?php $component = $__componentOriginal66687bf0670b9e16f61e667468dc8983; ?>
|
||||
<?php unset($__componentOriginal66687bf0670b9e16f61e667468dc8983); ?>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal22ab0dbc2c6619d5954111bba06f01db)): ?>
|
||||
<?php $attributes = $__attributesOriginal22ab0dbc2c6619d5954111bba06f01db; ?>
|
||||
<?php unset($__attributesOriginal22ab0dbc2c6619d5954111bba06f01db); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal22ab0dbc2c6619d5954111bba06f01db)): ?>
|
||||
<?php $component = $__componentOriginal22ab0dbc2c6619d5954111bba06f01db; ?>
|
||||
<?php unset($__componentOriginal22ab0dbc2c6619d5954111bba06f01db); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<ul
|
||||
<?php if(filled($label)): ?>
|
||||
<?php if($sidebarCollapsible): ?>
|
||||
x-show="$store.sidebar.isOpen ? ! $store.sidebar.groupIsCollapsed(label) : ! <?php echo \Illuminate\Support\Js::from($hasDropdown)->toHtml() ?>"
|
||||
<?php else: ?>
|
||||
x-show="! $store.sidebar.groupIsCollapsed(label)"
|
||||
<?php endif; ?>
|
||||
x-collapse.duration.200ms
|
||||
<?php endif; ?>
|
||||
<?php if($sidebarCollapsible): ?>
|
||||
x-transition:enter="fi-transition-enter"
|
||||
x-transition:enter-start="fi-transition-enter-start"
|
||||
x-transition:enter-end="fi-transition-enter-end"
|
||||
<?php endif; ?>
|
||||
class="fi-sidebar-group-items"
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $items; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php
|
||||
$isItemChildItemsActive = $item->isChildItemsActive();
|
||||
$isItemActive = (! $isItemChildItemsActive) && $item->isActive();
|
||||
$itemActiveIcon = $item->getActiveIcon();
|
||||
$itemBadge = $item->getBadge();
|
||||
$itemBadgeColor = $item->getBadgeColor();
|
||||
$itemBadgeTooltip = $item->getBadgeTooltip();
|
||||
$itemChildItems = $item->getChildItems();
|
||||
$itemIcon = $item->getIcon();
|
||||
$shouldItemOpenUrlInNewTab = $item->shouldOpenUrlInNewTab();
|
||||
$itemUrl = $item->getUrl();
|
||||
|
||||
if ($icon) {
|
||||
if ($hasDropdown || (blank($itemIcon) && blank($itemActiveIcon))) {
|
||||
$itemIcon = null;
|
||||
$itemActiveIcon = null;
|
||||
} else {
|
||||
throw new \Exception('Navigation group [' . $label . '] has an icon but one or more of its items also have icons. Either the group or its items can have icons, but not both. This is to ensure a proper user experience.');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal7edbc33aaa546e1feb86647dcd0e4eb8 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal7edbc33aaa546e1feb86647dcd0e4eb8 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.sidebar.item','data' => ['active' => $isItemActive,'activeChildItems' => $isItemChildItemsActive,'activeIcon' => $itemActiveIcon,'badge' => $itemBadge,'badgeColor' => $itemBadgeColor,'badgeTooltip' => $itemBadgeTooltip,'childItems' => $itemChildItems,'first' => $loop->first,'grouped' => filled($label),'icon' => $itemIcon,'last' => $loop->last,'shouldOpenUrlInNewTab' => $shouldItemOpenUrlInNewTab,'sidebarCollapsible' => $sidebarCollapsible,'subNavigation' => $subNavigation,'url' => $itemUrl]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::sidebar.item'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isItemActive),'active-child-items' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isItemChildItemsActive),'active-icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemActiveIcon),'badge' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadge),'badge-color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadgeColor),'badge-tooltip' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadgeTooltip),'child-items' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemChildItems),'first' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($loop->first),'grouped' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(filled($label)),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemIcon),'last' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($loop->last),'should-open-url-in-new-tab' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($shouldItemOpenUrlInNewTab),'sidebar-collapsible' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($sidebarCollapsible),'sub-navigation' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($subNavigation),'url' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemUrl)]); ?>
|
||||
<?php echo e($item->getLabel()); ?>
|
||||
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($itemIcon instanceof \Illuminate\Contracts\Support\Htmlable): ?>
|
||||
<?php $__env->slot('icon', null, []); ?>
|
||||
<?php echo e($itemIcon); ?>
|
||||
|
||||
<?php $__env->endSlot(); ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($itemActiveIcon instanceof \Illuminate\Contracts\Support\Htmlable): ?>
|
||||
<?php $__env->slot('activeIcon', null, []); ?>
|
||||
<?php echo e($itemActiveIcon); ?>
|
||||
|
||||
<?php $__env->endSlot(); ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal7edbc33aaa546e1feb86647dcd0e4eb8)): ?>
|
||||
<?php $attributes = $__attributesOriginal7edbc33aaa546e1feb86647dcd0e4eb8; ?>
|
||||
<?php unset($__attributesOriginal7edbc33aaa546e1feb86647dcd0e4eb8); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal7edbc33aaa546e1feb86647dcd0e4eb8)): ?>
|
||||
<?php $component = $__componentOriginal7edbc33aaa546e1feb86647dcd0e4eb8; ?>
|
||||
<?php unset($__componentOriginal7edbc33aaa546e1feb86647dcd0e4eb8); ?>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</ul>
|
||||
</li>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/sidebar/group.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
$extraAttributes = $getExtraAttributes();
|
||||
$id = $getId();
|
||||
?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($id) || filled($extraAttributes)): ?>
|
||||
<?php echo '<div'; ?>
|
||||
|
||||
|
||||
<?php echo e($attributes
|
||||
->merge([
|
||||
'id' => $id,
|
||||
], escape: false)
|
||||
->merge($extraAttributes, escape: false)); ?>
|
||||
|
||||
>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($key = $getLivewireKey())): ?>
|
||||
<?php
|
||||
$__split = function ($name, $params = []) {
|
||||
return [$name, $params];
|
||||
};
|
||||
[$__name, $__params] = $__split($getComponent(), $getComponentProperties());
|
||||
|
||||
$key = $key;
|
||||
|
||||
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-2569311901-0', $key);
|
||||
|
||||
$__html = app('livewire')->mount($__name, $__params, $key);
|
||||
|
||||
echo $__html;
|
||||
|
||||
unset($__html);
|
||||
unset($__name);
|
||||
unset($__params);
|
||||
unset($__split);
|
||||
if (isset($__slots)) unset($__slots);
|
||||
?>
|
||||
<?php else: ?>
|
||||
<?php
|
||||
$__split = function ($name, $params = []) {
|
||||
return [$name, $params];
|
||||
};
|
||||
[$__name, $__params] = $__split($getComponent(), $getComponentProperties());
|
||||
|
||||
$key = null;
|
||||
|
||||
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-2569311901-1', null);
|
||||
|
||||
$__html = app('livewire')->mount($__name, $__params, $key);
|
||||
|
||||
echo $__html;
|
||||
|
||||
unset($__html);
|
||||
unset($__name);
|
||||
unset($__params);
|
||||
unset($__split);
|
||||
if (isset($__slots)) unset($__slots);
|
||||
?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($id) || filled($extraAttributes)): ?>
|
||||
<?php echo '</div>'; ?>
|
||||
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/schemas/resources/views/components/livewire.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,12 @@
|
||||
<div
|
||||
<?php echo e($attributes
|
||||
->merge([
|
||||
'id' => $getId(),
|
||||
], escape: false)
|
||||
->merge($getExtraAttributes(), escape: false)); ?>
|
||||
|
||||
>
|
||||
<?php echo e($getChildSchema()); ?>
|
||||
|
||||
</div>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/schemas/resources/views/components/grid.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,206 @@
|
||||
<?php
|
||||
use Filament\Support\Enums\Alignment;
|
||||
use Filament\Support\Enums\IconSize;
|
||||
use Filament\Support\View\Components\SectionComponent\IconComponent;
|
||||
|
||||
use function Filament\Support\is_slot_empty;
|
||||
?>
|
||||
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'afterHeader' => null,
|
||||
'aside' => false,
|
||||
'collapsed' => false,
|
||||
'collapseId' => null,
|
||||
'collapsible' => false,
|
||||
'compact' => false,
|
||||
'contained' => true,
|
||||
'contentBefore' => false,
|
||||
'description' => null,
|
||||
'divided' => false,
|
||||
'footer' => null,
|
||||
'hasContentEl' => true,
|
||||
'heading' => null,
|
||||
'headingTag' => 'h2',
|
||||
'icon' => null,
|
||||
'iconColor' => 'gray',
|
||||
'iconSize' => null,
|
||||
'persistCollapsed' => false,
|
||||
'secondary' => false,
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'afterHeader' => null,
|
||||
'aside' => false,
|
||||
'collapsed' => false,
|
||||
'collapseId' => null,
|
||||
'collapsible' => false,
|
||||
'compact' => false,
|
||||
'contained' => true,
|
||||
'contentBefore' => false,
|
||||
'description' => null,
|
||||
'divided' => false,
|
||||
'footer' => null,
|
||||
'hasContentEl' => true,
|
||||
'heading' => null,
|
||||
'headingTag' => 'h2',
|
||||
'icon' => null,
|
||||
'iconColor' => 'gray',
|
||||
'iconSize' => null,
|
||||
'persistCollapsed' => false,
|
||||
'secondary' => false,
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
if (filled($iconSize) && (! $iconSize instanceof IconSize)) {
|
||||
$iconSize = IconSize::tryFrom($iconSize) ?? $iconSize;
|
||||
}
|
||||
|
||||
$hasDescription = filled((string) $description);
|
||||
$hasHeading = filled($heading);
|
||||
$hasIcon = filled($icon);
|
||||
$hasHeader = $hasIcon || $hasHeading || $hasDescription || $collapsible || (! is_slot_empty($afterHeader));
|
||||
?>
|
||||
|
||||
<section
|
||||
|
||||
x-data="{
|
||||
isCollapsed: <?php if($persistCollapsed): ?> $persist(<?php echo \Illuminate\Support\Js::from($collapsed)->toHtml() ?>).as(`section-${<?php echo \Illuminate\Support\Js::from($collapseId)->toHtml() ?> ?? $el.id}-isCollapsed`) <?php else: ?> <?php echo \Illuminate\Support\Js::from($collapsed)->toHtml() ?> <?php endif; ?>,
|
||||
}"
|
||||
<?php if($collapsible): ?>
|
||||
x-on:collapse-section.window="if ($event.detail.id == <?php echo \Illuminate\Support\Js::from($collapseId)->toHtml() ?> ?? $el.id) isCollapsed = true"
|
||||
x-on:expand="isCollapsed = false"
|
||||
x-on:expand-section.window="if ($event.detail.id == <?php echo \Illuminate\Support\Js::from($collapseId)->toHtml() ?> ?? $el.id) isCollapsed = false"
|
||||
x-on:open-section.window="if ($event.detail.id == <?php echo \Illuminate\Support\Js::from($collapseId)->toHtml() ?> ?? $el.id) isCollapsed = false"
|
||||
x-on:toggle-section.window="if ($event.detail.id == <?php echo \Illuminate\Support\Js::from($collapseId)->toHtml() ?> ?? $el.id) isCollapsed = ! isCollapsed"
|
||||
x-bind:class="isCollapsed && 'fi-collapsed'"
|
||||
<?php endif; ?>
|
||||
<?php echo e($attributes->class([
|
||||
'fi-section',
|
||||
'fi-section-not-contained' => ! $contained,
|
||||
'fi-section-has-content-before' => $contentBefore,
|
||||
'fi-section-has-header' => $hasHeader,
|
||||
'fi-aside' => $aside,
|
||||
'fi-compact' => $compact,
|
||||
'fi-collapsible' => $collapsible,
|
||||
'fi-divided' => $divided,
|
||||
'fi-secondary' => $secondary,
|
||||
])); ?>
|
||||
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasHeader): ?>
|
||||
<header
|
||||
<?php if($collapsible): ?>
|
||||
x-on:click="isCollapsed = ! isCollapsed"
|
||||
<?php endif; ?>
|
||||
class="fi-section-header"
|
||||
>
|
||||
<?php echo e(\Filament\Support\generate_icon_html($icon, attributes: (new \Illuminate\View\ComponentAttributeBag)
|
||||
->color(IconComponent::class, $iconColor), size: $iconSize ?? IconSize::Large)); ?>
|
||||
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasHeading || $hasDescription): ?>
|
||||
<div class="fi-section-header-text-ctn">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasHeading): ?>
|
||||
<<?php echo e($headingTag); ?> class="fi-section-header-heading">
|
||||
<?php echo e($heading); ?>
|
||||
|
||||
</<?php echo e($headingTag); ?>>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasDescription): ?>
|
||||
<p class="fi-section-header-description">
|
||||
<?php echo e($description); ?>
|
||||
|
||||
</p>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! is_slot_empty($afterHeader)): ?>
|
||||
<div x-on:click.stop class="fi-section-header-after-ctn">
|
||||
<?php echo e($afterHeader); ?>
|
||||
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($collapsible): ?>
|
||||
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => \Filament\Support\Icons\Heroicon::ChevronUp,'iconAlias' => \Filament\Support\View\SupportIconAlias::SECTION_COLLAPSE_BUTTON,'xOn:click.stop' => 'isCollapsed = ! isCollapsed','class' => 'fi-section-collapse-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::icon-button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::ChevronUp),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\View\SupportIconAlias::SECTION_COLLAPSE_BUTTON),'x-on:click.stop' => 'isCollapsed = ! isCollapsed','class' => 'fi-section-collapse-btn']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</header>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if((! is_slot_empty($slot)) || (! is_slot_empty($footer))): ?>
|
||||
<div
|
||||
<?php if($collapsible): ?>
|
||||
x-bind:aria-expanded="(! isCollapsed).toString()"
|
||||
<?php if($collapsed || $persistCollapsed): ?>
|
||||
x-cloak
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
class="fi-section-content-ctn"
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasContentEl): ?>
|
||||
<div class="fi-section-content">
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! is_slot_empty($footer)): ?>
|
||||
<footer class="fi-section-footer">
|
||||
<?php echo e($footer); ?>
|
||||
|
||||
</footer>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</section>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/section/index.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filament()->hasUnsavedChangesAlerts()): ?>
|
||||
<?php
|
||||
$__scriptKey = '2260693293-0';
|
||||
ob_start();
|
||||
?>
|
||||
<script>
|
||||
setUpUnsavedActionChangesAlert({
|
||||
resolveLivewireComponentUsing: () => window.Livewire.find('<?php echo e($_instance->getId()); ?>'),
|
||||
$wire,
|
||||
})
|
||||
</script>
|
||||
<?php
|
||||
$__output = ob_get_clean();
|
||||
|
||||
\Livewire\store($this)->push('scripts', $__output, $__scriptKey)
|
||||
?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/unsaved-action-changes-alert.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,378 @@
|
||||
<div>
|
||||
<?php
|
||||
$navigation = filament()->getNavigation();
|
||||
$isRtl = __('filament-panels::layout.direction') === 'rtl';
|
||||
$isSidebarCollapsibleOnDesktop = filament()->isSidebarCollapsibleOnDesktop();
|
||||
$isSidebarFullyCollapsibleOnDesktop = filament()->isSidebarFullyCollapsibleOnDesktop();
|
||||
$hasNavigation = filament()->hasNavigation();
|
||||
$hasTopbar = filament()->hasTopbar();
|
||||
?>
|
||||
|
||||
|
||||
<aside
|
||||
x-data="{}"
|
||||
<?php if($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop): ?>
|
||||
x-cloak
|
||||
<?php else: ?>
|
||||
x-cloak="-lg"
|
||||
<?php endif; ?>
|
||||
x-bind:class="{ 'fi-sidebar-open': $store.sidebar.isOpen }"
|
||||
class="fi-sidebar fi-main-sidebar"
|
||||
>
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_START)); ?>
|
||||
|
||||
|
||||
<div class="fi-sidebar-header-ctn">
|
||||
<header
|
||||
class="fi-sidebar-header"
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if((! $hasTopbar) && $isSidebarCollapsibleOnDesktop): ?>
|
||||
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => $isRtl ? \Filament\Support\Icons\Heroicon::OutlinedChevronLeft : \Filament\Support\Icons\Heroicon::OutlinedChevronRight,'iconAlias' =>
|
||||
$isRtl
|
||||
? [
|
||||
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON_RTL,
|
||||
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON,
|
||||
]
|
||||
: \Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON
|
||||
,'iconSize' => 'lg','label' => __('filament-panels::layout.actions.sidebar.expand.label'),'xCloak' => true,'xData' => '{}','xOn:click' => '$store.sidebar.open()','xShow' => '! $store.sidebar.isOpen','class' => 'fi-sidebar-open-collapse-sidebar-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::icon-button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isRtl ? \Filament\Support\Icons\Heroicon::OutlinedChevronLeft : \Filament\Support\Icons\Heroicon::OutlinedChevronRight),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(
|
||||
$isRtl
|
||||
? [
|
||||
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON_RTL,
|
||||
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON,
|
||||
]
|
||||
: \Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON
|
||||
),'icon-size' => 'lg','label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('filament-panels::layout.actions.sidebar.expand.label')),'x-cloak' => true,'x-data' => '{}','x-on:click' => '$store.sidebar.open()','x-show' => '! $store.sidebar.isOpen','class' => 'fi-sidebar-open-collapse-sidebar-btn']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if((! $hasTopbar) && ($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop)): ?>
|
||||
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => $isRtl ? \Filament\Support\Icons\Heroicon::OutlinedChevronRight : \Filament\Support\Icons\Heroicon::OutlinedChevronLeft,'iconAlias' =>
|
||||
$isRtl
|
||||
? [
|
||||
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON_RTL,
|
||||
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON,
|
||||
]
|
||||
: \Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON
|
||||
,'iconSize' => 'lg','label' => __('filament-panels::layout.actions.sidebar.collapse.label'),'xCloak' => true,'xData' => '{}','xOn:click' => '$store.sidebar.close()','xShow' => '$store.sidebar.isOpen','class' => 'fi-sidebar-close-collapse-sidebar-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::icon-button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isRtl ? \Filament\Support\Icons\Heroicon::OutlinedChevronRight : \Filament\Support\Icons\Heroicon::OutlinedChevronLeft),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(
|
||||
$isRtl
|
||||
? [
|
||||
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON_RTL,
|
||||
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON,
|
||||
]
|
||||
: \Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON
|
||||
),'icon-size' => 'lg','label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('filament-panels::layout.actions.sidebar.collapse.label')),'x-cloak' => true,'x-data' => '{}','x-on:click' => '$store.sidebar.close()','x-show' => '$store.sidebar.isOpen','class' => 'fi-sidebar-close-collapse-sidebar-btn']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_LOGO_BEFORE)); ?>
|
||||
|
||||
|
||||
<div x-show="$store.sidebar.isOpen" class="fi-sidebar-header-logo-ctn">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($homeUrl = filament()->getHomeUrl()): ?>
|
||||
<a <?php echo e(\Filament\Support\generate_href_html($homeUrl)); ?>>
|
||||
<?php if (isset($component)) { $__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.logo','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::logo'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94)): ?>
|
||||
<?php $attributes = $__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94; ?>
|
||||
<?php unset($__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94)): ?>
|
||||
<?php $component = $__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94; ?>
|
||||
<?php unset($__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94); ?>
|
||||
<?php endif; ?>
|
||||
</a>
|
||||
<?php else: ?>
|
||||
<?php if (isset($component)) { $__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.logo','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::logo'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94)): ?>
|
||||
<?php $attributes = $__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94; ?>
|
||||
<?php unset($__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94)): ?>
|
||||
<?php $component = $__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94; ?>
|
||||
<?php unset($__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_LOGO_AFTER)); ?>
|
||||
|
||||
</header>
|
||||
</div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filament()->hasTenancy() && filament()->hasTenantMenu()): ?>
|
||||
<?php if (isset($component)) { $__componentOriginal32b9f4abfc80490155cb7c5dfaf8790d = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal32b9f4abfc80490155cb7c5dfaf8790d = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.tenant-menu','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::tenant-menu'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal32b9f4abfc80490155cb7c5dfaf8790d)): ?>
|
||||
<?php $attributes = $__attributesOriginal32b9f4abfc80490155cb7c5dfaf8790d; ?>
|
||||
<?php unset($__attributesOriginal32b9f4abfc80490155cb7c5dfaf8790d); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal32b9f4abfc80490155cb7c5dfaf8790d)): ?>
|
||||
<?php $component = $__componentOriginal32b9f4abfc80490155cb7c5dfaf8790d; ?>
|
||||
<?php unset($__componentOriginal32b9f4abfc80490155cb7c5dfaf8790d); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(filament()->isGlobalSearchEnabled() && filament()->getGlobalSearchPosition() === \Filament\Enums\GlobalSearchPosition::Sidebar): ?>
|
||||
<div
|
||||
<?php if($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop): ?>
|
||||
x-show="$store.sidebar.isOpen"
|
||||
<?php endif; ?>
|
||||
>
|
||||
<?php
|
||||
$__split = function ($name, $params = []) {
|
||||
return [$name, $params];
|
||||
};
|
||||
[$__name, $__params] = $__split(Filament\Livewire\GlobalSearch::class);
|
||||
|
||||
$key = null;
|
||||
|
||||
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-3561320262-0', null);
|
||||
|
||||
$__html = app('livewire')->mount($__name, $__params, $key);
|
||||
|
||||
echo $__html;
|
||||
|
||||
unset($__html);
|
||||
unset($__name);
|
||||
unset($__params);
|
||||
unset($__split);
|
||||
if (isset($__slots)) unset($__slots);
|
||||
?>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<nav class="fi-sidebar-nav">
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_NAV_START)); ?>
|
||||
|
||||
|
||||
<ul class="fi-sidebar-nav-groups">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $navigation; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $group): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php
|
||||
$isGroupActive = $group->isActive();
|
||||
$isGroupCollapsible = $group->isCollapsible();
|
||||
$groupIcon = $group->getIcon();
|
||||
$groupItems = $group->getItems();
|
||||
$groupLabel = $group->getLabel();
|
||||
$groupExtraSidebarAttributeBag = $group->getExtraSidebarAttributeBag();
|
||||
?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal59b772cc9788bdb14bf9872624b4f33a = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal59b772cc9788bdb14bf9872624b4f33a = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.sidebar.group','data' => ['active' => $isGroupActive,'collapsible' => $isGroupCollapsible,'icon' => $groupIcon,'items' => $groupItems,'label' => $groupLabel,'attributes' => \Filament\Support\prepare_inherited_attributes($groupExtraSidebarAttributeBag)]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::sidebar.group'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isGroupActive),'collapsible' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isGroupCollapsible),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($groupIcon),'items' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($groupItems),'label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($groupLabel),'attributes' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\prepare_inherited_attributes($groupExtraSidebarAttributeBag))]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal59b772cc9788bdb14bf9872624b4f33a)): ?>
|
||||
<?php $attributes = $__attributesOriginal59b772cc9788bdb14bf9872624b4f33a; ?>
|
||||
<?php unset($__attributesOriginal59b772cc9788bdb14bf9872624b4f33a); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal59b772cc9788bdb14bf9872624b4f33a)): ?>
|
||||
<?php $component = $__componentOriginal59b772cc9788bdb14bf9872624b4f33a; ?>
|
||||
<?php unset($__componentOriginal59b772cc9788bdb14bf9872624b4f33a); ?>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</ul>
|
||||
|
||||
<script>
|
||||
var collapsedGroups = JSON.parse(
|
||||
localStorage.getItem('collapsedGroups'),
|
||||
)
|
||||
|
||||
if (collapsedGroups === null || collapsedGroups === 'null') {
|
||||
localStorage.setItem(
|
||||
'collapsedGroups',
|
||||
JSON.stringify(<?php echo \Illuminate\Support\Js::from(
|
||||
collect($navigation)
|
||||
->filter(fn (\Filament\Navigation\NavigationGroup $group): bool => $group->isCollapsed())
|
||||
->map(fn (\Filament\Navigation\NavigationGroup $group): string => $group->getLabel())
|
||||
->values()
|
||||
->all()
|
||||
)->toHtml() ?>),
|
||||
)
|
||||
}
|
||||
|
||||
collapsedGroups = JSON.parse(
|
||||
localStorage.getItem('collapsedGroups'),
|
||||
)
|
||||
|
||||
document
|
||||
.querySelectorAll('.fi-sidebar-group')
|
||||
.forEach((group) => {
|
||||
if (
|
||||
!collapsedGroups.includes(group.dataset.groupLabel)
|
||||
) {
|
||||
return
|
||||
}
|
||||
|
||||
// Alpine.js loads too slow, so attempt to hide a
|
||||
// collapsed sidebar group earlier.
|
||||
group.querySelector(
|
||||
'.fi-sidebar-group-items',
|
||||
).style.display = 'none'
|
||||
group.classList.add('fi-collapsed')
|
||||
})
|
||||
</script>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_NAV_END)); ?>
|
||||
|
||||
</nav>
|
||||
|
||||
<?php
|
||||
$isAuthenticated = filament()->auth()->check();
|
||||
$hasDatabaseNotificationsInSidebar = filament()->hasDatabaseNotifications() && filament()->getDatabaseNotificationsPosition() === \Filament\Enums\DatabaseNotificationsPosition::Sidebar;
|
||||
$hasUserMenuInSidebar = filament()->hasUserMenu() && filament()->getUserMenuPosition() === \Filament\Enums\UserMenuPosition::Sidebar;
|
||||
$shouldRenderFooter = $isAuthenticated && ($hasDatabaseNotificationsInSidebar || $hasUserMenuInSidebar);
|
||||
?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($shouldRenderFooter): ?>
|
||||
<div class="fi-sidebar-footer">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasDatabaseNotificationsInSidebar): ?>
|
||||
<?php
|
||||
$__split = function ($name, $params = []) {
|
||||
return [$name, $params];
|
||||
};
|
||||
[$__name, $__params] = $__split(Filament\Livewire\DatabaseNotifications::class, [
|
||||
'lazy' => filament()->hasLazyLoadedDatabaseNotifications(),
|
||||
]);
|
||||
|
||||
$key = null;
|
||||
|
||||
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-3561320262-1', null);
|
||||
|
||||
$__html = app('livewire')->mount($__name, $__params, $key);
|
||||
|
||||
echo $__html;
|
||||
|
||||
unset($__html);
|
||||
unset($__name);
|
||||
unset($__params);
|
||||
unset($__split);
|
||||
if (isset($__slots)) unset($__slots);
|
||||
?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasUserMenuInSidebar): ?>
|
||||
<?php if (isset($component)) { $__componentOriginalf72c4437b846e6919081d8fc29939c50 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf72c4437b846e6919081d8fc29939c50 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.user-menu','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::user-menu'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf72c4437b846e6919081d8fc29939c50)): ?>
|
||||
<?php $attributes = $__attributesOriginalf72c4437b846e6919081d8fc29939c50; ?>
|
||||
<?php unset($__attributesOriginalf72c4437b846e6919081d8fc29939c50); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf72c4437b846e6919081d8fc29939c50)): ?>
|
||||
<?php $component = $__componentOriginalf72c4437b846e6919081d8fc29939c50; ?>
|
||||
<?php unset($__componentOriginalf72c4437b846e6919081d8fc29939c50); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::SIDEBAR_FOOTER)); ?>
|
||||
|
||||
</aside>
|
||||
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal028e05680f6c5b1e293abd7fbe5f9758 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-actions::components.modals','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-actions::modals'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758)): ?>
|
||||
<?php $attributes = $__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758; ?>
|
||||
<?php unset($__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal028e05680f6c5b1e293abd7fbe5f9758)): ?>
|
||||
<?php $component = $__componentOriginal028e05680f6c5b1e293abd7fbe5f9758; ?>
|
||||
<?php unset($__componentOriginal028e05680f6c5b1e293abd7fbe5f9758); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/livewire/sidebar.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'inlinePrefix' => false,
|
||||
'inlineSuffix' => false,
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'inlinePrefix' => false,
|
||||
'inlineSuffix' => false,
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<input
|
||||
<?php echo e($attributes->class([
|
||||
'fi-input',
|
||||
'fi-input-has-inline-prefix' => $inlinePrefix,
|
||||
'fi-input-has-inline-suffix' => $inlineSuffix,
|
||||
])); ?>
|
||||
|
||||
/>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/input/index.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($this instanceof \Filament\Actions\Contracts\HasActions && (! $this->hasActionsModalRendered)): ?>
|
||||
<div
|
||||
wire:partial="action-modals"
|
||||
x-data="filamentActionModals({
|
||||
livewireId: <?php echo \Illuminate\Support\Js::from($this->getId())->toHtml() ?>,
|
||||
})"
|
||||
style="height: 0"
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $this->getMountedActions(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $action): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if((! $loop->last) || $this->mountedActionShouldOpenModal()): ?>
|
||||
<?php echo e($action->toModalHtmlable()); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
$this->hasActionsModalRendered = true;
|
||||
?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/actions/resources/views/components/modals.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,189 @@
|
||||
<?php
|
||||
use Filament\Support\Enums\IconSize;
|
||||
use Filament\Support\Enums\Size;
|
||||
use Filament\Support\View\Components\BadgeComponent;
|
||||
use Filament\Support\View\Components\IconButtonComponent;
|
||||
use Illuminate\View\ComponentAttributeBag;
|
||||
?>
|
||||
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'badge' => null,
|
||||
'badgeColor' => 'primary',
|
||||
'badgeSize' => Size::ExtraSmall,
|
||||
'color' => 'primary',
|
||||
'disabled' => false,
|
||||
'form' => null,
|
||||
'formId' => null,
|
||||
'href' => null,
|
||||
'icon' => null,
|
||||
'iconAlias' => null,
|
||||
'iconSize' => null,
|
||||
'keyBindings' => null,
|
||||
'label' => null,
|
||||
'loadingIndicator' => true,
|
||||
'size' => Size::Medium,
|
||||
'spaMode' => null,
|
||||
'tag' => 'button',
|
||||
'target' => null,
|
||||
'tooltip' => null,
|
||||
'type' => 'button',
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'badge' => null,
|
||||
'badgeColor' => 'primary',
|
||||
'badgeSize' => Size::ExtraSmall,
|
||||
'color' => 'primary',
|
||||
'disabled' => false,
|
||||
'form' => null,
|
||||
'formId' => null,
|
||||
'href' => null,
|
||||
'icon' => null,
|
||||
'iconAlias' => null,
|
||||
'iconSize' => null,
|
||||
'keyBindings' => null,
|
||||
'label' => null,
|
||||
'loadingIndicator' => true,
|
||||
'size' => Size::Medium,
|
||||
'spaMode' => null,
|
||||
'tag' => 'button',
|
||||
'target' => null,
|
||||
'tooltip' => null,
|
||||
'type' => 'button',
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
if (! $size instanceof Size) {
|
||||
$size = filled($size) ? (Size::tryFrom($size) ?? $size) : null;
|
||||
}
|
||||
|
||||
if (! $badgeSize instanceof Size) {
|
||||
$badgeSize = filled($badgeSize) ? (Size::tryFrom($badgeSize) ?? $badgeSize) : null;
|
||||
}
|
||||
|
||||
if (filled($iconSize) && (! $iconSize instanceof IconSize)) {
|
||||
$iconSize = IconSize::tryFrom($iconSize) ?? $iconSize;
|
||||
}
|
||||
|
||||
$iconSize ??= match ($size) {
|
||||
Size::ExtraSmall => IconSize::Small,
|
||||
Size::Large, Size::ExtraLarge => IconSize::Large,
|
||||
default => null,
|
||||
};
|
||||
|
||||
$wireTarget = $loadingIndicator ? $attributes->whereStartsWith(['wire:target', 'wire:click'])->filter(fn ($value): bool => filled($value))->first() : null;
|
||||
|
||||
$hasLoadingIndicator = filled($wireTarget) || ($type === 'submit' && filled($form));
|
||||
|
||||
if ($hasLoadingIndicator) {
|
||||
$loadingIndicatorTarget = html_entity_decode($wireTarget ?: $form, ENT_QUOTES);
|
||||
}
|
||||
|
||||
$hasTooltip = $hasTooltip = filled($tooltip);
|
||||
?>
|
||||
|
||||
<<?php echo e($tag); ?>
|
||||
|
||||
<?php if(($tag === 'a') && (! ($disabled && $hasTooltip))): ?>
|
||||
<?php echo e(\Filament\Support\generate_href_html($href, $target === '_blank', $spaMode)); ?>
|
||||
|
||||
<?php endif; ?>
|
||||
<?php if($keyBindings): ?>
|
||||
x-bind:id="$id('key-bindings')"
|
||||
x-mousetrap.global.<?php echo e(collect($keyBindings)->map(fn (string $keyBinding): string => str_replace('+', '-', $keyBinding))->implode('.')); ?>="document.getElementById($el.id)?.click()"
|
||||
<?php endif; ?>
|
||||
<?php if($hasTooltip): ?>
|
||||
x-tooltip="{
|
||||
content: <?php echo \Illuminate\Support\Js::from($tooltip)->toHtml() ?>,
|
||||
theme: $store.theme,
|
||||
allowHTML: <?php echo \Illuminate\Support\Js::from($tooltip instanceof \Illuminate\Contracts\Support\Htmlable)->toHtml() ?>,
|
||||
}"
|
||||
<?php endif; ?>
|
||||
<?php echo e($attributes
|
||||
->merge([
|
||||
'aria-disabled' => $disabled ? 'true' : null,
|
||||
'aria-label' => $label,
|
||||
'disabled' => $disabled && blank($tooltip),
|
||||
'form' => $formId,
|
||||
'type' => $tag === 'button' ? $type : null,
|
||||
'wire:loading.attr' => $tag === 'button' ? 'disabled' : null,
|
||||
'wire:target' => ($hasLoadingIndicator && $loadingIndicatorTarget) ? $loadingIndicatorTarget : null,
|
||||
], escape: false)
|
||||
->merge([
|
||||
'title' => $hasTooltip ? null : $label,
|
||||
], escape: true)
|
||||
->when(
|
||||
$disabled && $hasTooltip,
|
||||
fn (ComponentAttributeBag $attributes) => $attributes->filter(
|
||||
fn (mixed $value, string $key): bool => ! str($key)->startsWith(['href', 'x-on:', 'wire:click']),
|
||||
),
|
||||
)
|
||||
->class([
|
||||
'fi-icon-btn',
|
||||
'fi-disabled' => $disabled,
|
||||
($size instanceof Size) ? "fi-size-{$size->value}" : (is_string($size) ? $size : ''),
|
||||
])
|
||||
->color(IconButtonComponent::class, $color)); ?>
|
||||
|
||||
>
|
||||
<?php echo e(\Filament\Support\generate_icon_html($icon, $iconAlias, (new \Illuminate\View\ComponentAttributeBag([
|
||||
'wire:loading.remove.delay.' . config('filament.livewire_loading_delay', 'default') => $hasLoadingIndicator,
|
||||
'wire:target' => $hasLoadingIndicator ? $loadingIndicatorTarget : false,
|
||||
])), size: $iconSize)); ?>
|
||||
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasLoadingIndicator): ?>
|
||||
<?php echo e(\Filament\Support\generate_loading_indicator_html((new \Illuminate\View\ComponentAttributeBag([
|
||||
'wire:loading.delay.' . config('filament.livewire_loading_delay', 'default') => '',
|
||||
'wire:target' => $loadingIndicatorTarget,
|
||||
])), size: $iconSize)); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($badge)): ?>
|
||||
<div class="fi-icon-btn-badge-ctn">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($badge instanceof \Illuminate\View\ComponentSlot): ?>
|
||||
<?php echo e($badge); ?>
|
||||
|
||||
<?php else: ?>
|
||||
<span
|
||||
<?php echo e((new ComponentAttributeBag)->color(BadgeComponent::class, $badgeColor)->class([
|
||||
'fi-badge',
|
||||
($badgeSize instanceof Size) ? "fi-size-{$badgeSize->value}" : (is_string($badgeSize) ? $badgeSize : ''),
|
||||
])); ?>
|
||||
|
||||
>
|
||||
<?php echo e($badge); ?>
|
||||
|
||||
</span>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</<?php echo e($tag); ?>>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/icon-button.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,112 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'availableHeight' => null,
|
||||
'availableWidth' => null,
|
||||
'flip' => true,
|
||||
'maxHeight' => null,
|
||||
'offset' => 8,
|
||||
'placement' => null,
|
||||
'shift' => false,
|
||||
'size' => false,
|
||||
'sizePadding' => 16,
|
||||
'teleport' => false,
|
||||
'trigger' => null,
|
||||
'width' => null,
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'availableHeight' => null,
|
||||
'availableWidth' => null,
|
||||
'flip' => true,
|
||||
'maxHeight' => null,
|
||||
'offset' => 8,
|
||||
'placement' => null,
|
||||
'shift' => false,
|
||||
'size' => false,
|
||||
'sizePadding' => 16,
|
||||
'teleport' => false,
|
||||
'trigger' => null,
|
||||
'width' => null,
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
use Filament\Support\Enums\Width;
|
||||
|
||||
$sizeConfig = collect([
|
||||
'availableHeight' => $availableHeight,
|
||||
'availableWidth' => $availableWidth,
|
||||
'padding' => $sizePadding,
|
||||
])->filter()->toJson();
|
||||
|
||||
if (is_string($width)) {
|
||||
$width = Width::tryFrom($width) ?? $width;
|
||||
}
|
||||
?>
|
||||
|
||||
<div
|
||||
x-data="filamentDropdown"
|
||||
<?php echo e($attributes->class(['fi-dropdown'])); ?>
|
||||
|
||||
>
|
||||
<div
|
||||
x-on:keyup.enter="toggle($event)"
|
||||
x-on:keyup.space="toggle($event)"
|
||||
x-on:mousedown="if ($event.button === 0) toggle($event)"
|
||||
<?php echo e($trigger->attributes->class(['fi-dropdown-trigger'])); ?>
|
||||
|
||||
>
|
||||
<?php echo e($trigger); ?>
|
||||
|
||||
</div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! \Filament\Support\is_slot_empty($slot)): ?>
|
||||
<div
|
||||
x-cloak
|
||||
x-float<?php echo e($placement ? ".placement.{$placement}" : ''); ?><?php echo e($size ? '.size' : ''); ?><?php echo e($flip ? '.flip' : ''); ?><?php echo e($shift ? '.shift' : ''); ?><?php echo e($teleport ? '.teleport' : ''); ?><?php echo e($offset ? '.offset' : ''); ?>="{ offset: <?php echo e($offset); ?>, <?php echo e($size ? ('size: ' . $sizeConfig) : ''); ?> }"
|
||||
x-ref="panel"
|
||||
x-transition:enter-start="fi-opacity-0"
|
||||
x-transition:leave-end="fi-opacity-0"
|
||||
<?php if($attributes->has('wire:key')): ?>
|
||||
wire:ignore.self
|
||||
wire:key="<?php echo e($attributes->get('wire:key')); ?>.panel"
|
||||
<?php endif; ?>
|
||||
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
|
||||
'fi-dropdown-panel',
|
||||
($width instanceof Width) ? "fi-width-{$width->value}" : (is_string($width) ? $width : ''),
|
||||
'fi-scrollable' => $maxHeight || $size,
|
||||
]); ?>"
|
||||
style="<?php echo \Illuminate\Support\Arr::toCssStyles([
|
||||
"max-height: {$maxHeight}" => $maxHeight,
|
||||
]) ?>"
|
||||
>
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/dropdown/index.blade.php ENDPATH**/ ?>
|
||||
@@ -41,7 +41,9 @@
|
||||
}
|
||||
|
||||
.form-group input,
|
||||
.form-group textarea {
|
||||
.form-group textarea,
|
||||
.form-group select,
|
||||
.address-search-group input {
|
||||
width: 100%;
|
||||
padding: 0.75rem;
|
||||
border: 1px solid #ddd;
|
||||
@@ -56,12 +58,52 @@
|
||||
}
|
||||
|
||||
.form-group input:focus,
|
||||
.form-group textarea:focus {
|
||||
.form-group textarea:focus,
|
||||
.form-group select:focus,
|
||||
.address-search-group input:focus {
|
||||
outline: none;
|
||||
border-color: var(--primary-color);
|
||||
box-shadow: 0 0 0 3px rgba(45, 80, 71, 0.1);
|
||||
}
|
||||
|
||||
/* Google Places Autocomplete styling */
|
||||
.pac-container {
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.pac-item {
|
||||
padding: 0.75rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.pac-item:hover {
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
|
||||
.address-search-group {
|
||||
margin-bottom: 1.5rem;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.address-clear-btn {
|
||||
position: absolute;
|
||||
right: 12px;
|
||||
top: 32px;
|
||||
background: none;
|
||||
border: none;
|
||||
color: #999;
|
||||
cursor: pointer;
|
||||
font-size: 1.2rem;
|
||||
padding: 0;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.address-clear-btn.show {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.order-summary {
|
||||
height: fit-content;
|
||||
}
|
||||
@@ -195,23 +237,74 @@
|
||||
<h2>Delivery Information</h2>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="customer_name">Full Name</label>
|
||||
<input type="text" id="customer_name" name="customer_name" value="<?php echo e(old('customer_name')); ?>" required>
|
||||
<label for="customer_name">Full Name<span style="color: red;">*</span></label>
|
||||
<input type="text" id="customer_name" name="customer_name" value="<?php echo e(old('customer_name', Auth::check() ? Auth::user()->name : '')); ?>" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="customer_email">Email Address</label>
|
||||
<input type="email" id="customer_email" name="customer_email" value="<?php echo e(old('customer_email')); ?>" required>
|
||||
<label for="customer_email">Email Address<span style="color: red;">*</span></label>
|
||||
<input type="email" id="customer_email" name="customer_email" value="<?php echo e(old('customer_email', Auth::check() ? Auth::user()->email : '')); ?>" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="customer_phone">Phone Number</label>
|
||||
<label for="customer_phone">Phone Number<span style="color: red;">*</span></label>
|
||||
<input type="tel" id="customer_phone" name="customer_phone" value="<?php echo e(old('customer_phone')); ?>" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="shipping_address">Delivery Address</label>
|
||||
<textarea id="shipping_address" name="shipping_address" required><?php echo e(old('shipping_address')); ?></textarea>
|
||||
<label for="shipping_type">Address Type <span style="color: red;">*</span></label>
|
||||
<select id="shipping_type" name="shipping_type" required>
|
||||
<option value="residential" <?php echo e(old('shipping_type') === 'residential' ? 'selected' : ''); ?>>Residential</option>
|
||||
<option value="business" <?php echo e(old('shipping_type') === 'business' ? 'selected' : ''); ?>>Business</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group" id="business_name_group" style="display: none;">
|
||||
<label for="business_name">Business Name <span style="color: red;">*</span></label>
|
||||
<input type="text" id="business_name" name="business_name" value="<?php echo e(old('business_name')); ?>" placeholder="Enter your business name">
|
||||
</div>
|
||||
|
||||
<div class="address-search-group">
|
||||
|
||||
<label for="address_search">Delivery Address (Type to search)</label>
|
||||
<input type="text" id="address_search" placeholder="Start typing your address..." autocomplete="off">
|
||||
<button type="button" class="address-clear-btn" id="address_clear_btn">✕</button>
|
||||
</div>
|
||||
|
||||
<div id="address_fields_group">
|
||||
<div class="form-group">
|
||||
<label for="shipping_unit_number">Apartment / Unit / Building Number (Optional)</label>
|
||||
<input type="text" id="shipping_unit_number" name="shipping_unit_number" placeholder="e.g. Apt 101, Unit B, Building 3" value="<?php echo e(old('shipping_unit_number')); ?>">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="shipping_street_address">Street Address <span style="color: red;">*</span></label>
|
||||
<input type="text" id="shipping_street_address" name="shipping_street_address" value="<?php echo e(old('shipping_street_address')); ?>" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="shipping_local_area">Suburb<span style="color: red;">*</span></label>
|
||||
<input type="text" id="shipping_local_area" name="shipping_local_area" value="<?php echo e(old('shipping_local_area')); ?>" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="shipping_city">City <span style="color: red;">*</span></label>
|
||||
<input type="text" id="shipping_city" name="shipping_city" value="<?php echo e(old('shipping_city')); ?>" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="shipping_zone">Province<span style="color: red;">*</span></label>
|
||||
<input type="text" id="shipping_zone" name="shipping_zone" value="<?php echo e(old('shipping_zone')); ?>" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="shipping_postcode">Postal Code <span style="color: red;">*</span></label>
|
||||
<input type="text" id="shipping_postcode" name="shipping_postcode" value="<?php echo e(old('shipping_postcode')); ?>" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="shipping_country">Country</label>
|
||||
<input type="text" id="shipping_country" name="shipping_country" value="ZA" readonly>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
@@ -286,6 +379,184 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
$apiKey = config('services.google_places.api_key');
|
||||
?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(!$apiKey): ?>
|
||||
<div style="background: #fff3cd; padding: 1rem; margin-bottom: 1rem; border-radius: 4px; color: #856404;">
|
||||
<strong>⚠️ Configuration Issue:</strong> Google Places API key is not configured. Please add <code>GOOGLE_PLACES_API_KEY</code> to your .env file.
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<script>
|
||||
// console.log('Checkout page loaded');
|
||||
// console.log('API Key configured:', <?php echo e($apiKey ? 'true' : 'false'); ?>);
|
||||
// <?php if($apiKey): ?>
|
||||
// console.log('API Key length:', <?php echo e(strlen($apiKey)); ?>);
|
||||
// <?php endif; ?>
|
||||
</script>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($apiKey): ?>
|
||||
<script async defer src="https://maps.googleapis.com/maps/api/js?key=<?php echo e($apiKey); ?>&loading=async&libraries=places&callback=initializeAddressAutocomplete"></script>
|
||||
<!-- <script>
|
||||
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
|
||||
key: "<?php echo e($apiKey); ?>",
|
||||
v: "weekly",
|
||||
|
||||
}); -->
|
||||
</script>
|
||||
|
||||
<script>
|
||||
// Handle shipping type change
|
||||
document.getElementById('shipping_type').addEventListener('change', function() {
|
||||
const businessNameGroup = document.getElementById('business_name_group');
|
||||
const businessNameInput = document.getElementById('business_name');
|
||||
|
||||
if (this.value === 'business') {
|
||||
businessNameGroup.style.display = 'block';
|
||||
businessNameInput.setAttribute('required', 'required');
|
||||
} else {
|
||||
businessNameGroup.style.display = 'none';
|
||||
businessNameInput.removeAttribute('required');
|
||||
businessNameInput.value = '';
|
||||
}
|
||||
});
|
||||
|
||||
// Check initial state on page load
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const shippingType = document.getElementById('shipping_type');
|
||||
if (shippingType && shippingType.value === 'business') {
|
||||
document.getElementById('business_name_group').style.display = 'block';
|
||||
}
|
||||
});
|
||||
|
||||
function initializeAddressAutocomplete() {
|
||||
console.log('✓ Google Maps API loaded');
|
||||
|
||||
const addressSearchInput = document.getElementById('address_search');
|
||||
const clearBtn = document.getElementById('address_clear_btn');
|
||||
|
||||
if (!addressSearchInput) {
|
||||
console.error('Address search input not found');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
console.log('Initializing Google Places Autocomplete...');
|
||||
|
||||
// Using modern Autocomplete with new API
|
||||
const autocomplete = new google.maps.places.Autocomplete(addressSearchInput, {
|
||||
componentRestrictions: { country: 'za' },
|
||||
types: ['geocode']
|
||||
});
|
||||
|
||||
console.log('✓ Google Places Autocomplete initialized');
|
||||
|
||||
// Prevent form submission on Enter when autocomplete dropdown is open
|
||||
addressSearchInput.addEventListener('keydown', function(e) {
|
||||
const pacContainer = document.querySelector('.pac-container:not([style*="display: none"])');
|
||||
if (e.key === 'Enter' && pacContainer) {
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
// When place is selected
|
||||
autocomplete.addListener('place_changed', function() {
|
||||
const place = autocomplete.getPlace();
|
||||
|
||||
if (!place.geometry) {
|
||||
console.warn('Selected place has no geometry');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('✓ Address selected:', place.formatted_address);
|
||||
|
||||
// Parse address components
|
||||
const addressComponents = {};
|
||||
place.address_components.forEach(component => {
|
||||
addressComponents[component.types[0]] = component.long_name;
|
||||
});
|
||||
|
||||
// Debug: log all available components
|
||||
console.log('Address components available:', Object.keys(addressComponents));
|
||||
|
||||
// Populate form fields
|
||||
document.getElementById('shipping_street_address').value =
|
||||
(addressComponents['street_number'] ? addressComponents['street_number'] + ' ' : '') +
|
||||
(addressComponents['route'] || '');
|
||||
|
||||
document.getElementById('shipping_local_area').value =
|
||||
addressComponents['political'] ||
|
||||
addressComponents['sublocality'] ||
|
||||
addressComponents['sublocality_level_1'] ||
|
||||
addressComponents['sublocality_level_2'] || '';
|
||||
|
||||
document.getElementById('shipping_city').value =
|
||||
addressComponents['locality'] || addressComponents['administrative_area_level_2'] || '';
|
||||
|
||||
document.getElementById('shipping_zone').value =
|
||||
addressComponents['administrative_area_level_1'] || '';
|
||||
|
||||
document.getElementById('shipping_postcode').value =
|
||||
addressComponents['postal_code'] || '';
|
||||
|
||||
document.getElementById('shipping_country').value =
|
||||
addressComponents['country'] || 'ZA';
|
||||
|
||||
// Show clear button
|
||||
clearBtn.classList.add('show');
|
||||
});
|
||||
|
||||
// Clear button functionality
|
||||
clearBtn.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
addressSearchInput.value = '';
|
||||
addressSearchInput.focus();
|
||||
clearBtn.classList.remove('show');
|
||||
|
||||
// Clear form fields
|
||||
document.getElementById('shipping_street_address').value = '';
|
||||
document.getElementById('shipping_unit_number').value = '';
|
||||
document.getElementById('shipping_local_area').value = '';
|
||||
document.getElementById('shipping_city').value = '';
|
||||
document.getElementById('shipping_zone').value = '';
|
||||
document.getElementById('shipping_postcode').value = '';
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('✗ Error initializing autocomplete:', error);
|
||||
showAddressFieldsManually();
|
||||
}
|
||||
}
|
||||
|
||||
function showAddressFieldsManually() {
|
||||
const addressSearchInput = document.getElementById('address_search');
|
||||
if (addressSearchInput) {
|
||||
addressSearchInput.style.display = 'none';
|
||||
document.querySelector('label[for="address_search"]').style.display = 'none';
|
||||
document.getElementById('address_clear_btn').style.display = 'none';
|
||||
|
||||
const fieldsGroup = document.getElementById('address_fields_group');
|
||||
if (fieldsGroup) {
|
||||
const notice = document.createElement('div');
|
||||
notice.style.cssText = 'background: #f0f0f0; padding: 1rem; border-radius: 4px; margin-bottom: 1.5rem; color: #666;';
|
||||
notice.innerHTML = '<strong>Note:</strong> Address search is not available. Please fill in your address details manually below.';
|
||||
fieldsGroup.parentNode.insertBefore(notice, fieldsGroup);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If Google API doesn't load after 5 seconds, show fallback
|
||||
setTimeout(() => {
|
||||
if (typeof google === 'undefined') {
|
||||
console.warn('Google Maps API failed to load');
|
||||
showAddressFieldsManually();
|
||||
}
|
||||
}, 5000);
|
||||
</script>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php $__env->stopSection(); ?>
|
||||
|
||||
<?php echo $__env->make('layouts.app', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?><?php /**PATH /var/www/additional_design/resources/views/checkout.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(isset($data)): ?>
|
||||
<script>
|
||||
window.filamentData = <?php echo \Illuminate\Support\Js::from($data)->toHtml() ?>
|
||||
</script>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $assets; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $asset): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! $asset->isLoadedOnRequest()): ?>
|
||||
<?php echo e($asset->getHtml()); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<style>
|
||||
:root {
|
||||
<?php $__currentLoopData = $cssVariables ?? []; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $cssVariableName => $cssVariableValue): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> --<?php echo e($cssVariableName); ?>:<?php echo e($cssVariableValue); ?>; <?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
}
|
||||
|
||||
<?php $__currentLoopData = $customColors ?? []; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $customColorName => $customColorShades): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> .fi-color-<?php echo e($customColorName); ?> { <?php $__currentLoopData = $customColorShades; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $customColorShade): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> --color-<?php echo e($customColorShade); ?>:var(--<?php echo e($customColorName); ?>-<?php echo e($customColorShade); ?>); <?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?> } <?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</style>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/assets.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,127 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'actions' => [],
|
||||
'actionsAlignment' => null,
|
||||
'breadcrumbs' => [],
|
||||
'heading' => null,
|
||||
'subheading' => null,
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'actions' => [],
|
||||
'actionsAlignment' => null,
|
||||
'breadcrumbs' => [],
|
||||
'heading' => null,
|
||||
'subheading' => null,
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<header
|
||||
<?php echo e($attributes->class([
|
||||
'fi-header',
|
||||
'fi-header-has-breadcrumbs' => $breadcrumbs,
|
||||
])); ?>
|
||||
|
||||
>
|
||||
<div>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($breadcrumbs): ?>
|
||||
<?php if (isset($component)) { $__componentOriginale1cebc129855f156aa8f78d22103aca1 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginale1cebc129855f156aa8f78d22103aca1 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.breadcrumbs','data' => ['breadcrumbs' => $breadcrumbs]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::breadcrumbs'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['breadcrumbs' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($breadcrumbs)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginale1cebc129855f156aa8f78d22103aca1)): ?>
|
||||
<?php $attributes = $__attributesOriginale1cebc129855f156aa8f78d22103aca1; ?>
|
||||
<?php unset($__attributesOriginale1cebc129855f156aa8f78d22103aca1); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginale1cebc129855f156aa8f78d22103aca1)): ?>
|
||||
<?php $component = $__componentOriginale1cebc129855f156aa8f78d22103aca1; ?>
|
||||
<?php unset($__componentOriginale1cebc129855f156aa8f78d22103aca1); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($heading)): ?>
|
||||
<h1 class="fi-header-heading">
|
||||
<?php echo e($heading); ?>
|
||||
|
||||
</h1>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($subheading)): ?>
|
||||
<p class="fi-header-subheading">
|
||||
<?php echo e($subheading); ?>
|
||||
|
||||
</p>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
$beforeActions = \Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_HEADER_ACTIONS_BEFORE, scopes: $this->getRenderHookScopes());
|
||||
$afterActions = \Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_HEADER_ACTIONS_AFTER, scopes: $this->getRenderHookScopes());
|
||||
?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($beforeActions) || $actions || filled($afterActions)): ?>
|
||||
<div class="fi-header-actions-ctn">
|
||||
<?php echo e($beforeActions); ?>
|
||||
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($actions): ?>
|
||||
<?php if (isset($component)) { $__componentOriginal59d80b1aec4ae4c914a3e52dede19504 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal59d80b1aec4ae4c914a3e52dede19504 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.actions','data' => ['actions' => $actions,'alignment' => $actionsAlignment]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::actions'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['actions' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($actions),'alignment' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($actionsAlignment)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal59d80b1aec4ae4c914a3e52dede19504)): ?>
|
||||
<?php $attributes = $__attributesOriginal59d80b1aec4ae4c914a3e52dede19504; ?>
|
||||
<?php unset($__attributesOriginal59d80b1aec4ae4c914a3e52dede19504); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal59d80b1aec4ae4c914a3e52dede19504)): ?>
|
||||
<?php $component = $__componentOriginal59d80b1aec4ae4c914a3e52dede19504; ?>
|
||||
<?php unset($__componentOriginal59d80b1aec4ae4c914a3e52dede19504); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php echo e($afterActions); ?>
|
||||
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</header>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/header/index.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,75 @@
|
||||
<div
|
||||
x-data="{ theme: null }"
|
||||
x-init="
|
||||
$watch('theme', () => {
|
||||
$dispatch('theme-changed', theme)
|
||||
})
|
||||
|
||||
theme = localStorage.getItem('theme') || <?php echo \Illuminate\Support\Js::from(filament()->getDefaultThemeMode()->value)->toHtml() ?>
|
||||
"
|
||||
class="fi-theme-switcher"
|
||||
>
|
||||
<?php if (isset($component)) { $__componentOriginalad1f400c934be44fb66b397d4f7989b8 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalad1f400c934be44fb66b397d4f7989b8 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.theme-switcher.button','data' => ['icon' => \Filament\Support\Icons\Heroicon::Sun,'theme' => 'light']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::theme-switcher.button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::Sun),'theme' => 'light']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalad1f400c934be44fb66b397d4f7989b8)): ?>
|
||||
<?php $attributes = $__attributesOriginalad1f400c934be44fb66b397d4f7989b8; ?>
|
||||
<?php unset($__attributesOriginalad1f400c934be44fb66b397d4f7989b8); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalad1f400c934be44fb66b397d4f7989b8)): ?>
|
||||
<?php $component = $__componentOriginalad1f400c934be44fb66b397d4f7989b8; ?>
|
||||
<?php unset($__componentOriginalad1f400c934be44fb66b397d4f7989b8); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginalad1f400c934be44fb66b397d4f7989b8 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalad1f400c934be44fb66b397d4f7989b8 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.theme-switcher.button','data' => ['icon' => \Filament\Support\Icons\Heroicon::Moon,'theme' => 'dark']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::theme-switcher.button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::Moon),'theme' => 'dark']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalad1f400c934be44fb66b397d4f7989b8)): ?>
|
||||
<?php $attributes = $__attributesOriginalad1f400c934be44fb66b397d4f7989b8; ?>
|
||||
<?php unset($__attributesOriginalad1f400c934be44fb66b397d4f7989b8); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalad1f400c934be44fb66b397d4f7989b8)): ?>
|
||||
<?php $component = $__componentOriginalad1f400c934be44fb66b397d4f7989b8; ?>
|
||||
<?php unset($__componentOriginalad1f400c934be44fb66b397d4f7989b8); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginalad1f400c934be44fb66b397d4f7989b8 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalad1f400c934be44fb66b397d4f7989b8 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.theme-switcher.button','data' => ['icon' => \Filament\Support\Icons\Heroicon::ComputerDesktop,'theme' => 'system']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::theme-switcher.button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::ComputerDesktop),'theme' => 'system']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalad1f400c934be44fb66b397d4f7989b8)): ?>
|
||||
<?php $attributes = $__attributesOriginalad1f400c934be44fb66b397d4f7989b8; ?>
|
||||
<?php unset($__attributesOriginalad1f400c934be44fb66b397d4f7989b8); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalad1f400c934be44fb66b397d4f7989b8)): ?>
|
||||
<?php $component = $__componentOriginalad1f400c934be44fb66b397d4f7989b8; ?>
|
||||
<?php unset($__componentOriginalad1f400c934be44fb66b397d4f7989b8); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/theme-switcher/index.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,325 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'position' => null,
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'position' => null,
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
use Filament\Actions\Action;
|
||||
use Filament\Enums\UserMenuPosition;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
$user = filament()->auth()->user();
|
||||
|
||||
$items = $this->getUserMenuItems();
|
||||
|
||||
$itemsBeforeAndAfterThemeSwitcher = collect($items)
|
||||
->groupBy(fn (Action $item): bool => $item->getSort() < 0, preserveKeys: true)
|
||||
->all();
|
||||
$itemsBeforeThemeSwitcher = $itemsBeforeAndAfterThemeSwitcher[true] ?? collect();
|
||||
$itemsAfterThemeSwitcher = $itemsBeforeAndAfterThemeSwitcher[false] ?? collect();
|
||||
|
||||
$hasProfileHeader = $itemsBeforeThemeSwitcher->has('profile') &&
|
||||
blank(($item = Arr::first($itemsBeforeThemeSwitcher))->getUrl()) &&
|
||||
(! $item->hasAction());
|
||||
|
||||
if ($itemsBeforeThemeSwitcher->has('profile')) {
|
||||
$itemsBeforeThemeSwitcher = $itemsBeforeThemeSwitcher->prepend($itemsBeforeThemeSwitcher->pull('profile'), 'profile');
|
||||
}
|
||||
|
||||
$position ??= filament()->getUserMenuPosition();
|
||||
|
||||
$isSidebarCollapsibleOnDesktop = filament()->isSidebarCollapsibleOnDesktop();
|
||||
?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_BEFORE)); ?>
|
||||
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal22ab0dbc2c6619d5954111bba06f01db = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal22ab0dbc2c6619d5954111bba06f01db = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.index','data' => ['placement' => ($position === UserMenuPosition::Topbar) ? 'bottom-end' : 'top-end','teleport' => $position === UserMenuPosition::Topbar,'attributes' =>
|
||||
\Filament\Support\prepare_inherited_attributes($attributes)
|
||||
->class(['fi-user-menu'])
|
||||
]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::dropdown'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['placement' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(($position === UserMenuPosition::Topbar) ? 'bottom-end' : 'top-end'),'teleport' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($position === UserMenuPosition::Topbar),'attributes' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(
|
||||
\Filament\Support\prepare_inherited_attributes($attributes)
|
||||
->class(['fi-user-menu'])
|
||||
)]); ?>
|
||||
<?php $__env->slot('trigger', null, []); ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($position === UserMenuPosition::Topbar): ?>
|
||||
<button
|
||||
aria-label="<?php echo e(__('filament-panels::layout.actions.open_user_menu.label')); ?>"
|
||||
type="button"
|
||||
class="fi-user-menu-trigger"
|
||||
>
|
||||
<?php if (isset($component)) { $__componentOriginalceea4679a368984135244eacf4aafeca = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalceea4679a368984135244eacf4aafeca = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.avatar.user','data' => ['user' => $user,'loading' => 'lazy']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::avatar.user'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['user' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($user),'loading' => 'lazy']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalceea4679a368984135244eacf4aafeca)): ?>
|
||||
<?php $attributes = $__attributesOriginalceea4679a368984135244eacf4aafeca; ?>
|
||||
<?php unset($__attributesOriginalceea4679a368984135244eacf4aafeca); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalceea4679a368984135244eacf4aafeca)): ?>
|
||||
<?php $component = $__componentOriginalceea4679a368984135244eacf4aafeca; ?>
|
||||
<?php unset($__componentOriginalceea4679a368984135244eacf4aafeca); ?>
|
||||
<?php endif; ?>
|
||||
</button>
|
||||
<?php else: ?>
|
||||
<button
|
||||
aria-label="<?php echo e(__('filament-panels::layout.actions.open_user_menu.label')); ?>"
|
||||
type="button"
|
||||
class="fi-user-menu-trigger"
|
||||
>
|
||||
<?php if (isset($component)) { $__componentOriginalceea4679a368984135244eacf4aafeca = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalceea4679a368984135244eacf4aafeca = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.avatar.user','data' => ['user' => $user,'loading' => 'lazy']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::avatar.user'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['user' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($user),'loading' => 'lazy']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalceea4679a368984135244eacf4aafeca)): ?>
|
||||
<?php $attributes = $__attributesOriginalceea4679a368984135244eacf4aafeca; ?>
|
||||
<?php unset($__attributesOriginalceea4679a368984135244eacf4aafeca); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalceea4679a368984135244eacf4aafeca)): ?>
|
||||
<?php $component = $__componentOriginalceea4679a368984135244eacf4aafeca; ?>
|
||||
<?php unset($__componentOriginalceea4679a368984135244eacf4aafeca); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<span
|
||||
<?php if($isSidebarCollapsibleOnDesktop): ?>
|
||||
x-show="$store.sidebar.isOpen"
|
||||
<?php endif; ?>
|
||||
class="fi-user-menu-trigger-text"
|
||||
>
|
||||
<?php echo e(filament()->getUserName($user)); ?>
|
||||
|
||||
</span>
|
||||
|
||||
<?php echo e(\Filament\Support\generate_icon_html(\Filament\Support\Icons\Heroicon::ChevronUp, alias: \Filament\View\PanelsIconAlias::USER_MENU_TOGGLE_BUTTON, attributes: new \Illuminate\View\ComponentAttributeBag([
|
||||
'x-show' => $isSidebarCollapsibleOnDesktop ? '$store.sidebar.isOpen' : null,
|
||||
]))); ?>
|
||||
|
||||
</button>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php $__env->endSlot(); ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasProfileHeader): ?>
|
||||
<?php
|
||||
$item = $itemsBeforeThemeSwitcher['profile'];
|
||||
$itemColor = $item->getColor();
|
||||
$itemIcon = $item->getIcon();
|
||||
|
||||
unset($itemsBeforeThemeSwitcher['profile']);
|
||||
?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_PROFILE_BEFORE)); ?>
|
||||
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal7a83b62094aac4ed8d85f403cf23f250 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal7a83b62094aac4ed8d85f403cf23f250 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.header','data' => ['color' => $itemColor,'icon' => $itemIcon]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::dropdown.header'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemColor),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemIcon)]); ?>
|
||||
<?php echo e($item->getLabel()); ?>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal7a83b62094aac4ed8d85f403cf23f250)): ?>
|
||||
<?php $attributes = $__attributesOriginal7a83b62094aac4ed8d85f403cf23f250; ?>
|
||||
<?php unset($__attributesOriginal7a83b62094aac4ed8d85f403cf23f250); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal7a83b62094aac4ed8d85f403cf23f250)): ?>
|
||||
<?php $component = $__componentOriginal7a83b62094aac4ed8d85f403cf23f250; ?>
|
||||
<?php unset($__componentOriginal7a83b62094aac4ed8d85f403cf23f250); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_PROFILE_AFTER)); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($itemsBeforeThemeSwitcher->isNotEmpty()): ?>
|
||||
<?php if (isset($component)) { $__componentOriginal66687bf0670b9e16f61e667468dc8983 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal66687bf0670b9e16f61e667468dc8983 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.list.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::dropdown.list'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $itemsBeforeThemeSwitcher; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $key => $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($key === 'profile'): ?>
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_PROFILE_BEFORE)); ?>
|
||||
|
||||
|
||||
<?php echo e($item); ?>
|
||||
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_PROFILE_AFTER)); ?>
|
||||
|
||||
<?php else: ?>
|
||||
<?php echo e($item); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal66687bf0670b9e16f61e667468dc8983)): ?>
|
||||
<?php $attributes = $__attributesOriginal66687bf0670b9e16f61e667468dc8983; ?>
|
||||
<?php unset($__attributesOriginal66687bf0670b9e16f61e667468dc8983); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal66687bf0670b9e16f61e667468dc8983)): ?>
|
||||
<?php $component = $__componentOriginal66687bf0670b9e16f61e667468dc8983; ?>
|
||||
<?php unset($__componentOriginal66687bf0670b9e16f61e667468dc8983); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filament()->hasDarkMode() && (! filament()->hasDarkModeForced())): ?>
|
||||
<?php if (isset($component)) { $__componentOriginal66687bf0670b9e16f61e667468dc8983 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal66687bf0670b9e16f61e667468dc8983 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.list.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::dropdown.list'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php if (isset($component)) { $__componentOriginal388e1416f496c833c11c2ba7d86d1f07 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal388e1416f496c833c11c2ba7d86d1f07 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.theme-switcher.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::theme-switcher'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal388e1416f496c833c11c2ba7d86d1f07)): ?>
|
||||
<?php $attributes = $__attributesOriginal388e1416f496c833c11c2ba7d86d1f07; ?>
|
||||
<?php unset($__attributesOriginal388e1416f496c833c11c2ba7d86d1f07); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal388e1416f496c833c11c2ba7d86d1f07)): ?>
|
||||
<?php $component = $__componentOriginal388e1416f496c833c11c2ba7d86d1f07; ?>
|
||||
<?php unset($__componentOriginal388e1416f496c833c11c2ba7d86d1f07); ?>
|
||||
<?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal66687bf0670b9e16f61e667468dc8983)): ?>
|
||||
<?php $attributes = $__attributesOriginal66687bf0670b9e16f61e667468dc8983; ?>
|
||||
<?php unset($__attributesOriginal66687bf0670b9e16f61e667468dc8983); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal66687bf0670b9e16f61e667468dc8983)): ?>
|
||||
<?php $component = $__componentOriginal66687bf0670b9e16f61e667468dc8983; ?>
|
||||
<?php unset($__componentOriginal66687bf0670b9e16f61e667468dc8983); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($itemsAfterThemeSwitcher->isNotEmpty()): ?>
|
||||
<?php if (isset($component)) { $__componentOriginal66687bf0670b9e16f61e667468dc8983 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal66687bf0670b9e16f61e667468dc8983 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.list.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::dropdown.list'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $itemsAfterThemeSwitcher; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $key => $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($key === 'profile'): ?>
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_PROFILE_BEFORE)); ?>
|
||||
|
||||
|
||||
<?php echo e($item); ?>
|
||||
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_PROFILE_AFTER)); ?>
|
||||
|
||||
<?php else: ?>
|
||||
<?php echo e($item); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal66687bf0670b9e16f61e667468dc8983)): ?>
|
||||
<?php $attributes = $__attributesOriginal66687bf0670b9e16f61e667468dc8983; ?>
|
||||
<?php unset($__attributesOriginal66687bf0670b9e16f61e667468dc8983); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal66687bf0670b9e16f61e667468dc8983)): ?>
|
||||
<?php $component = $__componentOriginal66687bf0670b9e16f61e667468dc8983; ?>
|
||||
<?php unset($__componentOriginal66687bf0670b9e16f61e667468dc8983); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal22ab0dbc2c6619d5954111bba06f01db)): ?>
|
||||
<?php $attributes = $__attributesOriginal22ab0dbc2c6619d5954111bba06f01db; ?>
|
||||
<?php unset($__attributesOriginal22ab0dbc2c6619d5954111bba06f01db); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal22ab0dbc2c6619d5954111bba06f01db)): ?>
|
||||
<?php $component = $__componentOriginal22ab0dbc2c6619d5954111bba06f01db; ?>
|
||||
<?php unset($__componentOriginal22ab0dbc2c6619d5954111bba06f01db); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_AFTER)); ?>
|
||||
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/user-menu.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php if (isset($component)) { $__componentOriginalb525200bfa976483b4eaa0b7685c6e24 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalb525200bfa976483b4eaa0b7685c6e24 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-widgets::components.widget','data' => ['class' => 'fi-wi-table']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-widgets::widget'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'fi-wi-table']); ?>
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\Widgets\View\WidgetsRenderHook::TABLE_WIDGET_START, scopes: static::class)); ?>
|
||||
|
||||
|
||||
<?php echo e($this->table); ?>
|
||||
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\Widgets\View\WidgetsRenderHook::TABLE_WIDGET_END, scopes: static::class)); ?>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalb525200bfa976483b4eaa0b7685c6e24)): ?>
|
||||
<?php $attributes = $__attributesOriginalb525200bfa976483b4eaa0b7685c6e24; ?>
|
||||
<?php unset($__attributesOriginalb525200bfa976483b4eaa0b7685c6e24); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalb525200bfa976483b4eaa0b7685c6e24)): ?>
|
||||
<?php $component = $__componentOriginalb525200bfa976483b4eaa0b7685c6e24; ?>
|
||||
<?php unset($__componentOriginalb525200bfa976483b4eaa0b7685c6e24); ?>
|
||||
<?php endif; ?>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/widgets/resources/views/table-widget.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,793 @@
|
||||
<?php $__env->startSection('title', 'Request Custom Design - Additional Design'); ?>
|
||||
|
||||
<?php $__env->startSection('styles'); ?>
|
||||
<style>
|
||||
.page-intro {
|
||||
margin-bottom: var(--spacing-lg);
|
||||
}
|
||||
|
||||
.page-intro h1 {
|
||||
font-family: 'Abril Fatface', cursive;
|
||||
font-size: 2.5rem;
|
||||
color: var(--text-primary);
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.page-intro p {
|
||||
color: var(--text-secondary);
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.form-card {
|
||||
margin-bottom: var(--spacing-lg);
|
||||
max-width: 700px;
|
||||
}
|
||||
|
||||
.form-section h2 {
|
||||
font-family: 'Abril Fatface', cursive;
|
||||
font-size: 1.6rem;
|
||||
color: var(--text-primary);
|
||||
/* margin-bottom: var(--spacing-md); */
|
||||
}
|
||||
|
||||
.form-section {
|
||||
/* margin-bottom: var(--spacing-lg); */
|
||||
}
|
||||
|
||||
.form-section:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
margin-bottom: var(--spacing-md);
|
||||
}
|
||||
|
||||
.form-group label {
|
||||
display: block;
|
||||
font-weight: 600;
|
||||
color: var(--text-primary);
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.form-group-hint {
|
||||
font-size: 0.9rem;
|
||||
color: var(--text-secondary);
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
|
||||
.form-row {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: var(--spacing-sm);
|
||||
}
|
||||
|
||||
.form-row.full {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.form-group input,
|
||||
.form-group textarea,
|
||||
.form-group select {
|
||||
width: 100%;
|
||||
padding: 0.75rem;
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 4px;
|
||||
font-size: 1rem;
|
||||
font-family: inherit;
|
||||
background-color: white;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.form-group input:focus,
|
||||
.form-group textarea:focus,
|
||||
.form-group select:focus {
|
||||
outline: none;
|
||||
border-color: var(--accent-dark);
|
||||
box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.form-group textarea {
|
||||
resize: vertical;
|
||||
min-height: 120px;
|
||||
}
|
||||
|
||||
.upload-area {
|
||||
border: 2px dashed var(--border-color);
|
||||
border-radius: 8px;
|
||||
padding: var(--spacing-lg);
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
transition: var(--transition);
|
||||
background-color: var(--bg-primary);
|
||||
}
|
||||
|
||||
.upload-area:hover {
|
||||
border-color: var(--accent-dark);
|
||||
background-color: var(--bg-secondary);
|
||||
}
|
||||
|
||||
.upload-area svg {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
color: var(--text-secondary);
|
||||
margin: 0 auto var(--spacing-sm);
|
||||
}
|
||||
|
||||
.upload-area p {
|
||||
margin: 0.25rem 0;
|
||||
}
|
||||
|
||||
.upload-area .hint {
|
||||
font-size: 0.85rem;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
|
||||
.file-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.75rem;
|
||||
padding: 0.75rem;
|
||||
background-color: var(--bg-secondary);
|
||||
border-radius: 4px;
|
||||
margin-top: 0.5rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.file-item svg {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
color: var(--accent-dark);
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.checkbox-group {
|
||||
padding: var(--spacing-md);
|
||||
background-color: var(--bg-secondary);
|
||||
border-radius: 20px;
|
||||
margin-bottom: var(--spacing-md);
|
||||
}
|
||||
|
||||
.checkbox-option {
|
||||
display: flex;
|
||||
gap: var(--spacing-md);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.checkbox-option input[type="checkbox"] {
|
||||
margin-top: 2px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.checkbox-content p {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.button-group {
|
||||
display: flex;
|
||||
gap: var(--spacing-md);
|
||||
margin-top: var(--spacing-lg);
|
||||
}
|
||||
|
||||
.button-group .btn {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.btn-cancel {
|
||||
background-color: var(--bg-secondary) !important;
|
||||
color: var(--text-primary) !important;
|
||||
border: 1px solid var(--border-color) !important;
|
||||
}
|
||||
|
||||
.btn-cancel:hover {
|
||||
background-color: var(--border-color) !important;
|
||||
color: var(--text-primary) !important;
|
||||
}
|
||||
|
||||
.error-message {
|
||||
color: #c53030;
|
||||
font-size: 0.9rem;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
.info-box {
|
||||
margin-bottom: var(--spacing-lg);
|
||||
}
|
||||
|
||||
.info-box h3 {
|
||||
font-family: var(--font-sans);
|
||||
font-size: 1.2rem;
|
||||
font-weight: 600;
|
||||
color: var(--text-primary);
|
||||
margin-bottom: var(--spacing-md);
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.info-box ul {
|
||||
list-style-position: inside;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.info-box li {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.form-wrapper {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 450px;
|
||||
gap: var(--spacing-lg);
|
||||
margin-bottom: var(--spacing-lg);
|
||||
}
|
||||
.cost-summary {
|
||||
height: fit-content;
|
||||
position: sticky;
|
||||
top: 120px;
|
||||
}
|
||||
.cost-summary-content {
|
||||
margin-bottom: var(--spacing-md);
|
||||
}
|
||||
|
||||
.cost-summary-content h3 {
|
||||
font-family: 'Abril Fatface', cursive;
|
||||
font-size: 1.3rem;
|
||||
color: var(--text-primary);
|
||||
margin-bottom: var(--spacing-md);
|
||||
}
|
||||
|
||||
.cost-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: var(--spacing-sm) 0;
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
.cost-item.total {
|
||||
font-weight: 700;
|
||||
font-size: 1.1rem;
|
||||
border-top: 2px solid var(--accent-dark);
|
||||
border-bottom: none;
|
||||
margin-top: var(--spacing-md);
|
||||
padding-top: var(--spacing-md);
|
||||
color: var(--accent-dark);
|
||||
}
|
||||
|
||||
.cost-label {
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
|
||||
.cost-value {
|
||||
font-weight: 600;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.cost-item.total .cost-value {
|
||||
color: var(--accent-dark);
|
||||
}
|
||||
|
||||
.design-fee-note {
|
||||
font-size: 0.85rem;
|
||||
color: var(--text-secondary);
|
||||
margin-top: var(--spacing-md);
|
||||
padding-top: var(--spacing-md);
|
||||
border-top: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
.cost-item.disabled {
|
||||
opacity: 0.5;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
|
||||
.cost-item.discount {
|
||||
color: var(--accent-pink);
|
||||
}
|
||||
|
||||
.cost-item.discount .cost-value {
|
||||
color: var(--accent-pink);
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.form-wrapper {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.cost-summary-content {
|
||||
position: static;
|
||||
}
|
||||
|
||||
.form-card {
|
||||
padding: var(--spacing-md);
|
||||
}
|
||||
|
||||
.form-row {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.button-group {
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<?php $__env->stopSection(); ?>
|
||||
|
||||
<?php $__env->startSection('content'); ?>
|
||||
<div class="container" style="padding:20px;">
|
||||
<div class="page-intro">
|
||||
<h1>Request Custom Design</h1>
|
||||
<p>Create a custom wallpaper, mural, or fabric design tailored to your needs</p>
|
||||
</div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($errors->any()): ?>
|
||||
<div style="background-color: #f8d7da; border: 1px solid var(--border-color); color: var(--text-primary); padding: var(--spacing-md); border-radius: 8px; margin-bottom: var(--spacing-lg);">
|
||||
<h4 style="margin-top: 0;">Please correct the following errors:</h4>
|
||||
<ul>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $errors->all(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $error): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<li><?php echo e($error); ?></li>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(session('success')): ?>
|
||||
<div style="background-color: var(--accent-light); border: 1px solid var(--border-color); color: var(--text-primary); padding: var(--spacing-md); border-radius: 8px; margin-bottom: var(--spacing-lg);">
|
||||
✓ <?php echo e(session('success')); ?>
|
||||
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<!-- Info Box -->
|
||||
<div class="info-box card--pink">
|
||||
<h2>How It Works</h2>
|
||||
<ul>
|
||||
<li>Submit your custom order with design specifications and reference images</li>
|
||||
<li>Pay a 20% non-refundable deposit to commence design work</li>
|
||||
<li>Our team creates your design and prepares proofs for review</li>
|
||||
<li>Pay the remaining 80% balance to proceed with printing and shipping</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Form -->
|
||||
<div class="form-wrapper">
|
||||
<form action="<?php echo e(route('custom-orders.store')); ?>" method="POST" enctype="multipart/form-data" id="custom-order-form" class="form-card card" data-action="<?php echo e(route('custom-orders.store')); ?>">
|
||||
<?php echo csrf_field(); ?>
|
||||
|
||||
<!-- Order Type & Dimensions -->
|
||||
<div class="form-section">
|
||||
<h2>Order Details</h2>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="type">Order Type *</label>
|
||||
<select id="type" name="type" required>
|
||||
<option value="">-- Select a type --</option>
|
||||
<option value="wallpaper" <?php echo e(old('type') == 'wallpaper' ? 'selected' : ''); ?>>Wallpaper (tileable pattern)</option>
|
||||
<option value="mural" <?php echo e(old('type') == 'mural' ? 'selected' : ''); ?>>Mural (large format)</option>
|
||||
<option value="fabric" <?php echo e(old('type') == 'fabric' ? 'selected' : ''); ?>>Fabric (linear meter)</option>
|
||||
</select>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['type'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?>
|
||||
<p class="error-message"><?php echo e($message); ?></p>
|
||||
<?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label for="width">Width (meters) *</label>
|
||||
<input type="number" id="width" name="width" step="0.01" min="0.1" value="<?php echo e(old('width')); ?>" required>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['width'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?>
|
||||
<p class="error-message"><?php echo e($message); ?></p>
|
||||
<?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="height">Height (meters) *</label>
|
||||
<input type="number" id="height" name="height" step="0.01" min="0.1" value="<?php echo e(old('height')); ?>" required>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['height'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?>
|
||||
<p class="error-message"><?php echo e($message); ?></p>
|
||||
<?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label for="quantity">Quantity *</label>
|
||||
<input type="number" id="quantity" name="quantity" value="<?php echo e(old('quantity', 1)); ?>" min="1" required>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['quantity'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?>
|
||||
<p class="error-message"><?php echo e($message); ?></p>
|
||||
<?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="print_stock_id">Print Material *</label>
|
||||
<select id="print_stock_id" name="print_stock_id" required>
|
||||
<option value="">-- Select material --</option>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $printStocks; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $stock): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<option value="<?php echo e($stock->id); ?>" <?php echo e(old('print_stock_id') == $stock->id ? 'selected' : ''); ?>>
|
||||
<?php echo e($stock->name); ?> (<?php echo e($stock->cost_per_meter ? 'R' . number_format($stock->cost_per_meter, 2) . '/m' : 'R' . number_format($stock->cost_per_m2, 2) . '/m²'); ?>)
|
||||
</option>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</select>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['print_stock_id'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?>
|
||||
<p class="error-message"><?php echo e($message); ?></p>
|
||||
<?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Design Brief -->
|
||||
<div class="form-section">
|
||||
<h2>Design Brief</h2>
|
||||
|
||||
<div class="form-group form-row full">
|
||||
<label for="customer_brief">Design Brief (minimum 50 characters) *</label>
|
||||
<p class="form-group-hint">Tell us about your design concept, colors, style, and any specific requirements</p>
|
||||
<textarea id="customer_brief" name="customer_brief" placeholder="Describe your custom design vision..." minlength="50" required><?php echo e(old('customer_brief')); ?></textarea>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['customer_brief'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?>
|
||||
<p class="error-message"><?php echo e($message); ?></p>
|
||||
<?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-row full">
|
||||
<label for="special_instructions">Special Instructions (optional)</label>
|
||||
<textarea id="special_instructions" name="special_instructions" placeholder="Any additional notes or requirements..."><?php echo e(old('special_instructions')); ?></textarea>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['special_instructions'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?>
|
||||
<p class="error-message"><?php echo e($message); ?></p>
|
||||
<?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Reference Images -->
|
||||
<div class="form-section">
|
||||
<h2>Reference Images</h2>
|
||||
|
||||
<div class="form-group form-row full">
|
||||
<label>Upload Reference Images</label>
|
||||
<p class="form-group-hint">Upload inspiration images, mood boards, or reference materials for your design</p>
|
||||
<div class="upload-area" onclick="document.getElementById('reference-images').click()">
|
||||
<input type="file" id="reference-images" name="reference_images[]" multiple accept="image/*" style="display: none;">
|
||||
<svg fill="none" stroke="currentColor" viewBox="0 0 48 48">
|
||||
<path d="M28 8H12a4 4 0 00-4 4v20m32-12v8a4 4 0 01-4 4H12a4 4 0 01-4-4v-4m32-12l-3.172-3.172a4 4 0 00-5.656 0L28 12M12 32l3.172-3.172a4 4 0 015.656 0L32 32" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||
</svg>
|
||||
<p style="margin: 0;">Click to upload or drag and drop</p>
|
||||
<p class="hint">PNG, JPG, GIF, WebP up to 5MB</p>
|
||||
</div>
|
||||
<div id="file-list"></div>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__errorArgs = ['reference_images.*'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?>
|
||||
<p class="error-message"><?php echo e($message); ?></p>
|
||||
<?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Library Agreement -->
|
||||
<div class="form-section">
|
||||
<h2>Design Library</h2>
|
||||
|
||||
<div class="checkbox-group">
|
||||
<label class="checkbox-option">
|
||||
<input type="checkbox" name="library_discount" value="1" <?php echo e(old('library_discount') ? 'checked' : ''); ?>>
|
||||
<div class="checkbox-content">
|
||||
<p style="font-weight: 600; margin-bottom: 0.25rem;">Allow us to use your design in our library</p>
|
||||
<p>If you agree, we'll apply a <strong>20% discount to the design fee</strong>. This means we may offer similar designs to other customers in the future.</p>
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Submit Buttons -->
|
||||
<div class="button-group">
|
||||
<button type="submit" class="btn">Submit Order</button>
|
||||
<a href="<?php echo e(route('my-orders')); ?>" class="btn btn-cancel">Cancel</a>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- Cost Summary Sidebar -->
|
||||
<div class="cost-summary">
|
||||
<div class="cost-summary-content card">
|
||||
<h3>Cost Summary</h3>
|
||||
|
||||
<div class="cost-item disabled" id="material-cost-item">
|
||||
<span class="cost-label">Material Cost</span>
|
||||
<span class="cost-value">-</span>
|
||||
</div>
|
||||
|
||||
<div class="cost-item disabled" id="design-fee-item">
|
||||
<span class="cost-label">Design Fee</span>
|
||||
<span class="cost-value">-</span>
|
||||
</div>
|
||||
|
||||
<div class="cost-item disabled" id="discount-item" style="display: none;">
|
||||
<span class="cost-label">Library Discount</span>
|
||||
<span class="cost-value">-</span>
|
||||
</div>
|
||||
|
||||
<div class="cost-item total">
|
||||
<span>Deposit Required (20%)</span>
|
||||
<span class="cost-value" id="deposit-amount">R0.00</span>
|
||||
</div>
|
||||
|
||||
<div class="design-fee-note">
|
||||
<strong>Note:</strong> 20% non-refundable deposit covers design work. Pay the remaining 80% after proof approval.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card" style="padding: 1.5rem; margin-bottom: 1rem; background: var(--accent-light);">
|
||||
<p style="margin: 0 0 0.5rem 0; color: black;">Estimated Total:</p>
|
||||
<div style="font-family: 'Abril Fatface', cursive; font-size: 3rem; font-weight: 400; color: white;">R<span id="total-cost">0.00</span></div>
|
||||
<small style="color: #fff; display: block; margin-top: 0.5rem;">incl. VAT</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Total Cost Display -->
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
console.log('=== CUSTOM ORDER FORM DEBUG ===');
|
||||
|
||||
const form = document.getElementById('custom-order-form');
|
||||
console.log('Form element:', form);
|
||||
console.log('Form action:', form.action);
|
||||
console.log('Form method:', form.method);
|
||||
console.log('Form enctype:', form.enctype);
|
||||
console.log('Form ID:', form.id);
|
||||
console.log('Form classes:', form.className);
|
||||
|
||||
if (!form) {
|
||||
console.error('FORM NOT FOUND!');
|
||||
return;
|
||||
}
|
||||
|
||||
// ===== COST CALCULATION =====
|
||||
const DESIGN_FEE = 500; // Base design fee in Rands
|
||||
const DISCOUNT_PERCENTAGE = 0.20; // 20% discount for library usage
|
||||
|
||||
// Get form inputs
|
||||
const typeSelect = document.getElementById('type');
|
||||
const widthInput = document.getElementById('width');
|
||||
const heightInput = document.getElementById('height');
|
||||
const quantityInput = document.getElementById('quantity');
|
||||
const stockSelect = document.getElementById('print_stock_id');
|
||||
const libraryCheckbox = document.querySelector('input[name="library_discount"]');
|
||||
|
||||
// Get summary elements
|
||||
const materialCostItem = document.getElementById('material-cost-item');
|
||||
const designFeeItem = document.getElementById('design-fee-item');
|
||||
const discountItem = document.getElementById('discount-item');
|
||||
const depositAmount = document.getElementById('deposit-amount');
|
||||
|
||||
// Store print stocks data
|
||||
const printStocksData = {};
|
||||
<?php $__currentLoopData = $printStocks; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $stock): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
printStocksData[<?php echo e($stock->id); ?>] = {
|
||||
name: '<?php echo e($stock->name); ?>',
|
||||
width: <?php echo e($stock->width ?? 0.53); ?>,
|
||||
costPerMeter: <?php echo e($stock->cost_per_meter ?? 0); ?>,
|
||||
costPerM2: <?php echo e($stock->cost_per_m2 ?? 0); ?>
|
||||
|
||||
};
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
|
||||
function calculateCosts() {
|
||||
const type = typeSelect.value;
|
||||
const width = parseFloat(widthInput.value) || 0;
|
||||
const height = parseFloat(heightInput.value) || 0;
|
||||
const quantity = parseFloat(quantityInput.value) || 1;
|
||||
const stockId = stockSelect.value;
|
||||
const hasLibraryDiscount = libraryCheckbox?.checked || false;
|
||||
|
||||
if (!type || !stockId || width <= 0 || height <= 0) {
|
||||
// Show disabled state
|
||||
materialCostItem.classList.add('disabled');
|
||||
designFeeItem.classList.add('disabled');
|
||||
discountItem.style.display = 'none';
|
||||
depositAmount.textContent = 'R0.00';
|
||||
document.getElementById('total-cost').textContent = '0.00';
|
||||
document.getElementById('cost-breakdown').textContent = '';
|
||||
return;
|
||||
}
|
||||
|
||||
const stock = printStocksData[stockId];
|
||||
if (!stock) return;
|
||||
|
||||
// Calculate material cost based on type
|
||||
let materialCost = 0;
|
||||
let breakdown = '';
|
||||
|
||||
if (type === 'wallpaper') {
|
||||
// Wallpaper: Takes into account stock width
|
||||
// Calculate number of vertical strips needed: ceil(wall_height / stock_width)
|
||||
// Calculate total length: number_of_strips × wall_width
|
||||
// Cost = total_length × cost_per_meter × quantity
|
||||
const stockWidth = stock.width || 0.53; // Default to standard wallpaper width if not specified
|
||||
const stripsNeeded = Math.ceil(height / stockWidth);
|
||||
const totalLength = stripsNeeded * width;
|
||||
materialCost = totalLength * stock.costPerMeter * quantity;
|
||||
breakdown = `Stock: R${stock.costPerMeter.toFixed(2)}/m × ${totalLength.toFixed(2)}m`;
|
||||
} else if (type === 'mural') {
|
||||
// Mural: width × height in m²
|
||||
// Cost = cost_per_m2 × (width × height) × quantity
|
||||
const area = width * height;
|
||||
materialCost = area * stock.costPerM2 * quantity;
|
||||
breakdown = `Stock: R${stock.costPerM2.toFixed(2)}/m² × ${area.toFixed(2)}m²`;
|
||||
} else if (type === 'fabric') {
|
||||
// Fabric: width input = length in linear meters
|
||||
// Cost = cost_per_meter × length × quantity
|
||||
materialCost = width * stock.costPerMeter * quantity;
|
||||
breakdown = `Stock: R${stock.costPerMeter.toFixed(2)}/m × ${width.toFixed(2)}m`;
|
||||
}
|
||||
|
||||
// Calculate design fee
|
||||
let designFee = DESIGN_FEE;
|
||||
let discount = 0;
|
||||
|
||||
if (hasLibraryDiscount) {
|
||||
discount = designFee * DISCOUNT_PERCENTAGE;
|
||||
designFee -= discount;
|
||||
}
|
||||
|
||||
// Total cost
|
||||
const totalCost = materialCost + designFee;
|
||||
const depositRequired = totalCost * 0.20; // 20% deposit
|
||||
const remainingBalance = totalCost * 0.80; // 80% remaining
|
||||
|
||||
// Update UI
|
||||
materialCostItem.classList.remove('disabled');
|
||||
materialCostItem.innerHTML = `<span class="cost-label">Material Cost</span><span class="cost-value">R${materialCost.toFixed(2)}</span>`;
|
||||
|
||||
designFeeItem.classList.remove('disabled');
|
||||
designFeeItem.innerHTML = `<span class="cost-label">Design Fee</span><span class="cost-value">R${designFee.toFixed(2)}</span>`;
|
||||
|
||||
if (hasLibraryDiscount && discount > 0) {
|
||||
discountItem.style.display = 'flex';
|
||||
discountItem.classList.add('discount');
|
||||
discountItem.innerHTML = `<span class="cost-label">Library Discount (20%)</span><span class="cost-value">-R${discount.toFixed(2)}</span>`;
|
||||
} else {
|
||||
discountItem.style.display = 'none';
|
||||
}
|
||||
|
||||
depositAmount.textContent = `R${depositRequired.toFixed(2)}`;
|
||||
document.getElementById('total-cost').textContent = `${totalCost.toFixed(2)}`;
|
||||
document.getElementById('cost-breakdown').textContent = breakdown;
|
||||
}
|
||||
|
||||
// Add event listeners for cost calculation
|
||||
if (typeSelect) typeSelect.addEventListener('change', calculateCosts);
|
||||
if (widthInput) widthInput.addEventListener('input', calculateCosts);
|
||||
if (heightInput) heightInput.addEventListener('input', calculateCosts);
|
||||
if (quantityInput) quantityInput.addEventListener('input', calculateCosts);
|
||||
if (stockSelect) stockSelect.addEventListener('change', calculateCosts);
|
||||
if (libraryCheckbox) libraryCheckbox.addEventListener('change', calculateCosts);
|
||||
|
||||
// Update field labels based on type
|
||||
function updateFieldLabels() {
|
||||
const type = typeSelect.value;
|
||||
const widthLabel = document.querySelector('label[for="width"]');
|
||||
const heightLabel = document.querySelector('label[for="height"]');
|
||||
const heightGroup = heightInput?.parentElement;
|
||||
|
||||
if (type === 'wallpaper') {
|
||||
if (widthLabel) widthLabel.innerHTML = 'Wall Width (meters) *';
|
||||
if (heightLabel) heightLabel.innerHTML = 'Wall Height (meters) *<br><small style="font-weight: normal; color: var(--text-secondary); display: block; margin-top: 0.25rem;">The system will calculate strips needed based on stock width</small>';
|
||||
if (heightGroup) heightGroup.style.display = 'block';
|
||||
} else if (type === 'mural') {
|
||||
if (widthLabel) widthLabel.textContent = 'Width (meters) *';
|
||||
if (heightGroup) heightGroup.style.display = 'block';
|
||||
if (heightLabel) heightLabel.textContent = 'Height (meters) *';
|
||||
} else if (type === 'fabric') {
|
||||
if (widthLabel) widthLabel.textContent = 'Length (meters) *';
|
||||
if (heightGroup) heightGroup.style.display = 'none';
|
||||
}
|
||||
}
|
||||
|
||||
if (typeSelect) {
|
||||
typeSelect.addEventListener('change', updateFieldLabels);
|
||||
}
|
||||
|
||||
// Initial label update
|
||||
updateFieldLabels();
|
||||
|
||||
// Initial calculation
|
||||
calculateCosts();
|
||||
|
||||
// Handle reference image uploads
|
||||
const referenceImagesInput = document.getElementById('reference-images');
|
||||
if (referenceImagesInput) {
|
||||
referenceImagesInput.addEventListener('change', function() {
|
||||
const fileList = document.getElementById('file-list');
|
||||
if (fileList) {
|
||||
fileList.innerHTML = '';
|
||||
|
||||
for (let file of this.files) {
|
||||
const item = document.createElement('div');
|
||||
item.className = 'file-item';
|
||||
item.innerHTML = `<svg fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4z" clip-rule="evenodd"/></svg><span>${file.name}</span>`;
|
||||
fileList.appendChild(item);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Find the submit button and log when it's clicked
|
||||
const submitBtn = form.querySelector('button[type="submit"]');
|
||||
if (submitBtn) {
|
||||
console.log('Submit button found:', submitBtn);
|
||||
submitBtn.addEventListener('click', function(e) {
|
||||
console.log('===== SUBMIT BUTTON CLICKED =====');
|
||||
console.log('Event:', e);
|
||||
console.log('Form will submit to:', form.action);
|
||||
});
|
||||
}
|
||||
|
||||
// Handle form submission - FORCE IT TO SUBMIT
|
||||
form.addEventListener('submit', function(e) {
|
||||
console.log('===== FORM SUBMIT EVENT FIRED =====');
|
||||
console.log('Event type:', e.type);
|
||||
console.log('Event defaultPrevented:', e.defaultPrevented);
|
||||
console.log('Action:', form.action);
|
||||
console.log('Method:', form.method);
|
||||
console.log('About to submit to:', form.action);
|
||||
console.log('Checking if global script should skip this form...');
|
||||
console.log('Form action includes /custom-orders:', form.action.includes('/custom-orders'));
|
||||
// Don't prevent - let it submit naturally
|
||||
});
|
||||
|
||||
console.log('Event listeners attached successfully');
|
||||
});
|
||||
</script>
|
||||
<?php $__env->stopSection(); ?>
|
||||
<?php echo $__env->make('layouts.app', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?><?php /**PATH /var/www/additional_design/resources/views/custom-orders/create.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,517 @@
|
||||
<div class="fi-topbar-ctn">
|
||||
<?php
|
||||
$isRtl = __('filament-panels::layout.direction') === 'rtl';
|
||||
$isSidebarCollapsibleOnDesktop = filament()->isSidebarCollapsibleOnDesktop();
|
||||
$isSidebarFullyCollapsibleOnDesktop = filament()->isSidebarFullyCollapsibleOnDesktop();
|
||||
$hasTopNavigation = filament()->hasTopNavigation();
|
||||
$hasNavigation = filament()->hasNavigation();
|
||||
$hasTenancy = filament()->hasTenancy();
|
||||
?>
|
||||
|
||||
<nav class="fi-topbar">
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::TOPBAR_START)); ?>
|
||||
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasNavigation): ?>
|
||||
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => \Filament\Support\Icons\Heroicon::OutlinedBars3,'iconAlias' => \Filament\View\PanelsIconAlias::TOPBAR_OPEN_SIDEBAR_BUTTON,'iconSize' => 'lg','label' => __('filament-panels::layout.actions.sidebar.expand.label'),'xCloak' => true,'xData' => '{}','xOn:click' => '$store.sidebar.open()','xShow' => '! $store.sidebar.isOpen','class' => 'fi-topbar-open-sidebar-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::icon-button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::OutlinedBars3),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\View\PanelsIconAlias::TOPBAR_OPEN_SIDEBAR_BUTTON),'icon-size' => 'lg','label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('filament-panels::layout.actions.sidebar.expand.label')),'x-cloak' => true,'x-data' => '{}','x-on:click' => '$store.sidebar.open()','x-show' => '! $store.sidebar.isOpen','class' => 'fi-topbar-open-sidebar-btn']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => \Filament\Support\Icons\Heroicon::OutlinedXMark,'iconAlias' => \Filament\View\PanelsIconAlias::TOPBAR_CLOSE_SIDEBAR_BUTTON,'iconSize' => 'lg','label' => __('filament-panels::layout.actions.sidebar.collapse.label'),'xCloak' => true,'xData' => '{}','xOn:click' => '$store.sidebar.close()','xShow' => '$store.sidebar.isOpen','class' => 'fi-topbar-close-sidebar-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::icon-button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::OutlinedXMark),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\View\PanelsIconAlias::TOPBAR_CLOSE_SIDEBAR_BUTTON),'icon-size' => 'lg','label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('filament-panels::layout.actions.sidebar.collapse.label')),'x-cloak' => true,'x-data' => '{}','x-on:click' => '$store.sidebar.close()','x-show' => '$store.sidebar.isOpen','class' => 'fi-topbar-close-sidebar-btn']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<div class="fi-topbar-start">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop): ?>
|
||||
<div
|
||||
x-show="$store.sidebar.isOpen || <?php echo \Illuminate\Support\Js::from($isSidebarCollapsibleOnDesktop)->toHtml() ?>"
|
||||
class="fi-topbar-collapse-sidebar-btn-ctn"
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($isSidebarCollapsibleOnDesktop): ?>
|
||||
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => $isRtl ? \Filament\Support\Icons\Heroicon::OutlinedChevronLeft : \Filament\Support\Icons\Heroicon::OutlinedChevronRight,'iconAlias' =>
|
||||
$isRtl
|
||||
? [
|
||||
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON_RTL,
|
||||
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON,
|
||||
]
|
||||
: \Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON
|
||||
,'iconSize' => 'lg','label' => __('filament-panels::layout.actions.sidebar.expand.label'),'xCloak' => true,'xData' => '{}','xOn:click' => '$store.sidebar.open()','xShow' => '! $store.sidebar.isOpen','class' => 'fi-topbar-open-collapse-sidebar-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::icon-button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isRtl ? \Filament\Support\Icons\Heroicon::OutlinedChevronLeft : \Filament\Support\Icons\Heroicon::OutlinedChevronRight),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(
|
||||
$isRtl
|
||||
? [
|
||||
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON_RTL,
|
||||
\Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON,
|
||||
]
|
||||
: \Filament\View\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON
|
||||
),'icon-size' => 'lg','label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('filament-panels::layout.actions.sidebar.expand.label')),'x-cloak' => true,'x-data' => '{}','x-on:click' => '$store.sidebar.open()','x-show' => '! $store.sidebar.isOpen','class' => 'fi-topbar-open-collapse-sidebar-btn']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop): ?>
|
||||
<?php if (isset($component)) { $__componentOriginalf0029cce6d19fd6d472097ff06a800a1 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon-button','data' => ['color' => 'gray','icon' => $isRtl ? \Filament\Support\Icons\Heroicon::OutlinedChevronRight : \Filament\Support\Icons\Heroicon::OutlinedChevronLeft,'iconAlias' =>
|
||||
$isRtl
|
||||
? [
|
||||
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON_RTL,
|
||||
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON,
|
||||
]
|
||||
: \Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON
|
||||
,'iconSize' => 'lg','label' => __('filament-panels::layout.actions.sidebar.collapse.label'),'xCloak' => true,'xData' => '{}','xOn:click' => '$store.sidebar.close()','xShow' => '$store.sidebar.isOpen','class' => 'fi-topbar-close-collapse-sidebar-btn']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::icon-button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isRtl ? \Filament\Support\Icons\Heroicon::OutlinedChevronRight : \Filament\Support\Icons\Heroicon::OutlinedChevronLeft),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(
|
||||
$isRtl
|
||||
? [
|
||||
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON_RTL,
|
||||
\Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON,
|
||||
]
|
||||
: \Filament\View\PanelsIconAlias::SIDEBAR_COLLAPSE_BUTTON
|
||||
),'icon-size' => 'lg','label' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('filament-panels::layout.actions.sidebar.collapse.label')),'x-cloak' => true,'x-data' => '{}','x-on:click' => '$store.sidebar.close()','x-show' => '$store.sidebar.isOpen','class' => 'fi-topbar-close-collapse-sidebar-btn']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $attributes = $__attributesOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__attributesOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1)): ?>
|
||||
<?php $component = $__componentOriginalf0029cce6d19fd6d472097ff06a800a1; ?>
|
||||
<?php unset($__componentOriginalf0029cce6d19fd6d472097ff06a800a1); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::TOPBAR_LOGO_BEFORE)); ?>
|
||||
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($homeUrl = filament()->getHomeUrl()): ?>
|
||||
<a <?php echo e(\Filament\Support\generate_href_html($homeUrl)); ?>>
|
||||
<?php if (isset($component)) { $__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.logo','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::logo'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94)): ?>
|
||||
<?php $attributes = $__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94; ?>
|
||||
<?php unset($__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94)): ?>
|
||||
<?php $component = $__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94; ?>
|
||||
<?php unset($__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94); ?>
|
||||
<?php endif; ?>
|
||||
</a>
|
||||
<?php else: ?>
|
||||
<?php if (isset($component)) { $__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.logo','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::logo'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94)): ?>
|
||||
<?php $attributes = $__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94; ?>
|
||||
<?php unset($__attributesOriginalb501e8c73315a10eb0eb5fd14fda0d94); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94)): ?>
|
||||
<?php $component = $__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94; ?>
|
||||
<?php unset($__componentOriginalb501e8c73315a10eb0eb5fd14fda0d94); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::TOPBAR_LOGO_AFTER)); ?>
|
||||
|
||||
</div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasTopNavigation || (! $hasNavigation)): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasTenancy && filament()->hasTenantMenu()): ?>
|
||||
<?php if (isset($component)) { $__componentOriginal32b9f4abfc80490155cb7c5dfaf8790d = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal32b9f4abfc80490155cb7c5dfaf8790d = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.tenant-menu','data' => ['teleport' => true]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::tenant-menu'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['teleport' => true]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal32b9f4abfc80490155cb7c5dfaf8790d)): ?>
|
||||
<?php $attributes = $__attributesOriginal32b9f4abfc80490155cb7c5dfaf8790d; ?>
|
||||
<?php unset($__attributesOriginal32b9f4abfc80490155cb7c5dfaf8790d); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal32b9f4abfc80490155cb7c5dfaf8790d)): ?>
|
||||
<?php $component = $__componentOriginal32b9f4abfc80490155cb7c5dfaf8790d; ?>
|
||||
<?php unset($__componentOriginal32b9f4abfc80490155cb7c5dfaf8790d); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasNavigation): ?>
|
||||
<?php
|
||||
$navigation = filament()->getNavigation();
|
||||
?>
|
||||
|
||||
<ul class="fi-topbar-nav-groups">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $navigation; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $group): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php
|
||||
$groupLabel = $group->getLabel();
|
||||
$groupExtraTopbarAttributeBag = $group->getExtraTopbarAttributeBag();
|
||||
$isGroupActive = $group->isActive();
|
||||
$groupIcon = $group->getIcon();
|
||||
?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($groupLabel): ?>
|
||||
<?php if (isset($component)) { $__componentOriginal22ab0dbc2c6619d5954111bba06f01db = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal22ab0dbc2c6619d5954111bba06f01db = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.index','data' => ['placement' => 'bottom-start','teleport' => true,'attributes' => \Filament\Support\prepare_inherited_attributes($groupExtraTopbarAttributeBag)]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::dropdown'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['placement' => 'bottom-start','teleport' => true,'attributes' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\prepare_inherited_attributes($groupExtraTopbarAttributeBag))]); ?>
|
||||
<?php $__env->slot('trigger', null, []); ?>
|
||||
<?php if (isset($component)) { $__componentOriginal42035aa49c877d648231e14ff76681c7 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal42035aa49c877d648231e14ff76681c7 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.topbar.item','data' => ['active' => $isGroupActive,'icon' => $groupIcon]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::topbar.item'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isGroupActive),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($groupIcon)]); ?>
|
||||
<?php echo e($groupLabel); ?>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal42035aa49c877d648231e14ff76681c7)): ?>
|
||||
<?php $attributes = $__attributesOriginal42035aa49c877d648231e14ff76681c7; ?>
|
||||
<?php unset($__attributesOriginal42035aa49c877d648231e14ff76681c7); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal42035aa49c877d648231e14ff76681c7)): ?>
|
||||
<?php $component = $__componentOriginal42035aa49c877d648231e14ff76681c7; ?>
|
||||
<?php unset($__componentOriginal42035aa49c877d648231e14ff76681c7); ?>
|
||||
<?php endif; ?>
|
||||
<?php $__env->endSlot(); ?>
|
||||
|
||||
<?php
|
||||
$lists = [];
|
||||
|
||||
foreach ($group->getItems() as $item) {
|
||||
if ($childItems = $item->getChildItems()) {
|
||||
$lists[] = [
|
||||
$item,
|
||||
...$childItems,
|
||||
];
|
||||
$lists[] = [];
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (empty($lists)) {
|
||||
$lists[] = [$item];
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$lists[count($lists) - 1][] = $item;
|
||||
}
|
||||
|
||||
if (empty($lists[count($lists) - 1])) {
|
||||
array_pop($lists);
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $lists; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $list): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php if (isset($component)) { $__componentOriginal66687bf0670b9e16f61e667468dc8983 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal66687bf0670b9e16f61e667468dc8983 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.list.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::dropdown.list'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $list; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php
|
||||
$isItemActive = $item->isActive();
|
||||
$itemBadge = $item->getBadge();
|
||||
$itemBadgeColor = $item->getBadgeColor();
|
||||
$itemBadgeTooltip = $item->getBadgeTooltip();
|
||||
$itemUrl = $item->getUrl();
|
||||
$itemIcon = $isItemActive ? ($item->getActiveIcon() ?? $item->getIcon()) : $item->getIcon();
|
||||
$shouldItemOpenUrlInNewTab = $item->shouldOpenUrlInNewTab();
|
||||
?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal1bd4d8e254cc40cdb05bd99df3e63f78 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal1bd4d8e254cc40cdb05bd99df3e63f78 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.list.item','data' => ['badge' => $itemBadge,'badgeColor' => $itemBadgeColor,'badgeTooltip' => $itemBadgeTooltip,'color' => $isItemActive ? 'primary' : 'gray','href' => $itemUrl,'icon' => $itemIcon,'tag' => 'a','target' => $shouldItemOpenUrlInNewTab ? '_blank' : null]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::dropdown.list.item'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['badge' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadge),'badge-color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadgeColor),'badge-tooltip' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadgeTooltip),'color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isItemActive ? 'primary' : 'gray'),'href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemUrl),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemIcon),'tag' => 'a','target' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($shouldItemOpenUrlInNewTab ? '_blank' : null)]); ?>
|
||||
<?php echo e($item->getLabel()); ?>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal1bd4d8e254cc40cdb05bd99df3e63f78)): ?>
|
||||
<?php $attributes = $__attributesOriginal1bd4d8e254cc40cdb05bd99df3e63f78; ?>
|
||||
<?php unset($__attributesOriginal1bd4d8e254cc40cdb05bd99df3e63f78); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal1bd4d8e254cc40cdb05bd99df3e63f78)): ?>
|
||||
<?php $component = $__componentOriginal1bd4d8e254cc40cdb05bd99df3e63f78; ?>
|
||||
<?php unset($__componentOriginal1bd4d8e254cc40cdb05bd99df3e63f78); ?>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal66687bf0670b9e16f61e667468dc8983)): ?>
|
||||
<?php $attributes = $__attributesOriginal66687bf0670b9e16f61e667468dc8983; ?>
|
||||
<?php unset($__attributesOriginal66687bf0670b9e16f61e667468dc8983); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal66687bf0670b9e16f61e667468dc8983)): ?>
|
||||
<?php $component = $__componentOriginal66687bf0670b9e16f61e667468dc8983; ?>
|
||||
<?php unset($__componentOriginal66687bf0670b9e16f61e667468dc8983); ?>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal22ab0dbc2c6619d5954111bba06f01db)): ?>
|
||||
<?php $attributes = $__attributesOriginal22ab0dbc2c6619d5954111bba06f01db; ?>
|
||||
<?php unset($__attributesOriginal22ab0dbc2c6619d5954111bba06f01db); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal22ab0dbc2c6619d5954111bba06f01db)): ?>
|
||||
<?php $component = $__componentOriginal22ab0dbc2c6619d5954111bba06f01db; ?>
|
||||
<?php unset($__componentOriginal22ab0dbc2c6619d5954111bba06f01db); ?>
|
||||
<?php endif; ?>
|
||||
<?php else: ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $group->getItems(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php
|
||||
$isItemActive = $item->isActive();
|
||||
$itemActiveIcon = $item->getActiveIcon();
|
||||
$itemBadge = $item->getBadge();
|
||||
$itemBadgeColor = $item->getBadgeColor();
|
||||
$itemBadgeTooltip = $item->getBadgeTooltip();
|
||||
$itemIcon = $item->getIcon();
|
||||
$shouldItemOpenUrlInNewTab = $item->shouldOpenUrlInNewTab();
|
||||
$itemUrl = $item->getUrl();
|
||||
?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal42035aa49c877d648231e14ff76681c7 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal42035aa49c877d648231e14ff76681c7 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.topbar.item','data' => ['active' => $isItemActive,'activeIcon' => $itemActiveIcon,'badge' => $itemBadge,'badgeColor' => $itemBadgeColor,'badgeTooltip' => $itemBadgeTooltip,'icon' => $itemIcon,'shouldOpenUrlInNewTab' => $shouldItemOpenUrlInNewTab,'url' => $itemUrl]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::topbar.item'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isItemActive),'active-icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemActiveIcon),'badge' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadge),'badge-color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadgeColor),'badge-tooltip' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemBadgeTooltip),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemIcon),'should-open-url-in-new-tab' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($shouldItemOpenUrlInNewTab),'url' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($itemUrl)]); ?>
|
||||
<?php echo e($item->getLabel()); ?>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal42035aa49c877d648231e14ff76681c7)): ?>
|
||||
<?php $attributes = $__attributesOriginal42035aa49c877d648231e14ff76681c7; ?>
|
||||
<?php unset($__attributesOriginal42035aa49c877d648231e14ff76681c7); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal42035aa49c877d648231e14ff76681c7)): ?>
|
||||
<?php $component = $__componentOriginal42035aa49c877d648231e14ff76681c7; ?>
|
||||
<?php unset($__componentOriginal42035aa49c877d648231e14ff76681c7); ?>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</ul>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<div
|
||||
<?php if($hasTenancy): ?>
|
||||
x-persist="topbar.end.panel-<?php echo e(filament()->getId()); ?>.tenant-<?php echo e(filament()->getTenant()?->getKey()); ?>"
|
||||
<?php else: ?>
|
||||
x-persist="topbar.end.panel-<?php echo e(filament()->getId()); ?>"
|
||||
<?php endif; ?>
|
||||
class="fi-topbar-end"
|
||||
>
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::GLOBAL_SEARCH_BEFORE)); ?>
|
||||
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filament()->isGlobalSearchEnabled() && filament()->getGlobalSearchPosition() === \Filament\Enums\GlobalSearchPosition::Topbar): ?>
|
||||
<?php
|
||||
$__split = function ($name, $params = []) {
|
||||
return [$name, $params];
|
||||
};
|
||||
[$__name, $__params] = $__split(Filament\Livewire\GlobalSearch::class);
|
||||
|
||||
$key = null;
|
||||
|
||||
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-1441774602-0', null);
|
||||
|
||||
$__html = app('livewire')->mount($__name, $__params, $key);
|
||||
|
||||
echo $__html;
|
||||
|
||||
unset($__html);
|
||||
unset($__name);
|
||||
unset($__params);
|
||||
unset($__split);
|
||||
if (isset($__slots)) unset($__slots);
|
||||
?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::GLOBAL_SEARCH_AFTER)); ?>
|
||||
|
||||
|
||||
<?php if(filament()->auth()->check()): ?>
|
||||
<?php if(filament()->hasDatabaseNotifications() && filament()->getDatabaseNotificationsPosition() === \Filament\Enums\DatabaseNotificationsPosition::Topbar): ?>
|
||||
<?php
|
||||
$__split = function ($name, $params = []) {
|
||||
return [$name, $params];
|
||||
};
|
||||
[$__name, $__params] = $__split(Filament\Livewire\DatabaseNotifications::class, [
|
||||
'lazy' => filament()->hasLazyLoadedDatabaseNotifications(),
|
||||
]);
|
||||
|
||||
$key = null;
|
||||
|
||||
$key ??= \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::generateKey('lw-1441774602-1', null);
|
||||
|
||||
$__html = app('livewire')->mount($__name, $__params, $key);
|
||||
|
||||
echo $__html;
|
||||
|
||||
unset($__html);
|
||||
unset($__name);
|
||||
unset($__params);
|
||||
unset($__split);
|
||||
if (isset($__slots)) unset($__slots);
|
||||
?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(filament()->hasUserMenu() && filament()->getUserMenuPosition() === \Filament\Enums\UserMenuPosition::Topbar): ?>
|
||||
<?php if (isset($component)) { $__componentOriginalf72c4437b846e6919081d8fc29939c50 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf72c4437b846e6919081d8fc29939c50 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.user-menu','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::user-menu'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf72c4437b846e6919081d8fc29939c50)): ?>
|
||||
<?php $attributes = $__attributesOriginalf72c4437b846e6919081d8fc29939c50; ?>
|
||||
<?php unset($__attributesOriginalf72c4437b846e6919081d8fc29939c50); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf72c4437b846e6919081d8fc29939c50)): ?>
|
||||
<?php $component = $__componentOriginalf72c4437b846e6919081d8fc29939c50; ?>
|
||||
<?php unset($__componentOriginalf72c4437b846e6919081d8fc29939c50); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::TOPBAR_END)); ?>
|
||||
|
||||
</nav>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal028e05680f6c5b1e293abd7fbe5f9758 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-actions::components.modals','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-actions::modals'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758)): ?>
|
||||
<?php $attributes = $__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758; ?>
|
||||
<?php unset($__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal028e05680f6c5b1e293abd7fbe5f9758)): ?>
|
||||
<?php $component = $__componentOriginal028e05680f6c5b1e293abd7fbe5f9758; ?>
|
||||
<?php unset($__componentOriginal028e05680f6c5b1e293abd7fbe5f9758); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/livewire/topbar.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,82 @@
|
||||
<!-- Inspection Actions -->
|
||||
<div class="bg-white rounded-lg shadow-md p-6 mb-8">
|
||||
<h2 class="text-2xl font-bold mb-4">🔍 Inspection</h2>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
<!-- Inspection Passed -->
|
||||
<div class="border-2 border-green-200 rounded-lg p-4">
|
||||
<h3 class="text-lg font-semibold text-green-700 mb-3">✓ Passed Inspection</h3>
|
||||
<p class="text-gray-600 mb-4">Quality check completed - proceed to packing</p>
|
||||
|
||||
<form action="<?php echo e(route('ops.order.inspection-passed', $order)); ?>" method="POST">
|
||||
<?php echo csrf_field(); ?>
|
||||
<button
|
||||
type="submit"
|
||||
class="w-full bg-green-600 hover:bg-green-700 text-white font-bold py-2 px-4 rounded transition duration-200"
|
||||
>
|
||||
Mark as Passed
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- Inspection Failed -->
|
||||
<div class="border-2 border-red-200 rounded-lg p-4">
|
||||
<h3 class="text-lg font-semibold text-red-700 mb-3">✗ Flag Issue</h3>
|
||||
<p class="text-gray-600 mb-4">Quality issue detected - needs review</p>
|
||||
|
||||
<form id="inspectionFailedForm" action="<?php echo e(route('ops.order.inspection-failed', $order)); ?>" method="POST" class="space-y-3">
|
||||
<?php echo csrf_field(); ?>
|
||||
|
||||
<textarea
|
||||
name="issue_description"
|
||||
required
|
||||
maxlength="500"
|
||||
rows="3"
|
||||
placeholder="Describe the quality issue..."
|
||||
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-red-500"
|
||||
></textarea>
|
||||
|
||||
<button
|
||||
type="submit"
|
||||
class="w-full bg-red-600 hover:bg-red-700 text-white font-bold py-2 px-4 rounded transition duration-200"
|
||||
>
|
||||
Flag & Move to Review
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
document.getElementById('inspectionFailedForm').addEventListener('submit', async function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
if (!confirm('Flag this order for review? It will be moved to review status.')) {
|
||||
return;
|
||||
}
|
||||
|
||||
const formData = new FormData(this);
|
||||
|
||||
try {
|
||||
const response = await fetch(this.action, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
},
|
||||
body: formData,
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (response.ok) {
|
||||
alert('✓ Issue flagged - order moved to review');
|
||||
window.location.reload();
|
||||
} else {
|
||||
alert('Error: ' + (data.message || data.error || 'Unknown error'));
|
||||
}
|
||||
} catch (error) {
|
||||
alert('Error submitting form: ' + error.message);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php /**PATH /var/www/additional_design/resources/views/ops/actions/inspection.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,212 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'alpineDisabled' => null,
|
||||
'alpineValid' => null,
|
||||
'disabled' => false,
|
||||
'inlinePrefix' => false,
|
||||
'inlineSuffix' => false,
|
||||
'prefix' => null,
|
||||
'prefixActions' => [],
|
||||
'prefixIcon' => null,
|
||||
'prefixIconColor' => 'gray',
|
||||
'prefixIconAlias' => null,
|
||||
'suffix' => null,
|
||||
'suffixActions' => [],
|
||||
'suffixIcon' => null,
|
||||
'suffixIconColor' => 'gray',
|
||||
'suffixIconAlias' => null,
|
||||
'valid' => true,
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'alpineDisabled' => null,
|
||||
'alpineValid' => null,
|
||||
'disabled' => false,
|
||||
'inlinePrefix' => false,
|
||||
'inlineSuffix' => false,
|
||||
'prefix' => null,
|
||||
'prefixActions' => [],
|
||||
'prefixIcon' => null,
|
||||
'prefixIconColor' => 'gray',
|
||||
'prefixIconAlias' => null,
|
||||
'suffix' => null,
|
||||
'suffixActions' => [],
|
||||
'suffixIcon' => null,
|
||||
'suffixIconColor' => 'gray',
|
||||
'suffixIconAlias' => null,
|
||||
'valid' => true,
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
use Filament\Support\View\Components\InputComponent\WrapperComponent\IconComponent;
|
||||
use Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$prefixActions = array_filter(
|
||||
$prefixActions,
|
||||
fn (\Filament\Actions\Action $prefixAction): bool => $prefixAction->isVisible(),
|
||||
);
|
||||
|
||||
$suffixActions = array_filter(
|
||||
$suffixActions,
|
||||
fn (\Filament\Actions\Action $suffixAction): bool => $suffixAction->isVisible(),
|
||||
);
|
||||
|
||||
$hasPrefix = count($prefixActions) || $prefixIcon || filled($prefix);
|
||||
$hasSuffix = count($suffixActions) || $suffixIcon || filled($suffix);
|
||||
|
||||
$hasAlpineDisabledClasses = filled($alpineDisabled);
|
||||
$hasAlpineValidClasses = filled($alpineValid);
|
||||
$hasAlpineClasses = $hasAlpineDisabledClasses || $hasAlpineValidClasses;
|
||||
|
||||
$wireTarget = $attributes->whereStartsWith(['wire:target'])->first();
|
||||
|
||||
$hasLoadingIndicator = filled($wireTarget);
|
||||
|
||||
if ($hasLoadingIndicator) {
|
||||
$loadingIndicatorTarget = html_entity_decode($wireTarget, ENT_QUOTES);
|
||||
}
|
||||
?>
|
||||
|
||||
<div
|
||||
<?php if($hasAlpineClasses): ?>
|
||||
x-bind:class="{
|
||||
<?php echo e($hasAlpineDisabledClasses ? "'fi-disabled': {$alpineDisabled}," : null); ?>
|
||||
|
||||
<?php echo e($hasAlpineValidClasses ? "'fi-invalid': ! ({$alpineValid})," : null); ?>
|
||||
|
||||
}"
|
||||
<?php endif; ?>
|
||||
<?php echo e($attributes
|
||||
->except(['wire:target', 'tabindex'])
|
||||
->class([
|
||||
'fi-input-wrp',
|
||||
'fi-disabled' => (! $hasAlpineClasses) && $disabled,
|
||||
'fi-invalid' => (! $hasAlpineClasses) && (! $valid),
|
||||
])); ?>
|
||||
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasPrefix || $hasLoadingIndicator): ?>
|
||||
<div
|
||||
<?php if(! $hasPrefix): ?>
|
||||
wire:loading.delay.<?php echo e(config('filament.livewire_loading_delay', 'default')); ?>.flex
|
||||
wire:target="<?php echo e($loadingIndicatorTarget); ?>"
|
||||
wire:key="<?php echo e(\Illuminate\Support\Str::random()); ?>"
|
||||
<?php endif; ?>
|
||||
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
|
||||
'fi-input-wrp-prefix',
|
||||
'fi-input-wrp-prefix-has-content' => $hasPrefix,
|
||||
'fi-inline' => $inlinePrefix,
|
||||
'fi-input-wrp-prefix-has-label' => filled($prefix),
|
||||
]); ?>"
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(count($prefixActions)): ?>
|
||||
<div class="fi-input-wrp-actions">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $prefixActions; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $prefixAction): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php echo e($prefixAction); ?>
|
||||
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php echo e(\Filament\Support\generate_icon_html($prefixIcon, $prefixIconAlias, (new \Illuminate\View\ComponentAttributeBag)
|
||||
->merge([
|
||||
'wire:loading.remove.delay.' . config('filament.livewire_loading_delay', 'default') => $hasLoadingIndicator,
|
||||
'wire:target' => $hasLoadingIndicator ? $loadingIndicatorTarget : false,
|
||||
], escape: false)
|
||||
->color(IconComponent::class, $prefixIconColor))); ?>
|
||||
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasLoadingIndicator): ?>
|
||||
<?php echo e(\Filament\Support\generate_loading_indicator_html((new \Illuminate\View\ComponentAttributeBag([
|
||||
'wire:loading.delay.' . config('filament.livewire_loading_delay', 'default') => $hasPrefix,
|
||||
'wire:target' => $hasPrefix ? $loadingIndicatorTarget : null,
|
||||
]))->color(IconComponent::class, 'gray'))); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($prefix)): ?>
|
||||
<span class="fi-input-wrp-label">
|
||||
<?php echo e($prefix); ?>
|
||||
|
||||
</span>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<div
|
||||
<?php if($hasLoadingIndicator && (! $hasPrefix)): ?>
|
||||
<?php if($inlinePrefix): ?>
|
||||
wire:loading.delay.<?php echo e(config('filament.livewire_loading_delay', 'default')); ?>.class.remove="ps-3"
|
||||
<?php endif; ?>
|
||||
|
||||
wire:target="<?php echo e($loadingIndicatorTarget); ?>"
|
||||
<?php endif; ?>
|
||||
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
|
||||
'fi-input-wrp-content-ctn',
|
||||
'fi-input-wrp-content-ctn-ps' => $hasLoadingIndicator && (! $hasPrefix) && $inlinePrefix,
|
||||
]); ?>"
|
||||
>
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
</div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasSuffix): ?>
|
||||
<div
|
||||
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
|
||||
'fi-input-wrp-suffix',
|
||||
'fi-inline' => $inlineSuffix,
|
||||
'fi-input-wrp-suffix-has-label' => filled($suffix),
|
||||
]); ?>"
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($suffix)): ?>
|
||||
<span class="fi-input-wrp-label">
|
||||
<?php echo e($suffix); ?>
|
||||
|
||||
</span>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php echo e(\Filament\Support\generate_icon_html($suffixIcon, $suffixIconAlias, (new \Illuminate\View\ComponentAttributeBag)
|
||||
->merge([
|
||||
'wire:loading.remove.delay.' . config('filament.livewire_loading_delay', 'default') => $hasLoadingIndicator,
|
||||
'wire:target' => $hasLoadingIndicator ? $loadingIndicatorTarget : false,
|
||||
], escape: false)
|
||||
->color(IconComponent::class, $suffixIconColor))); ?>
|
||||
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(count($suffixActions)): ?>
|
||||
<div class="fi-input-wrp-actions">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $suffixActions; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $suffixAction): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php echo e($suffixAction); ?>
|
||||
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/input/wrapper.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,396 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'fullHeight' => false,
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'fullHeight' => false,
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
use Filament\Pages\Enums\SubNavigationPosition;
|
||||
|
||||
$subNavigation = $this->getCachedSubNavigation();
|
||||
$subNavigationPosition = $this->getSubNavigationPosition();
|
||||
$widgetData = $this->getWidgetData();
|
||||
?>
|
||||
|
||||
<div
|
||||
<?php echo e($attributes->class([
|
||||
'fi-page',
|
||||
'fi-height-full' => $fullHeight,
|
||||
'fi-page-has-sub-navigation' => $subNavigation,
|
||||
"fi-page-has-sub-navigation-{$subNavigationPosition->value}" => $subNavigation,
|
||||
...$this->getPageClasses(),
|
||||
])); ?>
|
||||
|
||||
>
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_START, scopes: $this->getRenderHookScopes())); ?>
|
||||
|
||||
|
||||
<div class="fi-page-header-main-ctn">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($subNavigation): ?>
|
||||
<div
|
||||
class="fi-page-main-sub-navigation-mobile-menu-render-hook-ctn"
|
||||
>
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_SUB_NAVIGATION_MOBILE_MENU_BEFORE, scopes: $this->getRenderHookScopes())); ?>
|
||||
|
||||
</div>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginalece338083788b9a170af7d25fa4f4976 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalece338083788b9a170af7d25fa4f4976 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.page.sub-navigation.mobile-menu','data' => ['navigation' => $subNavigation]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::page.sub-navigation.mobile-menu'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['navigation' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($subNavigation)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalece338083788b9a170af7d25fa4f4976)): ?>
|
||||
<?php $attributes = $__attributesOriginalece338083788b9a170af7d25fa4f4976; ?>
|
||||
<?php unset($__attributesOriginalece338083788b9a170af7d25fa4f4976); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalece338083788b9a170af7d25fa4f4976)): ?>
|
||||
<?php $component = $__componentOriginalece338083788b9a170af7d25fa4f4976; ?>
|
||||
<?php unset($__componentOriginalece338083788b9a170af7d25fa4f4976); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<div
|
||||
class="fi-page-main-sub-navigation-mobile-menu-render-hook-ctn"
|
||||
>
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_SUB_NAVIGATION_MOBILE_MENU_AFTER, scopes: $this->getRenderHookScopes())); ?>
|
||||
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($header = $this->getHeader()): ?>
|
||||
<?php echo e($header); ?>
|
||||
|
||||
<?php else: ?>
|
||||
<?php
|
||||
$heading = $this->getHeading();
|
||||
$headerActions = $this->getCachedHeaderActions();
|
||||
$headerActionsAlignment = $this->getHeaderActionsAlignment();
|
||||
$breadcrumbs = filament()->hasBreadcrumbs() ? $this->getBreadcrumbs() : [];
|
||||
$subheading = $this->getSubheading();
|
||||
?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($headerActions) || $breadcrumbs || filled($heading) || filled($subheading)): ?>
|
||||
<?php if (isset($component)) { $__componentOriginal4af1e0a8ab5c0dda93279f6800da3911 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal4af1e0a8ab5c0dda93279f6800da3911 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.header.index','data' => ['actions' => $headerActions,'actionsAlignment' => $headerActionsAlignment,'breadcrumbs' => $breadcrumbs,'heading' => $heading,'subheading' => $subheading]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::header'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['actions' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($headerActions),'actions-alignment' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($headerActionsAlignment),'breadcrumbs' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($breadcrumbs),'heading' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($heading),'subheading' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($subheading)]); ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($heading instanceof \Illuminate\Contracts\Support\Htmlable): ?>
|
||||
<?php $__env->slot('heading', null, []); ?>
|
||||
<?php echo e($heading); ?>
|
||||
|
||||
<?php $__env->endSlot(); ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($subheading instanceof \Illuminate\Contracts\Support\Htmlable): ?>
|
||||
<?php $__env->slot('subheading', null, []); ?>
|
||||
<?php echo e($subheading); ?>
|
||||
|
||||
<?php $__env->endSlot(); ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal4af1e0a8ab5c0dda93279f6800da3911)): ?>
|
||||
<?php $attributes = $__attributesOriginal4af1e0a8ab5c0dda93279f6800da3911; ?>
|
||||
<?php unset($__attributesOriginal4af1e0a8ab5c0dda93279f6800da3911); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal4af1e0a8ab5c0dda93279f6800da3911)): ?>
|
||||
<?php $component = $__componentOriginal4af1e0a8ab5c0dda93279f6800da3911; ?>
|
||||
<?php unset($__componentOriginal4af1e0a8ab5c0dda93279f6800da3911); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<div class="fi-page-main">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($subNavigation): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($subNavigationPosition === SubNavigationPosition::Start): ?>
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_SUB_NAVIGATION_START_BEFORE, scopes: $this->getRenderHookScopes())); ?>
|
||||
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal57dd3516f8d124ccafb2ae72c664c7c3 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal57dd3516f8d124ccafb2ae72c664c7c3 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.page.sub-navigation.sidebar','data' => ['navigation' => $subNavigation]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::page.sub-navigation.sidebar'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['navigation' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($subNavigation)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal57dd3516f8d124ccafb2ae72c664c7c3)): ?>
|
||||
<?php $attributes = $__attributesOriginal57dd3516f8d124ccafb2ae72c664c7c3; ?>
|
||||
<?php unset($__attributesOriginal57dd3516f8d124ccafb2ae72c664c7c3); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal57dd3516f8d124ccafb2ae72c664c7c3)): ?>
|
||||
<?php $component = $__componentOriginal57dd3516f8d124ccafb2ae72c664c7c3; ?>
|
||||
<?php unset($__componentOriginal57dd3516f8d124ccafb2ae72c664c7c3); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_SUB_NAVIGATION_START_AFTER, scopes: $this->getRenderHookScopes())); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($subNavigationPosition === SubNavigationPosition::Top): ?>
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_SUB_NAVIGATION_TOP_BEFORE, scopes: $this->getRenderHookScopes())); ?>
|
||||
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginala59fd7cea3e42dfea7d868b466385a01 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginala59fd7cea3e42dfea7d868b466385a01 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.page.sub-navigation.tabs','data' => ['navigation' => $subNavigation]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::page.sub-navigation.tabs'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['navigation' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($subNavigation)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginala59fd7cea3e42dfea7d868b466385a01)): ?>
|
||||
<?php $attributes = $__attributesOriginala59fd7cea3e42dfea7d868b466385a01; ?>
|
||||
<?php unset($__attributesOriginala59fd7cea3e42dfea7d868b466385a01); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginala59fd7cea3e42dfea7d868b466385a01)): ?>
|
||||
<?php $component = $__componentOriginala59fd7cea3e42dfea7d868b466385a01; ?>
|
||||
<?php unset($__componentOriginala59fd7cea3e42dfea7d868b466385a01); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_SUB_NAVIGATION_TOP_AFTER, scopes: $this->getRenderHookScopes())); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<div class="fi-page-content">
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_HEADER_WIDGETS_BEFORE, scopes: $this->getRenderHookScopes())); ?>
|
||||
|
||||
|
||||
<?php echo e($this->headerWidgets); ?>
|
||||
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_HEADER_WIDGETS_AFTER, scopes: $this->getRenderHookScopes())); ?>
|
||||
|
||||
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_FOOTER_WIDGETS_BEFORE, scopes: $this->getRenderHookScopes())); ?>
|
||||
|
||||
|
||||
<?php echo e($this->footerWidgets); ?>
|
||||
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_FOOTER_WIDGETS_AFTER, scopes: $this->getRenderHookScopes())); ?>
|
||||
|
||||
</div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($subNavigation && $subNavigationPosition === SubNavigationPosition::End): ?>
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_SUB_NAVIGATION_END_BEFORE, scopes: $this->getRenderHookScopes())); ?>
|
||||
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal57dd3516f8d124ccafb2ae72c664c7c3 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal57dd3516f8d124ccafb2ae72c664c7c3 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.page.sub-navigation.sidebar','data' => ['navigation' => $subNavigation]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::page.sub-navigation.sidebar'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['navigation' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($subNavigation)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal57dd3516f8d124ccafb2ae72c664c7c3)): ?>
|
||||
<?php $attributes = $__attributesOriginal57dd3516f8d124ccafb2ae72c664c7c3; ?>
|
||||
<?php unset($__attributesOriginal57dd3516f8d124ccafb2ae72c664c7c3); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal57dd3516f8d124ccafb2ae72c664c7c3)): ?>
|
||||
<?php $component = $__componentOriginal57dd3516f8d124ccafb2ae72c664c7c3; ?>
|
||||
<?php unset($__componentOriginal57dd3516f8d124ccafb2ae72c664c7c3); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_SUB_NAVIGATION_END_AFTER, scopes: $this->getRenderHookScopes())); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($footer = $this->getFooter()): ?>
|
||||
<?php echo e($footer); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! ($this instanceof \Filament\Tables\Contracts\HasTable)): ?>
|
||||
<?php if (isset($component)) { $__componentOriginal028e05680f6c5b1e293abd7fbe5f9758 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-actions::components.modals','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-actions::modals'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758)): ?>
|
||||
<?php $attributes = $__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758; ?>
|
||||
<?php unset($__attributesOriginal028e05680f6c5b1e293abd7fbe5f9758); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal028e05680f6c5b1e293abd7fbe5f9758)): ?>
|
||||
<?php $component = $__componentOriginal028e05680f6c5b1e293abd7fbe5f9758; ?>
|
||||
<?php unset($__componentOriginal028e05680f6c5b1e293abd7fbe5f9758); ?>
|
||||
<?php endif; ?>
|
||||
<?php elseif($this->isTableLoaded() && filled($this->defaultTableAction)): ?>
|
||||
<div
|
||||
wire:init="mountAction(<?php echo \Illuminate\Support\Js::from($this->defaultTableAction)->toHtml() ?> , <?php if(filled($this->defaultTableActionArguments)): ?> <?php echo \Illuminate\Support\Js::from($this->defaultTableActionArguments)->toHtml() ?> <?php else: ?> {} <?php endif; ?> , <?php echo \Illuminate\Support\Js::from(['table' => true, 'recordKey' => $this->defaultTableActionRecord])->toHtml() ?>)"
|
||||
></div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($this->defaultAction)): ?>
|
||||
<div
|
||||
wire:init="mountAction(<?php echo \Illuminate\Support\Js::from($this->defaultAction)->toHtml() ?> <?php if(filled($this->defaultActionArguments) || filled($this->defaultActionContext)): ?> , <?php if(filled($this->defaultActionArguments)): ?> <?php echo \Illuminate\Support\Js::from($this->defaultActionArguments)->toHtml() ?> <?php else: ?> {} <?php endif; ?> <?php endif; ?> <?php if(filled($this->defaultActionContext)): ?> , <?php echo \Illuminate\Support\Js::from($this->defaultActionContext)->toHtml() ?> <?php endif; ?>)"
|
||||
></div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php echo e(\Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_END, scopes: $this->getRenderHookScopes())); ?>
|
||||
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(method_exists($this, 'hasUnsavedDataChangesAlert') && $this->hasUnsavedDataChangesAlert()): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(\Filament\Support\Facades\FilamentView::hasSpaMode()): ?>
|
||||
<?php
|
||||
$__scriptKey = '3657389511-0';
|
||||
ob_start();
|
||||
?>
|
||||
<script>
|
||||
setUpSpaModeUnsavedDataChangesAlert({
|
||||
body: <?php echo \Illuminate\Support\Js::from(__('filament-panels::unsaved-changes-alert.body'))->toHtml() ?>,
|
||||
resolveLivewireComponentUsing: () => window.Livewire.find('<?php echo e($_instance->getId()); ?>'),
|
||||
$wire,
|
||||
})
|
||||
</script>
|
||||
<?php
|
||||
$__output = ob_get_clean();
|
||||
|
||||
\Livewire\store($this)->push('scripts', $__output, $__scriptKey)
|
||||
?>
|
||||
<?php else: ?>
|
||||
<?php
|
||||
$__scriptKey = '3657389511-1';
|
||||
ob_start();
|
||||
?>
|
||||
<script>
|
||||
setUpUnsavedDataChangesAlert({ $wire })
|
||||
</script>
|
||||
<?php
|
||||
$__output = ob_get_clean();
|
||||
|
||||
\Livewire\store($this)->push('scripts', $__output, $__scriptKey)
|
||||
?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if((! app()->hasDebugModeEnabled()) && $this->hasErrorNotifications()): ?>
|
||||
<?php
|
||||
$__scriptKey = '3657389511-2';
|
||||
ob_start();
|
||||
?>
|
||||
<script>
|
||||
const errorNotifications = <?php echo \Illuminate\Support\Js::from($this->getErrorNotifications())->toHtml() ?>
|
||||
|
||||
Livewire.hook('request', ({ payload, fail }) => {
|
||||
fail(({ status, preventDefault }) => {
|
||||
if (JSON.parse(payload).components.length === 1) {
|
||||
for (const component of JSON.parse(payload)
|
||||
.components) {
|
||||
if (
|
||||
JSON.parse(component.snapshot).data
|
||||
.isFilamentNotificationsComponent
|
||||
) {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
preventDefault()
|
||||
|
||||
const errorNotification =
|
||||
errorNotifications[status] ?? errorNotifications['']
|
||||
|
||||
new FilamentNotification()
|
||||
.title(errorNotification.title)
|
||||
.body(errorNotification.body)
|
||||
.danger()
|
||||
.send()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
<?php
|
||||
$__output = ob_get_clean();
|
||||
|
||||
\Livewire\store($this)->push('scripts', $__output, $__scriptKey)
|
||||
?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal29f738301ffa464f2646caa32428c50f = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal29f738301ffa464f2646caa32428c50f = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.unsaved-action-changes-alert','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::unsaved-action-changes-alert'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal29f738301ffa464f2646caa32428c50f)): ?>
|
||||
<?php $attributes = $__attributesOriginal29f738301ffa464f2646caa32428c50f; ?>
|
||||
<?php unset($__attributesOriginal29f738301ffa464f2646caa32428c50f); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal29f738301ffa464f2646caa32428c50f)): ?>
|
||||
<?php $component = $__componentOriginal29f738301ffa464f2646caa32428c50f; ?>
|
||||
<?php unset($__componentOriginal29f738301ffa464f2646caa32428c50f); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/page/index.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,217 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'active' => false,
|
||||
'activeChildItems' => false,
|
||||
'activeIcon' => null,
|
||||
'badge' => null,
|
||||
'badgeColor' => null,
|
||||
'badgeTooltip' => null,
|
||||
'childItems' => [],
|
||||
'first' => false,
|
||||
'grouped' => false,
|
||||
'icon' => null,
|
||||
'last' => false,
|
||||
'shouldOpenUrlInNewTab' => false,
|
||||
'sidebarCollapsible' => true,
|
||||
'subGrouped' => false,
|
||||
'subNavigation' => false,
|
||||
'url',
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'active' => false,
|
||||
'activeChildItems' => false,
|
||||
'activeIcon' => null,
|
||||
'badge' => null,
|
||||
'badgeColor' => null,
|
||||
'badgeTooltip' => null,
|
||||
'childItems' => [],
|
||||
'first' => false,
|
||||
'grouped' => false,
|
||||
'icon' => null,
|
||||
'last' => false,
|
||||
'shouldOpenUrlInNewTab' => false,
|
||||
'sidebarCollapsible' => true,
|
||||
'subGrouped' => false,
|
||||
'subNavigation' => false,
|
||||
'url',
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
$sidebarCollapsible = $sidebarCollapsible && filament()->isSidebarCollapsibleOnDesktop();
|
||||
?>
|
||||
|
||||
<li
|
||||
<?php echo e($attributes->class([
|
||||
'fi-sidebar-item',
|
||||
'fi-active' => $active,
|
||||
'fi-sidebar-item-has-active-child-items' => $activeChildItems,
|
||||
'fi-sidebar-item-has-url' => filled($url),
|
||||
])); ?>
|
||||
|
||||
>
|
||||
<a
|
||||
<?php echo e(\Filament\Support\generate_href_html($url, $shouldOpenUrlInNewTab)); ?>
|
||||
|
||||
x-on:click="window.matchMedia(`(max-width: 1024px)`).matches && $store.sidebar.close()"
|
||||
<?php if($sidebarCollapsible && (! $subNavigation)): ?>
|
||||
x-data="{ tooltip: false }"
|
||||
x-effect="
|
||||
tooltip = $store.sidebar.isOpen
|
||||
? false
|
||||
: {
|
||||
content: <?php echo \Illuminate\Support\Js::from($slot->toHtml())->toHtml() ?>,
|
||||
placement: document.dir === 'rtl' ? 'left' : 'right',
|
||||
theme: $store.theme,
|
||||
}
|
||||
"
|
||||
x-tooltip.html="tooltip"
|
||||
<?php endif; ?>
|
||||
class="fi-sidebar-item-btn"
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($icon) && ((! $subGrouped) || ($sidebarCollapsible && (! $subNavigation)))): ?>
|
||||
<?php echo e(\Filament\Support\generate_icon_html(($active && $activeIcon) ? $activeIcon : $icon, attributes: (new \Illuminate\View\ComponentAttributeBag([
|
||||
'x-show' => ($subGrouped && $sidebarCollapsible) ? '! $store.sidebar.isOpen' : false,
|
||||
]))->class(['fi-sidebar-item-icon']), size: \Filament\Support\Enums\IconSize::Large)); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if((blank($icon) && $grouped) || $subGrouped): ?>
|
||||
<div
|
||||
<?php if(filled($icon) && $subGrouped && $sidebarCollapsible && (! $subNavigation)): ?>
|
||||
x-show="$store.sidebar.isOpen"
|
||||
<?php endif; ?>
|
||||
class="fi-sidebar-item-grouped-border"
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! $first): ?>
|
||||
<div
|
||||
class="fi-sidebar-item-grouped-border-part-not-first"
|
||||
></div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! $last): ?>
|
||||
<div
|
||||
class="fi-sidebar-item-grouped-border-part-not-last"
|
||||
></div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<div class="fi-sidebar-item-grouped-border-part"></div>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<span
|
||||
<?php if($sidebarCollapsible && (! $subNavigation)): ?>
|
||||
x-show="$store.sidebar.isOpen"
|
||||
x-transition:enter="fi-transition-enter"
|
||||
x-transition:enter-start="fi-transition-enter-start"
|
||||
x-transition:enter-end="fi-transition-enter-end"
|
||||
<?php endif; ?>
|
||||
class="fi-sidebar-item-label"
|
||||
>
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
</span>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($badge)): ?>
|
||||
<span
|
||||
<?php if($sidebarCollapsible && (! $subNavigation)): ?>
|
||||
x-show="$store.sidebar.isOpen"
|
||||
x-transition:enter="fi-transition-enter"
|
||||
x-transition:enter-start="fi-transition-enter-start"
|
||||
x-transition:enter-end="fi-transition-enter-end"
|
||||
<?php endif; ?>
|
||||
class="fi-sidebar-item-badge-ctn"
|
||||
>
|
||||
<?php if (isset($component)) { $__componentOriginal986dce9114ddce94a270ab00ce6c273d = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal986dce9114ddce94a270ab00ce6c273d = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.badge','data' => ['color' => $badgeColor,'tooltip' => $badgeTooltip]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::badge'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($badgeColor),'tooltip' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($badgeTooltip)]); ?>
|
||||
<?php echo e($badge); ?>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal986dce9114ddce94a270ab00ce6c273d)): ?>
|
||||
<?php $attributes = $__attributesOriginal986dce9114ddce94a270ab00ce6c273d; ?>
|
||||
<?php unset($__attributesOriginal986dce9114ddce94a270ab00ce6c273d); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal986dce9114ddce94a270ab00ce6c273d)): ?>
|
||||
<?php $component = $__componentOriginal986dce9114ddce94a270ab00ce6c273d; ?>
|
||||
<?php unset($__componentOriginal986dce9114ddce94a270ab00ce6c273d); ?>
|
||||
<?php endif; ?>
|
||||
</span>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</a>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(($active || $activeChildItems) && $childItems): ?>
|
||||
<ul class="fi-sidebar-sub-group-items">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $childItems; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $childItem): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php
|
||||
$isChildItemChildItemsActive = $childItem->isChildItemsActive();
|
||||
$isChildActive = (! $isChildItemChildItemsActive) && $childItem->isActive();
|
||||
$childItemActiveIcon = $childItem->getActiveIcon();
|
||||
$childItemBadge = $childItem->getBadge();
|
||||
$childItemBadgeColor = $childItem->getBadgeColor();
|
||||
$childItemBadgeTooltip = $childItem->getBadgeTooltip();
|
||||
$childItemIcon = $childItem->getIcon();
|
||||
$shouldChildItemOpenUrlInNewTab = $childItem->shouldOpenUrlInNewTab();
|
||||
$childItemUrl = $childItem->getUrl();
|
||||
?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal7edbc33aaa546e1feb86647dcd0e4eb8 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal7edbc33aaa546e1feb86647dcd0e4eb8 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.sidebar.item','data' => ['active' => $isChildActive,'activeChildItems' => $isChildItemChildItemsActive,'activeIcon' => $childItemActiveIcon,'badge' => $childItemBadge,'badgeColor' => $childItemBadgeColor,'badgeTooltip' => $childItemBadgeTooltip,'first' => $loop->first,'grouped' => true,'icon' => $childItemIcon,'last' => $loop->last,'shouldOpenUrlInNewTab' => $shouldChildItemOpenUrlInNewTab,'subGrouped' => true,'subNavigation' => $subNavigation,'url' => $childItemUrl]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::sidebar.item'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isChildActive),'active-child-items' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isChildItemChildItemsActive),'active-icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($childItemActiveIcon),'badge' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($childItemBadge),'badge-color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($childItemBadgeColor),'badge-tooltip' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($childItemBadgeTooltip),'first' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($loop->first),'grouped' => true,'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($childItemIcon),'last' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($loop->last),'should-open-url-in-new-tab' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($shouldChildItemOpenUrlInNewTab),'sub-grouped' => true,'sub-navigation' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($subNavigation),'url' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($childItemUrl)]); ?>
|
||||
<?php echo e($childItem->getLabel()); ?>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal7edbc33aaa546e1feb86647dcd0e4eb8)): ?>
|
||||
<?php $attributes = $__attributesOriginal7edbc33aaa546e1feb86647dcd0e4eb8; ?>
|
||||
<?php unset($__attributesOriginal7edbc33aaa546e1feb86647dcd0e4eb8); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal7edbc33aaa546e1feb86647dcd0e4eb8)): ?>
|
||||
<?php $component = $__componentOriginal7edbc33aaa546e1feb86647dcd0e4eb8; ?>
|
||||
<?php unset($__componentOriginal7edbc33aaa546e1feb86647dcd0e4eb8); ?>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</ul>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</li>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/sidebar/item.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,213 @@
|
||||
<?php $__env->startSection('title', 'Custom Printed Fabrics'); ?>
|
||||
|
||||
<?php $__env->startSection('content'); ?>
|
||||
<!-- HERO SECTION -->
|
||||
<section class="section" id="fabrics-hero" style="background: linear-gradient(to right, rgba(45, 80, 71, 0.7), rgba(45, 80, 71, 0.5)), url('https://images.unsplash.com/photo-1578926078328-123alce3f3ce?w=1200&q=80') center/cover no-repeat;">
|
||||
<div class="container">
|
||||
<div style="padding: 6rem 0; max-width: 700px;">
|
||||
<h1 style="color: white; font-size: 3rem; margin-bottom: 1rem;">Custom Printed Fabrics</h1>
|
||||
<p style="color: rgba(255, 255, 255, 0.95); font-size: 1.1rem;">Extend your favorite wallpaper designs to premium fabrics. From upholstery to curtains, cushions to bedding, create a cohesive interior where your designs flow seamlessly across all textiles.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- FABRIC TYPES SECTION -->
|
||||
<section class="section section--light">
|
||||
<div class="container">
|
||||
<h2>Fabric Types & Applications</h2>
|
||||
<p style="max-width: 700px; margin-bottom: 3rem;">Choose from our range of premium fabrics, each optimized for different applications and uses.</p>
|
||||
|
||||
<div class="grid grid--3">
|
||||
<!-- Upholstery Fabrics -->
|
||||
<div class="product-card">
|
||||
<img src="https://images.unsplash.com/photo-1555041469-a586c61ea9bc?w=500&q=80" alt="Upholstery Fabrics" class="card-image" style="object-fit: cover;">
|
||||
<div class="card-content">
|
||||
<div class="card-title">Upholstery Fabrics</div>
|
||||
<p class="card-description">Durable, premium fabrics perfect for furniture upholstery. Available in various weights and finishes. Ideal for sofas, chairs, and ottomans.</p>
|
||||
<div style="margin-top: 1rem;">
|
||||
<button class="btn btn--sm">Explore Collection</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Curtain & Drape Fabrics -->
|
||||
<div class="product-card">
|
||||
<img src="https://images.unsplash.com/photo-1578926314433-8e18d4f89b16?w=500&q=80" alt="Curtain Fabrics" class="card-image" style="object-fit: cover;">
|
||||
<div class="card-content">
|
||||
<div class="card-title">Curtain & Drape Fabrics</div>
|
||||
<p class="card-description">Elegant draping fabrics in various opacities. Perfect for creating custom curtains, drapes, and window treatments that complement your wallpaper.</p>
|
||||
<div style="margin-top: 1rem;">
|
||||
<button class="btn btn--sm">Explore Collection</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Decorative Textiles -->
|
||||
<div class="product-card">
|
||||
<img src="https://images.unsplash.com/photo-1606389506042-4bc31f98b485?w=500&q=80" alt="Decorative Textiles" class="card-image" style="object-fit: cover;">
|
||||
<div class="card-content">
|
||||
<div class="card-title">Decorative Textiles</div>
|
||||
<p class="card-description">Versatile fabrics for cushions, pillows, throws, and home accents. Perfect for adding coordinated touches throughout your space.</p>
|
||||
<div style="margin-top: 1rem;">
|
||||
<button class="btn btn--sm">Explore Collection</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- FEATURED FABRICS GRID -->
|
||||
<section class="section" id="featured-fabrics">
|
||||
<div class="container">
|
||||
<h2>Featured Fabric Collections</h2>
|
||||
<p style="margin-bottom: 2rem;">Our most popular custom-printed fabric options, available in various widths and finishes.</p>
|
||||
|
||||
<div class="grid grid--3">
|
||||
<!-- Botanical Garden Fabric -->
|
||||
<div class="product-card">
|
||||
<img src="https://images.unsplash.com/photo-1520763185298-1b434c919eba?w=500&q=80" alt="Botanical Garden" class="card-image" style="object-fit: cover;">
|
||||
<div class="card-content">
|
||||
<div class="card-title">Botanical Garden</div>
|
||||
<p class="card-description">Nature-inspired floral patterns printed on premium linen blend. Perfect for upholstery and curtains.</p>
|
||||
<div style="display: flex; justify-content: space-between; align-items: center; margin-top: 1rem;">
|
||||
<span style="font-weight: 600;">From $45/yard</span>
|
||||
<button class="btn btn--sm">View</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Geometric Modern -->
|
||||
<div class="product-card">
|
||||
<img src="https://images.unsplash.com/photo-1577720643272-265f434b3f6f?w=500&q=80" alt="Geometric Modern" class="card-image" style="object-fit: cover;">
|
||||
<div class="card-content">
|
||||
<div class="card-title">Geometric Modern</div>
|
||||
<p class="card-description">Contemporary geometric patterns on cotton canvas. Durable and perfect for high-traffic furniture.</p>
|
||||
<div style="display: flex; justify-content: space-between; align-items: center; margin-top: 1rem;">
|
||||
<span style="font-weight: 600;">From $48/yard</span>
|
||||
<button class="btn btn--sm">View</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Vintage Elegance -->
|
||||
<div class="product-card">
|
||||
<img src="https://images.unsplash.com/photo-1578500494198-246f612d03b3?w=500&q=80" alt="Vintage Elegance" class="card-image" style="object-fit: cover;">
|
||||
<div class="card-content">
|
||||
<div class="card-title">Vintage Elegance</div>
|
||||
<p class="card-description">Classic ornamental patterns on silk blend fabric. Ideal for luxury upholstery and formal drapery.</p>
|
||||
<div style="display: flex; justify-content: space-between; align-items: center; margin-top: 1rem;">
|
||||
<span style="font-weight: 600;">From $65/yard</span>
|
||||
<button class="btn btn--sm">View</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Tropical Vibrancy -->
|
||||
<div class="product-card">
|
||||
<img src="https://images.unsplash.com/photo-1505142468610-359e7d316be0?w=500&q=80" alt="Tropical Vibrancy" class="card-image" style="object-fit: cover;">
|
||||
<div class="card-content">
|
||||
<div class="card-title">Tropical Vibrancy</div>
|
||||
<p class="card-description">Bright tropical foliage patterns on cotton velvet. Perfect for statement cushions and accent furniture.</p>
|
||||
<div style="display: flex; justify-content: space-between; align-items: center; margin-top: 1rem;">
|
||||
<span style="font-weight: 600;">From $52/yard</span>
|
||||
<button class="btn btn--sm">View</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Minimalist Serenity -->
|
||||
<div class="product-card">
|
||||
<img src="https://images.unsplash.com/photo-1511884642898-4c92249e20b6?w=500&q=80" alt="Minimalist Serenity" class="card-image" style="object-fit: cover;">
|
||||
<div class="card-content">
|
||||
<div class="card-title">Minimalist Serenity</div>
|
||||
<p class="card-description">Subtle minimalist patterns on natural linen. Versatile for any interior design style.</p>
|
||||
<div style="display: flex; justify-content: space-between; align-items: center; margin-top: 1rem;">
|
||||
<span style="font-weight: 600;">From $42/yard</span>
|
||||
<button class="btn btn--sm">View</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Luxe Textured -->
|
||||
<div class="product-card">
|
||||
<img src="https://images.unsplash.com/photo-1578926078328-123alce3f3ce?w=500&q=80" alt="Luxe Textured" class="card-image" style="object-fit: cover;">
|
||||
<div class="card-content">
|
||||
<div class="card-title">Luxe Textured</div>
|
||||
<p class="card-description">High-end jacquard weave fabrics with dimensional textures. Perfect for luxury applications.</p>
|
||||
<div style="display: flex; justify-content: space-between; align-items: center; margin-top: 1rem;">
|
||||
<span style="font-weight: 600;">From $75/yard</span>
|
||||
<button class="btn btn--sm">View</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CUSTOMIZATION SECTION -->
|
||||
<section class="section section--light">
|
||||
<div class="container">
|
||||
<h2>Fully Customizable</h2>
|
||||
<div class="two-col">
|
||||
<div class="two-col-text">
|
||||
<h3>Create Your Own Custom Fabric</h3>
|
||||
<p>Love a wallpaper design? We can print it on any of our premium fabric bases. Upload your own design or choose from our wallpaper collections and we'll print it on your fabric of choice.</p>
|
||||
<ul style="list-style: none; color: var(--text-secondary); margin: var(--spacing-md) 0;">
|
||||
<li style="margin-bottom: 12px;"><strong>✓ Any Wallpaper Design:</strong> Choose from our full wallpaper catalog</li>
|
||||
<li style="margin-bottom: 12px;"><strong>✓ Custom Uploads:</strong> Print your own designs or artwork</li>
|
||||
<li style="margin-bottom: 12px;"><strong>✓ Multiple Base Fabrics:</strong> Select from cotton, linen, silk blends, and more</li>
|
||||
<li style="margin-bottom: 12px;"><strong>✓ Custom Sizing:</strong> Order exact yardage you need</li>
|
||||
<li style="margin-bottom: 12px;"><strong>✓ Sample Swatches:</strong> Order fabric samples before committing</li>
|
||||
</ul>
|
||||
<button class="btn" style="margin-top: var(--spacing-lg);">Start Custom Design</button>
|
||||
</div>
|
||||
<div class="two-col-image">
|
||||
<img src="https://images.unsplash.com/photo-1578500494198-246f612d03b3?w=500&q=80" alt="Custom Fabrics" style="width: 100%; height: auto; border-radius: 8px; object-fit: cover;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- FABRIC SPECIFICATIONS -->
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<h2>Fabric Specifications & Care</h2>
|
||||
<div style="background-color: var(--bg-secondary); padding: var(--spacing-lg); border-radius: 20px;">
|
||||
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: var(--spacing-lg);">
|
||||
<div>
|
||||
<h4 style="color: var(--accent-dark); margin-bottom: 1rem;">Standard Widths</h4>
|
||||
<ul style="list-style: none; color: var(--text-secondary);">
|
||||
<li style="margin-bottom: 8px;">• 54" (Standard upholstery)</li>
|
||||
<li style="margin-bottom: 8px;">• 60" (Premium upholstery)</li>
|
||||
<li style="margin-bottom: 8px;">• 45" (Quilting & crafts)</li>
|
||||
<li style="margin-bottom: 8px;">• 118" (Curtain & drape)</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4 style="color: var(--accent-dark); margin-bottom: 1rem;">Care Instructions</h4>
|
||||
<ul style="list-style: none; color: var(--text-secondary);">
|
||||
<li style="margin-bottom: 8px;">• Dry clean or gentle hand wash recommended</li>
|
||||
<li style="margin-bottom: 8px;">• Use cool water with mild detergent</li>
|
||||
<li style="margin-bottom: 8px;">• Air dry away from direct heat</li>
|
||||
<li style="margin-bottom: 8px;">• Professional upholstery cleaning safe</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CTA SECTION -->
|
||||
<section class="section section--highlight">
|
||||
<div class="container" style="text-align: center;">
|
||||
<h2>Ready to Start Your Fabric Project?</h2>
|
||||
<p style="max-width: 600px; margin: 0 auto var(--spacing-lg); color: var(--text-primary);">
|
||||
Contact our team to discuss your custom fabric needs. We'll provide samples, pricing, and personalized recommendations.
|
||||
</p>
|
||||
<button class="btn btn--secondary">Request Custom Quote</button>
|
||||
</div>
|
||||
</section>
|
||||
<?php $__env->stopSection(); ?>
|
||||
|
||||
<?php echo $__env->make('layouts.app', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?><?php /**PATH /var/www/additional_design/resources/views/fabrics.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,225 @@
|
||||
<?php
|
||||
use Filament\Support\Enums\FontWeight;
|
||||
use Filament\Support\Enums\IconPosition;
|
||||
use Filament\Support\Enums\IconSize;
|
||||
use Filament\Support\Enums\Size;
|
||||
use Filament\Support\View\Components\BadgeComponent;
|
||||
use Filament\Support\View\Components\LinkComponent;
|
||||
use Illuminate\View\ComponentAttributeBag;
|
||||
?>
|
||||
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'badge' => null,
|
||||
'badgeColor' => 'primary',
|
||||
'badgeSize' => Size::ExtraSmall,
|
||||
'color' => 'primary',
|
||||
'disabled' => false,
|
||||
'form' => null,
|
||||
'formId' => null,
|
||||
'href' => null,
|
||||
'icon' => null,
|
||||
'iconAlias' => null,
|
||||
'iconPosition' => IconPosition::Before,
|
||||
'iconSize' => null,
|
||||
'keyBindings' => null,
|
||||
'labelSrOnly' => false,
|
||||
'loadingIndicator' => true,
|
||||
'size' => Size::Medium,
|
||||
'spaMode' => null,
|
||||
'tag' => 'a',
|
||||
'target' => null,
|
||||
'tooltip' => null,
|
||||
'type' => 'button',
|
||||
'weight' => null,
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'badge' => null,
|
||||
'badgeColor' => 'primary',
|
||||
'badgeSize' => Size::ExtraSmall,
|
||||
'color' => 'primary',
|
||||
'disabled' => false,
|
||||
'form' => null,
|
||||
'formId' => null,
|
||||
'href' => null,
|
||||
'icon' => null,
|
||||
'iconAlias' => null,
|
||||
'iconPosition' => IconPosition::Before,
|
||||
'iconSize' => null,
|
||||
'keyBindings' => null,
|
||||
'labelSrOnly' => false,
|
||||
'loadingIndicator' => true,
|
||||
'size' => Size::Medium,
|
||||
'spaMode' => null,
|
||||
'tag' => 'a',
|
||||
'target' => null,
|
||||
'tooltip' => null,
|
||||
'type' => 'button',
|
||||
'weight' => null,
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
if (! $iconPosition instanceof IconPosition) {
|
||||
$iconPosition = filled($iconPosition) ? (IconPosition::tryFrom($iconPosition) ?? $iconPosition) : null;
|
||||
}
|
||||
|
||||
if (! $badgeSize instanceof Size) {
|
||||
$badgeSize = filled($badgeSize) ? (Size::tryFrom($badgeSize) ?? $badgeSize) : null;
|
||||
}
|
||||
|
||||
if (! $size instanceof Size) {
|
||||
$size = filled($size) ? (Size::tryFrom($size) ?? $size) : null;
|
||||
}
|
||||
|
||||
if (filled($iconSize) && (! $iconSize instanceof IconSize)) {
|
||||
$iconSize = IconSize::tryFrom($iconSize) ?? $iconSize;
|
||||
}
|
||||
|
||||
$iconSize ??= match ($size) {
|
||||
Size::ExtraSmall, Size::Small => IconSize::Small,
|
||||
default => null,
|
||||
};
|
||||
|
||||
if (! $weight instanceof FontWeight) {
|
||||
$weight = filled($weight) ? (FontWeight::tryFrom($weight) ?? $weight) : null;
|
||||
}
|
||||
|
||||
$wireTarget = $loadingIndicator ? $attributes->whereStartsWith(['wire:target', 'wire:click'])->filter(fn ($value): bool => filled($value))->first() : null;
|
||||
|
||||
$hasLoadingIndicator = filled($wireTarget) || ($type === 'submit' && filled($form));
|
||||
|
||||
if ($hasLoadingIndicator) {
|
||||
$loadingIndicatorTarget = html_entity_decode($wireTarget ?: $form, ENT_QUOTES);
|
||||
}
|
||||
|
||||
$hasTooltip = filled($tooltip);
|
||||
?>
|
||||
|
||||
<<?php echo e($tag); ?>
|
||||
|
||||
<?php if(($tag === 'a') && (! ($disabled && $hasTooltip))): ?>
|
||||
<?php echo e(\Filament\Support\generate_href_html($href, $target === '_blank', $spaMode)); ?>
|
||||
|
||||
<?php endif; ?>
|
||||
<?php if($keyBindings): ?>
|
||||
x-bind:id="$id('key-bindings')"
|
||||
x-mousetrap.global.<?php echo e(collect($keyBindings)->map(fn (string $keyBinding): string => str_replace('+', '-', $keyBinding))->implode('.')); ?>="document.getElementById($el.id)?.click()"
|
||||
<?php endif; ?>
|
||||
<?php if($hasTooltip): ?>
|
||||
x-tooltip="{
|
||||
content: <?php echo \Illuminate\Support\Js::from($tooltip)->toHtml() ?>,
|
||||
theme: $store.theme,
|
||||
allowHTML: <?php echo \Illuminate\Support\Js::from($tooltip instanceof \Illuminate\Contracts\Support\Htmlable)->toHtml() ?>,
|
||||
}"
|
||||
<?php endif; ?>
|
||||
<?php echo e($attributes
|
||||
->merge([
|
||||
'aria-disabled' => $disabled ? 'true' : null,
|
||||
'disabled' => $disabled && blank($tooltip),
|
||||
'form' => $formId,
|
||||
'type' => $tag === 'button' ? $type : null,
|
||||
'wire:loading.attr' => $tag === 'button' ? 'disabled' : null,
|
||||
'wire:target' => ($hasLoadingIndicator && $loadingIndicatorTarget) ? $loadingIndicatorTarget : null,
|
||||
], escape: false)
|
||||
->when(
|
||||
$disabled && $hasTooltip,
|
||||
fn (ComponentAttributeBag $attributes) => $attributes->filter(
|
||||
fn (mixed $value, string $key): bool => ! str($key)->startsWith(['href', 'x-on:', 'wire:click']),
|
||||
),
|
||||
)
|
||||
->class([
|
||||
'fi-link',
|
||||
'fi-disabled' => $disabled,
|
||||
($size instanceof Size) ? "fi-size-{$size->value}" : (is_string($size) ? $size : ''),
|
||||
($weight instanceof FontWeight) ? "fi-font-{$weight->value}" : (is_string($weight) ? $weight : ''),
|
||||
])
|
||||
->color(LinkComponent::class, $color)); ?>
|
||||
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($iconPosition === IconPosition::Before): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($icon): ?>
|
||||
<?php echo e(\Filament\Support\generate_icon_html($icon, $iconAlias, (new \Illuminate\View\ComponentAttributeBag([
|
||||
'wire:loading.remove.delay.' . config('filament.livewire_loading_delay', 'default') => $hasLoadingIndicator,
|
||||
'wire:target' => $hasLoadingIndicator ? $loadingIndicatorTarget : false,
|
||||
])), size: $iconSize)); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasLoadingIndicator): ?>
|
||||
<?php echo e(\Filament\Support\generate_loading_indicator_html((new \Illuminate\View\ComponentAttributeBag([
|
||||
'wire:loading.delay.' . config('filament.livewire_loading_delay', 'default') => '',
|
||||
'wire:target' => $loadingIndicatorTarget,
|
||||
])), size: $iconSize)); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(! $labelSrOnly): ?>
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($iconPosition === IconPosition::After): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($icon): ?>
|
||||
<?php echo e(\Filament\Support\generate_icon_html($icon, $iconAlias, (new \Illuminate\View\ComponentAttributeBag([
|
||||
'wire:loading.remove.delay.' . config('filament.livewire_loading_delay', 'default') => $hasLoadingIndicator,
|
||||
'wire:target' => $hasLoadingIndicator ? $loadingIndicatorTarget : false,
|
||||
])), size: $iconSize)); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($hasLoadingIndicator): ?>
|
||||
<?php echo e(\Filament\Support\generate_loading_indicator_html((new \Illuminate\View\ComponentAttributeBag([
|
||||
'wire:loading.delay.' . config('filament.livewire_loading_delay', 'default') => '',
|
||||
'wire:target' => $loadingIndicatorTarget,
|
||||
])), size: $iconSize)); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($badge)): ?>
|
||||
<div class="fi-link-badge-ctn">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($badge instanceof \Illuminate\View\ComponentSlot): ?>
|
||||
<?php echo e($badge); ?>
|
||||
|
||||
<?php else: ?>
|
||||
<span
|
||||
<?php echo e((new ComponentAttributeBag)->color(BadgeComponent::class, $badgeColor)->class([
|
||||
'fi-badge',
|
||||
($badgeSize instanceof Size) ? "fi-size-{$badgeSize->value}" : (is_string($badgeSize) ? $badgeSize : ''),
|
||||
])); ?>
|
||||
|
||||
>
|
||||
<?php echo e($badge); ?>
|
||||
|
||||
</span>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</<?php echo e($tag); ?>><?php /**PATH /var/www/additional_design/vendor/filament/support/resources/views/components/link.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
$columns = $this->getColumns();
|
||||
$pollingInterval = $this->getPollingInterval();
|
||||
|
||||
$heading = $this->getHeading();
|
||||
$description = $this->getDescription();
|
||||
$hasHeading = filled($heading);
|
||||
$hasDescription = filled($description);
|
||||
?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginalb525200bfa976483b4eaa0b7685c6e24 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalb525200bfa976483b4eaa0b7685c6e24 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-widgets::components.widget','data' => ['attributes' =>
|
||||
(new \Illuminate\View\ComponentAttributeBag)
|
||||
->merge([
|
||||
'wire:poll.' . $pollingInterval => $pollingInterval ? true : null,
|
||||
], escape: false)
|
||||
->class([
|
||||
'fi-wi-stats-overview',
|
||||
])
|
||||
]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-widgets::widget'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['attributes' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(
|
||||
(new \Illuminate\View\ComponentAttributeBag)
|
||||
->merge([
|
||||
'wire:poll.' . $pollingInterval => $pollingInterval ? true : null,
|
||||
], escape: false)
|
||||
->class([
|
||||
'fi-wi-stats-overview',
|
||||
])
|
||||
)]); ?>
|
||||
<?php echo e($this->content); ?>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalb525200bfa976483b4eaa0b7685c6e24)): ?>
|
||||
<?php $attributes = $__attributesOriginalb525200bfa976483b4eaa0b7685c6e24; ?>
|
||||
<?php unset($__attributesOriginalb525200bfa976483b4eaa0b7685c6e24); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalb525200bfa976483b4eaa0b7685c6e24)): ?>
|
||||
<?php $component = $__componentOriginalb525200bfa976483b4eaa0b7685c6e24; ?>
|
||||
<?php unset($__componentOriginalb525200bfa976483b4eaa0b7685c6e24); ?>
|
||||
<?php endif; ?>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/widgets/resources/views/stats-overview-widget.blade.php ENDPATH**/ ?>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,8 @@
|
||||
<div
|
||||
<?php echo e($attributes->gridColumn($this->getColumnSpan(), $this->getColumnStart())->class(['fi-wi-widget'])); ?>
|
||||
|
||||
>
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
</div>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/widgets/resources/views/components/widget.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'user' => filament()->auth()->user(),
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'user' => filament()->auth()->user(),
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
$src = filament()->getUserAvatarUrl($user);
|
||||
$alt = __('filament-panels::layout.avatar.alt', ['name' => filament()->getUserName($user)]);
|
||||
?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal7aa0b6b1aa4a6b63824d7be5e541d1cb = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal7aa0b6b1aa4a6b63824d7be5e541d1cb = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.avatar','data' => ['src' => $src,'alt' => $alt,'attributes' =>
|
||||
\Filament\Support\prepare_inherited_attributes($attributes)
|
||||
->class(['fi-user-avatar'])
|
||||
]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::avatar'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['src' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($src),'alt' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($alt),'attributes' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(
|
||||
\Filament\Support\prepare_inherited_attributes($attributes)
|
||||
->class(['fi-user-avatar'])
|
||||
)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal7aa0b6b1aa4a6b63824d7be5e541d1cb)): ?>
|
||||
<?php $attributes = $__attributesOriginal7aa0b6b1aa4a6b63824d7be5e541d1cb; ?>
|
||||
<?php unset($__attributesOriginal7aa0b6b1aa4a6b63824d7be5e541d1cb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal7aa0b6b1aa4a6b63824d7be5e541d1cb)): ?>
|
||||
<?php $component = $__componentOriginal7aa0b6b1aa4a6b63824d7be5e541d1cb; ?>
|
||||
<?php unset($__componentOriginal7aa0b6b1aa4a6b63824d7be5e541d1cb); ?>
|
||||
<?php endif; ?>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/components/avatar/user.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,108 @@
|
||||
<?php
|
||||
$user = filament()->auth()->user();
|
||||
?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginalb525200bfa976483b4eaa0b7685c6e24 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalb525200bfa976483b4eaa0b7685c6e24 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-widgets::components.widget','data' => ['class' => 'fi-account-widget']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-widgets::widget'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'fi-account-widget']); ?>
|
||||
<?php if (isset($component)) { $__componentOriginalee08b1367eba38734199cf7829b1d1e9 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalee08b1367eba38734199cf7829b1d1e9 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.section.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::section'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php if (isset($component)) { $__componentOriginalceea4679a368984135244eacf4aafeca = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalceea4679a368984135244eacf4aafeca = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.avatar.user','data' => ['size' => 'lg','user' => $user,'loading' => 'lazy']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-panels::avatar.user'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['size' => 'lg','user' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($user),'loading' => 'lazy']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalceea4679a368984135244eacf4aafeca)): ?>
|
||||
<?php $attributes = $__attributesOriginalceea4679a368984135244eacf4aafeca; ?>
|
||||
<?php unset($__attributesOriginalceea4679a368984135244eacf4aafeca); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalceea4679a368984135244eacf4aafeca)): ?>
|
||||
<?php $component = $__componentOriginalceea4679a368984135244eacf4aafeca; ?>
|
||||
<?php unset($__componentOriginalceea4679a368984135244eacf4aafeca); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="fi-account-widget-main">
|
||||
<h2 class="fi-account-widget-heading">
|
||||
<?php echo e(__('filament-panels::widgets/account-widget.welcome', ['app' => config('app.name')])); ?>
|
||||
|
||||
</h2>
|
||||
|
||||
<p class="fi-account-widget-user-name">
|
||||
<?php echo e(filament()->getUserName($user)); ?>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<form
|
||||
action="<?php echo e(filament()->getLogoutUrl()); ?>"
|
||||
method="post"
|
||||
class="fi-account-widget-logout-form"
|
||||
>
|
||||
<?php echo csrf_field(); ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal6330f08526bbb3ce2a0da37da512a11f = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal6330f08526bbb3ce2a0da37da512a11f = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.button.index','data' => ['color' => 'gray','icon' => \Filament\Support\Icons\Heroicon::ArrowLeftEndOnRectangle,'iconAlias' => \Filament\View\PanelsIconAlias::WIDGETS_ACCOUNT_LOGOUT_BUTTON,'labeledFrom' => 'sm','tag' => 'button','type' => 'submit']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['color' => 'gray','icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\Support\Icons\Heroicon::ArrowLeftEndOnRectangle),'icon-alias' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(\Filament\View\PanelsIconAlias::WIDGETS_ACCOUNT_LOGOUT_BUTTON),'labeled-from' => 'sm','tag' => 'button','type' => 'submit']); ?>
|
||||
<?php echo e(__('filament-panels::widgets/account-widget.actions.logout.label')); ?>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal6330f08526bbb3ce2a0da37da512a11f)): ?>
|
||||
<?php $attributes = $__attributesOriginal6330f08526bbb3ce2a0da37da512a11f; ?>
|
||||
<?php unset($__attributesOriginal6330f08526bbb3ce2a0da37da512a11f); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal6330f08526bbb3ce2a0da37da512a11f)): ?>
|
||||
<?php $component = $__componentOriginal6330f08526bbb3ce2a0da37da512a11f; ?>
|
||||
<?php unset($__componentOriginal6330f08526bbb3ce2a0da37da512a11f); ?>
|
||||
<?php endif; ?>
|
||||
</form>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalee08b1367eba38734199cf7829b1d1e9)): ?>
|
||||
<?php $attributes = $__attributesOriginalee08b1367eba38734199cf7829b1d1e9; ?>
|
||||
<?php unset($__attributesOriginalee08b1367eba38734199cf7829b1d1e9); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalee08b1367eba38734199cf7829b1d1e9)): ?>
|
||||
<?php $component = $__componentOriginalee08b1367eba38734199cf7829b1d1e9; ?>
|
||||
<?php unset($__componentOriginalee08b1367eba38734199cf7829b1d1e9); ?>
|
||||
<?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalb525200bfa976483b4eaa0b7685c6e24)): ?>
|
||||
<?php $attributes = $__attributesOriginalb525200bfa976483b4eaa0b7685c6e24; ?>
|
||||
<?php unset($__attributesOriginalb525200bfa976483b4eaa0b7685c6e24); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalb525200bfa976483b4eaa0b7685c6e24)): ?>
|
||||
<?php $component = $__componentOriginalb525200bfa976483b4eaa0b7685c6e24; ?>
|
||||
<?php unset($__componentOriginalb525200bfa976483b4eaa0b7685c6e24); ?>
|
||||
<?php endif; ?>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/filament/resources/views/widgets/account-widget.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
$afterHeader = $getChildSchema($schemaComponent::AFTER_HEADER_SCHEMA_KEY)?->toHtmlString();
|
||||
$isAside = $isAside();
|
||||
$isCollapsed = $isCollapsed();
|
||||
$isCollapsible = $isCollapsible();
|
||||
$isCompact = $isCompact();
|
||||
$isContained = $isContained();
|
||||
$isDivided = $isDivided();
|
||||
$isFormBefore = $isFormBefore();
|
||||
$description = $getDescription();
|
||||
$footer = $getChildSchema($schemaComponent::FOOTER_SCHEMA_KEY)?->toHtmlString();
|
||||
$heading = $getHeading();
|
||||
$headingTag = $getHeadingTag();
|
||||
$icon = $getIcon();
|
||||
$iconColor = $getIconColor();
|
||||
$iconSize = $getIconSize();
|
||||
$shouldPersistCollapsed = $shouldPersistCollapsed();
|
||||
$isSecondary = $isSecondary();
|
||||
$id = $getId();
|
||||
?>
|
||||
|
||||
<div
|
||||
<?php echo e($attributes
|
||||
->merge([
|
||||
'id' => $id,
|
||||
], escape: false)
|
||||
->merge($getExtraAttributes(), escape: false)
|
||||
->merge($getExtraAlpineAttributes(), escape: false)
|
||||
->class(['fi-sc-section'])); ?>
|
||||
|
||||
>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(filled($label = $getLabel())): ?>
|
||||
<div class="fi-sc-section-label-ctn">
|
||||
<?php echo e($getChildSchema($schemaComponent::BEFORE_LABEL_SCHEMA_KEY)); ?>
|
||||
|
||||
|
||||
<div class="fi-sc-section-label">
|
||||
<?php echo e($label); ?>
|
||||
|
||||
</div>
|
||||
|
||||
<?php echo e($getChildSchema($schemaComponent::AFTER_LABEL_SCHEMA_KEY)); ?>
|
||||
|
||||
</div>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($aboveContentContainer = $getChildSchema($schemaComponent::ABOVE_CONTENT_SCHEMA_KEY)?->toHtmlString()): ?>
|
||||
<?php echo e($aboveContentContainer); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginalee08b1367eba38734199cf7829b1d1e9 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalee08b1367eba38734199cf7829b1d1e9 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.section.index','data' => ['afterHeader' => $afterHeader,'aside' => $isAside,'collapsed' => $isCollapsed,'collapseId' => $id,'collapsible' => $isCollapsible && (! $isAside),'compact' => $isCompact,'contained' => $isContained,'contentBefore' => $isFormBefore,'description' => $description,'divided' => $isDivided,'footer' => $footer,'hasContentEl' => false,'heading' => $heading,'headingTag' => $headingTag,'icon' => $icon,'iconColor' => $iconColor,'iconSize' => $iconSize,'persistCollapsed' => $shouldPersistCollapsed,'secondary' => $isSecondary]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::section'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['after-header' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($afterHeader),'aside' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isAside),'collapsed' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isCollapsed),'collapse-id' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($id),'collapsible' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isCollapsible && (! $isAside)),'compact' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isCompact),'contained' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isContained),'content-before' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isFormBefore),'description' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($description),'divided' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isDivided),'footer' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($footer),'has-content-el' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(false),'heading' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($heading),'heading-tag' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($headingTag),'icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($icon),'icon-color' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($iconColor),'icon-size' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($iconSize),'persist-collapsed' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($shouldPersistCollapsed),'secondary' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isSecondary)]); ?>
|
||||
<?php echo e($getChildSchema()->gap(! $isDivided)->extraAttributes(['class' => 'fi-section-content'])); ?>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalee08b1367eba38734199cf7829b1d1e9)): ?>
|
||||
<?php $attributes = $__attributesOriginalee08b1367eba38734199cf7829b1d1e9; ?>
|
||||
<?php unset($__attributesOriginalee08b1367eba38734199cf7829b1d1e9); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalee08b1367eba38734199cf7829b1d1e9)): ?>
|
||||
<?php $component = $__componentOriginalee08b1367eba38734199cf7829b1d1e9; ?>
|
||||
<?php unset($__componentOriginalee08b1367eba38734199cf7829b1d1e9); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($belowContentContainer = $getChildSchema($schemaComponent::BELOW_CONTENT_SCHEMA_KEY)?->toHtmlString()): ?>
|
||||
<?php echo e($belowContentContainer); ?>
|
||||
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/schemas/resources/views/components/section.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,187 @@
|
||||
<?php
|
||||
use Filament\Widgets\View\Components\ChartWidgetComponent;
|
||||
use Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$color = $this->getColor();
|
||||
$heading = $this->getHeading();
|
||||
$description = $this->getDescription();
|
||||
$filters = $this->getFilters();
|
||||
$isCollapsible = $this->isCollapsible();
|
||||
$type = $this->getType();
|
||||
?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginalb525200bfa976483b4eaa0b7685c6e24 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalb525200bfa976483b4eaa0b7685c6e24 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-widgets::components.widget','data' => ['class' => 'fi-wi-chart']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament-widgets::widget'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'fi-wi-chart']); ?>
|
||||
<?php if (isset($component)) { $__componentOriginalee08b1367eba38734199cf7829b1d1e9 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalee08b1367eba38734199cf7829b1d1e9 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.section.index','data' => ['description' => $description,'heading' => $heading,'collapsible' => $isCollapsible]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::section'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['description' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($description),'heading' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($heading),'collapsible' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($isCollapsible)]); ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($filters || method_exists($this, 'getFiltersSchema')): ?>
|
||||
<?php $__env->slot('afterHeader', null, []); ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($filters): ?>
|
||||
<?php if (isset($component)) { $__componentOriginal505efd9768415fdb4543e8c564dad437 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal505efd9768415fdb4543e8c564dad437 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.input.wrapper','data' => ['inlinePrefix' => true,'wire:target' => 'filter','class' => 'fi-wi-chart-filter']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::input.wrapper'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['inline-prefix' => true,'wire:target' => 'filter','class' => 'fi-wi-chart-filter']); ?>
|
||||
<?php if (isset($component)) { $__componentOriginal97dc683fe4ff7acce9e296503563dd85 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal97dc683fe4ff7acce9e296503563dd85 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.input.select','data' => ['inlinePrefix' => true,'wire:model.live' => 'filter']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::input.select'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['inline-prefix' => true,'wire:model.live' => 'filter']); ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $filters; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $value => $label): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<option value="<?php echo e($value); ?>">
|
||||
<?php echo e($label); ?>
|
||||
|
||||
</option>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal97dc683fe4ff7acce9e296503563dd85)): ?>
|
||||
<?php $attributes = $__attributesOriginal97dc683fe4ff7acce9e296503563dd85; ?>
|
||||
<?php unset($__attributesOriginal97dc683fe4ff7acce9e296503563dd85); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal97dc683fe4ff7acce9e296503563dd85)): ?>
|
||||
<?php $component = $__componentOriginal97dc683fe4ff7acce9e296503563dd85; ?>
|
||||
<?php unset($__componentOriginal97dc683fe4ff7acce9e296503563dd85); ?>
|
||||
<?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal505efd9768415fdb4543e8c564dad437)): ?>
|
||||
<?php $attributes = $__attributesOriginal505efd9768415fdb4543e8c564dad437; ?>
|
||||
<?php unset($__attributesOriginal505efd9768415fdb4543e8c564dad437); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal505efd9768415fdb4543e8c564dad437)): ?>
|
||||
<?php $component = $__componentOriginal505efd9768415fdb4543e8c564dad437; ?>
|
||||
<?php unset($__componentOriginal505efd9768415fdb4543e8c564dad437); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(method_exists($this, 'getFiltersSchema')): ?>
|
||||
<?php if (isset($component)) { $__componentOriginal22ab0dbc2c6619d5954111bba06f01db = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal22ab0dbc2c6619d5954111bba06f01db = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.dropdown.index','data' => ['placement' => 'bottom-end','shift' => true,'width' => 'xs','class' => 'fi-wi-chart-filter']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('filament::dropdown'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['placement' => 'bottom-end','shift' => true,'width' => 'xs','class' => 'fi-wi-chart-filter']); ?>
|
||||
<?php $__env->slot('trigger', null, []); ?>
|
||||
<?php echo e($this->getFiltersTriggerAction()); ?>
|
||||
|
||||
<?php $__env->endSlot(); ?>
|
||||
|
||||
<div class="fi-wi-chart-filter-content">
|
||||
<?php echo e($this->getFiltersSchema()); ?>
|
||||
|
||||
</div>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal22ab0dbc2c6619d5954111bba06f01db)): ?>
|
||||
<?php $attributes = $__attributesOriginal22ab0dbc2c6619d5954111bba06f01db; ?>
|
||||
<?php unset($__attributesOriginal22ab0dbc2c6619d5954111bba06f01db); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal22ab0dbc2c6619d5954111bba06f01db)): ?>
|
||||
<?php $component = $__componentOriginal22ab0dbc2c6619d5954111bba06f01db; ?>
|
||||
<?php unset($__componentOriginal22ab0dbc2c6619d5954111bba06f01db); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php $__env->endSlot(); ?>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
|
||||
<div
|
||||
<?php if($pollingInterval = $this->getPollingInterval()): ?>
|
||||
wire:poll.<?php echo e($pollingInterval); ?>="updateChartData"
|
||||
<?php endif; ?>
|
||||
>
|
||||
<div
|
||||
x-load
|
||||
x-load-src="<?php echo e(\Filament\Support\Facades\FilamentAsset::getAlpineComponentSrc('chart', 'filament/widgets')); ?>"
|
||||
wire:ignore
|
||||
data-chart-type="<?php echo e($type); ?>"
|
||||
x-data="chart({
|
||||
cachedData: <?php echo \Illuminate\Support\Js::from($this->getCachedData())->toHtml() ?>,
|
||||
options: <?php echo \Illuminate\Support\Js::from($this->getOptions())->toHtml() ?>,
|
||||
type: <?php echo \Illuminate\Support\Js::from($type)->toHtml() ?>,
|
||||
})"
|
||||
<?php echo e((new ComponentAttributeBag)
|
||||
->color(ChartWidgetComponent::class, $color)
|
||||
->class([
|
||||
'fi-wi-chart-canvas-ctn',
|
||||
'fi-wi-chart-canvas-ctn-no-aspect-ratio' => filled($maxHeight = $this->getMaxHeight()),
|
||||
])
|
||||
->style([
|
||||
'max-height: ' . $maxHeight => filled($maxHeight),
|
||||
])); ?>
|
||||
|
||||
>
|
||||
<canvas x-ref="canvas"></canvas>
|
||||
|
||||
<span
|
||||
x-ref="backgroundColorElement"
|
||||
class="fi-wi-chart-bg-color"
|
||||
></span>
|
||||
|
||||
<span
|
||||
x-ref="borderColorElement"
|
||||
class="fi-wi-chart-border-color"
|
||||
></span>
|
||||
|
||||
<span
|
||||
x-ref="gridColorElement"
|
||||
class="fi-wi-chart-grid-color"
|
||||
></span>
|
||||
|
||||
<span
|
||||
x-ref="textColorElement"
|
||||
class="fi-wi-chart-text-color"
|
||||
></span>
|
||||
</div>
|
||||
</div>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalee08b1367eba38734199cf7829b1d1e9)): ?>
|
||||
<?php $attributes = $__attributesOriginalee08b1367eba38734199cf7829b1d1e9; ?>
|
||||
<?php unset($__attributesOriginalee08b1367eba38734199cf7829b1d1e9); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalee08b1367eba38734199cf7829b1d1e9)): ?>
|
||||
<?php $component = $__componentOriginalee08b1367eba38734199cf7829b1d1e9; ?>
|
||||
<?php unset($__componentOriginalee08b1367eba38734199cf7829b1d1e9); ?>
|
||||
<?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalb525200bfa976483b4eaa0b7685c6e24)): ?>
|
||||
<?php $attributes = $__attributesOriginalb525200bfa976483b4eaa0b7685c6e24; ?>
|
||||
<?php unset($__attributesOriginalb525200bfa976483b4eaa0b7685c6e24); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalb525200bfa976483b4eaa0b7685c6e24)): ?>
|
||||
<?php $component = $__componentOriginalb525200bfa976483b4eaa0b7685c6e24; ?>
|
||||
<?php unset($__componentOriginalb525200bfa976483b4eaa0b7685c6e24); ?>
|
||||
<?php endif; ?>
|
||||
<?php /**PATH /var/www/additional_design/vendor/filament/widgets/resources/views/chart-widget.blade.php ENDPATH**/ ?>
|
||||
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Models\Order;
|
||||
use App\Testing\ShiplogicMockClient;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Tests\TestCase;
|
||||
|
||||
class ShipmentCreationTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
/**
|
||||
* Test that shipment can be created with mocked Shiplogic API
|
||||
*/
|
||||
public function test_shipment_creation_with_mock_api(): void
|
||||
{
|
||||
// Setup mock HTTP responses
|
||||
ShiplogicMockClient::setup();
|
||||
|
||||
// Create a test order with required fields
|
||||
$order = Order::factory()->create([
|
||||
'order_number' => 'TEST-001',
|
||||
'customer_name' => 'John Doe',
|
||||
'customer_email' => 'john@example.com',
|
||||
'customer_phone' => '+1234567890',
|
||||
'delivery_street' => '123 Main Street',
|
||||
'delivery_unit' => 'Apt 5B',
|
||||
'delivery_city' => 'New York',
|
||||
'delivery_zone' => 'NY',
|
||||
'delivery_code' => '10001',
|
||||
'delivery_country' => 'US',
|
||||
'packing_length' => 30,
|
||||
'packing_width' => 20,
|
||||
'packing_height' => 10,
|
||||
'packing_weight' => 2.5,
|
||||
'status' => 'ready_to_ship',
|
||||
]);
|
||||
|
||||
// Dispatch the ReadyToShipIntent event to trigger shipment creation
|
||||
// This would normally be triggered by user action in Filament
|
||||
event(new \App\Events\ReadyToShipIntent($order));
|
||||
|
||||
// Verify the order now has shipment metadata
|
||||
$order->refresh();
|
||||
$this->assertNotNull($order->courier_shipment_id);
|
||||
$this->assertNotNull($order->courier_service_level_code);
|
||||
$this->assertNotNull($order->courier_rate);
|
||||
|
||||
// Verify PDFs were stored
|
||||
$this->assertTrue(\Illuminate\Support\Facades\Storage::exists(
|
||||
"public/shipments/{$order->uuid}/Shipment Label.pdf"
|
||||
));
|
||||
$this->assertTrue(\Illuminate\Support\Facades\Storage::exists(
|
||||
"public/shipments/{$order->uuid}/Shipment Sticker.pdf"
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that ECO service level is selected when available
|
||||
*/
|
||||
public function test_eco_service_level_selection(): void
|
||||
{
|
||||
ShiplogicMockClient::setup();
|
||||
|
||||
$order = Order::factory()->create([
|
||||
'order_number' => 'TEST-002',
|
||||
'customer_name' => 'Jane Smith',
|
||||
'customer_email' => 'jane@example.com',
|
||||
'delivery_street' => '456 Oak Ave',
|
||||
'delivery_city' => 'London',
|
||||
'delivery_country' => 'GB',
|
||||
'packing_weight' => 1.5,
|
||||
'status' => 'ready_to_ship',
|
||||
]);
|
||||
|
||||
event(new \App\Events\ReadyToShipIntent($order));
|
||||
|
||||
$order->refresh();
|
||||
// ECO variant should be selected (FEDEX_INTERNATIONAL_ECONOMY)
|
||||
$this->assertStringContainsString('ECONOMY', $order->courier_service_level_code);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user