Skip to content

Commit de31fca

Browse files
committed
Add ability to provide a string, or :safe tuple containing HTML to be rendered on a resource's index.
1 parent fc54f1c commit de31fca

File tree

5 files changed

+59
-1
lines changed

5 files changed

+59
-1
lines changed

lib/kaffy/resource_admin.ex

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,35 @@ defmodule Kaffy.ResourceAdmin do
1111
All functions are optional.
1212
"""
1313

14+
@doc """
15+
Allows a description to be injected into the index view of a resource's index
16+
view. This is helpful when you want to provide information to the user about the index page.
17+
Return value can be a string, or {:safe, string) tuple. If :safe tuple is used, HTML will be rendered.
18+
19+
`index_description/1` takes a schema and must return a `String.t()` or tuple `{:safe, String.t()}`.
20+
21+
If `index_description/1` is not defined, Kaffy will return nil.
22+
23+
## Examples:
24+
25+
```elixir
26+
def index_description(resource) do
27+
"This will show up on the index page."
28+
end
29+
30+
def index_description(resource) do
31+
{:safe, "This will show up on the index page. <b>This will be bold!</b>."}
32+
end
33+
```
34+
"""
35+
def index_description(resource) do
36+
Utils.get_assigned_value_or_default(
37+
resource,
38+
:index_description,
39+
ResourceSchema.index_description(resource)
40+
)
41+
end
42+
1443
@doc """
1544
`index/1` takes the schema module and should return a keyword list of fields and
1645
their options.

lib/kaffy/resource_schema.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ defmodule Kaffy.ResourceSchema do
1919
end
2020
end
2121

22+
def index_description(_schema), do: nil
23+
2224
def index_fields(schema) do
2325
Keyword.drop(fields(schema), fields_to_be_removed(schema))
2426
end

lib/kaffy/utils.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,8 @@ defmodule Kaffy.Utils do
355355
stylesheets: stylesheets ++ acc.stylesheets,
356356
javascripts: javascripts ++ acc.javascripts
357357
}
358-
end)
358+
end
359+
)
359360
end
360361

361362
defp env(key, default \\ nil) do

lib/kaffy_web/templates/resource/index.html.eex

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@
2222

2323
<div class="card-body table-responsive w-100">
2424
<div class="card-description">
25+
<%= if index_description = Kaffy.ResourceAdmin.index_description(@my_resource) do %>
26+
<div class="row">
27+
<div class="col-auto mr-auto">
28+
<p><%= index_description %></p>
29+
</div>
30+
</div>
31+
<% end %>
32+
2533
<div class="row">
2634

2735
<div class="col-auto mr-auto">

test/resource_admin_test.exs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ defmodule Kaffy.ResourceAdminTest do
77

88
defmodule CactusAdmin do
99
def plural_name(_), do: "Cacti"
10+
def index_description(_), do: {:safe, "Person Admin <b>Description</b>"}
1011
end
1112

1213
defmodule Person do
1314
end
1415

1516
defmodule PersonAdmin do
17+
def index_description(_), do: "Person Admin Description"
1618
end
1719

1820
defmodule Nested.Node do
@@ -43,4 +45,20 @@ defmodule Kaffy.ResourceAdminTest do
4345
assert ResourceAdmin.plural_name(schema: Person, admin: PersonAdmin) == "People"
4446
end
4547
end
48+
49+
describe "index_description/1" do
50+
test "nil if index_description is not defined as function in admin" do
51+
refute ResourceAdmin.index_description(schema: Nested.Node, admin: NestedNodeAdmin)
52+
end
53+
54+
test "string if index_description is defined as function in admin" do
55+
assert ResourceAdmin.index_description(schema: Person, admin: PersonAdmin) ==
56+
"Person Admin Description"
57+
end
58+
59+
test "{:safe, html} if index_description is defined as function in admin" do
60+
assert ResourceAdmin.index_description(schema: Cactus, admin: CactusAdmin) ==
61+
{:safe, "Person Admin <b>Description</b>"}
62+
end
63+
end
4664
end

0 commit comments

Comments
 (0)