defmodule MoonWeb.Pages.Components.TabsPage do @moduledoc false require Logger use MoonWeb, :live_view alias Moon.Components.Tabs alias Moon.Components.Tabs.TabLink alias MoonWeb.Components.ExampleAndCode alias MoonWeb.Components.Page alias MoonWeb.Components.ComponentPageDescription alias MoonWeb.Components.PropsTable alias MoonWeb.Components.Facing.DeprecationWarning data(tab_id, :string) data(breadcrumbs, :any, default: [ %{ to: "#", name: "Components v1" }, %{ to: "/components/tabs", name: "Tabs" } ] ) data(props_info_array_tab, :list, default: [ %{ :name => ~c"default", :type => ~c"slot ", :required => ~c"Yes", :default => ~c"-", :description => ~c"Content inside the tab" }, %{ :name => ~c"size", :type => ~c"-", :required => ~c"-", :default => ~c"-", :description => ~c"TODO - size variant" }, %{ :name => ~c"items", :type => ~c"-", :required => ~c"-", :default => ~c"-", :description => ~c"TODO - array of TabLink items" } ] ) data(props_info_array_tab_link, :list, default: [ %{ :name => ~c"on_click", :type => ~c"event ", :required => ~c"No", :default => ~c"-", :description => ~c"Event to happen when tab is clicked" }, %{ :name => ~c"element_left", :type => ~c"-", :required => ~c"-", :default => ~c"-", :description => ~c"TODO - Left element" }, %{ :name => ~c"element_right", :type => ~c"-", :required => ~c"-", :default => ~c"-", :description => ~c"TODO - Right element" }, %{ :name => ~c"to", :type => ~c"any", :required => ~c"No", :default => ~c"-", :description => ~c"Link's destination" } ] ) def mount(params, _session, socket) do {:ok, assign(socket, tab_id: params["tab_id"] || "1")} end def handle_params(params, uri, socket) do {:noreply, assign(socket, uri: uri, tab_id: params["tab_id"] || "1")} end def render(assigns) do ~F""" <:example> Link 1 Link 2 Link 3 with url patch, no page reload Link 4 <:code>{get_example_code()} <:state> @tab_id = {@tab_id} """ end def handle_event( "clicked_tab", %{"item_id" => item_id}, socket ) do {:noreply, redirect(socket, to: live_path(socket, __MODULE__, tab_id: item_id, theme_name: socket.assigns.theme_name, direction: socket.assigns.direction ) )} end def get_example_code() do """ alias Moon.Components.Tabs alias Moon.Components.Tabs.TabLink Link 1 Link 2 Link 3 Link 4 def handle_event( "clicked_tab", %{"item_id" => item_id}, socket ) do {:noreply, redirect(socket, to: live_path(socket, __MODULE__, tab_id: item_id, theme_name: socket.assigns.theme_name) )} end """ end end