From 8127d01251b7fc764f510bd90a7eea92b4bcfa74 Mon Sep 17 00:00:00 2001 From: marinho10 Date: Fri, 19 Feb 2021 14:34:35 +0000 Subject: [PATCH 1/6] Fix: error embedded_schema on resource form (update/create) --- lib/kaffy/resource_form.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/kaffy/resource_form.ex b/lib/kaffy/resource_form.ex index c30d2499..d1dd841e 100644 --- a/lib/kaffy/resource_form.ex +++ b/lib/kaffy/resource_form.ex @@ -50,7 +50,7 @@ defmodule Kaffy.ResourceForm do end permission = - case is_nil(changeset.data.id) do + case is_nil(changeset.data[:id]) do true -> Map.get(options, :create, :editable) false -> Map.get(options, :update, :editable) end From db06fc459c20b0b3847f54975f9b9cde8091ea34 Mon Sep 17 00:00:00 2001 From: marinho10 Date: Fri, 19 Feb 2021 15:08:17 +0000 Subject: [PATCH 2/6] Add inspect --- lib/kaffy/resource_form.ex | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/kaffy/resource_form.ex b/lib/kaffy/resource_form.ex index d1dd841e..40eae1dd 100644 --- a/lib/kaffy/resource_form.ex +++ b/lib/kaffy/resource_form.ex @@ -49,6 +49,8 @@ defmodule Kaffy.ResourceForm do opts end + IO.inspect(changeset.data) + permission = case is_nil(changeset.data[:id]) do true -> Map.get(options, :create, :editable) From 6f9ad362fb9626ff2717bfc44d0b1e7b7dbca770 Mon Sep 17 00:00:00 2001 From: marinho10 Date: Fri, 19 Feb 2021 15:36:57 +0000 Subject: [PATCH 3/6] Remove IEx --- lib/kaffy/resource_form.ex | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/kaffy/resource_form.ex b/lib/kaffy/resource_form.ex index 40eae1dd..d1dd841e 100644 --- a/lib/kaffy/resource_form.ex +++ b/lib/kaffy/resource_form.ex @@ -49,8 +49,6 @@ defmodule Kaffy.ResourceForm do opts end - IO.inspect(changeset.data) - permission = case is_nil(changeset.data[:id]) do true -> Map.get(options, :create, :editable) From 370dbe0044e27af824dacf5588894d57438fef5c Mon Sep 17 00:00:00 2001 From: marinho10 Date: Fri, 19 Feb 2021 17:54:12 +0000 Subject: [PATCH 4/6] Remove reorder_fields feature --- lib/kaffy/resource_form.ex | 15 ++++++-------- lib/kaffy/resource_schema.ex | 38 +----------------------------------- 2 files changed, 7 insertions(+), 46 deletions(-) diff --git a/lib/kaffy/resource_form.ex b/lib/kaffy/resource_form.ex index d1dd841e..dac4ce30 100644 --- a/lib/kaffy/resource_form.ex +++ b/lib/kaffy/resource_form.ex @@ -50,7 +50,7 @@ defmodule Kaffy.ResourceForm do end permission = - case is_nil(changeset.data[:id]) do + case is_nil(Map.get(changeset.data, :id)) do true -> Map.get(options, :create, :editable) false -> Map.get(options, :update, :editable) end @@ -73,11 +73,6 @@ defmodule Kaffy.ResourceForm do end end - def form_field(changeset, form, {field, options}, opts) do - type = Kaffy.ResourceSchema.field_type(changeset.data.__struct__, field) - build_html_input(changeset.data, form, {field, options}, type, opts) - end - defp build_html_input(schema, form, {field, options}, type, opts, readonly \\ false) do data = schema {conn, opts} = Keyword.pop(opts, :conn) @@ -93,12 +88,14 @@ defmodule Kaffy.ResourceForm do inputs_for(form, field, fn fp -> [ {:safe, ~s(
)}, - Enum.reduce(embed_fields, [], fn f, all -> + Enum.reduce(embed_fields, [], fn {embed_f, embed_f_options}, all -> content_tag :div, class: "form-group" do [ [ - form_label(fp, f), - form_field(embed_changeset, fp, {f, options}, class: "form-control") + form_label(fp, embed_f), + form_field(embed_changeset, fp, {embed_f, embed_f_options}, + class: "form-control" + ) ] | all ] diff --git a/lib/kaffy/resource_schema.ex b/lib/kaffy/resource_schema.ex index f7d5335c..9a1d91c9 100644 --- a/lib/kaffy/resource_schema.ex +++ b/lib/kaffy/resource_schema.ex @@ -41,7 +41,6 @@ defmodule Kaffy.ResourceSchema do def fields(schema) do schema |> get_all_fields() - |> reorder_fields(schema) end defp get_all_fields(schema) do @@ -87,42 +86,6 @@ defmodule Kaffy.ResourceSchema do end) end - defp reorder_fields(fields_list, schema) do - [_id, first_field | _fields] = schema.__schema__(:fields) - - # this is a "nice" feature to re-order the default fields to put the specified fields at the top/bottom of the form - fields_list - |> reorder_field(first_field, :first) - |> reorder_field(:email, :first) - |> reorder_field(:name, :first) - |> reorder_field(:title, :first) - |> reorder_field(:id, :first) - |> reorder_field(:inserted_at, :last) - |> reorder_field(:updated_at, :last) - - # |> reorder_field(Kaffy.ResourceSchema.embeds(schema), :last) - end - - defp reorder_field(fields_list, [], _), do: fields_list - - defp reorder_field(fields_list, [field | rest], position) do - fields_list = reorder_field(fields_list, field, position) - reorder_field(fields_list, rest, position) - end - - defp reorder_field(fields_list, field_name, position) do - if field_name in Keyword.keys(fields_list) do - {field_options, fields_list} = Keyword.pop(fields_list, field_name) - - case position do - :first -> [{field_name, field_options}] ++ fields_list - :last -> fields_list ++ [{field_name, field_options}] - end - else - fields_list - end - end - def has_field_filters?(resource) do admin_fields = Kaffy.ResourceAdmin.index(resource) @@ -296,6 +259,7 @@ defmodule Kaffy.ResourceSchema do def field_type(_schema, {_, type}), do: type def field_type(schema, field), do: schema.__changeset__() |> Map.get(field, :string) + # def field_type(schema, field), do: schema.__schema__(:type, field) def get_map_fields(schema) do From 688e0fb969df26c720a206529fc2a8a69fd31a96 Mon Sep 17 00:00:00 2001 From: marinho10 Date: Fri, 19 Feb 2021 18:02:55 +0000 Subject: [PATCH 5/6] Add reorder_fields but remove id if exists --- lib/kaffy/resource_schema.ex | 37 ++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/lib/kaffy/resource_schema.ex b/lib/kaffy/resource_schema.ex index 9a1d91c9..8657b8a6 100644 --- a/lib/kaffy/resource_schema.ex +++ b/lib/kaffy/resource_schema.ex @@ -41,6 +41,7 @@ defmodule Kaffy.ResourceSchema do def fields(schema) do schema |> get_all_fields() + |> reorder_fields(schema) end defp get_all_fields(schema) do @@ -86,6 +87,42 @@ defmodule Kaffy.ResourceSchema do end) end + defp reorder_fields(fields_list, schema) do + [first_field | _fields] = schema.__schema__(:fields) -- [:id] + + # this is a "nice" feature to re-order the default fields to put the specified fields at the top/bottom of the form + fields_list + |> reorder_field(first_field, :first) + |> reorder_field(:email, :first) + |> reorder_field(:name, :first) + |> reorder_field(:title, :first) + |> reorder_field(:id, :first) + |> reorder_field(:inserted_at, :last) + |> reorder_field(:updated_at, :last) + + # |> reorder_field(Kaffy.ResourceSchema.embeds(schema), :last) + end + + defp reorder_field(fields_list, [], _), do: fields_list + + defp reorder_field(fields_list, [field | rest], position) do + fields_list = reorder_field(fields_list, field, position) + reorder_field(fields_list, rest, position) + end + + defp reorder_field(fields_list, field_name, position) do + if field_name in Keyword.keys(fields_list) do + {field_options, fields_list} = Keyword.pop(fields_list, field_name) + + case position do + :first -> [{field_name, field_options}] ++ fields_list + :last -> fields_list ++ [{field_name, field_options}] + end + else + fields_list + end + end + def has_field_filters?(resource) do admin_fields = Kaffy.ResourceAdmin.index(resource) From 4129c411349a8c999578c9a52c0ecf70255c1909 Mon Sep 17 00:00:00 2001 From: Nuno Date: Wed, 5 Jan 2022 16:13:24 +0000 Subject: [PATCH 6/6] Add crud_actions to configuration --- lib/kaffy/resource_admin.ex | 10 ++++++++++ lib/kaffy_web/templates/resource/_table.html.eex | 2 +- lib/kaffy_web/templates/resource/index.html.eex | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/kaffy/resource_admin.ex b/lib/kaffy/resource_admin.ex index 2eabad26..95285a6f 100644 --- a/lib/kaffy/resource_admin.ex +++ b/lib/kaffy/resource_admin.ex @@ -293,6 +293,16 @@ defmodule Kaffy.ResourceAdmin do Utils.get_assigned_value_or_default(resource, :list_actions, nil, [conn], false) end + def crud_actions(resource, conn) do + Utils.get_assigned_value_or_default( + resource, + :crud_actions, + [:new, :show, :update, :delete], + [conn], + false + ) + end + def widgets(resource, conn) do Utils.get_assigned_value_or_default( resource, diff --git a/lib/kaffy_web/templates/resource/_table.html.eex b/lib/kaffy_web/templates/resource/_table.html.eex index 2abcc2f8..ccc45981 100644 --- a/lib/kaffy_web/templates/resource/_table.html.eex +++ b/lib/kaffy_web/templates/resource/_table.html.eex @@ -13,7 +13,7 @@
<%= for {field, index} <- Enum.with_index(@fields) do %> - <%= if index == 0 do %> + <%= if index == 0 and :update in Kaffy.ResourceAdmin.crud_actions(@my_resource, @conn) do %> <%= link Kaffy.ResourceSchema.kaffy_field_value(@conn, entry, field), to: Kaffy.Utils.router().kaffy_resource_path(@conn, :show, @context, @resource, entry.id) %> <% else %> <%= Kaffy.ResourceSchema.kaffy_field_value(@conn, entry, field) %> diff --git a/lib/kaffy_web/templates/resource/index.html.eex b/lib/kaffy_web/templates/resource/index.html.eex index 1f11cbcf..4183fa3c 100644 --- a/lib/kaffy_web/templates/resource/index.html.eex +++ b/lib/kaffy_web/templates/resource/index.html.eex @@ -9,12 +9,14 @@
+ <%= if :new in Kaffy.ResourceAdmin.crud_actions(@my_resource, @conn) do %>
<%= link to: Kaffy.Utils.router().kaffy_resource_path(@conn, :new, @context, @resource), class: "btn btn-outline-primary" do %> New <%= Kaffy.ResourceAdmin.singular_name(@my_resource) %> <% end %>
+ <% end %>