# HomeDash
HomeDash provides a simple way of presenting dashboard cards from various services.
This is still in early experimental stage.
## Setup
### Adding to deps
Add the home dash library to your deps in mix.exs
```elixir
{:home_dash, "~> 0.0"},
```
### Configuration
#### Starting the Provider servers yourself
You may want to start the Providers in your application, say for example if you have a provider that relys in another GenServer (like PubSub.)
```elixir
config :home_dash, servers: false
```
### Hello World
HomeDash can be up and running with the example Welcome card provider by adding the following to the router:
```elixir
scope "/home_dash", HomeDashWeb do
pipe_through [:browser]
live_session :cards, layout: {MyAppWeb.Layouts, :app} do
live "/cards", CardsLive, :my_action
end
end
```
Now the welcome cards will be at `/home_dash/cards`.
### Configuring Providers
You can change the card providers in your config with the following:
```elixir
config :home_dash,
actions: [
my_action: [{HomeDash.Providers.BrewDashTaps, [taps_url: "https://example.com/api/taps"]}]
]
```
Now the [BrewDash](https://github.com/hez/brew-dash) cards will be at `/home_dash/cards`.
### Multiple Providers
Multiple providers can be configured for the same live action
```elixir
config :home_dash,
actions: [
my_action: [
HomeDash.Providers.Welcome,
{HomeDash.Providers.BrewDashTaps, [taps_url: "https://example.com/api/taps"]}
]
]
```
Similarly, there can be multiple live actions
```elixir
config :home_dash,
actions: [
welcome: [HomeDash.Providers.Welcome]
brewdash: [
{HomeDash.Providers.BrewDashTaps, [taps_url: "https://example.com/api/taps"]}
]
]
```
### Config options
* `:server_name` - Define the name that the server will be registered under. Defaults to the provider module name, e.g. `HomeDash.Providers.Welcome`. This is required if you have one provider that will be used with more than one configuration.
* `:sort_priority` - The integer value to be added to cards before sorting. Use this to push cards earlier or later in the sort order.
### Layout
Consider the spacing in your app layout (`MyAppWeb.Layouts`, `app.html.heex`). It is not uncommon to have `class="mx-auto max-w-2xl"` on your container `div` inside of `app.html.heex`, but for HomeDash, that may give you an overly restrictive container div. Removing width restrictions for your container div may provide better results.
### Tailwind
Since HomeDash requires Tailwind CSS, and Tailwind purges CSS classes it is not familair with, you will need to add HomeDash to your tailwind.config.js:
```
module.exports = {
content: [
"./js/**/*.js",
"../lib/my_project_web.ex",
"../lib/my_project_web/**/*.*ex",
"../deps/home_dash/lib/home_dash_web.ex",
"../deps/home_dash/lib/home_dash_web/**/*.*ex"
],
```
### Welcome Card Provider
The welcome card provider is an example implementation.
You can add additional welcome cards with:
```
HomeDash.Providers.Welcome.push_cards(%HomeDash.Card{
card_component: HomeDashWeb.Cards.Default,
id: UUID.uuid4(),
order: 4,
data: %{title: "My New Card"}
})
```