kaffy icon indicating copy to clipboard operation
kaffy copied to clipboard

[BUG] expected a map, got: nil when using custom form_field

Open davidahmed opened this issue 2 years ago • 6 comments

Versions Used Kaffy: 0.9.4 Phoenix: 1.6.9 Elixir: 1.14.2

What's actually happening? If I configure resources manually, I get error on edit, create, or update.

expected a map, got: nil when using custom form_field

Here's the configuration I am using:

config :kaffy,
  admin_title: "MyApp Admin",
  otp_app: :my_app,
  ecto_repo: MyApp.Repo,
  router: MyAppWeb.Router,
  resources: &MyApp.Kaffy.Config.create_resources/1

If I don't use resources in config, then everything works. However, I need to have custom form fields for some resources.

This is one of my configurations:

defmodule MyApp.Kaffy.BenchmarkAdmin do
@doc """

"""  
  def form_fields(_) do
    [
      friendly_name: nil,
      stages: nil,
      organization_id: nil
    ]
  end
end

Here's the Config.create_resources

defmodule MyApp.Kaffy.Config do
  def create_resources(_conn) do
    [
     ...
      benchmarks: [
        name: "Benchmarks",
        resources: [
          benchmarks: [schema: MyApp.Benchmarks.Benchmark, admin: MyApp.Kaffy.BenchmarkAdmin], 
          #even if I don't pass `:admin`, the views don't work for creating/ updating resources.
          benchmark_stages: [schema: MyApp.Benchmarks.BenchmarkStage],
        ]
      ]
     ]
  end
end

What should happen instead? The resource should be created with the given parameters (NOTE: the changeset only requires friendly_name but apparently even that is nil.)

Screenshots If applicable, add screenshots to help explain your problem. Screen Shot 2023-01-02 at 15 37 28

davidahmed avatar Jan 02 '23 14:01 davidahmed

Can you please do the following and see if it works:

  • Remove the resources option from Kaffy's configs.
  • Rename the BenchmarkAdmin module from MyApp.Kaffy.BenchmarkAdmin to MyApp.Benchmarks.BenchmarkAdmin

If this works, then Kaffy has a bug with explicit resources. If it doesn't work, at least we know this is not the issue and we can remove it from the list.

aesmail avatar Jan 02 '23 17:01 aesmail

Remove the resources option from Kaffy's configs.

If you meant the following, then yeah I've removed and it works. But as many_to_many association is still not supported by Kaffy, those models break the default admin panel when I open the objects of such schemas. My quick hack around was that I'd have custom form fields. But with that, the above error occurs.

  config :kaffy,
  admin_title: "MyApp Admin",
  otp_app: :my_app,
  ecto_repo: MyApp.Repo,
  router: MyAppWeb.Router,
  #resources: &MyApp.Kaffy.Config.create_resources/1 <-- commented

davidahmed avatar Jan 02 '23 17:01 davidahmed

Tried this as well

Rename the BenchmarkAdmin module from MyApp.Kaffy.BenchmarkAdmin to MyApp.Benchmarks.BenchmarkAdmin

Unfortunately, the same issue persists.

davidahmed avatar Jan 02 '23 17:01 davidahmed

I have the same issue as well. When I remove the resources option, nothing loads, I get the following issue on all routes instead:

no match of right hand side value: :undefined.

image

marvoh avatar Jan 31 '23 14:01 marvoh

Worked fine commented the resources line as @davidahmed commented. Thanks!

somoza avatar May 12 '23 19:05 somoza

@davidahmed in create_resources() rename benchmarks to benchmark

juantascon avatar Jul 10 '23 12:07 juantascon