-
-
Notifications
You must be signed in to change notification settings - Fork 102
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(fields): Select group mode #410
fix(fields): Select group mode #410
Conversation
src/Traits/Fields/SelectTrait.php
Outdated
@@ -26,6 +26,13 @@ public function values(): array | |||
return $this->options; | |||
} | |||
|
|||
public function smoothedValues() : array |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Давай использовать более привычные наименования unwrappedValues либо flattenValues
src/Traits/Fields/SelectTrait.php
Outdated
@@ -26,6 +26,13 @@ public function values(): array | |||
return $this->options; | |||
} | |||
|
|||
public function smoothedValues() : array | |||
{ | |||
return collect($this->values())->mapWithKeys(function($item, $i) : array { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
переменные вместо $item, $i => $value, $key
src/Traits/Fields/SelectTrait.php
Outdated
public function smoothedValues() : array | ||
{ | ||
return collect($this->values())->mapWithKeys(function($item, $i) : array { | ||
return is_array($item) ? $item : [$i => $item]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
тут лучше использовать стрелочную функцию так как логика в строку
fn($value, $key) => is_array($value) ? $value : [$key => $value];
src/Fields/Select.php
Outdated
@@ -58,6 +58,6 @@ public function indexViewValue(Model $item, bool $container = true): string | |||
->implode(','); | |||
} | |||
|
|||
return (string) ($this->values()[$value] ?? ''); | |||
return (string) ($this->smoothedValues()[$value] ?? ''); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
в поле Enum тоже надо сделать так в indexViewValue
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Enum разве можно сделать многоуровневым?
Поле Select имеет возможность принимать значения в виде многоуровневого массива - для построения групп.
Но в этом случае выбранное значение не будет отображено в index/show.
Это происходит по той причине, что в функции indexViewValue возвращается значение взятое из массива по ключу.
А если массив поделен на группы - это значение достать не получится.
Мое решение заключается в том, что я добавил новую функцию smoothedValues и использую её в indexViewValue.
Эта функция сглаживает массив до одного уровня, убирая деление на группы.
Я использовал mapWithKeys вместо того-же flatten, дабы не потерять ключи.
Остается одна проблема, которую на мой взгляд не нужно решать. Она заключается в том, если в options передали массив поделенный на группы, но при этом не поставили ключи массиву, пример:
В этом случае при сглаживании некоторые значения пропадут из-за не уникальных ключей.
Можно дописать функцию options, делая ключи уникальными. Но в этом случае, если ключи были и так уникальными мы их просто собьем.
Не вижу делать доп.проверки на то, уникальные ли уже ключи и если нет - делать уникальными. Это задача пользователя, так-что единственное что я рекомендую, упомянуть в документации к информации про группы, что ключи должны быть уникальными.