Skip to content

Commit f2efff5

Browse files
committed
Fix saving enum fields.
1 parent fca5c87 commit f2efff5

File tree

3 files changed

+26
-5
lines changed

3 files changed

+26
-5
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111

1212
- Add missing "custom-select" classes to some `select` tags.
1313
- Ensure that extension modules are loaded.
14+
- Save enum fields with their cast values.
1415

1516
## v0.9.3 (2022-08-13)
1617

lib/kaffy/resource_form.ex

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -184,19 +184,39 @@ defmodule Kaffy.ResourceForm do
184184

185185
select(form, field, values, [class: "custom-select", value: value] ++ opts)
186186

187-
{:parameterized, Ecto.Enum, %{mappings: mappings}} ->
187+
{:parameterized, Ecto.Enum, %{mappings: mappings, on_cast: on_cast}} ->
188188
value = Map.get(data, field, nil)
189-
select(form, field, mappings, [class: "custom-select", value: value] ++ opts)
189+
190+
# NOTE enum_options preserves the order of enum defined in the schema
191+
enum_options =
192+
Enum.map(mappings, fn {k, _} ->
193+
k = to_string(k)
194+
v = Map.get(on_cast, k)
195+
k = String.capitalize(k)
196+
{k, v}
197+
end)
198+
199+
select(form, field, enum_options, [class: "custom-select", value: value] ++ opts)
190200

191201
{:array, {:parameterized, Ecto.Enum, %{values: values}}} ->
192202
values = Enum.map(values, &to_string/1)
193203
value = Map.get(data, field, nil)
194204

195205
multiple_select(form, field, values, [value: value] ++ opts)
196206

197-
{:array, {:parameterized, Ecto.Enum, %{mappings: mappings}}} ->
207+
{:array, {:parameterized, Ecto.Enum, %{mappings: mappings, on_cast: on_cast}}} ->
198208
value = Map.get(data, field, nil)
199-
multiple_select(form, field, mappings, [value: value] ++ opts)
209+
210+
# NOTE enum_options preserves the order of enum defined in the schema
211+
enum_options =
212+
Enum.map(mappings, fn {k, _} ->
213+
k = to_string(k)
214+
v = Map.get(on_cast, k)
215+
k = String.capitalize(k)
216+
{k, v}
217+
end)
218+
219+
multiple_select(form, field, enum_options, [value: value] ++ opts)
200220

201221
{:array, _} ->
202222
case !is_nil(options[:values_fn]) && is_function(options[:values_fn], 2) do

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ defmodule Kaffy.MixProject do
22
use Mix.Project
33

44
@source_url "https://github.com/aesmail/kaffy"
5-
@version "0.9.4-rc.0"
5+
@version "0.9.4"
66

77
def project do
88
[

0 commit comments

Comments
 (0)