defmodule DashboardWeb.Live.Modal.DateTimePatternsModal do use DashboardWeb, :component import Dashboard.Helpers @date_time_pattern_hints [ {"{YYYY}", "full year number (0..9999)"}, {"{YY}", "the last two digits of the year number (0.99)"}, {"{M}", "month number (1..12)"}, {"{Mshort}", "abbreviated month name (Jan..Dec, no padding)"}, {"{Mfull}", "full month name (January..December, no padding)"}, {"{D}", "day number (1..31)"}, {"{Dord}", "ordinal day of the year (1..366)"}, {"{h24}", "hour of the day (00..23)"}, {"{h12}", "hour of the day (1..12)"}, {"{m}", "minutes of the hour (00..59)"}, {"{s}", "seconds of the minute (00..60)"}, {"{am}", "lowercase am or pm (no padding)"}, {"{AM}", "uppercase AM or PM (no padding)"} ] def date_time_patterns_modal(assigns) do custom_date_time_patterns_added = assigns.changeset |> Ecto.Changeset.get_field(:date_time_patterns, []) |> length() != 0 custom_date_patterns_added = assigns.changeset |> Ecto.Changeset.get_field(:date_patterns, []) |> length() != 0 assigns = assigns |> assign(:custom_date_patterns_added, custom_date_patterns_added) |> assign(:custom_date_time_patterns_added, custom_date_time_patterns_added) ~H"""
Add date patterns
<%= if @custom_date_patterns_added do %> <%= for {date_patterns_form, index} <- Enum.with_index(inputs_for(@form, :date_patterns), 1) do %>
<%= index %>. <%= text_input(date_patterns_form, :pattern, disabled: index == 1, class: input_class(index, :date, @matching_date_time), placeholder: "Pattern", list: "date-patterns-suggestions" ) %>
<%= hidden_input(date_patterns_form, :id) %> <%= unless index == 1 do %>
<% end %>
<% end %> <% else %>
No custom date patterns added!
<% end %>
Add datetime pattern
<%= if @custom_date_time_patterns_added do %> <%= for {date_time_patterns_form, index} <- Enum.with_index(inputs_for(@form, :date_time_patterns), 1) do %>
<%= index %>. <%= text_input(date_time_patterns_form, :pattern, disabled: index == 1, class: input_class(index, :date_time, @matching_date_time), placeholder: "Pattern", list: "date-time-patterns-suggestions" ) %>
<%= hidden_input(date_time_patterns_form, :id) %> <%= unless index == 1 do %>
<% end %>
<% end %> <% else %>
No custom date time patterns added!
<% end %>
Add datetime pattern

Add custom date time patterns Some commonly used pattern symbols are given below:

<%= for {pattern, description} <- date_time_pattern_hints() do %>
<%= pattern %>
-
<%= description %>
<% end %>

*Fractional seconds and timezones are not supported.

<.popup title="Enter a sample date or date time to check if it matches any added custom patterns" id="date-time-try-it-hint" />
<%= if present?(Ecto.Changeset.get_field(@changeset, :date_time_trial)) && is_nil(@matching_date_time) do %> No matching patterns found <% end %> <%= text_input(@form, :date_time_trial, class: "form-control", placeholder: "Pattern", id: "date-time-trial" ) %>
""" end defp date_time_pattern_hints, do: @date_time_pattern_hints defp input_class(index, type, {match_type, match_index}) when type == match_type and index == match_index + 1, do: "form-control matched-input" defp input_class(_index, _type, _), do: "form-control" end