fix: fixed tag suggestions
This commit is contained in:
@@ -3,7 +3,7 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
|
||||
|
||||
use Phoenix.LiveComponent
|
||||
|
||||
alias BDS.{AI, Metadata, Posts, Preview}
|
||||
alias BDS.{AI, Embeddings, Metadata, Posts, Preview}
|
||||
alias BDS.Desktop.ShellData
|
||||
alias BDS.Desktop.ShellLive.{EditorImageDrop, Notify}
|
||||
alias BDS.Desktop.ShellLive.PostEditor.{DraftManagement, ListValues, Persistence, PostMetadata}
|
||||
@@ -12,7 +12,6 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
|
||||
|
||||
import DraftManagement,
|
||||
only: [
|
||||
current_draft: 4,
|
||||
editing_canonical_language?: 3,
|
||||
normalize_language: 2,
|
||||
normalize_mode: 1,
|
||||
@@ -288,6 +287,10 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
|
||||
{:noreply, do_detect_language(socket)}
|
||||
end
|
||||
|
||||
def handle_event("focus_post_editor_tags", _params, socket) do
|
||||
{:noreply, socket |> load_tag_semantic_suggestions() |> build_data()}
|
||||
end
|
||||
|
||||
def handle_event("add_post_editor_tag", %{"tag" => tag}, socket) do
|
||||
{:noreply, do_add_list_value(socket, :tags, tag)}
|
||||
end
|
||||
@@ -325,6 +328,19 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
||||
# Semantic tag suggestions read the embeddings index (no live model call), so
|
||||
# they work offline; suggest_tags/2 returns [] when similarity is disabled.
|
||||
defp load_tag_semantic_suggestions(socket) do
|
||||
case socket.assigns.post do
|
||||
%Post{} = post ->
|
||||
{:ok, suggestions} = Embeddings.suggest_tags(post.id, [])
|
||||
assign(socket, :tag_semantic_suggestions, suggestions)
|
||||
|
||||
_other ->
|
||||
socket
|
||||
end
|
||||
end
|
||||
|
||||
defp component_current_draft(socket, post, metadata, active_language) do
|
||||
persisted = persisted_form(post, metadata, active_language)
|
||||
Map.get(socket.assigns.drafts, active_language, persisted)
|
||||
@@ -344,6 +360,7 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
|
||||
active_language: canonical,
|
||||
drafts: %{},
|
||||
tag_query: "",
|
||||
tag_semantic_suggestions: [],
|
||||
category_query: "",
|
||||
quick_actions_open?: false,
|
||||
mode: :markdown,
|
||||
@@ -435,6 +452,11 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
|
||||
Tags.list_tags(post.project_id),
|
||||
socket.assigns.tag_query
|
||||
),
|
||||
tag_semantic_suggestions:
|
||||
Enum.reject(
|
||||
socket.assigns.tag_semantic_suggestions || [],
|
||||
&(&1 in tag_values(form))
|
||||
),
|
||||
category_suggestions:
|
||||
category_suggestions(
|
||||
form,
|
||||
@@ -959,7 +981,7 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
|
||||
active_language = socket.assigns.active_language
|
||||
post = socket.assigns.post
|
||||
metadata = socket.assigns.project_metadata
|
||||
draft = current_draft(socket.assigns, post, metadata, active_language)
|
||||
draft = component_current_draft(socket, post, metadata, active_language)
|
||||
updated = Map.put(draft, field, value)
|
||||
assign(socket, :drafts, Map.put(socket.assigns.drafts, active_language, updated))
|
||||
end
|
||||
|
||||
@@ -173,9 +173,22 @@
|
||||
value={@post_editor.tag_query}
|
||||
placeholder={dgettext("ui", "Add tag")}
|
||||
autocomplete="off"
|
||||
phx-focus="focus_post_editor_tags"
|
||||
phx-target={@myself}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<%= if String.trim(@post_editor.tag_query || "") == "" and Enum.any?(@post_editor.tag_semantic_suggestions) do %>
|
||||
<div class="tag-suggestions tag-suggestions-semantic mt-2 flex flex-col">
|
||||
<div class="tag-suggestion-section-label"><%= dgettext("ui", "Suggested tags") %></div>
|
||||
<%= for name <- @post_editor.tag_semantic_suggestions do %>
|
||||
<button class="tag-suggestion ai-suggested" type="button" phx-click="add_post_editor_tag" phx-value-tag={name} phx-target={@myself}>
|
||||
<span class="tag-suggestion-name"><%= name %></span>
|
||||
</button>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<%= if String.trim(@post_editor.tag_query || "") != "" and (Enum.any?(@post_editor.tag_suggestions) or @post_editor.tag_query_addable?) do %>
|
||||
<div class="tag-suggestions mt-2 flex flex-col">
|
||||
<%= for tag <- @post_editor.tag_suggestions do %>
|
||||
|
||||
Reference in New Issue
Block a user