Skip to content

Commit 2779b4a

Browse files
committed
feat: add CSV library dependency and refactor CSV data parsing in CampaignLive module
1 parent d87dbac commit 2779b4a

File tree

3 files changed

+9
-18
lines changed

3 files changed

+9
-18
lines changed

lib/algora_web/live/admin/campaign_live.ex

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -169,13 +169,6 @@ defmodule AlgoraWeb.Admin.CampaignLive do
169169
"""
170170
end
171171

172-
defp parse_csv(csv) do
173-
csv
174-
|> String.split("\n")
175-
|> Enum.map(&String.split(&1, ","))
176-
|> Enum.reject(&Enum.empty?/1)
177-
end
178-
179172
defp render_preview(template, data) when is_map(data) do
180173
Enum.reduce(data, template, fn {key, value}, acc ->
181174
String.replace(acc, "%{#{key}}", value)
@@ -233,18 +226,14 @@ defmodule AlgoraWeb.Admin.CampaignLive do
233226

234227
defp assign_csv_data(socket, data) do
235228
csv_data =
236-
case data |> String.trim() |> parse_csv() do
237-
[header | rows] ->
238-
keys = Enum.map(header, &String.trim/1)
239-
240-
Enum.map(rows, fn row ->
241-
keys
242-
|> Enum.zip(Enum.map(row, &String.trim/1))
243-
|> Map.new()
244-
end)
245-
246-
_ ->
229+
case String.trim(data) do
230+
"" ->
247231
[]
232+
233+
csv_string ->
234+
[csv_string]
235+
|> CSV.decode!(headers: true)
236+
|> Enum.to_list()
248237
end
249238

250239
socket

mix.exs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ defmodule Algora.MixProject do
9898
{:hammer, "~> 7.0"},
9999
{:sobelow, "~> 0.13", only: [:dev, :test], runtime: false},
100100
{:cmark, "~> 0.10"},
101+
{:csv, "~> 3.2"},
101102
# ex_aws
102103
{:ex_aws, "~> 2.1"},
103104
{:ex_aws_s3, "~> 2.0"},

mix.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"},
1515
"cowlib": {:hex, :cowlib, "2.14.0", "623791c56c1cc9df54a71a9c55147a401549917f00a2e48a6ae12b812c586ced", [:make, :rebar3], [], "hexpm", "0af652d1550c8411c3b58eed7a035a7fb088c0b86aff6bc504b0bc3b7f791aa2"},
1616
"credo": {:hex, :credo, "1.7.11", "d3e805f7ddf6c9c854fd36f089649d7cf6ba74c42bc3795d587814e3c9847102", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "56826b4306843253a66e47ae45e98e7d284ee1f95d53d1612bb483f88a8cf219"},
17+
"csv": {:hex, :csv, "3.2.2", "452f96414b39a176b7c390af6d8b78f15130dc6167fe3b836729131f515d843e", [:mix], [], "hexpm", "cbf256ff74a3fa01d9ec420d07b19c90d410ed9fe5b6d6e1bc7662edf35bc574"},
1718
"dataloader": {:hex, :dataloader, "2.0.2", "c45075e0692e68638a315e14f747bd8d7065fb5f38705cf980f62d4cd344401f", [:mix], [{:ecto, ">= 3.4.3 and < 4.0.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:opentelemetry_process_propagator, "~> 0.2.1 or ~> 0.3", [hex: :opentelemetry_process_propagator, repo: "hexpm", optional: true]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "4c6cabc0b55e96e7de74d14bf37f4a5786f0ab69aa06764a1f39dda40079b098"},
1819
"db_connection": {:hex, :db_connection, "2.7.0", "b99faa9291bb09892c7da373bb82cba59aefa9b36300f6145c5f201c7adf48ec", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "dcf08f31b2701f857dfc787fbad78223d61a32204f217f15e881dd93e4bdd3ff"},
1920
"decimal": {:hex, :decimal, "2.3.0", "3ad6255aa77b4a3c4f818171b12d237500e63525c2fd056699967a3e7ea20f62", [:mix], [], "hexpm", "a4d66355cb29cb47c3cf30e71329e58361cfcb37c34235ef3bf1d7bf3773aeac"},

0 commit comments

Comments
 (0)