Skip to content

Commit 27b5fcd

Browse files
committed
- make status_slug and status_name attributes work
1 parent 7f8332f commit 27b5fcd

File tree

3 files changed

+110
-0
lines changed

3 files changed

+110
-0
lines changed

Diff for: src/Enums/IsEnum.php

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
namespace Javaabu\Helpers\Enums;
4+
5+
interface IsEnum
6+
{
7+
public static function labels(): array;
8+
9+
public function getLabel(): string;
10+
}

Diff for: src/Enums/NativeEnumsTrait.php

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?php
2+
3+
namespace Javaabu\Helpers\Enums;
4+
5+
6+
use BackedEnum;
7+
8+
trait NativeEnumsTrait
9+
{
10+
public function getLabel(): string
11+
{
12+
return self::labels()[$this->value];
13+
}
14+
15+
public static function getLabelFromKey(string $key): string
16+
{
17+
return self::labels()[$key] ?? '';
18+
}
19+
20+
public static function getKeys(): array
21+
{
22+
return array_column(self::cases(), 'value');
23+
}
24+
25+
public static function slugs(string|BackedEnum $input)
26+
{
27+
if ($input instanceof BackedEnum) {
28+
$input = $input->value;
29+
}
30+
31+
$status_slugs = [];
32+
$cases = self::cases();
33+
34+
foreach ($cases as $case) {
35+
$status_slugs[$case->value] = $case->value;
36+
}
37+
38+
return $status_slugs[$input] ?? '';
39+
}
40+
41+
public static function names(string|BackedEnum $input)
42+
{
43+
if ($input instanceof BackedEnum) {
44+
$input = $input->value;
45+
}
46+
47+
$status_names = [];
48+
$cases = self::cases();
49+
50+
foreach ($cases as $case) {
51+
$status_names[$case->value] = $case->getLabel();
52+
}
53+
54+
return $status_names[$input] ?? '';
55+
}
56+
}

Diff for: src/Enums/UserStatuses.php

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
namespace Javaabu\Helpers\Enums;
4+
5+
6+
enum UserStatuses: string implements IsEnum
7+
{
8+
use NativeEnumsTrait;
9+
10+
case APPROVED = 'approved';
11+
case PENDING = 'pending';
12+
case BANNED = 'banned';
13+
14+
/**
15+
* Initialize Messages
16+
*/
17+
public static function messages(): array
18+
{
19+
return [
20+
self::APPROVED->value => __('Your account is approved.'),
21+
self::PENDING->value => __('Your account needs to be approved before you can access it.'),
22+
self::BANNED->value => __('Your account has been banned.'),
23+
];
24+
}
25+
26+
public function getMessage(): string
27+
{
28+
return self::messages()[$this->value];
29+
}
30+
31+
public static function getMessageFromKey(string $key): string
32+
{
33+
return self::messages()[$key] ?? '';
34+
}
35+
36+
public static function labels(): array
37+
{
38+
return [
39+
self::APPROVED->value => __("Approved"),
40+
self::PENDING->value => __("Pending"),
41+
self::BANNED->value => __("Banned"),
42+
];
43+
}
44+
}

0 commit comments

Comments
 (0)