fix: make delivery option on checkout stick to the current sale channel
This commit is contained in:
@@ -1,13 +1,51 @@
|
||||
@php
|
||||
$addresses = collect($addresses ?? []);
|
||||
$preselectedAddressId = old($name);
|
||||
|
||||
if ($preselectedAddressId === null && is_string($name) && str_contains($name, '[')) {
|
||||
$dotName = preg_replace('/\[(.*?)\]/', '.$1', $name);
|
||||
$dotName = trim($dotName, '.');
|
||||
$preselectedAddressId = $dotName ? old($dotName) : null;
|
||||
}
|
||||
|
||||
if (($preselectedAddressId === null || $preselectedAddressId === '') && $addresses->isNotEmpty()) {
|
||||
$defaultAddress = $addresses->firstWhere('priority', 1);
|
||||
|
||||
if (! $defaultAddress) {
|
||||
$defaultAddress = $addresses
|
||||
->filter(function ($address) {
|
||||
return (int) ($address['priority'] ?? 0) > 0;
|
||||
})
|
||||
->sortByDesc(function ($address) {
|
||||
return (int) ($address['priority'] ?? 0);
|
||||
})
|
||||
->first();
|
||||
}
|
||||
|
||||
if (! $defaultAddress) {
|
||||
$defaultAddress = $addresses->firstWhere('is_default', true)
|
||||
?? $addresses->firstWhere('default', true);
|
||||
}
|
||||
|
||||
if (! $defaultAddress) {
|
||||
$defaultAddress = $addresses->first();
|
||||
}
|
||||
|
||||
$preselectedAddressId = $defaultAddress['id'] ?? null;
|
||||
}
|
||||
|
||||
$addresses = $addresses->all();
|
||||
@endphp
|
||||
|
||||
@if ($addresses)
|
||||
@foreach ($addresses ?? [] as $address)
|
||||
@foreach ($addresses as $address)
|
||||
<div class="row mb-3">
|
||||
<div class="col-1">
|
||||
@include('components.form.radios.icheck', [
|
||||
'name' => $name,
|
||||
'val' => $address['id'],
|
||||
'id' => $prefix . '_address_' . $address['id'],
|
||||
'value' =>
|
||||
old($name) ?? $address['priority'] || count($addresses) === 1 ? $address['id'] : false,
|
||||
'value' => $preselectedAddressId,
|
||||
])
|
||||
</div>
|
||||
<div class="col-11">
|
||||
|
||||
@@ -39,16 +39,29 @@ ci-contre
|
||||
@push('js')
|
||||
<script>
|
||||
function handleDeliveries() {
|
||||
$('#delivery_mode input.delivery_mode').change(function() {
|
||||
if ($(this).hasClass('at_house')) {
|
||||
var $deliveryInputs = $('#delivery_mode input.delivery_mode');
|
||||
|
||||
$deliveryInputs.change(function() {
|
||||
var $currentDelivery = $(this);
|
||||
var deliveryTypeId = $('input[name=delivery_type_id]:checked').val();
|
||||
|
||||
if ($currentDelivery.hasClass('at_house')) {
|
||||
$('#delivery_addresses').closest('.card').removeClass('d-none');
|
||||
var deliveryTypeId = $('input[name=delivery_type_id]:checked').val()
|
||||
} else {
|
||||
$('#delivery_addresses').closest('.card').addClass('d-none');
|
||||
}
|
||||
var deliveryId = $(this).val();
|
||||
|
||||
var deliveryId = $currentDelivery.val();
|
||||
refreshBasketTotal(deliveryId, deliveryTypeId);
|
||||
});
|
||||
|
||||
var $preselected = $deliveryInputs.filter(':checked').first();
|
||||
|
||||
if ($preselected.length) {
|
||||
$preselected.trigger('change');
|
||||
} else {
|
||||
$('#delivery_addresses').closest('.card').addClass('d-none');
|
||||
}
|
||||
}
|
||||
|
||||
handleDeliveries();
|
||||
|
||||
Reference in New Issue
Block a user