-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
ModuleContactAddressesViewHelper.php
77 lines (70 loc) · 2.68 KB
/
ModuleContactAddressesViewHelper.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
namespace App\Domains\Contact\ManageContactAddresses\Web\ViewHelpers;
use App\Helpers\MapHelper;
use App\Models\Address;
use App\Models\AddressType;
use App\Models\Contact;
use App\Models\User;
class ModuleContactAddressesViewHelper
{
public static function data(Contact $contact, User $user): array
{
$activeAddressesCollection = $contact->addresses()
->wherePivot('is_past_address', false)
->get()
->map(fn (Address $address) => self::dto($contact, $address, $user));
$inactiveAddressesCollection = $contact->addresses()
->wherePivot('is_past_address', true)
->get()
->map(fn (Address $address) => self::dto($contact, $address, $user));
$addressTypesCollection = $contact->vault->account
->addressTypes()
->get()
->map(fn (AddressType $addressType) => [
'id' => $addressType->id,
'name' => $addressType->name,
'selected' => false,
]);
return [
'active_addresses' => $activeAddressesCollection,
'inactive_addresses' => $inactiveAddressesCollection,
'address_types' => $addressTypesCollection,
'url' => [
'store' => route('contact.address.store', [
'vault' => $contact->vault_id,
'contact' => $contact->id,
]),
],
];
}
public static function dto(Contact $contact, Address $address, User $user): array
{
return [
'id' => $address->id,
'is_past_address' => $address->pivot ? (bool) $address->pivot->is_past_address : false,
'line_1' => $address->line_1,
'line_2' => $address->line_2,
'city' => $address->city,
'province' => $address->province,
'postal_code' => $address->postal_code,
'country' => $address->country,
'type' => $address->addressType ? [
'id' => $address->addressType->id,
'name' => $address->addressType->name,
] : null,
'url' => [
'show' => MapHelper::getMapLink($address, $user),
'update' => route('contact.address.update', [
'vault' => $contact->vault_id,
'contact' => $contact->id,
'address' => $address->id,
]),
'destroy' => route('contact.address.destroy', [
'vault' => $contact->vault_id,
'contact' => $contact->id,
'address' => $address->id,
]),
],
];
}
}