Current section

Files

Jump to
ckeditor5_phoenix lib components editor assigns preset_upload_handler.ex
Raw

lib/components/editor/assigns/preset_upload_handler.ex

defmodule CKEditor5.Components.Editor.PresetUploadHandler do
@moduledoc """
Handles upload URL overrides for the Editor preset.
"""
alias CKEditor5.Config
@doc """
Overrides the upload URL if provided in the assigns or config.
"""
def override_upload_url(assigns) do
config = Config.uploads_config()
url = assigns[:upload_url] || config[:api_url] || config[:url]
case url do
"base64" ->
apply_base64_upload_config(assigns)
url when is_binary(url) ->
apply_upload_config(assigns, url)
_ ->
assigns
end
end
defp apply_base64_upload_config(%{preset: preset} = assigns) do
new_config =
preset.config
|> Map.update(:plugins, ["Base64UploadAdapter"], fn plugins ->
plugins
|> Enum.reject(fn plugin -> to_string(plugin) == "SimpleUploadAdapter" end)
|> Enum.concat(["Base64UploadAdapter"])
|> Enum.uniq()
end)
|> Map.delete(:phoenixUpload)
new_preset = %{preset | config: new_config}
Map.put(assigns, :preset, new_preset)
end
defp apply_upload_config(%{preset: preset} = assigns, url) do
plugins_to_remove = ["SimpleUploadAdapter", "Base64UploadAdapter"]
new_config =
preset.config
|> Map.put(:phoenixUpload, %{url: url})
|> Map.update(:plugins, [], fn plugins ->
Enum.reject(plugins, fn plugin -> to_string(plugin) in plugins_to_remove end)
end)
new_preset = %{preset | config: new_config}
Map.put(assigns, :preset, new_preset)
end
end