From af922b015fa13618c47b75305e4620bc7a7f0f62 Mon Sep 17 00:00:00 2001 From: SimpleTest Date: Wed, 29 Jul 2026 03:45:53 +0300 Subject: [PATCH] Synchronize discovery maps and lists --- assets/css/app.css | 72 +++- lib/who_need_help/activities.ex | 8 + lib/who_need_help/help.ex | 88 ++--- .../live/activity_live/index.ex | 239 ++++++++++---- .../live/request_live/index.ex | 263 ++++++++++----- priv/gettext/default.pot | 304 +++++++++-------- priv/gettext/en/LC_MESSAGES/default.po | 308 +++++++++-------- priv/gettext/ru/LC_MESSAGES/default.po | 312 ++++++++++-------- priv/gettext/uk/LC_MESSAGES/default.po | 312 ++++++++++-------- test/who_need_help/activities_test.exs | 11 + test/who_need_help/mutual_aid_flow_test.exs | 17 +- .../live/mutual_aid_live_test.exs | 73 ++++ 12 files changed, 1227 insertions(+), 780 deletions(-) diff --git a/assets/css/app.css b/assets/css/app.css index 1cf026a..8f190ce 100644 --- a/assets/css/app.css +++ b/assets/css/app.css @@ -219,6 +219,31 @@ html { background: var(--color-base-100); } +.request-discovery-controls { + display: flex; + flex: none; + align-items: center; + gap: 0.75rem; +} + +.request-map-update-control { + display: inline-flex; + min-height: 2.5rem; + align-items: center; + gap: 0.55rem; + padding-inline: 0.2rem; + color: color-mix(in oklab, var(--color-base-content) 72%, transparent); + font-size: 0.78rem; + font-weight: 650; + cursor: pointer; +} + +.request-map-update-control:focus-within { + border-radius: 0.65rem; + outline: 2px solid var(--color-primary); + outline-offset: 3px; +} + .request-view-switcher { display: inline-flex; flex: none; @@ -340,6 +365,37 @@ html { background: #b63b21; } +@media (max-width: 56rem) { + .request-discovery-toolbar { + align-items: stretch; + flex-direction: column; + } + + .request-discovery-controls { + justify-content: space-between; + flex-wrap: wrap; + } +} + +@media (max-width: 38rem) { + .request-discovery-controls { + align-items: stretch; + flex-direction: column; + } + + .request-map-update-control { + justify-content: space-between; + width: 100%; + padding: 0.35rem 0.15rem; + } + + .request-view-switcher { + display: grid; + width: 100%; + grid-template-columns: repeat(3, minmax(0, 1fr)); + } +} + .request-map-cluster:hover, .request-map-cluster:focus-visible { transform: scale(1.08); @@ -381,7 +437,7 @@ html { .request-view-switcher { display: grid; - grid-template-columns: 1fr 1fr; + grid-template-columns: repeat(3, minmax(0, 1fr)); width: 100%; } @@ -389,22 +445,24 @@ html { width: 100%; } - .request-view-split { - display: none; - } - .request-discovery[data-view-mode="split"] .request-discovery-content { - display: block; + display: flex; + flex-direction: column; } .request-discovery[data-view-mode="split"] .request-discovery-map-panel { - display: none; + position: static; + order: -1; } .request-discovery-map, .request-discovery[data-view-mode="map"] .request-discovery-map { min-height: max(30rem, calc(100svh - 12rem)); } + + .request-discovery[data-view-mode="split"] .request-discovery-map { + min-height: min(30rem, 62svh); + } } .home-demo-map { diff --git a/lib/who_need_help/activities.ex b/lib/who_need_help/activities.ex index 6774bff..72de757 100644 --- a/lib/who_need_help/activities.ex +++ b/lib/who_need_help/activities.ex @@ -52,6 +52,14 @@ defmodule WhoNeedHelp.Activities do |> Pagination.page(limit, &{&1.starts_at, &1.id}) end + def count_open_activities(%Scope{user: user}, filters \\ %{}, options \\ []) do + viewport = Keyword.get(options, :viewport) + + user + |> open_activities_query(filters, viewport) + |> Repo.aggregate(:count, :id) + end + def map_discovery_items(%Scope{user: user}, filters, %DiscoveryViewport{} = viewport) do level = DiscoveryCluster.level_for_zoom(viewport.zoom) cell_size = DiscoveryCluster.cell_size_meters(level) diff --git a/lib/who_need_help/help.ex b/lib/who_need_help/help.ex index 6da2c6d..c16936b 100644 --- a/lib/who_need_help/help.ex +++ b/lib/who_need_help/help.ex @@ -63,6 +63,14 @@ defmodule WhoNeedHelp.Help do |> Pagination.page(limit, &{&1.expires_at, &1.id}) end + def count_open_requests(%Scope{user: user}, filters \\ %{}, options \\ []) do + viewport = Keyword.get(options, :viewport) + + user + |> open_requests_query(filters, viewport) + |> Repo.aggregate(:count, :id) + end + def map_discovery_items(%Scope{user: user}, filters, %DiscoveryViewport{} = viewport) do level = DiscoveryCluster.level_for_zoom(viewport.zoom) cell_size = DiscoveryCluster.cell_size_meters(level) @@ -191,11 +199,14 @@ defmodule WhoNeedHelp.Help do |> Repo.aggregate(:count, :id) end - # Discovery lists include a privacy area's intersection with the viewport. - # Map markers, however, are loaded by their displayed center. This both - # matches normal map panning behaviour and keeps the map query indexable - # without evaluating a geography distance against every privacy circle. + # Lists and map markers use the same displayed public center. A privacy + # radius describes uncertainty around that center; it must not make a card + # appear in a viewport where its public marker was not loaded. defp filter_request_map_viewport(query, %DiscoveryViewport{} = viewport) do + where(query, ^request_map_viewport_condition(viewport)) + end + + defp request_map_viewport_condition(%DiscoveryViewport{} = viewport) do spatial_condition = Enum.reduce(DiscoveryViewport.envelopes(viewport), dynamic(false), fn {west, south, east, north}, condition -> @@ -243,7 +254,7 @@ defmodule WhoNeedHelp.Help do ) end) - where(query, ^spatial_condition) + spatial_condition end def list_open_requests, do: raise(ArgumentError, "an authenticated scope is required") @@ -1220,62 +1231,7 @@ defmodule WhoNeedHelp.Help do defp filter_discovery_viewport(query, nil, _filters), do: query defp filter_discovery_viewport(query, %DiscoveryViewport{} = viewport, filters) do - maximum_public_radius = Enum.max(HelpRequest.allowed_location_radii()) - - candidate_condition = - Enum.reduce( - DiscoveryViewport.padded_envelopes(viewport, maximum_public_radius), - dynamic(false), - fn {west, south, east, north}, condition -> - dynamic( - [request], - ^condition or - fragment( - "? && ST_MakeEnvelope(?, ?, ?, ?, 4326)", - request.location, - ^west, - ^south, - ^east, - ^north - ) - ) - end - ) - - exact_condition = - Enum.reduce(DiscoveryViewport.envelopes(viewport), dynamic(false), fn - {west, south, east, north}, condition -> - dynamic( - [request], - ^condition or - fragment( - """ - ( - ST_Intersects(?, ST_MakeEnvelope(?, ?, ?, ?, 4326)) - OR - ST_DWithin( - (?)::geography, - ST_MakeEnvelope(?, ?, ?, ?, 4326)::geography, - COALESCE(?, 0) - ) - ) - """, - request.location, - ^west, - ^south, - ^east, - ^north, - request.location, - ^west, - ^south, - ^east, - ^north, - request.location_radius_meters - ) - ) - end) - - spatial_condition = dynamic([request], ^candidate_condition and ^exact_condition) + spatial_condition = request_map_viewport_condition(viewport) area = filters["area"] || filters[:area] @@ -1283,10 +1239,16 @@ defmodule WhoNeedHelp.Help do if is_binary(area) and String.trim(area) != "" do dynamic( [request], - (not is_nil(request.location) and ^spatial_condition) or is_nil(request.location) + (not is_nil(request.location) and request.location_visibility != :hidden and + ^spatial_condition) or request.location_visibility == :hidden or + is_nil(request.location) ) else - dynamic([request], not is_nil(request.location) and ^spatial_condition) + dynamic( + [request], + not is_nil(request.location) and request.location_visibility != :hidden and + ^spatial_condition + ) end where(query, ^condition) diff --git a/lib/who_need_help_web/live/activity_live/index.ex b/lib/who_need_help_web/live/activity_live/index.ex index ddec43e..b6ef062 100644 --- a/lib/who_need_help_web/live/activity_live/index.ex +++ b/lib/who_need_help_web/live/activity_live/index.ex @@ -8,7 +8,9 @@ defmodule WhoNeedHelpWeb.ActivityLive.Index do @discovery_modes ~w(nearby mine) @view_modes ~w(list split map) + @map_update_modes ~w(manual auto) @filter_keys ~w(category_id area) + @map_update_delay_ms 450 @impl true def mount(_params, _session, socket) do @@ -23,13 +25,15 @@ defmodule WhoNeedHelpWeb.ActivityLive.Index do |> assign(:discovery_mode, "nearby") |> assign(:view_mode, "split") |> assign(:view_explicit, false) + |> assign(:map_update_mode, "manual") + |> assign(:map_update_timer, nil) |> assign(:viewport, nil) |> assign(:pending_viewport, nil) |> assign(:activities, []) |> assign(:activities_cursor, nil) |> assign(:map_items, Jason.encode!([])) |> assign(:map_result_count, 0) - |> assign(:map_total_count, 0) + |> assign(:list_result_count, 0) |> assign(:discovery_loading, true) |> assign(:refresh_timer, nil) |> assign(:my_activities, []) @@ -44,14 +48,17 @@ defmodule WhoNeedHelpWeb.ActivityLive.Index do viewport = parse_viewport(params) discovery_mode = normalize_discovery_mode(params["scope"]) view_mode = normalize_view_mode(params["view"]) + map_update_mode = normalize_map_update_mode(params["map_update"]) {:noreply, socket + |> cancel_map_update_timer() |> assign(:filters, filters) |> assign(:filter_form, to_form(filters, as: :filters)) |> assign(:discovery_mode, discovery_mode) |> assign(:view_mode, view_mode) |> assign(:view_explicit, params["view"] in @view_modes) + |> assign(:map_update_mode, map_update_mode) |> assign(:viewport, viewport) |> assign(:pending_viewport, nil) |> load_if_connected()} @@ -123,6 +130,17 @@ defmodule WhoNeedHelpWeb.ActivityLive.Index do {:noreply, socket |> assign(:refresh_timer, nil) |> load_if_connected()} end + def handle_info({:apply_map_viewport, %DiscoveryViewport{} = viewport}, socket) do + socket = assign(socket, :map_update_timer, nil) + + if socket.assigns.map_update_mode == "auto" and + DiscoveryViewport.same_area?(viewport, socket.assigns.pending_viewport) do + {:noreply, push_patch(socket, to: activity_path(socket, viewport: viewport))} + else + {:noreply, socket} + end + end + @impl true def handle_event("filter", %{"filters" => filters}, socket) do {:noreply, push_patch(socket, to: activity_path(socket, filters: normalize_filters(filters)))} @@ -147,15 +165,35 @@ defmodule WhoNeedHelpWeb.ActivityLive.Index do end end + def handle_event("set-map-update-mode", %{"mode" => mode}, socket) + when mode in @map_update_modes do + viewport = + if mode == "auto" and match?(%DiscoveryViewport{}, socket.assigns.pending_viewport), + do: socket.assigns.pending_viewport, + else: socket.assigns.viewport + + {:noreply, + push_patch(socket, + to: activity_path(socket, viewport: viewport, map_update_mode: mode) + )} + end + def handle_event("map-viewport-change", params, socket) do case DiscoveryViewport.cast(params) do {:ok, viewport} -> - pending = - if DiscoveryViewport.same_area?(viewport, socket.assigns.viewport), - do: nil, - else: viewport + cond do + DiscoveryViewport.same_area?(viewport, socket.assigns.viewport) -> + {:noreply, + socket + |> cancel_map_update_timer() + |> assign(:pending_viewport, nil)} - {:noreply, assign(socket, :pending_viewport, pending)} + socket.assigns.map_update_mode == "auto" -> + {:noreply, schedule_map_update(socket, viewport)} + + true -> + {:noreply, assign(socket, :pending_viewport, viewport)} + end :error -> {:noreply, socket} @@ -235,7 +273,7 @@ defmodule WhoNeedHelpWeb.ActivityLive.Index do end defp load_data(scope, filters, discovery_mode, view_mode, viewport) do - {activities_page, map_items} = + {activities_page, map_items, list_result_count} = case {discovery_mode, viewport} do {"nearby", %DiscoveryViewport{} = viewport} -> page = @@ -252,10 +290,17 @@ defmodule WhoNeedHelpWeb.ActivityLive.Index do Activities.map_discovery_items(scope, filters, viewport) end - {page, items} + list_result_count = + if view_mode == "map" do + 0 + else + Activities.count_open_activities(scope, filters, viewport: viewport) + end + + {page, items, list_result_count} _mine_or_missing_viewport -> - {%Pagination.Page{}, []} + {%Pagination.Page{}, [], 0} end my_activities_page = @@ -267,15 +312,6 @@ defmodule WhoNeedHelpWeb.ActivityLive.Index do activities = activities_page.entries - map_total_count = - if discovery_mode == "nearby" and view_mode != "list" do - DiscoveryQueryCache.fetch(map_total_cache_key(scope, filters), fn -> - Activities.count_map_discovery_items(scope, filters) - end) - else - 0 - end - %{ discovery_loading: false, activities: activities, @@ -284,7 +320,7 @@ defmodule WhoNeedHelpWeb.ActivityLive.Index do my_activities_cursor: my_activities_page.next_cursor, map_items: Jason.encode!(map_items), map_result_count: Enum.reduce(map_items, 0, &(map_item_count(&1) + &2)), - map_total_count: map_total_count + list_result_count: list_result_count } end @@ -349,11 +385,6 @@ defmodule WhoNeedHelpWeb.ActivityLive.Index do ) ) - :ok = - DiscoveryQueryCache.invalidate( - map_total_cache_key(socket.assigns.current_scope, socket.assigns.filters) - ) - socket end @@ -361,8 +392,6 @@ defmodule WhoNeedHelpWeb.ActivityLive.Index do {:activities, scope.user.id, filters, discovery_mode, view_mode, viewport} end - defp map_total_cache_key(scope, filters), do: {:activity_map_total, scope.user.id, filters} - defp empty_filters, do: %{"category_id" => "", "area" => ""} defp normalize_filters(params) do @@ -386,12 +415,18 @@ defmodule WhoNeedHelpWeb.ActivityLive.Index do defp normalize_view_mode(view_mode) when view_mode in @view_modes, do: view_mode defp normalize_view_mode(_view_mode), do: "split" + defp normalize_map_update_mode(mode) when mode in @map_update_modes, do: mode + defp normalize_map_update_mode(_mode), do: "manual" + defp activity_path(socket, overrides) do filters = Keyword.get(overrides, :filters, socket.assigns.filters) viewport = Keyword.get(overrides, :viewport, socket.assigns.viewport) discovery_mode = Keyword.get(overrides, :discovery_mode, socket.assigns.discovery_mode) view_mode = Keyword.get(overrides, :view_mode, socket.assigns.view_mode) + map_update_mode = + Keyword.get(overrides, :map_update_mode, socket.assigns.map_update_mode) + params = filters |> Map.reject(fn {_key, value} -> value == "" end) @@ -405,10 +440,32 @@ defmodule WhoNeedHelpWeb.ActivityLive.Index do else: %{} ) ) + |> then(fn params -> + if map_update_mode == "auto", + do: Map.put(params, "map_update", "auto"), + else: params + end) ~p"/activities?#{params}" end + defp schedule_map_update(socket, viewport) do + socket = cancel_map_update_timer(socket) + timer = Process.send_after(self(), {:apply_map_viewport, viewport}, @map_update_delay_ms) + + socket + |> assign(:pending_viewport, viewport) + |> assign(:map_update_timer, timer) + end + + defp cancel_map_update_timer(socket) do + if socket.assigns.map_update_timer do + Process.cancel_timer(socket.assigns.map_update_timer) + end + + assign(socket, :map_update_timer, nil) + end + defp viewport_json(nil), do: "" defp viewport_json(%DiscoveryViewport{} = viewport) do @@ -518,60 +575,98 @@ defmodule WhoNeedHelpWeb.ActivityLive.Index do class="request-discovery mt-6" >
-
+
{gettext("Loading results…")}
-
+
{ngettext( - "%{count} activity in this map area", - "%{count} activities in this map area", - @map_result_count, - count: @map_result_count + "%{count} activity in the selected map area", + "%{count} activities in the selected map area", + if(@view_mode == "map", do: @map_result_count, else: @list_result_count), + count: if(@view_mode == "map", do: @map_result_count, else: @list_result_count) )} - - {gettext("of %{count} matching activities with map locations", - count: @map_total_count + + + {gettext("Showing %{shown} of %{count} in the list.", + shown: length(@activities), + count: @list_result_count )} -

- {gettext("Move the map, then search the newly visible area.")} + +

+ {gettext("Map moved. Results still show the previous area.")} +

+

+ {gettext("Updating results for the visible map area…")} +

+

+ {gettext("Results update automatically after you stop moving the map.")} +

+

+ {gettext("Move or zoom the map, then choose “Show activities in this area”.")}

-
- - - +
+ + +
+ + + +
@@ -611,7 +706,9 @@ defmodule WhoNeedHelpWeb.ActivityLive.Index do :for={activity <- @activities} id={"open-activity-#{activity.id}"} navigate={~p"/activities/#{activity.id}"} - class="block rounded-3xl border border-base-300 bg-base-100 p-6 transition hover:border-info/50" + data-discovery-card + data-request-id={activity.id} + class="request-result-card block rounded-3xl border border-base-300 bg-base-100 p-6 transition hover:border-info/50" >
@@ -683,14 +780,14 @@ defmodule WhoNeedHelpWeb.ActivityLive.Index do class="aid-map request-discovery-map" />
diff --git a/lib/who_need_help_web/live/request_live/index.ex b/lib/who_need_help_web/live/request_live/index.ex index 9a11d6f..625c88e 100644 --- a/lib/who_need_help_web/live/request_live/index.ex +++ b/lib/who_need_help_web/live/request_live/index.ex @@ -8,7 +8,9 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do @discovery_modes ~w(nearby mine) @view_modes ~w(list split map) + @map_update_modes ~w(manual auto) @filter_keys ~w(category_id urgency area) + @map_update_delay_ms 450 @empty_reputation %{ completed: 0, unique_people: 0, @@ -30,6 +32,8 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do |> assign(:discovery_mode, "nearby") |> assign(:view_mode, "split") |> assign(:view_explicit, false) + |> assign(:map_update_mode, "manual") + |> assign(:map_update_timer, nil) |> assign(:viewport, nil) |> assign(:pending_viewport, nil) |> assign(:discovery_topics, []) @@ -41,7 +45,7 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do |> assign(:reputation, @empty_reputation) |> assign(:map_items, Jason.encode!([])) |> assign(:map_result_count, 0) - |> assign(:map_total_count, 0) + |> assign(:list_result_count, 0) |> assign(:discovery_loading, true) |> assign(:refresh_timer, nil) |> assign(:page_title, gettext("Nearby help")) @@ -53,20 +57,29 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do filters = normalize_filters(params) viewport = parse_viewport(params) view_mode = normalize_view_mode(params["view"]) + map_update_mode = normalize_map_update_mode(params["map_update"]) discovery_mode = normalize_discovery_mode(params["scope"]) socket = socket + |> cancel_map_update_timer() |> assign(:filters, filters) |> assign(:filter_form, to_form(filters, as: :filters)) |> assign(:discovery_mode, discovery_mode) |> assign(:view_mode, view_mode) |> assign(:view_explicit, params["view"] in @view_modes) + |> assign(:map_update_mode, map_update_mode) |> assign(:viewport, viewport) |> assign(:pending_viewport, nil) |> assign( :query_params, - normalize_query_params(filters, viewport, view_mode, discovery_mode) + normalize_query_params( + filters, + viewport, + view_mode, + discovery_mode, + map_update_mode + ) ) |> refresh_discovery_subscription(viewport, filters, discovery_mode) |> load_if_connected() @@ -98,15 +111,35 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do end end + def handle_event("set-map-update-mode", %{"mode" => mode}, socket) + when mode in @map_update_modes do + viewport = + if mode == "auto" and match?(%DiscoveryViewport{}, socket.assigns.pending_viewport), + do: socket.assigns.pending_viewport, + else: socket.assigns.viewport + + {:noreply, + push_patch(socket, + to: request_path(socket, viewport: viewport, map_update_mode: mode) + )} + end + def handle_event("map-viewport-change", params, socket) do case DiscoveryViewport.cast(params) do {:ok, viewport} -> - pending = - if DiscoveryViewport.same_area?(viewport, socket.assigns.viewport), - do: nil, - else: viewport + cond do + DiscoveryViewport.same_area?(viewport, socket.assigns.viewport) -> + {:noreply, + socket + |> cancel_map_update_timer() + |> assign(:pending_viewport, nil)} - {:noreply, assign(socket, :pending_viewport, pending)} + socket.assigns.map_update_mode == "auto" -> + {:noreply, schedule_map_update(socket, viewport)} + + true -> + {:noreply, assign(socket, :pending_viewport, viewport)} + end :error -> {:noreply, socket} @@ -191,6 +224,17 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do {:noreply, socket |> assign(:refresh_timer, nil) |> load_if_connected()} end + def handle_info({:apply_map_viewport, %DiscoveryViewport{} = viewport}, socket) do + socket = assign(socket, :map_update_timer, nil) + + if socket.assigns.map_update_mode == "auto" and + DiscoveryViewport.same_area?(viewport, socket.assigns.pending_viewport) do + {:noreply, push_patch(socket, to: request_path(socket, viewport: viewport))} + else + {:noreply, socket} + end + end + @impl true def handle_async(:load_discovery, {:ok, result}, socket) do {:noreply, assign(socket, result)} @@ -227,10 +271,10 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do end defp load_data(scope, filters, discovery_mode, view_mode, viewport) do - {requests_page, map_items} = + {requests_page, map_items, list_result_count} = case {discovery_mode, viewport} do {"mine", _viewport} -> - {%Pagination.Page{}, []} + {%Pagination.Page{}, [], 0} {"nearby", %DiscoveryViewport{} = viewport} -> page = @@ -247,10 +291,17 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do Help.map_discovery_items(scope, filters, viewport) end - {page, items} + list_result_count = + if view_mode == "map" do + 0 + else + Help.count_open_requests(scope, filters, viewport: viewport) + end + + {page, items, list_result_count} {"nearby", nil} -> - {%Pagination.Page{}, []} + {%Pagination.Page{}, [], 0} end my_requests_page = @@ -260,15 +311,6 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do %Pagination.Page{} end - map_total_count = - if discovery_mode == "nearby" and view_mode != "list" do - DiscoveryQueryCache.fetch(map_total_cache_key(scope, filters), fn -> - Help.count_map_discovery_items(scope, filters) - end) - else - 0 - end - %{ discovery_loading: false, requests: requests_page.entries, @@ -278,7 +320,7 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do reputation: Trust.reputation(scope.user.id), map_items: Jason.encode!(map_items), map_result_count: Enum.reduce(map_items, 0, &(map_item_count(&1) + &2)), - map_total_count: map_total_count + list_result_count: list_result_count } end @@ -332,11 +374,6 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do ) ) - :ok = - DiscoveryQueryCache.invalidate( - map_total_cache_key(socket.assigns.current_scope, socket.assigns.filters) - ) - socket end @@ -344,8 +381,6 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do {:requests, scope.user.id, filters, discovery_mode, view_mode, viewport} end - defp map_total_cache_key(scope, filters), do: {:request_map_total, scope.user.id, filters} - defp empty_filters, do: %{"category_id" => "", "urgency" => "", "area" => ""} defp normalize_filters(params) do @@ -357,6 +392,9 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do defp normalize_view_mode(view_mode) when view_mode in @view_modes, do: view_mode defp normalize_view_mode(_view_mode), do: "split" + defp normalize_map_update_mode(mode) when mode in @map_update_modes, do: mode + defp normalize_map_update_mode(_mode), do: "manual" + defp normalize_discovery_mode(discovery_mode) when discovery_mode in @discovery_modes, do: discovery_mode @@ -369,7 +407,13 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do end end - defp normalize_query_params(filters, viewport, view_mode, discovery_mode) do + defp normalize_query_params( + filters, + viewport, + view_mode, + discovery_mode, + map_update_mode + ) do filters |> Map.reject(fn {_key, value} -> value == "" end) |> Map.put("view", view_mode) @@ -382,6 +426,11 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do else: %{} ) ) + |> then(fn params -> + if map_update_mode == "auto", + do: Map.put(params, "map_update", "auto"), + else: params + end) end defp request_path(socket, overrides) do @@ -389,11 +438,39 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do viewport = Keyword.get(overrides, :viewport, socket.assigns.viewport) view_mode = Keyword.get(overrides, :view_mode, socket.assigns.view_mode) discovery_mode = Keyword.get(overrides, :discovery_mode, socket.assigns.discovery_mode) - params = normalize_query_params(filters, viewport, view_mode, discovery_mode) + + map_update_mode = + Keyword.get(overrides, :map_update_mode, socket.assigns.map_update_mode) + + params = + normalize_query_params( + filters, + viewport, + view_mode, + discovery_mode, + map_update_mode + ) ~p"/requests?#{params}" end + defp schedule_map_update(socket, viewport) do + socket = cancel_map_update_timer(socket) + timer = Process.send_after(self(), {:apply_map_viewport, viewport}, @map_update_delay_ms) + + socket + |> assign(:pending_viewport, viewport) + |> assign(:map_update_timer, timer) + end + + defp cancel_map_update_timer(socket) do + if socket.assigns.map_update_timer do + Process.cancel_timer(socket.assigns.map_update_timer) + end + + assign(socket, :map_update_timer, nil) + end + defp urgency_label(:now), do: gettext("Now") defp urgency_label("now"), do: gettext("Now") defp urgency_label(:today), do: gettext("Today") @@ -530,60 +607,98 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do class="request-discovery mt-6" >
-
+
{gettext("Loading results…")}
-
+
{ngettext( - "%{count} request in this map area", - "%{count} requests in this map area", - @map_result_count, - count: @map_result_count + "%{count} request in the selected map area", + "%{count} requests in the selected map area", + if(@view_mode == "map", do: @map_result_count, else: @list_result_count), + count: if(@view_mode == "map", do: @map_result_count, else: @list_result_count) )} - - {gettext("of %{count} matching requests with map locations", - count: @map_total_count + + + {gettext("Showing %{shown} of %{count} in the list.", + shown: length(@requests), + count: @list_result_count )} -

- {gettext("Move the map, then search the newly visible area.")} + +

+ {gettext("Map moved. Results still show the previous area.")} +

+

+ {gettext("Updating results for the visible map area…")} +

+

+ {gettext("Results update automatically after you stop moving the map.")} +

+

+ {gettext("Move or zoom the map, then choose “Show requests in this area”.")}

-
- - - +
+ + +
+ + + +
@@ -709,14 +824,14 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do class="aid-map request-discovery-map" />
diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index ad2cd4e..a385e4f 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -179,7 +179,7 @@ msgid "Active" msgstr "" #: lib/who_need_help_web/components/layouts.ex:231 -#: lib/who_need_help_web/live/activity_live/index.ex:37 +#: lib/who_need_help_web/live/activity_live/index.ex:41 #, elixir-autogen, elixir-format msgid "Activities" msgstr "" @@ -215,7 +215,7 @@ msgstr "" msgid "Activity restored." msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:491 +#: lib/who_need_help_web/live/activity_live/index.ex:548 #: lib/who_need_help_web/live/activity_live/new.ex:204 #, elixir-autogen, elixir-format msgid "Activity type" @@ -232,12 +232,12 @@ msgstr "" msgid "Administrator" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:493 +#: lib/who_need_help_web/live/activity_live/index.ex:550 #, elixir-autogen, elixir-format msgid "All activities" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:493 +#: lib/who_need_help_web/live/request_live/index.ex:570 #, elixir-autogen, elixir-format msgid "All categories" msgstr "" @@ -252,7 +252,7 @@ msgstr "" msgid "Another helper already accepted this request." msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:508 +#: lib/who_need_help_web/live/request_live/index.ex:585 #, elixir-autogen, elixir-format msgid "Any urgency" msgstr "" @@ -367,16 +367,16 @@ msgstr "" msgid "Cancel request" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:422 +#: lib/who_need_help_web/live/activity_live/index.ex:479 #: lib/who_need_help_web/live/activity_live/show.ex:344 -#: lib/who_need_help_web/live/request_live/index.ex:413 -#: lib/who_need_help_web/live/request_live/index.ex:414 +#: lib/who_need_help_web/live/request_live/index.ex:490 +#: lib/who_need_help_web/live/request_live/index.ex:491 #: lib/who_need_help_web/live/request_live/show.ex:956 #, elixir-autogen, elixir-format msgid "Cancelled" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:491 +#: lib/who_need_help_web/live/request_live/index.ex:568 #: lib/who_need_help_web/live/request_live/new.ex:302 #, elixir-autogen, elixir-format msgid "Category" @@ -459,7 +459,7 @@ msgstr "" msgid "Coffee and conversation" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:436 +#: lib/who_need_help_web/live/activity_live/index.ex:493 #, elixir-autogen, elixir-format msgid "Coffee, cinema, walks, and hikes are separate from urgent help and never affect helper ratings." msgstr "" @@ -474,19 +474,19 @@ msgstr "" msgid "Community helpers" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:647 +#: lib/who_need_help_web/live/activity_live/index.ex:744 #: lib/who_need_help_web/live/activity_live/show.ex:403 #: lib/who_need_help_web/live/activity_live/show.ex:639 #: lib/who_need_help_web/live/activity_live/show.ex:698 -#: lib/who_need_help_web/live/request_live/index.ex:656 +#: lib/who_need_help_web/live/request_live/index.ex:771 #, elixir-autogen, elixir-format msgid "Community member" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:421 +#: lib/who_need_help_web/live/activity_live/index.ex:478 #: lib/who_need_help_web/live/activity_live/show.ex:343 -#: lib/who_need_help_web/live/request_live/index.ex:411 -#: lib/who_need_help_web/live/request_live/index.ex:412 +#: lib/who_need_help_web/live/request_live/index.ex:488 +#: lib/who_need_help_web/live/request_live/index.ex:489 #: lib/who_need_help_web/live/request_live/show.ex:955 #: lib/who_need_help_web/live/request_live/show.ex:974 #, elixir-autogen, elixir-format @@ -537,13 +537,13 @@ msgstr "" msgid "Confirming..." msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:442 +#: lib/who_need_help_web/live/activity_live/index.ex:499 #: lib/who_need_help_web/live/activity_live/new.ex:12 #, elixir-autogen, elixir-format msgid "Create activity" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:722 +#: lib/who_need_help_web/live/activity_live/index.ex:819 #: lib/who_need_help_web/live/activity_live/new.ex:180 #, elixir-autogen, elixir-format msgid "Create an activity" @@ -554,7 +554,7 @@ msgstr "" msgid "Create category" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:442 +#: lib/who_need_help_web/live/request_live/index.ex:519 #, elixir-autogen, elixir-format msgid "Create urgent request" msgstr "" @@ -704,7 +704,7 @@ msgstr "" msgid "Explain what is already arranged and what the volunteer needs to do." msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:433 +#: lib/who_need_help_web/live/activity_live/index.ex:490 #, elixir-autogen, elixir-format msgid "Find people to join" msgstr "" @@ -865,8 +865,8 @@ msgstr "" msgid "In a browser this works only while the page remains open. The Android app shows a persistent notification and can continue after it is minimized. Raw coordinates are removed when sharing stops." msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:409 -#: lib/who_need_help_web/live/request_live/index.ex:410 +#: lib/who_need_help_web/live/request_live/index.ex:486 +#: lib/who_need_help_web/live/request_live/index.ex:487 #: lib/who_need_help_web/live/request_live/show.ex:954 #, elixir-autogen, elixir-format msgid "In progress" @@ -989,8 +989,8 @@ msgstr "" msgid "Match and coordinate" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:407 -#: lib/who_need_help_web/live/request_live/index.ex:408 +#: lib/who_need_help_web/live/request_live/index.ex:484 +#: lib/who_need_help_web/live/request_live/index.ex:485 #: lib/who_need_help_web/live/request_live/show.ex:952 #, elixir-autogen, elixir-format msgid "Matched" @@ -1016,7 +1016,7 @@ msgstr "" msgid "Medicine requests" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:449 +#: lib/who_need_help_web/live/activity_live/index.ex:506 #, elixir-autogen, elixir-format msgid "Meet in public first, keep exact details inside the approved group, and leave or report anything that feels unsafe." msgstr "" @@ -1067,12 +1067,12 @@ msgstr "" msgid "Moderator access is required." msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:433 +#: lib/who_need_help_web/live/request_live/index.ex:510 #, elixir-autogen, elixir-format msgid "NEARBY MUTUAL AID" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:47 +#: lib/who_need_help_web/live/request_live/index.ex:51 #, elixir-autogen, elixir-format msgid "Nearby help" msgstr "" @@ -1153,9 +1153,9 @@ msgid "Not for emergencies" msgstr "" #: lib/who_need_help_web/live/notification_live.ex:748 -#: lib/who_need_help_web/live/request_live/index.ex:397 -#: lib/who_need_help_web/live/request_live/index.ex:398 -#: lib/who_need_help_web/live/request_live/index.ex:509 +#: lib/who_need_help_web/live/request_live/index.ex:474 +#: lib/who_need_help_web/live/request_live/index.ex:475 +#: lib/who_need_help_web/live/request_live/index.ex:586 #: lib/who_need_help_web/live/request_live/new.ex:449 #: lib/who_need_help_web/live/request_live/show.ex:943 #: lib/who_need_help_web/live/request_live/show.ex:944 @@ -1163,7 +1163,7 @@ msgstr "" msgid "Now" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:431 +#: lib/who_need_help_web/live/activity_live/index.ex:488 #, elixir-autogen, elixir-format msgid "OPTIONAL SOCIAL PLANS" msgstr "" @@ -1181,12 +1181,12 @@ msgstr "" #: lib/who_need_help/notifications/text.ex:140 #: lib/who_need_help_web/controllers/content_removal_html.ex:21 #: lib/who_need_help_web/controllers/support_html.ex:16 -#: lib/who_need_help_web/live/activity_live/index.ex:420 +#: lib/who_need_help_web/live/activity_live/index.ex:477 #: lib/who_need_help_web/live/activity_live/show.ex:342 #: lib/who_need_help_web/live/moderation_live.ex:258 #: lib/who_need_help_web/live/report_live.ex:104 -#: lib/who_need_help_web/live/request_live/index.ex:405 -#: lib/who_need_help_web/live/request_live/index.ex:406 +#: lib/who_need_help_web/live/request_live/index.ex:482 +#: lib/who_need_help_web/live/request_live/index.ex:483 #: lib/who_need_help_web/live/request_live/show.ex:951 #: lib/who_need_help_web/live/support_operations_live.ex:237 #: lib/who_need_help_web/live/support_operations_live.ex:438 @@ -1639,9 +1639,9 @@ msgid "Save profile" msgstr "" #: lib/who_need_help_web/live/notification_live.ex:750 -#: lib/who_need_help_web/live/request_live/index.ex:401 -#: lib/who_need_help_web/live/request_live/index.ex:402 -#: lib/who_need_help_web/live/request_live/index.ex:511 +#: lib/who_need_help_web/live/request_live/index.ex:478 +#: lib/who_need_help_web/live/request_live/index.ex:479 +#: lib/who_need_help_web/live/request_live/index.ex:588 #: lib/who_need_help_web/live/request_live/new.ex:451 #: lib/who_need_help_web/live/request_live/show.ex:947 #: lib/who_need_help_web/live/request_live/show.ex:948 @@ -1904,7 +1904,7 @@ msgstr "" msgid "This interaction is blocked." msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:449 +#: lib/who_need_help_web/live/request_live/index.ex:526 #: lib/who_need_help_web/live/request_live/show.ex:1022 #, elixir-autogen, elixir-format msgid "This is not an emergency service. Contact local emergency services for immediate danger." @@ -1952,9 +1952,9 @@ msgid "To see sent emails, visit" msgstr "" #: lib/who_need_help_web/live/notification_live.ex:749 -#: lib/who_need_help_web/live/request_live/index.ex:399 -#: lib/who_need_help_web/live/request_live/index.ex:400 -#: lib/who_need_help_web/live/request_live/index.ex:510 +#: lib/who_need_help_web/live/request_live/index.ex:476 +#: lib/who_need_help_web/live/request_live/index.ex:477 +#: lib/who_need_help_web/live/request_live/index.ex:587 #: lib/who_need_help_web/live/request_live/new.ex:450 #: lib/who_need_help_web/live/request_live/show.ex:945 #: lib/who_need_help_web/live/request_live/show.ex:946 @@ -2029,7 +2029,7 @@ msgid "Update email instructions" msgstr "" #: lib/who_need_help_web/live/notification_live.ex:743 -#: lib/who_need_help_web/live/request_live/index.ex:506 +#: lib/who_need_help_web/live/request_live/index.ex:583 #: lib/who_need_help_web/live/request_live/new.ex:447 #, elixir-autogen, elixir-format msgid "Urgency" @@ -2174,7 +2174,7 @@ msgstr "" msgid "Who Need Help was developed with the local Codex CLI authenticated through the builder's ChatGPT subscription. No OpenAI API key or usage-based API fallback is used." msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:434 +#: lib/who_need_help_web/live/request_live/index.ex:511 #, elixir-autogen, elixir-format msgid "Who needs help?" msgstr "" @@ -2292,7 +2292,7 @@ msgstr "" msgid "Your review is revealed only after both participants submit." msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:724 +#: lib/who_need_help_web/live/request_live/index.ex:839 #, elixir-autogen, elixir-format msgid "Your trust summary" msgstr "" @@ -2313,17 +2313,17 @@ msgstr "" msgid "before confirming." msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:646 +#: lib/who_need_help_web/live/activity_live/index.ex:743 #: lib/who_need_help_web/live/category_proposal_live.ex:252 #: lib/who_need_help_web/live/moderation_live.ex:372 -#: lib/who_need_help_web/live/request_live/index.ex:655 +#: lib/who_need_help_web/live/request_live/index.ex:770 #, elixir-autogen, elixir-format msgid "by %{name}" msgstr "" #: lib/who_need_help_web/live/profile_live.ex:190 #: lib/who_need_help_web/live/public_profile_live.ex:133 -#: lib/who_need_help_web/live/request_live/index.ex:728 +#: lib/who_need_help_web/live/request_live/index.ex:843 #: lib/who_need_help_web/live/request_live/show.ex:1374 #, elixir-autogen, elixir-format msgid "completed" @@ -2359,7 +2359,7 @@ msgstr "" msgid "participants only" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:732 +#: lib/who_need_help_web/live/request_live/index.ex:847 #: lib/who_need_help_web/live/request_live/show.ex:1378 #, elixir-autogen, elixir-format msgid "people" @@ -2419,7 +2419,7 @@ msgstr "" #: lib/who_need_help_web/live/activity_live/show.ex:719 #: lib/who_need_help_web/live/profile_live.ex:285 #: lib/who_need_help_web/live/public_profile_live.ex:98 -#: lib/who_need_help_web/live/request_live/index.ex:736 +#: lib/who_need_help_web/live/request_live/index.ex:851 #: lib/who_need_help_web/live/request_live/show.ex:1093 #: lib/who_need_help_web/live/request_live/show.ex:1476 #, elixir-autogen, elixir-format @@ -2452,8 +2452,8 @@ msgstr "" msgid "Approved" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:415 -#: lib/who_need_help_web/live/request_live/index.ex:416 +#: lib/who_need_help_web/live/request_live/index.ex:492 +#: lib/who_need_help_web/live/request_live/index.ex:493 #, elixir-autogen, elixir-format msgid "Expired" msgstr "" @@ -2506,8 +2506,8 @@ msgstr "" msgid "Load earlier messages" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:658 -#: lib/who_need_help_web/live/activity_live/index.ex:751 +#: lib/who_need_help_web/live/activity_live/index.ex:755 +#: lib/who_need_help_web/live/activity_live/index.ex:848 #: lib/who_need_help_web/live/category_proposal_live.ex:284 #: lib/who_need_help_web/live/leaderboard_live.ex:91 #: lib/who_need_help_web/live/moderation_live.ex:465 @@ -2519,7 +2519,7 @@ msgstr "" #: lib/who_need_help_web/live/profile_live.ex:363 #: lib/who_need_help_web/live/public_profile_live.ex:178 #: lib/who_need_help_web/live/report_live.ex:98 -#: lib/who_need_help_web/live/request_live/index.ex:805 +#: lib/who_need_help_web/live/request_live/index.ex:920 #: lib/who_need_help_web/live/support_operations_live.ex:306 #: lib/who_need_help_web/live/support_operations_live.ex:505 #, elixir-autogen, elixir-format @@ -2527,7 +2527,7 @@ msgid "Load more" msgstr "" #: lib/who_need_help_web/live/activity_live/show.ex:544 -#: lib/who_need_help_web/live/request_live/index.ex:701 +#: lib/who_need_help_web/live/request_live/index.ex:816 #: lib/who_need_help_web/live/request_live/show.ex:1275 #, elixir-autogen, elixir-format msgid "The map is unavailable in this browser. Request details remain usable." @@ -4516,44 +4516,37 @@ msgstr "" msgid "Exact point selected. Drag the red pin or click the map to move it." msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:539 -#, elixir-autogen, elixir-format -msgid "%{count} request in this map area" -msgid_plural "%{count} requests in this map area" -msgstr[0] "" -msgstr[1] "" - -#: lib/who_need_help_web/live/activity_live/index.ex:502 -#: lib/who_need_help_web/live/request_live/index.ex:516 +#: lib/who_need_help_web/live/activity_live/index.ex:559 +#: lib/who_need_help_web/live/request_live/index.ex:593 #, elixir-autogen, elixir-format msgid "Area or city" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:594 -#: lib/who_need_help_web/live/request_live/index.ex:606 +#: lib/who_need_help_web/live/activity_live/index.ex:689 +#: lib/who_need_help_web/live/request_live/index.ex:721 #, elixir-autogen, elixir-format msgid "Choose an area on the map" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:436 +#: lib/who_need_help_web/live/request_live/index.ex:513 #, elixir-autogen, elixir-format msgid "Explore privacy-friendly areas and public exact meeting points chosen by requesters." msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:553 -#: lib/who_need_help_web/live/request_live/index.ex:565 +#: lib/who_need_help_web/live/activity_live/index.ex:647 +#: lib/who_need_help_web/live/request_live/index.ex:679 #, elixir-autogen, elixir-format msgid "List" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:677 +#: lib/who_need_help_web/live/request_live/index.ex:792 #, elixir-autogen, elixir-format msgid "Load more in this area" msgstr "" #: lib/who_need_help_web/components/layouts/root.html.heex:5 -#: lib/who_need_help_web/live/activity_live/index.ex:573 -#: lib/who_need_help_web/live/request_live/index.ex:585 +#: lib/who_need_help_web/live/activity_live/index.ex:667 +#: lib/who_need_help_web/live/request_live/index.ex:699 #, elixir-autogen, elixir-format msgid "Map" msgstr "" @@ -4563,77 +4556,65 @@ msgstr "" msgid "Map preview" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:606 -#: lib/who_need_help_web/live/request_live/index.ex:618 +#: lib/who_need_help_web/live/activity_live/index.ex:701 +#: lib/who_need_help_web/live/request_live/index.ex:733 #, elixir-autogen, elixir-format msgid "Move or zoom the map to search somewhere else." msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:540 -#: lib/who_need_help_web/live/request_live/index.ex:552 -#, elixir-autogen, elixir-format -msgid "Move the map, then search the newly visible area." -msgstr "" - -#: lib/who_need_help_web/live/request_live/index.ex:616 +#: lib/who_need_help_web/live/request_live/index.ex:731 #, elixir-autogen, elixir-format msgid "No open requests in this area" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:608 +#: lib/who_need_help_web/live/request_live/index.ex:723 #, elixir-autogen, elixir-format msgid "Only requests from the selected map area will be loaded." msgstr "" #: lib/who_need_help_web/components/layouts/root.html.heex:8 -#: lib/who_need_help_web/live/request_live/index.ex:704 +#: lib/who_need_help_web/live/request_live/index.ex:819 #, elixir-autogen, elixir-format msgid "Open request" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:503 -#: lib/who_need_help_web/live/request_live/index.ex:517 +#: lib/who_need_help_web/live/activity_live/index.ex:560 +#: lib/who_need_help_web/live/request_live/index.ex:594 #, elixir-autogen, elixir-format msgid "Optional text search" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:683 +#: lib/who_need_help_web/live/request_live/index.ex:798 #, elixir-autogen, elixir-format msgid "Requests without map coordinates appear only when their public area description matches the text search." msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:544 -#: lib/who_need_help_web/live/request_live/index.ex:556 +#: lib/who_need_help_web/live/activity_live/index.ex:638 +#: lib/who_need_help_web/live/request_live/index.ex:670 #, elixir-autogen, elixir-format msgid "Results layout" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:693 -#: lib/who_need_help_web/live/request_live/index.ex:719 -#, elixir-autogen, elixir-format -msgid "Search this area" -msgstr "" - #: lib/who_need_help_web/controllers/page_html/home.html.heex:171 #, elixir-autogen, elixir-format msgid "Static preview" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:563 -#: lib/who_need_help_web/live/request_live/index.ex:575 +#: lib/who_need_help_web/live/activity_live/index.ex:657 +#: lib/who_need_help_web/live/request_live/index.ex:689 #, elixir-autogen, elixir-format msgid "Together" msgstr "" #: lib/who_need_help_web/components/layouts/root.html.heex:6 #: lib/who_need_help_web/controllers/page_html/home.html.heex:160 -#: lib/who_need_help_web/live/activity_live/index.ex:681 +#: lib/who_need_help_web/live/activity_live/index.ex:778 #: lib/who_need_help_web/live/activity_live/new.ex:355 #: lib/who_need_help_web/live/activity_live/new.ex:414 #: lib/who_need_help_web/live/activity_live/show.ex:546 #: lib/who_need_help_web/live/notification_live.ex:602 #: lib/who_need_help_web/live/notification_live.ex:621 -#: lib/who_need_help_web/live/request_live/index.ex:703 +#: lib/who_need_help_web/live/request_live/index.ex:818 #: lib/who_need_help_web/live/request_live/new.ex:485 #: lib/who_need_help_web/live/request_live/new.ex:563 #: lib/who_need_help_web/live/request_live/show.ex:1277 @@ -5022,7 +5003,7 @@ msgid "Nearby alert deleted." msgstr "" #: lib/who_need_help_web/live/notification_live.ex:456 -#: lib/who_need_help_web/live/request_live/index.ex:462 +#: lib/who_need_help_web/live/request_live/index.ex:539 #, elixir-autogen, elixir-format msgid "Nearby requests" msgstr "" @@ -5362,7 +5343,7 @@ msgid "WebGL is unavailable in this browser, so the full map cannot start. Selec msgstr "" #: lib/who_need_help_web/components/layouts/root.html.heex:7 -#: lib/who_need_help_web/live/activity_live/index.ex:682 +#: lib/who_need_help_web/live/activity_live/index.ex:779 #: lib/who_need_help_web/live/activity_live/show.ex:547 #: lib/who_need_help_web/live/request_live/show.ex:1278 #, elixir-autogen, elixir-format @@ -5927,7 +5908,7 @@ msgstr "" msgid "Delivery settings" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:660 +#: lib/who_need_help_web/live/request_live/index.ex:775 #, elixir-autogen, elixir-format msgid "Expires" msgstr "" @@ -5947,29 +5928,22 @@ msgstr "" msgid "Notification sections" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:674 +#: lib/who_need_help_web/live/activity_live/index.ex:771 #, elixir-autogen, elixir-format msgid "%{count} activities" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:527 -#, elixir-autogen, elixir-format -msgid "%{count} activity in this map area" -msgid_plural "%{count} activities in this map area" -msgstr[0] "" -msgstr[1] "" - -#: lib/who_need_help_web/live/request_live/index.ex:705 +#: lib/who_need_help_web/live/request_live/index.ex:820 #, elixir-autogen, elixir-format msgid "%{count} requests" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:717 +#: lib/who_need_help_web/live/activity_live/index.ex:814 #, elixir-autogen, elixir-format msgid "Activities you create or ask to join will appear here. Leaving removes an activity from this list." msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:457 +#: lib/who_need_help_web/live/activity_live/index.ex:514 #, elixir-autogen, elixir-format msgid "Activity views" msgstr "" @@ -5984,12 +5958,12 @@ msgstr "" msgid "Confirm the safety guidance before asking nearby people for help." msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:753 +#: lib/who_need_help_web/live/request_live/index.ex:868 #, elixir-autogen, elixir-format msgid "Create request" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:776 +#: lib/who_need_help_web/live/request_live/index.ex:891 #, elixir-autogen, elixir-format msgid "Create your first request" msgstr "" @@ -6004,43 +5978,43 @@ msgstr "" msgid "Location" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:463 +#: lib/who_need_help_web/live/activity_live/index.ex:520 #, elixir-autogen, elixir-format msgid "My activities" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:463 -#: lib/who_need_help_web/live/request_live/index.ex:747 +#: lib/who_need_help_web/live/request_live/index.ex:540 +#: lib/who_need_help_web/live/request_live/index.ex:862 #, elixir-autogen, elixir-format msgid "My requests" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:462 +#: lib/who_need_help_web/live/activity_live/index.ex:519 #, elixir-autogen, elixir-format msgid "Nearby activities" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:715 +#: lib/who_need_help_web/live/activity_live/index.ex:812 #, elixir-autogen, elixir-format msgid "No activities yet" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:604 +#: lib/who_need_help_web/live/activity_live/index.ex:699 #, elixir-autogen, elixir-format msgid "No open activities in this area" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:771 +#: lib/who_need_help_web/live/request_live/index.ex:886 #, elixir-autogen, elixir-format msgid "No requests yet" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:596 +#: lib/who_need_help_web/live/activity_live/index.ex:691 #, elixir-autogen, elixir-format msgid "Only activities from the selected map area will be loaded." msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:673 +#: lib/who_need_help_web/live/activity_live/index.ex:770 #, elixir-autogen, elixir-format msgid "Open activity" msgstr "" @@ -6050,12 +6024,12 @@ msgstr "" msgid "Request form steps" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:457 +#: lib/who_need_help_web/live/request_live/index.ex:534 #, elixir-autogen, elixir-format msgid "Request views" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:773 +#: lib/who_need_help_web/live/request_live/index.ex:888 #, elixir-autogen, elixir-format msgid "Requests you publish or accept will appear here." msgstr "" @@ -6080,7 +6054,7 @@ msgstr "" msgid "Share only as much location detail as helpers need." msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:679 +#: lib/who_need_help_web/live/activity_live/index.ex:776 #, elixir-autogen, elixir-format msgid "The map is unavailable in this browser. Activity details remain usable." msgstr "" @@ -6090,7 +6064,7 @@ msgstr "" msgid "Timing" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:749 +#: lib/who_need_help_web/live/request_live/index.ex:864 #, elixir-autogen, elixir-format msgid "Track requests you created and requests you accepted as a helper." msgstr "" @@ -6751,32 +6725,86 @@ msgstr "" msgid "Choose the meeting point on the map or use your current location." msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:522 -#: lib/who_need_help_web/live/activity_live/index.ex:586 -#: lib/who_need_help_web/live/activity_live/index.ex:707 -#: lib/who_need_help_web/live/request_live/index.ex:534 -#: lib/who_need_help_web/live/request_live/index.ex:598 -#: lib/who_need_help_web/live/request_live/index.ex:763 +#: lib/who_need_help_web/live/activity_live/index.ex:579 +#: lib/who_need_help_web/live/activity_live/index.ex:681 +#: lib/who_need_help_web/live/activity_live/index.ex:804 +#: lib/who_need_help_web/live/request_live/index.ex:611 +#: lib/who_need_help_web/live/request_live/index.ex:713 +#: lib/who_need_help_web/live/request_live/index.ex:878 #, elixir-autogen, elixir-format msgid "Loading results…" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:676 +#: lib/who_need_help_web/live/activity_live/index.ex:773 #, elixir-autogen, elixir-format msgid "Maximum zoom reached. Matching activities are listed beside the map." msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:707 +#: lib/who_need_help_web/live/request_live/index.ex:822 #, elixir-autogen, elixir-format msgid "Maximum zoom reached. Matching requests are listed beside the map." msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:535 +#: lib/who_need_help_web/live/activity_live/index.ex:584 #, elixir-autogen, elixir-format -msgid "of %{count} matching activities with map locations" +msgid "%{count} activity in the selected map area" +msgid_plural "%{count} activities in the selected map area" +msgstr[0] "" +msgstr[1] "" + +#: lib/who_need_help_web/live/request_live/index.ex:616 +#, elixir-autogen, elixir-format +msgid "%{count} request in the selected map area" +msgid_plural "%{count} requests in the selected map area" +msgstr[0] "" +msgstr[1] "" + +#: lib/who_need_help_web/live/activity_live/index.ex:603 +#: lib/who_need_help_web/live/request_live/index.ex:635 +#, elixir-autogen, elixir-format +msgid "Map moved. Results still show the previous area." msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:547 +#: lib/who_need_help_web/live/activity_live/index.ex:621 #, elixir-autogen, elixir-format -msgid "of %{count} matching requests with map locations" +msgid "Move or zoom the map, then choose “Show activities in this area”." +msgstr "" + +#: lib/who_need_help_web/live/request_live/index.ex:653 +#, elixir-autogen, elixir-format +msgid "Move or zoom the map, then choose “Show requests in this area”." +msgstr "" + +#: lib/who_need_help_web/live/activity_live/index.ex:615 +#: lib/who_need_help_web/live/request_live/index.ex:647 +#, elixir-autogen, elixir-format +msgid "Results update automatically after you stop moving the map." +msgstr "" + +#: lib/who_need_help_web/live/activity_live/index.ex:790 +#, elixir-autogen, elixir-format +msgid "Show activities in this area" +msgstr "" + +#: lib/who_need_help_web/live/request_live/index.ex:834 +#, elixir-autogen, elixir-format +msgid "Show requests in this area" +msgstr "" + +#: lib/who_need_help_web/live/activity_live/index.ex:593 +#: lib/who_need_help_web/live/request_live/index.ex:625 +#, elixir-autogen, elixir-format +msgid "Showing %{shown} of %{count} in the list." +msgstr "" + +#: lib/who_need_help_web/live/activity_live/index.ex:635 +#: lib/who_need_help_web/live/request_live/index.ex:667 +#, elixir-autogen, elixir-format +msgid "Update results as map moves" +msgstr "" + +#: lib/who_need_help_web/live/activity_live/index.ex:609 +#: lib/who_need_help_web/live/request_live/index.ex:641 +#, elixir-autogen, elixir-format +msgid "Updating results for the visible map area…" msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index 91848eb..b5189f4 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -179,7 +179,7 @@ msgid "Active" msgstr "Active" #: lib/who_need_help_web/components/layouts.ex:231 -#: lib/who_need_help_web/live/activity_live/index.ex:37 +#: lib/who_need_help_web/live/activity_live/index.ex:41 #, elixir-autogen, elixir-format msgid "Activities" msgstr "Activities" @@ -215,7 +215,7 @@ msgstr "Activity published. You approve every participant." msgid "Activity restored." msgstr "Activity restored." -#: lib/who_need_help_web/live/activity_live/index.ex:491 +#: lib/who_need_help_web/live/activity_live/index.ex:548 #: lib/who_need_help_web/live/activity_live/new.ex:204 #, elixir-autogen, elixir-format msgid "Activity type" @@ -232,12 +232,12 @@ msgstr "Add unverified link" msgid "Administrator" msgstr "Administrator" -#: lib/who_need_help_web/live/activity_live/index.ex:493 +#: lib/who_need_help_web/live/activity_live/index.ex:550 #, elixir-autogen, elixir-format msgid "All activities" msgstr "All activities" -#: lib/who_need_help_web/live/request_live/index.ex:493 +#: lib/who_need_help_web/live/request_live/index.ex:570 #, elixir-autogen, elixir-format msgid "All categories" msgstr "All categories" @@ -252,7 +252,7 @@ msgstr "Already registered?" msgid "Another helper already accepted this request." msgstr "Another helper already accepted this request." -#: lib/who_need_help_web/live/request_live/index.ex:508 +#: lib/who_need_help_web/live/request_live/index.ex:585 #, elixir-autogen, elixir-format msgid "Any urgency" msgstr "Any urgency" @@ -367,16 +367,16 @@ msgstr "Cancel activity" msgid "Cancel request" msgstr "Cancel request" -#: lib/who_need_help_web/live/activity_live/index.ex:422 +#: lib/who_need_help_web/live/activity_live/index.ex:479 #: lib/who_need_help_web/live/activity_live/show.ex:344 -#: lib/who_need_help_web/live/request_live/index.ex:413 -#: lib/who_need_help_web/live/request_live/index.ex:414 +#: lib/who_need_help_web/live/request_live/index.ex:490 +#: lib/who_need_help_web/live/request_live/index.ex:491 #: lib/who_need_help_web/live/request_live/show.ex:956 #, elixir-autogen, elixir-format msgid "Cancelled" msgstr "Cancelled" -#: lib/who_need_help_web/live/request_live/index.ex:491 +#: lib/who_need_help_web/live/request_live/index.ex:568 #: lib/who_need_help_web/live/request_live/new.ex:302 #, elixir-autogen, elixir-format msgid "Category" @@ -459,7 +459,7 @@ msgstr "Close" msgid "Coffee and conversation" msgstr "Coffee and conversation" -#: lib/who_need_help_web/live/activity_live/index.ex:436 +#: lib/who_need_help_web/live/activity_live/index.ex:493 #, elixir-autogen, elixir-format msgid "Coffee, cinema, walks, and hikes are separate from urgent help and never affect helper ratings." msgstr "Coffee, cinema, walks, and hikes are separate from urgent help and never affect helper ratings." @@ -474,19 +474,19 @@ msgstr "Comment (optional)" msgid "Community helpers" msgstr "Community helpers" -#: lib/who_need_help_web/live/activity_live/index.ex:647 +#: lib/who_need_help_web/live/activity_live/index.ex:744 #: lib/who_need_help_web/live/activity_live/show.ex:403 #: lib/who_need_help_web/live/activity_live/show.ex:639 #: lib/who_need_help_web/live/activity_live/show.ex:698 -#: lib/who_need_help_web/live/request_live/index.ex:656 +#: lib/who_need_help_web/live/request_live/index.ex:771 #, elixir-autogen, elixir-format msgid "Community member" msgstr "Community member" -#: lib/who_need_help_web/live/activity_live/index.ex:421 +#: lib/who_need_help_web/live/activity_live/index.ex:478 #: lib/who_need_help_web/live/activity_live/show.ex:343 -#: lib/who_need_help_web/live/request_live/index.ex:411 -#: lib/who_need_help_web/live/request_live/index.ex:412 +#: lib/who_need_help_web/live/request_live/index.ex:488 +#: lib/who_need_help_web/live/request_live/index.ex:489 #: lib/who_need_help_web/live/request_live/show.ex:955 #: lib/who_need_help_web/live/request_live/show.ex:974 #, elixir-autogen, elixir-format @@ -537,13 +537,13 @@ msgstr "Confirmation instructions" msgid "Confirming..." msgstr "Confirming..." -#: lib/who_need_help_web/live/activity_live/index.ex:442 +#: lib/who_need_help_web/live/activity_live/index.ex:499 #: lib/who_need_help_web/live/activity_live/new.ex:12 #, elixir-autogen, elixir-format msgid "Create activity" msgstr "Create activity" -#: lib/who_need_help_web/live/activity_live/index.ex:722 +#: lib/who_need_help_web/live/activity_live/index.ex:819 #: lib/who_need_help_web/live/activity_live/new.ex:180 #, elixir-autogen, elixir-format msgid "Create an activity" @@ -554,7 +554,7 @@ msgstr "Create an activity" msgid "Create category" msgstr "Create category" -#: lib/who_need_help_web/live/request_live/index.ex:442 +#: lib/who_need_help_web/live/request_live/index.ex:519 #, elixir-autogen, elixir-format msgid "Create urgent request" msgstr "Create urgent request" @@ -704,7 +704,7 @@ msgstr "Expires:" msgid "Explain what is already arranged and what the volunteer needs to do." msgstr "Explain what is already arranged and what the volunteer needs to do." -#: lib/who_need_help_web/live/activity_live/index.ex:433 +#: lib/who_need_help_web/live/activity_live/index.ex:490 #, elixir-autogen, elixir-format msgid "Find people to join" msgstr "Find people to join" @@ -865,8 +865,8 @@ msgstr "Impersonation" msgid "In a browser this works only while the page remains open. The Android app shows a persistent notification and can continue after it is minimized. Raw coordinates are removed when sharing stops." msgstr "In a browser this works only while the page remains open. The Android app shows a persistent notification and can continue after it is minimized. Raw coordinates are removed when sharing stops." -#: lib/who_need_help_web/live/request_live/index.ex:409 -#: lib/who_need_help_web/live/request_live/index.ex:410 +#: lib/who_need_help_web/live/request_live/index.ex:486 +#: lib/who_need_help_web/live/request_live/index.ex:487 #: lib/who_need_help_web/live/request_live/show.ex:954 #, elixir-autogen, elixir-format msgid "In progress" @@ -989,8 +989,8 @@ msgstr "Mark completed" msgid "Match and coordinate" msgstr "Match and coordinate" -#: lib/who_need_help_web/live/request_live/index.ex:407 -#: lib/who_need_help_web/live/request_live/index.ex:408 +#: lib/who_need_help_web/live/request_live/index.ex:484 +#: lib/who_need_help_web/live/request_live/index.ex:485 #: lib/who_need_help_web/live/request_live/show.ex:952 #, elixir-autogen, elixir-format msgid "Matched" @@ -1016,7 +1016,7 @@ msgstr "Medicine pickup remains the first priority. Roadside categories use the msgid "Medicine requests" msgstr "Medicine requests" -#: lib/who_need_help_web/live/activity_live/index.ex:449 +#: lib/who_need_help_web/live/activity_live/index.ex:506 #, elixir-autogen, elixir-format msgid "Meet in public first, keep exact details inside the approved group, and leave or report anything that feels unsafe." msgstr "Meet in public first, keep exact details inside the approved group, and leave or report anything that feels unsafe." @@ -1067,12 +1067,12 @@ msgstr "Moderator" msgid "Moderator access is required." msgstr "Moderator access is required." -#: lib/who_need_help_web/live/request_live/index.ex:433 +#: lib/who_need_help_web/live/request_live/index.ex:510 #, elixir-autogen, elixir-format msgid "NEARBY MUTUAL AID" msgstr "NEARBY MUTUAL AID" -#: lib/who_need_help_web/live/request_live/index.ex:47 +#: lib/who_need_help_web/live/request_live/index.ex:51 #, elixir-autogen, elixir-format msgid "Nearby help" msgstr "Nearby help" @@ -1153,9 +1153,9 @@ msgid "Not for emergencies" msgstr "Not for emergencies" #: lib/who_need_help_web/live/notification_live.ex:748 -#: lib/who_need_help_web/live/request_live/index.ex:397 -#: lib/who_need_help_web/live/request_live/index.ex:398 -#: lib/who_need_help_web/live/request_live/index.ex:509 +#: lib/who_need_help_web/live/request_live/index.ex:474 +#: lib/who_need_help_web/live/request_live/index.ex:475 +#: lib/who_need_help_web/live/request_live/index.ex:586 #: lib/who_need_help_web/live/request_live/new.ex:449 #: lib/who_need_help_web/live/request_live/show.ex:943 #: lib/who_need_help_web/live/request_live/show.ex:944 @@ -1163,7 +1163,7 @@ msgstr "Not for emergencies" msgid "Now" msgstr "Now" -#: lib/who_need_help_web/live/activity_live/index.ex:431 +#: lib/who_need_help_web/live/activity_live/index.ex:488 #, elixir-autogen, elixir-format msgid "OPTIONAL SOCIAL PLANS" msgstr "OPTIONAL SOCIAL PLANS" @@ -1181,12 +1181,12 @@ msgstr "Only the organizer and approved participants can read or send these mess #: lib/who_need_help/notifications/text.ex:140 #: lib/who_need_help_web/controllers/content_removal_html.ex:21 #: lib/who_need_help_web/controllers/support_html.ex:16 -#: lib/who_need_help_web/live/activity_live/index.ex:420 +#: lib/who_need_help_web/live/activity_live/index.ex:477 #: lib/who_need_help_web/live/activity_live/show.ex:342 #: lib/who_need_help_web/live/moderation_live.ex:258 #: lib/who_need_help_web/live/report_live.ex:104 -#: lib/who_need_help_web/live/request_live/index.ex:405 -#: lib/who_need_help_web/live/request_live/index.ex:406 +#: lib/who_need_help_web/live/request_live/index.ex:482 +#: lib/who_need_help_web/live/request_live/index.ex:483 #: lib/who_need_help_web/live/request_live/show.ex:951 #: lib/who_need_help_web/live/support_operations_live.ex:237 #: lib/who_need_help_web/live/support_operations_live.ex:438 @@ -1639,9 +1639,9 @@ msgid "Save profile" msgstr "Save profile" #: lib/who_need_help_web/live/notification_live.ex:750 -#: lib/who_need_help_web/live/request_live/index.ex:401 -#: lib/who_need_help_web/live/request_live/index.ex:402 -#: lib/who_need_help_web/live/request_live/index.ex:511 +#: lib/who_need_help_web/live/request_live/index.ex:478 +#: lib/who_need_help_web/live/request_live/index.ex:479 +#: lib/who_need_help_web/live/request_live/index.ex:588 #: lib/who_need_help_web/live/request_live/new.ex:451 #: lib/who_need_help_web/live/request_live/show.ex:947 #: lib/who_need_help_web/live/request_live/show.ex:948 @@ -1904,7 +1904,7 @@ msgstr "This activity state has already changed." msgid "This interaction is blocked." msgstr "This interaction is blocked." -#: lib/who_need_help_web/live/request_live/index.ex:449 +#: lib/who_need_help_web/live/request_live/index.ex:526 #: lib/who_need_help_web/live/request_live/show.ex:1022 #, elixir-autogen, elixir-format msgid "This is not an emergency service. Contact local emergency services for immediate danger." @@ -1952,9 +1952,9 @@ msgid "To see sent emails, visit" msgstr "To see sent emails, visit" #: lib/who_need_help_web/live/notification_live.ex:749 -#: lib/who_need_help_web/live/request_live/index.ex:399 -#: lib/who_need_help_web/live/request_live/index.ex:400 -#: lib/who_need_help_web/live/request_live/index.ex:510 +#: lib/who_need_help_web/live/request_live/index.ex:476 +#: lib/who_need_help_web/live/request_live/index.ex:477 +#: lib/who_need_help_web/live/request_live/index.ex:587 #: lib/who_need_help_web/live/request_live/new.ex:450 #: lib/who_need_help_web/live/request_live/show.ex:945 #: lib/who_need_help_web/live/request_live/show.ex:946 @@ -2029,7 +2029,7 @@ msgid "Update email instructions" msgstr "Update email instructions" #: lib/who_need_help_web/live/notification_live.ex:743 -#: lib/who_need_help_web/live/request_live/index.ex:506 +#: lib/who_need_help_web/live/request_live/index.ex:583 #: lib/who_need_help_web/live/request_live/new.ex:447 #, elixir-autogen, elixir-format msgid "Urgency" @@ -2174,7 +2174,7 @@ msgstr "Who Need Help home" msgid "Who Need Help was developed with the local Codex CLI authenticated through the builder's ChatGPT subscription. No OpenAI API key or usage-based API fallback is used." msgstr "Who Need Help was developed with the local Codex CLI authenticated through the builder's ChatGPT subscription. No OpenAI API key or usage-based API fallback is used." -#: lib/who_need_help_web/live/request_live/index.ex:434 +#: lib/who_need_help_web/live/request_live/index.ex:511 #, elixir-autogen, elixir-format msgid "Who needs help?" msgstr "Who needs help?" @@ -2292,7 +2292,7 @@ msgstr "Your requests" msgid "Your review is revealed only after both participants submit." msgstr "Your review is revealed only after both participants submit." -#: lib/who_need_help_web/live/request_live/index.ex:724 +#: lib/who_need_help_web/live/request_live/index.ex:839 #, elixir-autogen, elixir-format msgid "Your trust summary" msgstr "Your trust summary" @@ -2313,17 +2313,17 @@ msgstr "activity message" msgid "before confirming." msgstr "before confirming." -#: lib/who_need_help_web/live/activity_live/index.ex:646 +#: lib/who_need_help_web/live/activity_live/index.ex:743 #: lib/who_need_help_web/live/category_proposal_live.ex:252 #: lib/who_need_help_web/live/moderation_live.ex:372 -#: lib/who_need_help_web/live/request_live/index.ex:655 +#: lib/who_need_help_web/live/request_live/index.ex:770 #, elixir-autogen, elixir-format msgid "by %{name}" msgstr "by %{name}" #: lib/who_need_help_web/live/profile_live.ex:190 #: lib/who_need_help_web/live/public_profile_live.ex:133 -#: lib/who_need_help_web/live/request_live/index.ex:728 +#: lib/who_need_help_web/live/request_live/index.ex:843 #: lib/who_need_help_web/live/request_live/show.ex:1374 #, elixir-autogen, elixir-format msgid "completed" @@ -2359,7 +2359,7 @@ msgstr "organizer" msgid "participants only" msgstr "participants only" -#: lib/who_need_help_web/live/request_live/index.ex:732 +#: lib/who_need_help_web/live/request_live/index.ex:847 #: lib/who_need_help_web/live/request_live/show.ex:1378 #, elixir-autogen, elixir-format msgid "people" @@ -2419,7 +2419,7 @@ msgstr "urgent" #: lib/who_need_help_web/live/activity_live/show.ex:719 #: lib/who_need_help_web/live/profile_live.ex:285 #: lib/who_need_help_web/live/public_profile_live.ex:98 -#: lib/who_need_help_web/live/request_live/index.ex:736 +#: lib/who_need_help_web/live/request_live/index.ex:851 #: lib/who_need_help_web/live/request_live/show.ex:1093 #: lib/who_need_help_web/live/request_live/show.ex:1476 #, elixir-autogen, elixir-format @@ -2452,8 +2452,8 @@ msgstr "← Requests" msgid "Approved" msgstr "Approved" -#: lib/who_need_help_web/live/request_live/index.ex:415 -#: lib/who_need_help_web/live/request_live/index.ex:416 +#: lib/who_need_help_web/live/request_live/index.ex:492 +#: lib/who_need_help_web/live/request_live/index.ex:493 #, elixir-autogen, elixir-format msgid "Expired" msgstr "Expired" @@ -2506,8 +2506,8 @@ msgstr "Unusual action rate" msgid "Load earlier messages" msgstr "Load earlier messages" -#: lib/who_need_help_web/live/activity_live/index.ex:658 -#: lib/who_need_help_web/live/activity_live/index.ex:751 +#: lib/who_need_help_web/live/activity_live/index.ex:755 +#: lib/who_need_help_web/live/activity_live/index.ex:848 #: lib/who_need_help_web/live/category_proposal_live.ex:284 #: lib/who_need_help_web/live/leaderboard_live.ex:91 #: lib/who_need_help_web/live/moderation_live.ex:465 @@ -2519,7 +2519,7 @@ msgstr "Load earlier messages" #: lib/who_need_help_web/live/profile_live.ex:363 #: lib/who_need_help_web/live/public_profile_live.ex:178 #: lib/who_need_help_web/live/report_live.ex:98 -#: lib/who_need_help_web/live/request_live/index.ex:805 +#: lib/who_need_help_web/live/request_live/index.ex:920 #: lib/who_need_help_web/live/support_operations_live.ex:306 #: lib/who_need_help_web/live/support_operations_live.ex:505 #, elixir-autogen, elixir-format @@ -2527,7 +2527,7 @@ msgid "Load more" msgstr "Load more" #: lib/who_need_help_web/live/activity_live/show.ex:544 -#: lib/who_need_help_web/live/request_live/index.ex:701 +#: lib/who_need_help_web/live/request_live/index.ex:816 #: lib/who_need_help_web/live/request_live/show.ex:1275 #, elixir-autogen, elixir-format msgid "The map is unavailable in this browser. Request details remain usable." @@ -4516,44 +4516,37 @@ msgstr "" msgid "Exact point selected. Drag the red pin or click the map to move it." msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:539 -#, elixir-autogen, elixir-format -msgid "%{count} request in this map area" -msgid_plural "%{count} requests in this map area" -msgstr[0] "" -msgstr[1] "" - -#: lib/who_need_help_web/live/activity_live/index.ex:502 -#: lib/who_need_help_web/live/request_live/index.ex:516 +#: lib/who_need_help_web/live/activity_live/index.ex:559 +#: lib/who_need_help_web/live/request_live/index.ex:593 #, elixir-autogen, elixir-format msgid "Area or city" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:594 -#: lib/who_need_help_web/live/request_live/index.ex:606 +#: lib/who_need_help_web/live/activity_live/index.ex:689 +#: lib/who_need_help_web/live/request_live/index.ex:721 #, elixir-autogen, elixir-format msgid "Choose an area on the map" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:436 +#: lib/who_need_help_web/live/request_live/index.ex:513 #, elixir-autogen, elixir-format msgid "Explore privacy-friendly areas and public exact meeting points chosen by requesters." msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:553 -#: lib/who_need_help_web/live/request_live/index.ex:565 +#: lib/who_need_help_web/live/activity_live/index.ex:647 +#: lib/who_need_help_web/live/request_live/index.ex:679 #, elixir-autogen, elixir-format msgid "List" msgstr "" -#: lib/who_need_help_web/live/request_live/index.ex:677 +#: lib/who_need_help_web/live/request_live/index.ex:792 #, elixir-autogen, elixir-format msgid "Load more in this area" msgstr "Load more in this area" #: lib/who_need_help_web/components/layouts/root.html.heex:5 -#: lib/who_need_help_web/live/activity_live/index.ex:573 -#: lib/who_need_help_web/live/request_live/index.ex:585 +#: lib/who_need_help_web/live/activity_live/index.ex:667 +#: lib/who_need_help_web/live/request_live/index.ex:699 #, elixir-autogen, elixir-format msgid "Map" msgstr "" @@ -4563,77 +4556,65 @@ msgstr "" msgid "Map preview" msgstr "Map preview" -#: lib/who_need_help_web/live/activity_live/index.ex:606 -#: lib/who_need_help_web/live/request_live/index.ex:618 +#: lib/who_need_help_web/live/activity_live/index.ex:701 +#: lib/who_need_help_web/live/request_live/index.ex:733 #, elixir-autogen, elixir-format msgid "Move or zoom the map to search somewhere else." msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:540 -#: lib/who_need_help_web/live/request_live/index.ex:552 -#, elixir-autogen, elixir-format -msgid "Move the map, then search the newly visible area." -msgstr "" - -#: lib/who_need_help_web/live/request_live/index.ex:616 +#: lib/who_need_help_web/live/request_live/index.ex:731 #, elixir-autogen, elixir-format msgid "No open requests in this area" msgstr "No open requests in this area" -#: lib/who_need_help_web/live/request_live/index.ex:608 +#: lib/who_need_help_web/live/request_live/index.ex:723 #, elixir-autogen, elixir-format msgid "Only requests from the selected map area will be loaded." msgstr "" #: lib/who_need_help_web/components/layouts/root.html.heex:8 -#: lib/who_need_help_web/live/request_live/index.ex:704 +#: lib/who_need_help_web/live/request_live/index.ex:819 #, elixir-autogen, elixir-format msgid "Open request" msgstr "Open request" -#: lib/who_need_help_web/live/activity_live/index.ex:503 -#: lib/who_need_help_web/live/request_live/index.ex:517 +#: lib/who_need_help_web/live/activity_live/index.ex:560 +#: lib/who_need_help_web/live/request_live/index.ex:594 #, elixir-autogen, elixir-format msgid "Optional text search" msgstr "Optional text search" -#: lib/who_need_help_web/live/request_live/index.ex:683 +#: lib/who_need_help_web/live/request_live/index.ex:798 #, elixir-autogen, elixir-format msgid "Requests without map coordinates appear only when their public area description matches the text search." msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:544 -#: lib/who_need_help_web/live/request_live/index.ex:556 +#: lib/who_need_help_web/live/activity_live/index.ex:638 +#: lib/who_need_help_web/live/request_live/index.ex:670 #, elixir-autogen, elixir-format msgid "Results layout" msgstr "" -#: lib/who_need_help_web/live/activity_live/index.ex:693 -#: lib/who_need_help_web/live/request_live/index.ex:719 -#, elixir-autogen, elixir-format -msgid "Search this area" -msgstr "" - #: lib/who_need_help_web/controllers/page_html/home.html.heex:171 #, elixir-autogen, elixir-format msgid "Static preview" msgstr "Static preview" -#: lib/who_need_help_web/live/activity_live/index.ex:563 -#: lib/who_need_help_web/live/request_live/index.ex:575 +#: lib/who_need_help_web/live/activity_live/index.ex:657 +#: lib/who_need_help_web/live/request_live/index.ex:689 #, elixir-autogen, elixir-format msgid "Together" msgstr "" #: lib/who_need_help_web/components/layouts/root.html.heex:6 #: lib/who_need_help_web/controllers/page_html/home.html.heex:160 -#: lib/who_need_help_web/live/activity_live/index.ex:681 +#: lib/who_need_help_web/live/activity_live/index.ex:778 #: lib/who_need_help_web/live/activity_live/new.ex:355 #: lib/who_need_help_web/live/activity_live/new.ex:414 #: lib/who_need_help_web/live/activity_live/show.ex:546 #: lib/who_need_help_web/live/notification_live.ex:602 #: lib/who_need_help_web/live/notification_live.ex:621 -#: lib/who_need_help_web/live/request_live/index.ex:703 +#: lib/who_need_help_web/live/request_live/index.ex:818 #: lib/who_need_help_web/live/request_live/new.ex:485 #: lib/who_need_help_web/live/request_live/new.ex:563 #: lib/who_need_help_web/live/request_live/show.ex:1277 @@ -5022,7 +5003,7 @@ msgid "Nearby alert deleted." msgstr "" #: lib/who_need_help_web/live/notification_live.ex:456 -#: lib/who_need_help_web/live/request_live/index.ex:462 +#: lib/who_need_help_web/live/request_live/index.ex:539 #, elixir-autogen, elixir-format msgid "Nearby requests" msgstr "" @@ -5362,7 +5343,7 @@ msgid "WebGL is unavailable in this browser, so the full map cannot start. Selec msgstr "WebGL is unavailable in this browser, so the full map cannot start. Select an example below or retry the map." #: lib/who_need_help_web/components/layouts/root.html.heex:7 -#: lib/who_need_help_web/live/activity_live/index.ex:682 +#: lib/who_need_help_web/live/activity_live/index.ex:779 #: lib/who_need_help_web/live/activity_live/show.ex:547 #: lib/who_need_help_web/live/request_live/show.ex:1278 #, elixir-autogen, elixir-format @@ -5927,7 +5908,7 @@ msgstr "Your review is now visible" msgid "Delivery settings" msgstr "Delivery settings" -#: lib/who_need_help_web/live/request_live/index.ex:660 +#: lib/who_need_help_web/live/request_live/index.ex:775 #, elixir-autogen, elixir-format msgid "Expires" msgstr "Expires" @@ -5947,29 +5928,22 @@ msgstr "Nearby alerts" msgid "Notification sections" msgstr "Notification sections" -#: lib/who_need_help_web/live/activity_live/index.ex:674 +#: lib/who_need_help_web/live/activity_live/index.ex:771 #, elixir-autogen, elixir-format msgid "%{count} activities" msgstr "%{count} activities" -#: lib/who_need_help_web/live/activity_live/index.ex:527 -#, elixir-autogen, elixir-format -msgid "%{count} activity in this map area" -msgid_plural "%{count} activities in this map area" -msgstr[0] "%{count} activity in this map area" -msgstr[1] "%{count} activities in this map area" - -#: lib/who_need_help_web/live/request_live/index.ex:705 +#: lib/who_need_help_web/live/request_live/index.ex:820 #, elixir-autogen, elixir-format msgid "%{count} requests" msgstr "%{count} requests" -#: lib/who_need_help_web/live/activity_live/index.ex:717 +#: lib/who_need_help_web/live/activity_live/index.ex:814 #, elixir-autogen, elixir-format msgid "Activities you create or ask to join will appear here. Leaving removes an activity from this list." msgstr "Activities you create or ask to join will appear here. Leaving removes an activity from this list." -#: lib/who_need_help_web/live/activity_live/index.ex:457 +#: lib/who_need_help_web/live/activity_live/index.ex:514 #, elixir-autogen, elixir-format msgid "Activity views" msgstr "Activity views" @@ -5984,12 +5958,12 @@ msgstr "Choose a category and describe the task clearly." msgid "Confirm the safety guidance before asking nearby people for help." msgstr "Confirm the safety guidance before asking nearby people for help." -#: lib/who_need_help_web/live/request_live/index.ex:753 +#: lib/who_need_help_web/live/request_live/index.ex:868 #, elixir-autogen, elixir-format msgid "Create request" msgstr "Create request" -#: lib/who_need_help_web/live/request_live/index.ex:776 +#: lib/who_need_help_web/live/request_live/index.ex:891 #, elixir-autogen, elixir-format msgid "Create your first request" msgstr "Create your first request" @@ -6004,43 +5978,43 @@ msgstr "Help details" msgid "Location" msgstr "Location" -#: lib/who_need_help_web/live/activity_live/index.ex:463 +#: lib/who_need_help_web/live/activity_live/index.ex:520 #, elixir-autogen, elixir-format msgid "My activities" msgstr "My activities" -#: lib/who_need_help_web/live/request_live/index.ex:463 -#: lib/who_need_help_web/live/request_live/index.ex:747 +#: lib/who_need_help_web/live/request_live/index.ex:540 +#: lib/who_need_help_web/live/request_live/index.ex:862 #, elixir-autogen, elixir-format msgid "My requests" msgstr "My requests" -#: lib/who_need_help_web/live/activity_live/index.ex:462 +#: lib/who_need_help_web/live/activity_live/index.ex:519 #, elixir-autogen, elixir-format msgid "Nearby activities" msgstr "Nearby activities" -#: lib/who_need_help_web/live/activity_live/index.ex:715 +#: lib/who_need_help_web/live/activity_live/index.ex:812 #, elixir-autogen, elixir-format msgid "No activities yet" msgstr "No activities yet" -#: lib/who_need_help_web/live/activity_live/index.ex:604 +#: lib/who_need_help_web/live/activity_live/index.ex:699 #, elixir-autogen, elixir-format msgid "No open activities in this area" msgstr "No open activities in this area" -#: lib/who_need_help_web/live/request_live/index.ex:771 +#: lib/who_need_help_web/live/request_live/index.ex:886 #, elixir-autogen, elixir-format msgid "No requests yet" msgstr "No requests yet" -#: lib/who_need_help_web/live/activity_live/index.ex:596 +#: lib/who_need_help_web/live/activity_live/index.ex:691 #, elixir-autogen, elixir-format msgid "Only activities from the selected map area will be loaded." msgstr "Only activities from the selected map area will be loaded." -#: lib/who_need_help_web/live/activity_live/index.ex:673 +#: lib/who_need_help_web/live/activity_live/index.ex:770 #, elixir-autogen, elixir-format msgid "Open activity" msgstr "Open activity" @@ -6050,12 +6024,12 @@ msgstr "Open activity" msgid "Request form steps" msgstr "Request form steps" -#: lib/who_need_help_web/live/request_live/index.ex:457 +#: lib/who_need_help_web/live/request_live/index.ex:534 #, elixir-autogen, elixir-format msgid "Request views" msgstr "Request views" -#: lib/who_need_help_web/live/request_live/index.ex:773 +#: lib/who_need_help_web/live/request_live/index.ex:888 #, elixir-autogen, elixir-format msgid "Requests you publish or accept will appear here." msgstr "Requests you publish or accept will appear here." @@ -6080,7 +6054,7 @@ msgstr "Set urgency and when this request should close." msgid "Share only as much location detail as helpers need." msgstr "Share only as much location detail as helpers need." -#: lib/who_need_help_web/live/activity_live/index.ex:679 +#: lib/who_need_help_web/live/activity_live/index.ex:776 #, elixir-autogen, elixir-format msgid "The map is unavailable in this browser. Activity details remain usable." msgstr "The map is unavailable in this browser. Activity details remain usable." @@ -6090,7 +6064,7 @@ msgstr "The map is unavailable in this browser. Activity details remain usable." msgid "Timing" msgstr "Timing" -#: lib/who_need_help_web/live/request_live/index.ex:749 +#: lib/who_need_help_web/live/request_live/index.ex:864 #, elixir-autogen, elixir-format msgid "Track requests you created and requests you accepted as a helper." msgstr "Track requests you created and requests you accepted as a helper." @@ -6751,32 +6725,86 @@ msgstr "What should people see before approval?" msgid "Choose the meeting point on the map or use your current location." msgstr "Choose the meeting point on the map or use your current location." -#: lib/who_need_help_web/live/activity_live/index.ex:522 -#: lib/who_need_help_web/live/activity_live/index.ex:586 -#: lib/who_need_help_web/live/activity_live/index.ex:707 -#: lib/who_need_help_web/live/request_live/index.ex:534 -#: lib/who_need_help_web/live/request_live/index.ex:598 -#: lib/who_need_help_web/live/request_live/index.ex:763 +#: lib/who_need_help_web/live/activity_live/index.ex:579 +#: lib/who_need_help_web/live/activity_live/index.ex:681 +#: lib/who_need_help_web/live/activity_live/index.ex:804 +#: lib/who_need_help_web/live/request_live/index.ex:611 +#: lib/who_need_help_web/live/request_live/index.ex:713 +#: lib/who_need_help_web/live/request_live/index.ex:878 #, elixir-autogen, elixir-format msgid "Loading results…" msgstr "Loading results…" -#: lib/who_need_help_web/live/activity_live/index.ex:676 +#: lib/who_need_help_web/live/activity_live/index.ex:773 #, elixir-autogen, elixir-format msgid "Maximum zoom reached. Matching activities are listed beside the map." msgstr "Maximum zoom reached. Matching activities are listed beside the map." -#: lib/who_need_help_web/live/request_live/index.ex:707 +#: lib/who_need_help_web/live/request_live/index.ex:822 #, elixir-autogen, elixir-format msgid "Maximum zoom reached. Matching requests are listed beside the map." msgstr "Maximum zoom reached. Matching requests are listed beside the map." -#: lib/who_need_help_web/live/activity_live/index.ex:535 +#: lib/who_need_help_web/live/activity_live/index.ex:584 #, elixir-autogen, elixir-format -msgid "of %{count} matching activities with map locations" -msgstr "of %{count} matching activities with map locations" +msgid "%{count} activity in the selected map area" +msgid_plural "%{count} activities in the selected map area" +msgstr[0] "%{count} activity in the selected map area" +msgstr[1] "%{count} activities in the selected map area" -#: lib/who_need_help_web/live/request_live/index.ex:547 +#: lib/who_need_help_web/live/request_live/index.ex:616 #, elixir-autogen, elixir-format -msgid "of %{count} matching requests with map locations" -msgstr "of %{count} matching requests with map locations" +msgid "%{count} request in the selected map area" +msgid_plural "%{count} requests in the selected map area" +msgstr[0] "%{count} request in the selected map area" +msgstr[1] "%{count} requests in the selected map area" + +#: lib/who_need_help_web/live/activity_live/index.ex:603 +#: lib/who_need_help_web/live/request_live/index.ex:635 +#, elixir-autogen, elixir-format +msgid "Map moved. Results still show the previous area." +msgstr "Map moved. Results still show the previous area." + +#: lib/who_need_help_web/live/activity_live/index.ex:621 +#, elixir-autogen, elixir-format +msgid "Move or zoom the map, then choose “Show activities in this area”." +msgstr "Move or zoom the map, then choose “Show activities in this area”." + +#: lib/who_need_help_web/live/request_live/index.ex:653 +#, elixir-autogen, elixir-format +msgid "Move or zoom the map, then choose “Show requests in this area”." +msgstr "Move or zoom the map, then choose “Show requests in this area”." + +#: lib/who_need_help_web/live/activity_live/index.ex:615 +#: lib/who_need_help_web/live/request_live/index.ex:647 +#, elixir-autogen, elixir-format +msgid "Results update automatically after you stop moving the map." +msgstr "Results update automatically after you stop moving the map." + +#: lib/who_need_help_web/live/activity_live/index.ex:790 +#, elixir-autogen, elixir-format +msgid "Show activities in this area" +msgstr "Show activities in this area" + +#: lib/who_need_help_web/live/request_live/index.ex:834 +#, elixir-autogen, elixir-format +msgid "Show requests in this area" +msgstr "Show requests in this area" + +#: lib/who_need_help_web/live/activity_live/index.ex:593 +#: lib/who_need_help_web/live/request_live/index.ex:625 +#, elixir-autogen, elixir-format +msgid "Showing %{shown} of %{count} in the list." +msgstr "Showing %{shown} of %{count} in the list." + +#: lib/who_need_help_web/live/activity_live/index.ex:635 +#: lib/who_need_help_web/live/request_live/index.ex:667 +#, elixir-autogen, elixir-format +msgid "Update results as map moves" +msgstr "Update results as map moves" + +#: lib/who_need_help_web/live/activity_live/index.ex:609 +#: lib/who_need_help_web/live/request_live/index.ex:641 +#, elixir-autogen, elixir-format +msgid "Updating results for the visible map area…" +msgstr "Updating results for the visible map area…" diff --git a/priv/gettext/ru/LC_MESSAGES/default.po b/priv/gettext/ru/LC_MESSAGES/default.po index be94cef..9242bda 100644 --- a/priv/gettext/ru/LC_MESSAGES/default.po +++ b/priv/gettext/ru/LC_MESSAGES/default.po @@ -184,7 +184,7 @@ msgid "Active" msgstr "Активный" #: lib/who_need_help_web/components/layouts.ex:231 -#: lib/who_need_help_web/live/activity_live/index.ex:37 +#: lib/who_need_help_web/live/activity_live/index.ex:41 #, elixir-autogen, elixir-format msgid "Activities" msgstr "Активности" @@ -226,7 +226,7 @@ msgstr "Активность опубликована. Вы одобряете msgid "Activity restored." msgstr "Активность восстановлена." -#: lib/who_need_help_web/live/activity_live/index.ex:491 +#: lib/who_need_help_web/live/activity_live/index.ex:548 #: lib/who_need_help_web/live/activity_live/new.ex:204 #, elixir-autogen, elixir-format msgid "Activity type" @@ -243,12 +243,12 @@ msgstr "Добавить неподтверждённую ссылку" msgid "Administrator" msgstr "Администратор" -#: lib/who_need_help_web/live/activity_live/index.ex:493 +#: lib/who_need_help_web/live/activity_live/index.ex:550 #, elixir-autogen, elixir-format msgid "All activities" msgstr "Все активности" -#: lib/who_need_help_web/live/request_live/index.ex:493 +#: lib/who_need_help_web/live/request_live/index.ex:570 #, elixir-autogen, elixir-format msgid "All categories" msgstr "Все категории" @@ -263,7 +263,7 @@ msgstr "Уже зарегистрированы?" msgid "Another helper already accepted this request." msgstr "Другой помощник уже принял эту заявку." -#: lib/who_need_help_web/live/request_live/index.ex:508 +#: lib/who_need_help_web/live/request_live/index.ex:585 #, elixir-autogen, elixir-format msgid "Any urgency" msgstr "Любая срочность" @@ -383,16 +383,16 @@ msgstr "Отменить активность" msgid "Cancel request" msgstr "Отменить заявку" -#: lib/who_need_help_web/live/activity_live/index.ex:422 +#: lib/who_need_help_web/live/activity_live/index.ex:479 #: lib/who_need_help_web/live/activity_live/show.ex:344 -#: lib/who_need_help_web/live/request_live/index.ex:413 -#: lib/who_need_help_web/live/request_live/index.ex:414 +#: lib/who_need_help_web/live/request_live/index.ex:490 +#: lib/who_need_help_web/live/request_live/index.ex:491 #: lib/who_need_help_web/live/request_live/show.ex:956 #, elixir-autogen, elixir-format msgid "Cancelled" msgstr "Отменено" -#: lib/who_need_help_web/live/request_live/index.ex:491 +#: lib/who_need_help_web/live/request_live/index.ex:568 #: lib/who_need_help_web/live/request_live/new.ex:302 #, elixir-autogen, elixir-format msgid "Category" @@ -476,7 +476,7 @@ msgstr "Закрыть" msgid "Coffee and conversation" msgstr "Кофе и разговоры" -#: lib/who_need_help_web/live/activity_live/index.ex:436 +#: lib/who_need_help_web/live/activity_live/index.ex:493 #, elixir-autogen, elixir-format msgid "Coffee, cinema, walks, and hikes are separate from urgent help and never affect helper ratings." msgstr "" @@ -493,19 +493,19 @@ msgstr "Комментарий (необязательно)" msgid "Community helpers" msgstr "Помощники сообщества" -#: lib/who_need_help_web/live/activity_live/index.ex:647 +#: lib/who_need_help_web/live/activity_live/index.ex:744 #: lib/who_need_help_web/live/activity_live/show.ex:403 #: lib/who_need_help_web/live/activity_live/show.ex:639 #: lib/who_need_help_web/live/activity_live/show.ex:698 -#: lib/who_need_help_web/live/request_live/index.ex:656 +#: lib/who_need_help_web/live/request_live/index.ex:771 #, elixir-autogen, elixir-format msgid "Community member" msgstr "Член сообщества" -#: lib/who_need_help_web/live/activity_live/index.ex:421 +#: lib/who_need_help_web/live/activity_live/index.ex:478 #: lib/who_need_help_web/live/activity_live/show.ex:343 -#: lib/who_need_help_web/live/request_live/index.ex:411 -#: lib/who_need_help_web/live/request_live/index.ex:412 +#: lib/who_need_help_web/live/request_live/index.ex:488 +#: lib/who_need_help_web/live/request_live/index.ex:489 #: lib/who_need_help_web/live/request_live/show.ex:955 #: lib/who_need_help_web/live/request_live/show.ex:974 #, elixir-autogen, elixir-format @@ -558,13 +558,13 @@ msgstr "Инструкции по подтверждению" msgid "Confirming..." msgstr "Подтверждение…" -#: lib/who_need_help_web/live/activity_live/index.ex:442 +#: lib/who_need_help_web/live/activity_live/index.ex:499 #: lib/who_need_help_web/live/activity_live/new.ex:12 #, elixir-autogen, elixir-format msgid "Create activity" msgstr "Создать активность" -#: lib/who_need_help_web/live/activity_live/index.ex:722 +#: lib/who_need_help_web/live/activity_live/index.ex:819 #: lib/who_need_help_web/live/activity_live/new.ex:180 #, elixir-autogen, elixir-format msgid "Create an activity" @@ -575,7 +575,7 @@ msgstr "Создать активность" msgid "Create category" msgstr "Создать категорию" -#: lib/who_need_help_web/live/request_live/index.ex:442 +#: lib/who_need_help_web/live/request_live/index.ex:519 #, elixir-autogen, elixir-format msgid "Create urgent request" msgstr "Создать срочную заявку" @@ -737,7 +737,7 @@ msgstr "Истекает:" msgid "Explain what is already arranged and what the volunteer needs to do." msgstr "Объясните, что уже сделано и что нужно сделать волонтеру." -#: lib/who_need_help_web/live/activity_live/index.ex:433 +#: lib/who_need_help_web/live/activity_live/index.ex:490 #, elixir-autogen, elixir-format msgid "Find people to join" msgstr "Найти компанию" @@ -938,8 +938,8 @@ msgstr "" "Android показывает постоянное уведомление и может продолжать передачу после " "сворачивания. При остановке передачи исходные координаты удаляются." -#: lib/who_need_help_web/live/request_live/index.ex:409 -#: lib/who_need_help_web/live/request_live/index.ex:410 +#: lib/who_need_help_web/live/request_live/index.ex:486 +#: lib/who_need_help_web/live/request_live/index.ex:487 #: lib/who_need_help_web/live/request_live/show.ex:954 #, elixir-autogen, elixir-format msgid "In progress" @@ -1069,8 +1069,8 @@ msgstr "Отметить завершённой" msgid "Match and coordinate" msgstr "Найдите помощника и согласуйте детали" -#: lib/who_need_help_web/live/request_live/index.ex:407 -#: lib/who_need_help_web/live/request_live/index.ex:408 +#: lib/who_need_help_web/live/request_live/index.ex:484 +#: lib/who_need_help_web/live/request_live/index.ex:485 #: lib/who_need_help_web/live/request_live/show.ex:952 #, elixir-autogen, elixir-format msgid "Matched" @@ -1099,7 +1099,7 @@ msgstr "" msgid "Medicine requests" msgstr "Заявки на лекарства" -#: lib/who_need_help_web/live/activity_live/index.ex:449 +#: lib/who_need_help_web/live/activity_live/index.ex:506 #, elixir-autogen, elixir-format msgid "Meet in public first, keep exact details inside the approved group, and leave or report anything that feels unsafe." msgstr "" @@ -1153,12 +1153,12 @@ msgstr "Модератор" msgid "Moderator access is required." msgstr "Требуется доступ модератора." -#: lib/who_need_help_web/live/request_live/index.ex:433 +#: lib/who_need_help_web/live/request_live/index.ex:510 #, elixir-autogen, elixir-format msgid "NEARBY MUTUAL AID" msgstr "ВЗАИМОПОМОЩЬ РЯДОМ" -#: lib/who_need_help_web/live/request_live/index.ex:47 +#: lib/who_need_help_web/live/request_live/index.ex:51 #, elixir-autogen, elixir-format msgid "Nearby help" msgstr "Помощь рядом" @@ -1241,9 +1241,9 @@ msgid "Not for emergencies" msgstr "Не для чрезвычайных ситуаций" #: lib/who_need_help_web/live/notification_live.ex:748 -#: lib/who_need_help_web/live/request_live/index.ex:397 -#: lib/who_need_help_web/live/request_live/index.ex:398 -#: lib/who_need_help_web/live/request_live/index.ex:509 +#: lib/who_need_help_web/live/request_live/index.ex:474 +#: lib/who_need_help_web/live/request_live/index.ex:475 +#: lib/who_need_help_web/live/request_live/index.ex:586 #: lib/who_need_help_web/live/request_live/new.ex:449 #: lib/who_need_help_web/live/request_live/show.ex:943 #: lib/who_need_help_web/live/request_live/show.ex:944 @@ -1251,7 +1251,7 @@ msgstr "Не для чрезвычайных ситуаций" msgid "Now" msgstr "Сейчас" -#: lib/who_need_help_web/live/activity_live/index.ex:431 +#: lib/who_need_help_web/live/activity_live/index.ex:488 #, elixir-autogen, elixir-format msgid "OPTIONAL SOCIAL PLANS" msgstr "НЕОБЯЗАТЕЛЬНЫЕ СОВМЕСТНЫЕ ПЛАНЫ" @@ -1271,12 +1271,12 @@ msgstr "" #: lib/who_need_help/notifications/text.ex:140 #: lib/who_need_help_web/controllers/content_removal_html.ex:21 #: lib/who_need_help_web/controllers/support_html.ex:16 -#: lib/who_need_help_web/live/activity_live/index.ex:420 +#: lib/who_need_help_web/live/activity_live/index.ex:477 #: lib/who_need_help_web/live/activity_live/show.ex:342 #: lib/who_need_help_web/live/moderation_live.ex:258 #: lib/who_need_help_web/live/report_live.ex:104 -#: lib/who_need_help_web/live/request_live/index.ex:405 -#: lib/who_need_help_web/live/request_live/index.ex:406 +#: lib/who_need_help_web/live/request_live/index.ex:482 +#: lib/who_need_help_web/live/request_live/index.ex:483 #: lib/who_need_help_web/live/request_live/show.ex:951 #: lib/who_need_help_web/live/support_operations_live.ex:237 #: lib/who_need_help_web/live/support_operations_live.ex:438 @@ -1748,9 +1748,9 @@ msgid "Save profile" msgstr "Сохранить профиль" #: lib/who_need_help_web/live/notification_live.ex:750 -#: lib/who_need_help_web/live/request_live/index.ex:401 -#: lib/who_need_help_web/live/request_live/index.ex:402 -#: lib/who_need_help_web/live/request_live/index.ex:511 +#: lib/who_need_help_web/live/request_live/index.ex:478 +#: lib/who_need_help_web/live/request_live/index.ex:479 +#: lib/who_need_help_web/live/request_live/index.ex:588 #: lib/who_need_help_web/live/request_live/new.ex:451 #: lib/who_need_help_web/live/request_live/show.ex:947 #: lib/who_need_help_web/live/request_live/show.ex:948 @@ -2022,7 +2022,7 @@ msgstr "Состояние этой активности уже изменило msgid "This interaction is blocked." msgstr "Это взаимодействие заблокировано." -#: lib/who_need_help_web/live/request_live/index.ex:449 +#: lib/who_need_help_web/live/request_live/index.ex:526 #: lib/who_need_help_web/live/request_live/show.ex:1022 #, elixir-autogen, elixir-format msgid "This is not an emergency service. Contact local emergency services for immediate danger." @@ -2075,9 +2075,9 @@ msgid "To see sent emails, visit" msgstr "Чтобы посмотреть отправленные письма, откройте" #: lib/who_need_help_web/live/notification_live.ex:749 -#: lib/who_need_help_web/live/request_live/index.ex:399 -#: lib/who_need_help_web/live/request_live/index.ex:400 -#: lib/who_need_help_web/live/request_live/index.ex:510 +#: lib/who_need_help_web/live/request_live/index.ex:476 +#: lib/who_need_help_web/live/request_live/index.ex:477 +#: lib/who_need_help_web/live/request_live/index.ex:587 #: lib/who_need_help_web/live/request_live/new.ex:450 #: lib/who_need_help_web/live/request_live/show.ex:945 #: lib/who_need_help_web/live/request_live/show.ex:946 @@ -2152,7 +2152,7 @@ msgid "Update email instructions" msgstr "Инструкции для изменения электронной почты" #: lib/who_need_help_web/live/notification_live.ex:743 -#: lib/who_need_help_web/live/request_live/index.ex:506 +#: lib/who_need_help_web/live/request_live/index.ex:583 #: lib/who_need_help_web/live/request_live/new.ex:447 #, elixir-autogen, elixir-format msgid "Urgency" @@ -2308,7 +2308,7 @@ msgstr "" "через подписку ChatGPT разработчика. Ключ OpenAI API и резервный вариант API" " с оплатой по использованию не применяются." -#: lib/who_need_help_web/live/request_live/index.ex:434 +#: lib/who_need_help_web/live/request_live/index.ex:511 #, elixir-autogen, elixir-format msgid "Who needs help?" msgstr "Кому нужна помощь?" @@ -2432,7 +2432,7 @@ msgid "Your review is revealed only after both participants submit." msgstr "" "Ваш отзыв откроется только после того, как его отправят оба участника." -#: lib/who_need_help_web/live/request_live/index.ex:724 +#: lib/who_need_help_web/live/request_live/index.ex:839 #, elixir-autogen, elixir-format msgid "Your trust summary" msgstr "Ваши показатели доверия" @@ -2453,17 +2453,17 @@ msgstr "сообщение активности" msgid "before confirming." msgstr "перед подтверждением." -#: lib/who_need_help_web/live/activity_live/index.ex:646 +#: lib/who_need_help_web/live/activity_live/index.ex:743 #: lib/who_need_help_web/live/category_proposal_live.ex:252 #: lib/who_need_help_web/live/moderation_live.ex:372 -#: lib/who_need_help_web/live/request_live/index.ex:655 +#: lib/who_need_help_web/live/request_live/index.ex:770 #, elixir-autogen, elixir-format msgid "by %{name}" msgstr "автор: %{name}" #: lib/who_need_help_web/live/profile_live.ex:190 #: lib/who_need_help_web/live/public_profile_live.ex:133 -#: lib/who_need_help_web/live/request_live/index.ex:728 +#: lib/who_need_help_web/live/request_live/index.ex:843 #: lib/who_need_help_web/live/request_live/show.ex:1374 #, elixir-autogen, elixir-format msgid "completed" @@ -2499,7 +2499,7 @@ msgstr "организатор" msgid "participants only" msgstr "только участники" -#: lib/who_need_help_web/live/request_live/index.ex:732 +#: lib/who_need_help_web/live/request_live/index.ex:847 #: lib/who_need_help_web/live/request_live/show.ex:1378 #, elixir-autogen, elixir-format msgid "people" @@ -2559,7 +2559,7 @@ msgstr "срочно" #: lib/who_need_help_web/live/activity_live/show.ex:719 #: lib/who_need_help_web/live/profile_live.ex:285 #: lib/who_need_help_web/live/public_profile_live.ex:98 -#: lib/who_need_help_web/live/request_live/index.ex:736 +#: lib/who_need_help_web/live/request_live/index.ex:851 #: lib/who_need_help_web/live/request_live/show.ex:1093 #: lib/who_need_help_web/live/request_live/show.ex:1476 #, elixir-autogen, elixir-format @@ -2592,8 +2592,8 @@ msgstr "← Заявки" msgid "Approved" msgstr "Одобрено" -#: lib/who_need_help_web/live/request_live/index.ex:415 -#: lib/who_need_help_web/live/request_live/index.ex:416 +#: lib/who_need_help_web/live/request_live/index.ex:492 +#: lib/who_need_help_web/live/request_live/index.ex:493 #, elixir-autogen, elixir-format msgid "Expired" msgstr "Истекло" @@ -2646,8 +2646,8 @@ msgstr "Необычная частота действий" msgid "Load earlier messages" msgstr "Загрузить предыдущие сообщения" -#: lib/who_need_help_web/live/activity_live/index.ex:658 -#: lib/who_need_help_web/live/activity_live/index.ex:751 +#: lib/who_need_help_web/live/activity_live/index.ex:755 +#: lib/who_need_help_web/live/activity_live/index.ex:848 #: lib/who_need_help_web/live/category_proposal_live.ex:284 #: lib/who_need_help_web/live/leaderboard_live.ex:91 #: lib/who_need_help_web/live/moderation_live.ex:465 @@ -2659,7 +2659,7 @@ msgstr "Загрузить предыдущие сообщения" #: lib/who_need_help_web/live/profile_live.ex:363 #: lib/who_need_help_web/live/public_profile_live.ex:178 #: lib/who_need_help_web/live/report_live.ex:98 -#: lib/who_need_help_web/live/request_live/index.ex:805 +#: lib/who_need_help_web/live/request_live/index.ex:920 #: lib/who_need_help_web/live/support_operations_live.ex:306 #: lib/who_need_help_web/live/support_operations_live.ex:505 #, elixir-autogen, elixir-format @@ -2667,7 +2667,7 @@ msgid "Load more" msgstr "Загрузить ещё" #: lib/who_need_help_web/live/activity_live/show.ex:544 -#: lib/who_need_help_web/live/request_live/index.ex:701 +#: lib/who_need_help_web/live/request_live/index.ex:816 #: lib/who_need_help_web/live/request_live/show.ex:1275 #, elixir-autogen, elixir-format msgid "The map is unavailable in this browser. Request details remain usable." @@ -4656,45 +4656,37 @@ msgstr "Перетащите, чтобы переместить точную т msgid "Exact point selected. Drag the red pin or click the map to move it." msgstr "Точная точка выбрана. Перетащите красный маркер или нажмите на карту, чтобы переместить её." -#: lib/who_need_help_web/live/request_live/index.ex:539 -#, elixir-autogen, elixir-format -msgid "%{count} request in this map area" -msgid_plural "%{count} requests in this map area" -msgstr[0] "%{count} заявка в этой области карты" -msgstr[1] "%{count} заявки в этой области карты" -msgstr[2] "%{count} заявок в этой области карты" - -#: lib/who_need_help_web/live/activity_live/index.ex:502 -#: lib/who_need_help_web/live/request_live/index.ex:516 +#: lib/who_need_help_web/live/activity_live/index.ex:559 +#: lib/who_need_help_web/live/request_live/index.ex:593 #, elixir-autogen, elixir-format msgid "Area or city" msgstr "Район или город" -#: lib/who_need_help_web/live/activity_live/index.ex:594 -#: lib/who_need_help_web/live/request_live/index.ex:606 +#: lib/who_need_help_web/live/activity_live/index.ex:689 +#: lib/who_need_help_web/live/request_live/index.ex:721 #, elixir-autogen, elixir-format msgid "Choose an area on the map" msgstr "Выберите область на карте" -#: lib/who_need_help_web/live/request_live/index.ex:436 +#: lib/who_need_help_web/live/request_live/index.ex:513 #, elixir-autogen, elixir-format msgid "Explore privacy-friendly areas and public exact meeting points chosen by requesters." msgstr "Просматривайте безопасные для приватности области и точные публичные места встречи, выбранные авторами заявок." -#: lib/who_need_help_web/live/activity_live/index.ex:553 -#: lib/who_need_help_web/live/request_live/index.ex:565 +#: lib/who_need_help_web/live/activity_live/index.ex:647 +#: lib/who_need_help_web/live/request_live/index.ex:679 #, elixir-autogen, elixir-format msgid "List" msgstr "Список" -#: lib/who_need_help_web/live/request_live/index.ex:677 +#: lib/who_need_help_web/live/request_live/index.ex:792 #, elixir-autogen, elixir-format msgid "Load more in this area" msgstr "Загрузить ещё в этой области" #: lib/who_need_help_web/components/layouts/root.html.heex:5 -#: lib/who_need_help_web/live/activity_live/index.ex:573 -#: lib/who_need_help_web/live/request_live/index.ex:585 +#: lib/who_need_help_web/live/activity_live/index.ex:667 +#: lib/who_need_help_web/live/request_live/index.ex:699 #, elixir-autogen, elixir-format msgid "Map" msgstr "Карта" @@ -4704,77 +4696,65 @@ msgstr "Карта" msgid "Map preview" msgstr "Предпросмотр карты" -#: lib/who_need_help_web/live/activity_live/index.ex:606 -#: lib/who_need_help_web/live/request_live/index.ex:618 +#: lib/who_need_help_web/live/activity_live/index.ex:701 +#: lib/who_need_help_web/live/request_live/index.ex:733 #, elixir-autogen, elixir-format msgid "Move or zoom the map to search somewhere else." msgstr "Переместите или масштабируйте карту, чтобы искать в другом месте." -#: lib/who_need_help_web/live/activity_live/index.ex:540 -#: lib/who_need_help_web/live/request_live/index.ex:552 -#, elixir-autogen, elixir-format -msgid "Move the map, then search the newly visible area." -msgstr "Переместите карту, затем выполните поиск в новой видимой области." - -#: lib/who_need_help_web/live/request_live/index.ex:616 +#: lib/who_need_help_web/live/request_live/index.ex:731 #, elixir-autogen, elixir-format msgid "No open requests in this area" msgstr "В этой области нет открытых заявок" -#: lib/who_need_help_web/live/request_live/index.ex:608 +#: lib/who_need_help_web/live/request_live/index.ex:723 #, elixir-autogen, elixir-format msgid "Only requests from the selected map area will be loaded." msgstr "Будут загружены только заявки из выбранной области карты." #: lib/who_need_help_web/components/layouts/root.html.heex:8 -#: lib/who_need_help_web/live/request_live/index.ex:704 +#: lib/who_need_help_web/live/request_live/index.ex:819 #, elixir-autogen, elixir-format msgid "Open request" msgstr "Открыть заявку" -#: lib/who_need_help_web/live/activity_live/index.ex:503 -#: lib/who_need_help_web/live/request_live/index.ex:517 +#: lib/who_need_help_web/live/activity_live/index.ex:560 +#: lib/who_need_help_web/live/request_live/index.ex:594 #, elixir-autogen, elixir-format msgid "Optional text search" msgstr "Необязательный текстовый поиск" -#: lib/who_need_help_web/live/request_live/index.ex:683 +#: lib/who_need_help_web/live/request_live/index.ex:798 #, elixir-autogen, elixir-format msgid "Requests without map coordinates appear only when their public area description matches the text search." msgstr "Заявки без координат на карте отображаются только тогда, когда описание публичной области совпадает с текстовым поиском." -#: lib/who_need_help_web/live/activity_live/index.ex:544 -#: lib/who_need_help_web/live/request_live/index.ex:556 +#: lib/who_need_help_web/live/activity_live/index.ex:638 +#: lib/who_need_help_web/live/request_live/index.ex:670 #, elixir-autogen, elixir-format msgid "Results layout" msgstr "Расположение результатов" -#: lib/who_need_help_web/live/activity_live/index.ex:693 -#: lib/who_need_help_web/live/request_live/index.ex:719 -#, elixir-autogen, elixir-format -msgid "Search this area" -msgstr "Искать в этой области" - #: lib/who_need_help_web/controllers/page_html/home.html.heex:171 #, elixir-autogen, elixir-format msgid "Static preview" msgstr "Статический просмотр" -#: lib/who_need_help_web/live/activity_live/index.ex:563 -#: lib/who_need_help_web/live/request_live/index.ex:575 +#: lib/who_need_help_web/live/activity_live/index.ex:657 +#: lib/who_need_help_web/live/request_live/index.ex:689 #, elixir-autogen, elixir-format msgid "Together" msgstr "Вместе" #: lib/who_need_help_web/components/layouts/root.html.heex:6 #: lib/who_need_help_web/controllers/page_html/home.html.heex:160 -#: lib/who_need_help_web/live/activity_live/index.ex:681 +#: lib/who_need_help_web/live/activity_live/index.ex:778 #: lib/who_need_help_web/live/activity_live/new.ex:355 #: lib/who_need_help_web/live/activity_live/new.ex:414 #: lib/who_need_help_web/live/activity_live/show.ex:546 #: lib/who_need_help_web/live/notification_live.ex:602 #: lib/who_need_help_web/live/notification_live.ex:621 -#: lib/who_need_help_web/live/request_live/index.ex:703 +#: lib/who_need_help_web/live/request_live/index.ex:818 #: lib/who_need_help_web/live/request_live/new.ex:485 #: lib/who_need_help_web/live/request_live/new.ex:563 #: lib/who_need_help_web/live/request_live/show.ex:1277 @@ -5164,7 +5144,7 @@ msgid "Nearby alert deleted." msgstr "Уведомление поблизости удалено." #: lib/who_need_help_web/live/notification_live.ex:456 -#: lib/who_need_help_web/live/request_live/index.ex:462 +#: lib/who_need_help_web/live/request_live/index.ex:539 #, elixir-autogen, elixir-format msgid "Nearby requests" msgstr "Заявки поблизости" @@ -5504,7 +5484,7 @@ msgid "WebGL is unavailable in this browser, so the full map cannot start. Selec msgstr "WebGL недоступен в этом браузере, поэтому полная карта не может запуститься. Выберите пример ниже или попробуйте запустить карту ещё раз." #: lib/who_need_help_web/components/layouts/root.html.heex:7 -#: lib/who_need_help_web/live/activity_live/index.ex:682 +#: lib/who_need_help_web/live/activity_live/index.ex:779 #: lib/who_need_help_web/live/activity_live/show.ex:547 #: lib/who_need_help_web/live/request_live/show.ex:1278 #, elixir-autogen, elixir-format @@ -6069,7 +6049,7 @@ msgstr "Теперь ваш отзыв виден" msgid "Delivery settings" msgstr "Настройки доставки" -#: lib/who_need_help_web/live/request_live/index.ex:660 +#: lib/who_need_help_web/live/request_live/index.ex:775 #, elixir-autogen, elixir-format msgid "Expires" msgstr "Истекает" @@ -6089,30 +6069,22 @@ msgstr "Оповещения рядом" msgid "Notification sections" msgstr "Разделы уведомлений" -#: lib/who_need_help_web/live/activity_live/index.ex:674 +#: lib/who_need_help_web/live/activity_live/index.ex:771 #, elixir-autogen, elixir-format msgid "%{count} activities" msgstr "Активностей: %{count}" -#: lib/who_need_help_web/live/activity_live/index.ex:527 -#, elixir-autogen, elixir-format -msgid "%{count} activity in this map area" -msgid_plural "%{count} activities in this map area" -msgstr[0] "%{count} активность в этой области карты" -msgstr[1] "%{count} активности в этой области карты" -msgstr[2] "%{count} активностей в этой области карты" - -#: lib/who_need_help_web/live/request_live/index.ex:705 +#: lib/who_need_help_web/live/request_live/index.ex:820 #, elixir-autogen, elixir-format msgid "%{count} requests" msgstr "Заявок: %{count}" -#: lib/who_need_help_web/live/activity_live/index.ex:717 +#: lib/who_need_help_web/live/activity_live/index.ex:814 #, elixir-autogen, elixir-format msgid "Activities you create or ask to join will appear here. Leaving removes an activity from this list." msgstr "Созданные вами активности и те, к которым вы попросили присоединиться, появятся здесь. После выхода активность исчезнет из списка." -#: lib/who_need_help_web/live/activity_live/index.ex:457 +#: lib/who_need_help_web/live/activity_live/index.ex:514 #, elixir-autogen, elixir-format msgid "Activity views" msgstr "Разделы активностей" @@ -6127,12 +6099,12 @@ msgstr "Выберите категорию и понятно опишите з msgid "Confirm the safety guidance before asking nearby people for help." msgstr "Подтвердите правила безопасности перед публикацией заявки." -#: lib/who_need_help_web/live/request_live/index.ex:753 +#: lib/who_need_help_web/live/request_live/index.ex:868 #, elixir-autogen, elixir-format msgid "Create request" msgstr "Создать заявку" -#: lib/who_need_help_web/live/request_live/index.ex:776 +#: lib/who_need_help_web/live/request_live/index.ex:891 #, elixir-autogen, elixir-format msgid "Create your first request" msgstr "Создать первую заявку" @@ -6147,43 +6119,43 @@ msgstr "Что нужно сделать" msgid "Location" msgstr "Место" -#: lib/who_need_help_web/live/activity_live/index.ex:463 +#: lib/who_need_help_web/live/activity_live/index.ex:520 #, elixir-autogen, elixir-format msgid "My activities" msgstr "Мои активности" -#: lib/who_need_help_web/live/request_live/index.ex:463 -#: lib/who_need_help_web/live/request_live/index.ex:747 +#: lib/who_need_help_web/live/request_live/index.ex:540 +#: lib/who_need_help_web/live/request_live/index.ex:862 #, elixir-autogen, elixir-format msgid "My requests" msgstr "Мои заявки" -#: lib/who_need_help_web/live/activity_live/index.ex:462 +#: lib/who_need_help_web/live/activity_live/index.ex:519 #, elixir-autogen, elixir-format msgid "Nearby activities" msgstr "Активности рядом" -#: lib/who_need_help_web/live/activity_live/index.ex:715 +#: lib/who_need_help_web/live/activity_live/index.ex:812 #, elixir-autogen, elixir-format msgid "No activities yet" msgstr "Активностей пока нет" -#: lib/who_need_help_web/live/activity_live/index.ex:604 +#: lib/who_need_help_web/live/activity_live/index.ex:699 #, elixir-autogen, elixir-format msgid "No open activities in this area" msgstr "В этой области нет открытых активностей" -#: lib/who_need_help_web/live/request_live/index.ex:771 +#: lib/who_need_help_web/live/request_live/index.ex:886 #, elixir-autogen, elixir-format msgid "No requests yet" msgstr "Заявок пока нет" -#: lib/who_need_help_web/live/activity_live/index.ex:596 +#: lib/who_need_help_web/live/activity_live/index.ex:691 #, elixir-autogen, elixir-format msgid "Only activities from the selected map area will be loaded." msgstr "Будут загружены только активности из выбранной области карты." -#: lib/who_need_help_web/live/activity_live/index.ex:673 +#: lib/who_need_help_web/live/activity_live/index.ex:770 #, elixir-autogen, elixir-format msgid "Open activity" msgstr "Открыть активность" @@ -6193,12 +6165,12 @@ msgstr "Открыть активность" msgid "Request form steps" msgstr "Шаги создания заявки" -#: lib/who_need_help_web/live/request_live/index.ex:457 +#: lib/who_need_help_web/live/request_live/index.ex:534 #, elixir-autogen, elixir-format msgid "Request views" msgstr "Разделы заявок" -#: lib/who_need_help_web/live/request_live/index.ex:773 +#: lib/who_need_help_web/live/request_live/index.ex:888 #, elixir-autogen, elixir-format msgid "Requests you publish or accept will appear here." msgstr "Здесь появятся заявки, которые вы создали или приняли." @@ -6223,7 +6195,7 @@ msgstr "Укажите срочность и время закрытия зая msgid "Share only as much location detail as helpers need." msgstr "Покажите помощникам только необходимую информацию о месте." -#: lib/who_need_help_web/live/activity_live/index.ex:679 +#: lib/who_need_help_web/live/activity_live/index.ex:776 #, elixir-autogen, elixir-format msgid "The map is unavailable in this browser. Activity details remain usable." msgstr "Карта недоступна в этом браузере. Информация об активностях по-прежнему доступна." @@ -6233,7 +6205,7 @@ msgstr "Карта недоступна в этом браузере. Инфор msgid "Timing" msgstr "Время" -#: lib/who_need_help_web/live/request_live/index.ex:749 +#: lib/who_need_help_web/live/request_live/index.ex:864 #, elixir-autogen, elixir-format msgid "Track requests you created and requests you accepted as a helper." msgstr "Следите за созданными заявками и за теми, которые вы приняли как помощник." @@ -6894,32 +6866,88 @@ msgstr "Что должны видеть люди до одобрения?" msgid "Choose the meeting point on the map or use your current location." msgstr "Выберите место встречи на карте или используйте своё текущее местоположение." -#: lib/who_need_help_web/live/activity_live/index.ex:522 -#: lib/who_need_help_web/live/activity_live/index.ex:586 -#: lib/who_need_help_web/live/activity_live/index.ex:707 -#: lib/who_need_help_web/live/request_live/index.ex:534 -#: lib/who_need_help_web/live/request_live/index.ex:598 -#: lib/who_need_help_web/live/request_live/index.ex:763 +#: lib/who_need_help_web/live/activity_live/index.ex:579 +#: lib/who_need_help_web/live/activity_live/index.ex:681 +#: lib/who_need_help_web/live/activity_live/index.ex:804 +#: lib/who_need_help_web/live/request_live/index.ex:611 +#: lib/who_need_help_web/live/request_live/index.ex:713 +#: lib/who_need_help_web/live/request_live/index.ex:878 #, elixir-autogen, elixir-format msgid "Loading results…" msgstr "Загружаем результаты…" -#: lib/who_need_help_web/live/activity_live/index.ex:676 +#: lib/who_need_help_web/live/activity_live/index.ex:773 #, elixir-autogen, elixir-format msgid "Maximum zoom reached. Matching activities are listed beside the map." msgstr "Достигнут максимальный масштаб. Подходящие мероприятия перечислены рядом с картой." -#: lib/who_need_help_web/live/request_live/index.ex:707 +#: lib/who_need_help_web/live/request_live/index.ex:822 #, elixir-autogen, elixir-format msgid "Maximum zoom reached. Matching requests are listed beside the map." msgstr "Достигнут максимальный масштаб. Подходящие заявки перечислены рядом с картой." -#: lib/who_need_help_web/live/activity_live/index.ex:535 +#: lib/who_need_help_web/live/activity_live/index.ex:584 #, elixir-autogen, elixir-format -msgid "of %{count} matching activities with map locations" -msgstr "из %{count} подходящих мероприятий с местоположением на карте" +msgid "%{count} activity in the selected map area" +msgid_plural "%{count} activities in the selected map area" +msgstr[0] "%{count} мероприятие в выбранной области карты" +msgstr[1] "%{count} мероприятия в выбранной области карты" +msgstr[2] "%{count} мероприятий в выбранной области карты" -#: lib/who_need_help_web/live/request_live/index.ex:547 +#: lib/who_need_help_web/live/request_live/index.ex:616 #, elixir-autogen, elixir-format -msgid "of %{count} matching requests with map locations" -msgstr "из %{count} подходящих заявок с местоположением на карте" +msgid "%{count} request in the selected map area" +msgid_plural "%{count} requests in the selected map area" +msgstr[0] "%{count} заявка в выбранной области карты" +msgstr[1] "%{count} заявки в выбранной области карты" +msgstr[2] "%{count} заявок в выбранной области карты" + +#: lib/who_need_help_web/live/activity_live/index.ex:603 +#: lib/who_need_help_web/live/request_live/index.ex:635 +#, elixir-autogen, elixir-format +msgid "Map moved. Results still show the previous area." +msgstr "Карта перемещена. Пока показаны результаты для предыдущей области." + +#: lib/who_need_help_web/live/activity_live/index.ex:621 +#, elixir-autogen, elixir-format +msgid "Move or zoom the map, then choose “Show activities in this area”." +msgstr "Переместите или масштабируйте карту, затем нажмите «Показать мероприятия в этой области»." + +#: lib/who_need_help_web/live/request_live/index.ex:653 +#, elixir-autogen, elixir-format +msgid "Move or zoom the map, then choose “Show requests in this area”." +msgstr "Переместите или масштабируйте карту, затем нажмите «Показать заявки в этой области»." + +#: lib/who_need_help_web/live/activity_live/index.ex:615 +#: lib/who_need_help_web/live/request_live/index.ex:647 +#, elixir-autogen, elixir-format +msgid "Results update automatically after you stop moving the map." +msgstr "Результаты обновятся автоматически, когда вы закончите перемещать карту." + +#: lib/who_need_help_web/live/activity_live/index.ex:790 +#, elixir-autogen, elixir-format +msgid "Show activities in this area" +msgstr "Показать мероприятия в этой области" + +#: lib/who_need_help_web/live/request_live/index.ex:834 +#, elixir-autogen, elixir-format +msgid "Show requests in this area" +msgstr "Показать заявки в этой области" + +#: lib/who_need_help_web/live/activity_live/index.ex:593 +#: lib/who_need_help_web/live/request_live/index.ex:625 +#, elixir-autogen, elixir-format +msgid "Showing %{shown} of %{count} in the list." +msgstr "В списке показано %{shown} из %{count}." + +#: lib/who_need_help_web/live/activity_live/index.ex:635 +#: lib/who_need_help_web/live/request_live/index.ex:667 +#, elixir-autogen, elixir-format +msgid "Update results as map moves" +msgstr "Обновлять результаты при перемещении карты" + +#: lib/who_need_help_web/live/activity_live/index.ex:609 +#: lib/who_need_help_web/live/request_live/index.ex:641 +#, elixir-autogen, elixir-format +msgid "Updating results for the visible map area…" +msgstr "Обновляем результаты для видимой области карты…" diff --git a/priv/gettext/uk/LC_MESSAGES/default.po b/priv/gettext/uk/LC_MESSAGES/default.po index cdd34fe..1aed17f 100644 --- a/priv/gettext/uk/LC_MESSAGES/default.po +++ b/priv/gettext/uk/LC_MESSAGES/default.po @@ -184,7 +184,7 @@ msgid "Active" msgstr "Активний" #: lib/who_need_help_web/components/layouts.ex:231 -#: lib/who_need_help_web/live/activity_live/index.ex:37 +#: lib/who_need_help_web/live/activity_live/index.ex:41 #, elixir-autogen, elixir-format msgid "Activities" msgstr "Активності" @@ -226,7 +226,7 @@ msgstr "Активність опубліковано. Ви схвалюєте msgid "Activity restored." msgstr "Активність відновлено." -#: lib/who_need_help_web/live/activity_live/index.ex:491 +#: lib/who_need_help_web/live/activity_live/index.ex:548 #: lib/who_need_help_web/live/activity_live/new.ex:204 #, elixir-autogen, elixir-format msgid "Activity type" @@ -243,12 +243,12 @@ msgstr "Додати непідтверджене посилання" msgid "Administrator" msgstr "Адміністратор" -#: lib/who_need_help_web/live/activity_live/index.ex:493 +#: lib/who_need_help_web/live/activity_live/index.ex:550 #, elixir-autogen, elixir-format msgid "All activities" msgstr "Усі активності" -#: lib/who_need_help_web/live/request_live/index.ex:493 +#: lib/who_need_help_web/live/request_live/index.ex:570 #, elixir-autogen, elixir-format msgid "All categories" msgstr "Усі категорії" @@ -263,7 +263,7 @@ msgstr "Уже зареєстровані?" msgid "Another helper already accepted this request." msgstr "Інший помічник уже прийняв цю заявку." -#: lib/who_need_help_web/live/request_live/index.ex:508 +#: lib/who_need_help_web/live/request_live/index.ex:585 #, elixir-autogen, elixir-format msgid "Any urgency" msgstr "Будь-яка терміновість" @@ -383,16 +383,16 @@ msgstr "Скасувати активність" msgid "Cancel request" msgstr "Скасувати запит" -#: lib/who_need_help_web/live/activity_live/index.ex:422 +#: lib/who_need_help_web/live/activity_live/index.ex:479 #: lib/who_need_help_web/live/activity_live/show.ex:344 -#: lib/who_need_help_web/live/request_live/index.ex:413 -#: lib/who_need_help_web/live/request_live/index.ex:414 +#: lib/who_need_help_web/live/request_live/index.ex:490 +#: lib/who_need_help_web/live/request_live/index.ex:491 #: lib/who_need_help_web/live/request_live/show.ex:956 #, elixir-autogen, elixir-format msgid "Cancelled" msgstr "Скасовано" -#: lib/who_need_help_web/live/request_live/index.ex:491 +#: lib/who_need_help_web/live/request_live/index.ex:568 #: lib/who_need_help_web/live/request_live/new.ex:302 #, elixir-autogen, elixir-format msgid "Category" @@ -476,7 +476,7 @@ msgstr "Закрити" msgid "Coffee and conversation" msgstr "Кава й розмова" -#: lib/who_need_help_web/live/activity_live/index.ex:436 +#: lib/who_need_help_web/live/activity_live/index.ex:493 #, elixir-autogen, elixir-format msgid "Coffee, cinema, walks, and hikes are separate from urgent help and never affect helper ratings." msgstr "" @@ -493,19 +493,19 @@ msgstr "Коментар (необов’язково)" msgid "Community helpers" msgstr "Помічники спільноти" -#: lib/who_need_help_web/live/activity_live/index.ex:647 +#: lib/who_need_help_web/live/activity_live/index.ex:744 #: lib/who_need_help_web/live/activity_live/show.ex:403 #: lib/who_need_help_web/live/activity_live/show.ex:639 #: lib/who_need_help_web/live/activity_live/show.ex:698 -#: lib/who_need_help_web/live/request_live/index.ex:656 +#: lib/who_need_help_web/live/request_live/index.ex:771 #, elixir-autogen, elixir-format msgid "Community member" msgstr "Член спільноти" -#: lib/who_need_help_web/live/activity_live/index.ex:421 +#: lib/who_need_help_web/live/activity_live/index.ex:478 #: lib/who_need_help_web/live/activity_live/show.ex:343 -#: lib/who_need_help_web/live/request_live/index.ex:411 -#: lib/who_need_help_web/live/request_live/index.ex:412 +#: lib/who_need_help_web/live/request_live/index.ex:488 +#: lib/who_need_help_web/live/request_live/index.ex:489 #: lib/who_need_help_web/live/request_live/show.ex:955 #: lib/who_need_help_web/live/request_live/show.ex:974 #, elixir-autogen, elixir-format @@ -559,13 +559,13 @@ msgstr "Інструкції для підтвердження" msgid "Confirming..." msgstr "Підтвердження…" -#: lib/who_need_help_web/live/activity_live/index.ex:442 +#: lib/who_need_help_web/live/activity_live/index.ex:499 #: lib/who_need_help_web/live/activity_live/new.ex:12 #, elixir-autogen, elixir-format msgid "Create activity" msgstr "Створити активність" -#: lib/who_need_help_web/live/activity_live/index.ex:722 +#: lib/who_need_help_web/live/activity_live/index.ex:819 #: lib/who_need_help_web/live/activity_live/new.ex:180 #, elixir-autogen, elixir-format msgid "Create an activity" @@ -576,7 +576,7 @@ msgstr "Створити активність" msgid "Create category" msgstr "Створити категорію" -#: lib/who_need_help_web/live/request_live/index.ex:442 +#: lib/who_need_help_web/live/request_live/index.ex:519 #, elixir-autogen, elixir-format msgid "Create urgent request" msgstr "Створити термінову заявку" @@ -736,7 +736,7 @@ msgstr "Спливає:" msgid "Explain what is already arranged and what the volunteer needs to do." msgstr "Поясніть, що вже організовано й що має зробити волонтер." -#: lib/who_need_help_web/live/activity_live/index.ex:433 +#: lib/who_need_help_web/live/activity_live/index.ex:490 #, elixir-autogen, elixir-format msgid "Find people to join" msgstr "Знайти компанію" @@ -936,8 +936,8 @@ msgstr "" "Android показує постійне сповіщення й може продовжувати передавання після " "згортання. Після зупинення передавання вихідні координати видаляються." -#: lib/who_need_help_web/live/request_live/index.ex:409 -#: lib/who_need_help_web/live/request_live/index.ex:410 +#: lib/who_need_help_web/live/request_live/index.ex:486 +#: lib/who_need_help_web/live/request_live/index.ex:487 #: lib/who_need_help_web/live/request_live/show.ex:954 #, elixir-autogen, elixir-format msgid "In progress" @@ -1065,8 +1065,8 @@ msgstr "Позначити завершеною" msgid "Match and coordinate" msgstr "Знайдіть помічника й узгодьте деталі" -#: lib/who_need_help_web/live/request_live/index.ex:407 -#: lib/who_need_help_web/live/request_live/index.ex:408 +#: lib/who_need_help_web/live/request_live/index.ex:484 +#: lib/who_need_help_web/live/request_live/index.ex:485 #: lib/who_need_help_web/live/request_live/show.ex:952 #, elixir-autogen, elixir-format msgid "Matched" @@ -1095,7 +1095,7 @@ msgstr "" msgid "Medicine requests" msgstr "Запити на ліки" -#: lib/who_need_help_web/live/activity_live/index.ex:449 +#: lib/who_need_help_web/live/activity_live/index.ex:506 #, elixir-autogen, elixir-format msgid "Meet in public first, keep exact details inside the approved group, and leave or report anything that feels unsafe." msgstr "" @@ -1149,12 +1149,12 @@ msgstr "Модератор" msgid "Moderator access is required." msgstr "Потрібен доступ модератора." -#: lib/who_need_help_web/live/request_live/index.ex:433 +#: lib/who_need_help_web/live/request_live/index.ex:510 #, elixir-autogen, elixir-format msgid "NEARBY MUTUAL AID" msgstr "ВЗАЄМОДОПОМОГА ПОРУЧ" -#: lib/who_need_help_web/live/request_live/index.ex:47 +#: lib/who_need_help_web/live/request_live/index.ex:51 #, elixir-autogen, elixir-format msgid "Nearby help" msgstr "Допомога поруч" @@ -1237,9 +1237,9 @@ msgid "Not for emergencies" msgstr "Не для екстрених ситуацій" #: lib/who_need_help_web/live/notification_live.ex:748 -#: lib/who_need_help_web/live/request_live/index.ex:397 -#: lib/who_need_help_web/live/request_live/index.ex:398 -#: lib/who_need_help_web/live/request_live/index.ex:509 +#: lib/who_need_help_web/live/request_live/index.ex:474 +#: lib/who_need_help_web/live/request_live/index.ex:475 +#: lib/who_need_help_web/live/request_live/index.ex:586 #: lib/who_need_help_web/live/request_live/new.ex:449 #: lib/who_need_help_web/live/request_live/show.ex:943 #: lib/who_need_help_web/live/request_live/show.ex:944 @@ -1247,7 +1247,7 @@ msgstr "Не для екстрених ситуацій" msgid "Now" msgstr "Зараз" -#: lib/who_need_help_web/live/activity_live/index.ex:431 +#: lib/who_need_help_web/live/activity_live/index.ex:488 #, elixir-autogen, elixir-format msgid "OPTIONAL SOCIAL PLANS" msgstr "НЕОБОВ’ЯЗКОВІ СПІЛЬНІ ПЛАНИ" @@ -1267,12 +1267,12 @@ msgstr "" #: lib/who_need_help/notifications/text.ex:140 #: lib/who_need_help_web/controllers/content_removal_html.ex:21 #: lib/who_need_help_web/controllers/support_html.ex:16 -#: lib/who_need_help_web/live/activity_live/index.ex:420 +#: lib/who_need_help_web/live/activity_live/index.ex:477 #: lib/who_need_help_web/live/activity_live/show.ex:342 #: lib/who_need_help_web/live/moderation_live.ex:258 #: lib/who_need_help_web/live/report_live.ex:104 -#: lib/who_need_help_web/live/request_live/index.ex:405 -#: lib/who_need_help_web/live/request_live/index.ex:406 +#: lib/who_need_help_web/live/request_live/index.ex:482 +#: lib/who_need_help_web/live/request_live/index.ex:483 #: lib/who_need_help_web/live/request_live/show.ex:951 #: lib/who_need_help_web/live/support_operations_live.ex:237 #: lib/who_need_help_web/live/support_operations_live.ex:438 @@ -1745,9 +1745,9 @@ msgid "Save profile" msgstr "Зберегти профіль" #: lib/who_need_help_web/live/notification_live.ex:750 -#: lib/who_need_help_web/live/request_live/index.ex:401 -#: lib/who_need_help_web/live/request_live/index.ex:402 -#: lib/who_need_help_web/live/request_live/index.ex:511 +#: lib/who_need_help_web/live/request_live/index.ex:478 +#: lib/who_need_help_web/live/request_live/index.ex:479 +#: lib/who_need_help_web/live/request_live/index.ex:588 #: lib/who_need_help_web/live/request_live/new.ex:451 #: lib/who_need_help_web/live/request_live/show.ex:947 #: lib/who_need_help_web/live/request_live/show.ex:948 @@ -2019,7 +2019,7 @@ msgstr "Цей стан активності вже змінено." msgid "This interaction is blocked." msgstr "Ця взаємодія заблокована." -#: lib/who_need_help_web/live/request_live/index.ex:449 +#: lib/who_need_help_web/live/request_live/index.ex:526 #: lib/who_need_help_web/live/request_live/show.ex:1022 #, elixir-autogen, elixir-format msgid "This is not an emergency service. Contact local emergency services for immediate danger." @@ -2072,9 +2072,9 @@ msgid "To see sent emails, visit" msgstr "Щоб переглянути надіслані листи, відкрийте" #: lib/who_need_help_web/live/notification_live.ex:749 -#: lib/who_need_help_web/live/request_live/index.ex:399 -#: lib/who_need_help_web/live/request_live/index.ex:400 -#: lib/who_need_help_web/live/request_live/index.ex:510 +#: lib/who_need_help_web/live/request_live/index.ex:476 +#: lib/who_need_help_web/live/request_live/index.ex:477 +#: lib/who_need_help_web/live/request_live/index.ex:587 #: lib/who_need_help_web/live/request_live/new.ex:450 #: lib/who_need_help_web/live/request_live/show.ex:945 #: lib/who_need_help_web/live/request_live/show.ex:946 @@ -2149,7 +2149,7 @@ msgid "Update email instructions" msgstr "Інструкції для зміни електронної пошти" #: lib/who_need_help_web/live/notification_live.ex:743 -#: lib/who_need_help_web/live/request_live/index.ex:506 +#: lib/who_need_help_web/live/request_live/index.ex:583 #: lib/who_need_help_web/live/request_live/new.ex:447 #, elixir-autogen, elixir-format msgid "Urgency" @@ -2304,7 +2304,7 @@ msgstr "" "через підписку ChatGPT розробника. Ключ OpenAI API та резервний варіант API " "з оплатою за використання не застосовуються." -#: lib/who_need_help_web/live/request_live/index.ex:434 +#: lib/who_need_help_web/live/request_live/index.ex:511 #, elixir-autogen, elixir-format msgid "Who needs help?" msgstr "Хто потребує допомоги?" @@ -2426,7 +2426,7 @@ msgid "Your review is revealed only after both participants submit." msgstr "" "Ваш відгук відкриється лише після того, як його надішлють обидва учасники." -#: lib/who_need_help_web/live/request_live/index.ex:724 +#: lib/who_need_help_web/live/request_live/index.ex:839 #, elixir-autogen, elixir-format msgid "Your trust summary" msgstr "Ваші показники довіри" @@ -2447,17 +2447,17 @@ msgstr "повідомлення активності" msgid "before confirming." msgstr "перед підтвердженням." -#: lib/who_need_help_web/live/activity_live/index.ex:646 +#: lib/who_need_help_web/live/activity_live/index.ex:743 #: lib/who_need_help_web/live/category_proposal_live.ex:252 #: lib/who_need_help_web/live/moderation_live.ex:372 -#: lib/who_need_help_web/live/request_live/index.ex:655 +#: lib/who_need_help_web/live/request_live/index.ex:770 #, elixir-autogen, elixir-format msgid "by %{name}" msgstr "автор: %{name}" #: lib/who_need_help_web/live/profile_live.ex:190 #: lib/who_need_help_web/live/public_profile_live.ex:133 -#: lib/who_need_help_web/live/request_live/index.ex:728 +#: lib/who_need_help_web/live/request_live/index.ex:843 #: lib/who_need_help_web/live/request_live/show.ex:1374 #, elixir-autogen, elixir-format msgid "completed" @@ -2493,7 +2493,7 @@ msgstr "організатор" msgid "participants only" msgstr "лише учасники" -#: lib/who_need_help_web/live/request_live/index.ex:732 +#: lib/who_need_help_web/live/request_live/index.ex:847 #: lib/who_need_help_web/live/request_live/show.ex:1378 #, elixir-autogen, elixir-format msgid "people" @@ -2553,7 +2553,7 @@ msgstr "терміново" #: lib/who_need_help_web/live/activity_live/show.ex:719 #: lib/who_need_help_web/live/profile_live.ex:285 #: lib/who_need_help_web/live/public_profile_live.ex:98 -#: lib/who_need_help_web/live/request_live/index.ex:736 +#: lib/who_need_help_web/live/request_live/index.ex:851 #: lib/who_need_help_web/live/request_live/show.ex:1093 #: lib/who_need_help_web/live/request_live/show.ex:1476 #, elixir-autogen, elixir-format @@ -2586,8 +2586,8 @@ msgstr "← Заявки" msgid "Approved" msgstr "Схвалено" -#: lib/who_need_help_web/live/request_live/index.ex:415 -#: lib/who_need_help_web/live/request_live/index.ex:416 +#: lib/who_need_help_web/live/request_live/index.ex:492 +#: lib/who_need_help_web/live/request_live/index.ex:493 #, elixir-autogen, elixir-format msgid "Expired" msgstr "Спливло" @@ -2640,8 +2640,8 @@ msgstr "Незвична частота дій" msgid "Load earlier messages" msgstr "Завантажити попередні повідомлення" -#: lib/who_need_help_web/live/activity_live/index.ex:658 -#: lib/who_need_help_web/live/activity_live/index.ex:751 +#: lib/who_need_help_web/live/activity_live/index.ex:755 +#: lib/who_need_help_web/live/activity_live/index.ex:848 #: lib/who_need_help_web/live/category_proposal_live.ex:284 #: lib/who_need_help_web/live/leaderboard_live.ex:91 #: lib/who_need_help_web/live/moderation_live.ex:465 @@ -2653,7 +2653,7 @@ msgstr "Завантажити попередні повідомлення" #: lib/who_need_help_web/live/profile_live.ex:363 #: lib/who_need_help_web/live/public_profile_live.ex:178 #: lib/who_need_help_web/live/report_live.ex:98 -#: lib/who_need_help_web/live/request_live/index.ex:805 +#: lib/who_need_help_web/live/request_live/index.ex:920 #: lib/who_need_help_web/live/support_operations_live.ex:306 #: lib/who_need_help_web/live/support_operations_live.ex:505 #, elixir-autogen, elixir-format @@ -2661,7 +2661,7 @@ msgid "Load more" msgstr "Завантажити ще" #: lib/who_need_help_web/live/activity_live/show.ex:544 -#: lib/who_need_help_web/live/request_live/index.ex:701 +#: lib/who_need_help_web/live/request_live/index.ex:816 #: lib/who_need_help_web/live/request_live/show.ex:1275 #, elixir-autogen, elixir-format msgid "The map is unavailable in this browser. Request details remain usable." @@ -4650,45 +4650,37 @@ msgstr "Перетягніть, щоб перемістити точну точ msgid "Exact point selected. Drag the red pin or click the map to move it." msgstr "Точну точку вибрано. Перетягніть червоний маркер або натисніть на карту, щоб перемістити її." -#: lib/who_need_help_web/live/request_live/index.ex:539 -#, elixir-autogen, elixir-format -msgid "%{count} request in this map area" -msgid_plural "%{count} requests in this map area" -msgstr[0] "%{count} заявка в цій області карти" -msgstr[1] "%{count} заявки в цій області карти" -msgstr[2] "%{count} заявок у цій області карти" - -#: lib/who_need_help_web/live/activity_live/index.ex:502 -#: lib/who_need_help_web/live/request_live/index.ex:516 +#: lib/who_need_help_web/live/activity_live/index.ex:559 +#: lib/who_need_help_web/live/request_live/index.ex:593 #, elixir-autogen, elixir-format msgid "Area or city" msgstr "Район або місто" -#: lib/who_need_help_web/live/activity_live/index.ex:594 -#: lib/who_need_help_web/live/request_live/index.ex:606 +#: lib/who_need_help_web/live/activity_live/index.ex:689 +#: lib/who_need_help_web/live/request_live/index.ex:721 #, elixir-autogen, elixir-format msgid "Choose an area on the map" msgstr "Виберіть область на карті" -#: lib/who_need_help_web/live/request_live/index.ex:436 +#: lib/who_need_help_web/live/request_live/index.ex:513 #, elixir-autogen, elixir-format msgid "Explore privacy-friendly areas and public exact meeting points chosen by requesters." msgstr "Переглядайте приватні області та точні публічні місця зустрічі, вибрані авторами заявок." -#: lib/who_need_help_web/live/activity_live/index.ex:553 -#: lib/who_need_help_web/live/request_live/index.ex:565 +#: lib/who_need_help_web/live/activity_live/index.ex:647 +#: lib/who_need_help_web/live/request_live/index.ex:679 #, elixir-autogen, elixir-format msgid "List" msgstr "Список" -#: lib/who_need_help_web/live/request_live/index.ex:677 +#: lib/who_need_help_web/live/request_live/index.ex:792 #, elixir-autogen, elixir-format msgid "Load more in this area" msgstr "Завантажити ще в цій області" #: lib/who_need_help_web/components/layouts/root.html.heex:5 -#: lib/who_need_help_web/live/activity_live/index.ex:573 -#: lib/who_need_help_web/live/request_live/index.ex:585 +#: lib/who_need_help_web/live/activity_live/index.ex:667 +#: lib/who_need_help_web/live/request_live/index.ex:699 #, elixir-autogen, elixir-format msgid "Map" msgstr "Карта" @@ -4698,77 +4690,65 @@ msgstr "Карта" msgid "Map preview" msgstr "Попередній перегляд карти" -#: lib/who_need_help_web/live/activity_live/index.ex:606 -#: lib/who_need_help_web/live/request_live/index.ex:618 +#: lib/who_need_help_web/live/activity_live/index.ex:701 +#: lib/who_need_help_web/live/request_live/index.ex:733 #, elixir-autogen, elixir-format msgid "Move or zoom the map to search somewhere else." msgstr "Перемістіть або масштабуйте карту, щоб шукати в іншому місці." -#: lib/who_need_help_web/live/activity_live/index.ex:540 -#: lib/who_need_help_web/live/request_live/index.ex:552 -#, elixir-autogen, elixir-format -msgid "Move the map, then search the newly visible area." -msgstr "Перемістіть карту, а потім виконайте пошук у новій видимій області." - -#: lib/who_need_help_web/live/request_live/index.ex:616 +#: lib/who_need_help_web/live/request_live/index.ex:731 #, elixir-autogen, elixir-format msgid "No open requests in this area" msgstr "У цій області немає відкритих заявок" -#: lib/who_need_help_web/live/request_live/index.ex:608 +#: lib/who_need_help_web/live/request_live/index.ex:723 #, elixir-autogen, elixir-format msgid "Only requests from the selected map area will be loaded." msgstr "Буде завантажено лише заявки з вибраної області карти." #: lib/who_need_help_web/components/layouts/root.html.heex:8 -#: lib/who_need_help_web/live/request_live/index.ex:704 +#: lib/who_need_help_web/live/request_live/index.ex:819 #, elixir-autogen, elixir-format msgid "Open request" msgstr "Відкрити заявку" -#: lib/who_need_help_web/live/activity_live/index.ex:503 -#: lib/who_need_help_web/live/request_live/index.ex:517 +#: lib/who_need_help_web/live/activity_live/index.ex:560 +#: lib/who_need_help_web/live/request_live/index.ex:594 #, elixir-autogen, elixir-format msgid "Optional text search" msgstr "Необов’язковий текстовий пошук" -#: lib/who_need_help_web/live/request_live/index.ex:683 +#: lib/who_need_help_web/live/request_live/index.ex:798 #, elixir-autogen, elixir-format msgid "Requests without map coordinates appear only when their public area description matches the text search." msgstr "Заявки без координат на карті з’являються лише тоді, коли опис публічної області збігається з текстовим пошуком." -#: lib/who_need_help_web/live/activity_live/index.ex:544 -#: lib/who_need_help_web/live/request_live/index.ex:556 +#: lib/who_need_help_web/live/activity_live/index.ex:638 +#: lib/who_need_help_web/live/request_live/index.ex:670 #, elixir-autogen, elixir-format msgid "Results layout" msgstr "Розташування результатів" -#: lib/who_need_help_web/live/activity_live/index.ex:693 -#: lib/who_need_help_web/live/request_live/index.ex:719 -#, elixir-autogen, elixir-format -msgid "Search this area" -msgstr "Шукати в цій області" - #: lib/who_need_help_web/controllers/page_html/home.html.heex:171 #, elixir-autogen, elixir-format msgid "Static preview" msgstr "Статичний перегляд" -#: lib/who_need_help_web/live/activity_live/index.ex:563 -#: lib/who_need_help_web/live/request_live/index.ex:575 +#: lib/who_need_help_web/live/activity_live/index.ex:657 +#: lib/who_need_help_web/live/request_live/index.ex:689 #, elixir-autogen, elixir-format msgid "Together" msgstr "Разом" #: lib/who_need_help_web/components/layouts/root.html.heex:6 #: lib/who_need_help_web/controllers/page_html/home.html.heex:160 -#: lib/who_need_help_web/live/activity_live/index.ex:681 +#: lib/who_need_help_web/live/activity_live/index.ex:778 #: lib/who_need_help_web/live/activity_live/new.ex:355 #: lib/who_need_help_web/live/activity_live/new.ex:414 #: lib/who_need_help_web/live/activity_live/show.ex:546 #: lib/who_need_help_web/live/notification_live.ex:602 #: lib/who_need_help_web/live/notification_live.ex:621 -#: lib/who_need_help_web/live/request_live/index.ex:703 +#: lib/who_need_help_web/live/request_live/index.ex:818 #: lib/who_need_help_web/live/request_live/new.ex:485 #: lib/who_need_help_web/live/request_live/new.ex:563 #: lib/who_need_help_web/live/request_live/show.ex:1277 @@ -5158,7 +5138,7 @@ msgid "Nearby alert deleted." msgstr "Сповіщення поблизу видалено." #: lib/who_need_help_web/live/notification_live.ex:456 -#: lib/who_need_help_web/live/request_live/index.ex:462 +#: lib/who_need_help_web/live/request_live/index.ex:539 #, elixir-autogen, elixir-format msgid "Nearby requests" msgstr "Заявки поблизу" @@ -5498,7 +5478,7 @@ msgid "WebGL is unavailable in this browser, so the full map cannot start. Selec msgstr "WebGL недоступний у цьому браузері, тому повна карта не може запуститися. Виберіть приклад нижче або спробуйте запустити карту ще раз." #: lib/who_need_help_web/components/layouts/root.html.heex:7 -#: lib/who_need_help_web/live/activity_live/index.ex:682 +#: lib/who_need_help_web/live/activity_live/index.ex:779 #: lib/who_need_help_web/live/activity_live/show.ex:547 #: lib/who_need_help_web/live/request_live/show.ex:1278 #, elixir-autogen, elixir-format @@ -6063,7 +6043,7 @@ msgstr "Тепер ваш відгук видно" msgid "Delivery settings" msgstr "Налаштування доставки" -#: lib/who_need_help_web/live/request_live/index.ex:660 +#: lib/who_need_help_web/live/request_live/index.ex:775 #, elixir-autogen, elixir-format msgid "Expires" msgstr "Спливає" @@ -6083,30 +6063,22 @@ msgstr "Сповіщення поруч" msgid "Notification sections" msgstr "Розділи сповіщень" -#: lib/who_need_help_web/live/activity_live/index.ex:674 +#: lib/who_need_help_web/live/activity_live/index.ex:771 #, elixir-autogen, elixir-format msgid "%{count} activities" msgstr "Активностей: %{count}" -#: lib/who_need_help_web/live/activity_live/index.ex:527 -#, elixir-autogen, elixir-format -msgid "%{count} activity in this map area" -msgid_plural "%{count} activities in this map area" -msgstr[0] "%{count} активність у цій області карти" -msgstr[1] "%{count} активності в цій області карти" -msgstr[2] "%{count} активностей у цій області карти" - -#: lib/who_need_help_web/live/request_live/index.ex:705 +#: lib/who_need_help_web/live/request_live/index.ex:820 #, elixir-autogen, elixir-format msgid "%{count} requests" msgstr "Запитів: %{count}" -#: lib/who_need_help_web/live/activity_live/index.ex:717 +#: lib/who_need_help_web/live/activity_live/index.ex:814 #, elixir-autogen, elixir-format msgid "Activities you create or ask to join will appear here. Leaving removes an activity from this list." msgstr "Створені вами активності й ті, до яких ви попросили приєднатися, з’являться тут. Після виходу активність зникне зі списку." -#: lib/who_need_help_web/live/activity_live/index.ex:457 +#: lib/who_need_help_web/live/activity_live/index.ex:514 #, elixir-autogen, elixir-format msgid "Activity views" msgstr "Розділи активностей" @@ -6121,12 +6093,12 @@ msgstr "Оберіть категорію та зрозуміло опишіть msgid "Confirm the safety guidance before asking nearby people for help." msgstr "Підтвердьте правила безпеки перед публікацією запиту." -#: lib/who_need_help_web/live/request_live/index.ex:753 +#: lib/who_need_help_web/live/request_live/index.ex:868 #, elixir-autogen, elixir-format msgid "Create request" msgstr "Створити запит" -#: lib/who_need_help_web/live/request_live/index.ex:776 +#: lib/who_need_help_web/live/request_live/index.ex:891 #, elixir-autogen, elixir-format msgid "Create your first request" msgstr "Створити перший запит" @@ -6141,43 +6113,43 @@ msgstr "Що потрібно зробити" msgid "Location" msgstr "Місце" -#: lib/who_need_help_web/live/activity_live/index.ex:463 +#: lib/who_need_help_web/live/activity_live/index.ex:520 #, elixir-autogen, elixir-format msgid "My activities" msgstr "Мої активності" -#: lib/who_need_help_web/live/request_live/index.ex:463 -#: lib/who_need_help_web/live/request_live/index.ex:747 +#: lib/who_need_help_web/live/request_live/index.ex:540 +#: lib/who_need_help_web/live/request_live/index.ex:862 #, elixir-autogen, elixir-format msgid "My requests" msgstr "Мої запити" -#: lib/who_need_help_web/live/activity_live/index.ex:462 +#: lib/who_need_help_web/live/activity_live/index.ex:519 #, elixir-autogen, elixir-format msgid "Nearby activities" msgstr "Активності поруч" -#: lib/who_need_help_web/live/activity_live/index.ex:715 +#: lib/who_need_help_web/live/activity_live/index.ex:812 #, elixir-autogen, elixir-format msgid "No activities yet" msgstr "Активностей поки немає" -#: lib/who_need_help_web/live/activity_live/index.ex:604 +#: lib/who_need_help_web/live/activity_live/index.ex:699 #, elixir-autogen, elixir-format msgid "No open activities in this area" msgstr "У цій області немає відкритих активностей" -#: lib/who_need_help_web/live/request_live/index.ex:771 +#: lib/who_need_help_web/live/request_live/index.ex:886 #, elixir-autogen, elixir-format msgid "No requests yet" msgstr "Запитів поки немає" -#: lib/who_need_help_web/live/activity_live/index.ex:596 +#: lib/who_need_help_web/live/activity_live/index.ex:691 #, elixir-autogen, elixir-format msgid "Only activities from the selected map area will be loaded." msgstr "Буде завантажено лише активності з вибраної області карти." -#: lib/who_need_help_web/live/activity_live/index.ex:673 +#: lib/who_need_help_web/live/activity_live/index.ex:770 #, elixir-autogen, elixir-format msgid "Open activity" msgstr "Відкрити активність" @@ -6187,12 +6159,12 @@ msgstr "Відкрити активність" msgid "Request form steps" msgstr "Кроки створення запиту" -#: lib/who_need_help_web/live/request_live/index.ex:457 +#: lib/who_need_help_web/live/request_live/index.ex:534 #, elixir-autogen, elixir-format msgid "Request views" msgstr "Розділи запитів" -#: lib/who_need_help_web/live/request_live/index.ex:773 +#: lib/who_need_help_web/live/request_live/index.ex:888 #, elixir-autogen, elixir-format msgid "Requests you publish or accept will appear here." msgstr "Тут з’являться запити, які ви створили або прийняли." @@ -6217,7 +6189,7 @@ msgstr "Укажіть терміновість і час закриття за msgid "Share only as much location detail as helpers need." msgstr "Покажіть помічникам лише необхідну інформацію про місце." -#: lib/who_need_help_web/live/activity_live/index.ex:679 +#: lib/who_need_help_web/live/activity_live/index.ex:776 #, elixir-autogen, elixir-format msgid "The map is unavailable in this browser. Activity details remain usable." msgstr "Карта недоступна в цьому браузері. Інформація про активності залишається доступною." @@ -6227,7 +6199,7 @@ msgstr "Карта недоступна в цьому браузері. Інфо msgid "Timing" msgstr "Час" -#: lib/who_need_help_web/live/request_live/index.ex:749 +#: lib/who_need_help_web/live/request_live/index.ex:864 #, elixir-autogen, elixir-format msgid "Track requests you created and requests you accepted as a helper." msgstr "Стежте за створеними запитами й тими, які ви прийняли як помічник." @@ -6888,32 +6860,88 @@ msgstr "Що мають бачити люди до схвалення?" msgid "Choose the meeting point on the map or use your current location." msgstr "Оберіть місце зустрічі на карті або скористайтеся своїм поточним місцезнаходженням." -#: lib/who_need_help_web/live/activity_live/index.ex:522 -#: lib/who_need_help_web/live/activity_live/index.ex:586 -#: lib/who_need_help_web/live/activity_live/index.ex:707 -#: lib/who_need_help_web/live/request_live/index.ex:534 -#: lib/who_need_help_web/live/request_live/index.ex:598 -#: lib/who_need_help_web/live/request_live/index.ex:763 +#: lib/who_need_help_web/live/activity_live/index.ex:579 +#: lib/who_need_help_web/live/activity_live/index.ex:681 +#: lib/who_need_help_web/live/activity_live/index.ex:804 +#: lib/who_need_help_web/live/request_live/index.ex:611 +#: lib/who_need_help_web/live/request_live/index.ex:713 +#: lib/who_need_help_web/live/request_live/index.ex:878 #, elixir-autogen, elixir-format msgid "Loading results…" msgstr "Завантажуємо результати…" -#: lib/who_need_help_web/live/activity_live/index.ex:676 +#: lib/who_need_help_web/live/activity_live/index.ex:773 #, elixir-autogen, elixir-format msgid "Maximum zoom reached. Matching activities are listed beside the map." msgstr "Досягнуто максимального масштабу. Відповідні заходи перелічено поруч із картою." -#: lib/who_need_help_web/live/request_live/index.ex:707 +#: lib/who_need_help_web/live/request_live/index.ex:822 #, elixir-autogen, elixir-format msgid "Maximum zoom reached. Matching requests are listed beside the map." msgstr "Досягнуто максимального масштабу. Відповідні заявки перелічено поруч із картою." -#: lib/who_need_help_web/live/activity_live/index.ex:535 +#: lib/who_need_help_web/live/activity_live/index.ex:584 #, elixir-autogen, elixir-format -msgid "of %{count} matching activities with map locations" -msgstr "із %{count} відповідних заходів із місцезнаходженням на карті" +msgid "%{count} activity in the selected map area" +msgid_plural "%{count} activities in the selected map area" +msgstr[0] "%{count} подія у вибраній області карти" +msgstr[1] "%{count} події у вибраній області карти" +msgstr[2] "%{count} подій у вибраній області карти" -#: lib/who_need_help_web/live/request_live/index.ex:547 +#: lib/who_need_help_web/live/request_live/index.ex:616 #, elixir-autogen, elixir-format -msgid "of %{count} matching requests with map locations" -msgstr "із %{count} відповідних заявок із місцезнаходженням на карті" +msgid "%{count} request in the selected map area" +msgid_plural "%{count} requests in the selected map area" +msgstr[0] "%{count} заявка у вибраній області карти" +msgstr[1] "%{count} заявки у вибраній області карти" +msgstr[2] "%{count} заявок у вибраній області карти" + +#: lib/who_need_help_web/live/activity_live/index.ex:603 +#: lib/who_need_help_web/live/request_live/index.ex:635 +#, elixir-autogen, elixir-format +msgid "Map moved. Results still show the previous area." +msgstr "Карту переміщено. Поки показано результати для попередньої області." + +#: lib/who_need_help_web/live/activity_live/index.ex:621 +#, elixir-autogen, elixir-format +msgid "Move or zoom the map, then choose “Show activities in this area”." +msgstr "Перемістіть або масштабуйте карту, потім натисніть «Показати події в цій області»." + +#: lib/who_need_help_web/live/request_live/index.ex:653 +#, elixir-autogen, elixir-format +msgid "Move or zoom the map, then choose “Show requests in this area”." +msgstr "Перемістіть або масштабуйте карту, потім натисніть «Показати заявки в цій області»." + +#: lib/who_need_help_web/live/activity_live/index.ex:615 +#: lib/who_need_help_web/live/request_live/index.ex:647 +#, elixir-autogen, elixir-format +msgid "Results update automatically after you stop moving the map." +msgstr "Результати оновляться автоматично, коли ви завершите переміщення карти." + +#: lib/who_need_help_web/live/activity_live/index.ex:790 +#, elixir-autogen, elixir-format +msgid "Show activities in this area" +msgstr "Показати події в цій області" + +#: lib/who_need_help_web/live/request_live/index.ex:834 +#, elixir-autogen, elixir-format +msgid "Show requests in this area" +msgstr "Показати заявки в цій області" + +#: lib/who_need_help_web/live/activity_live/index.ex:593 +#: lib/who_need_help_web/live/request_live/index.ex:625 +#, elixir-autogen, elixir-format +msgid "Showing %{shown} of %{count} in the list." +msgstr "У списку показано %{shown} із %{count}." + +#: lib/who_need_help_web/live/activity_live/index.ex:635 +#: lib/who_need_help_web/live/request_live/index.ex:667 +#, elixir-autogen, elixir-format +msgid "Update results as map moves" +msgstr "Оновлювати результати під час переміщення карти" + +#: lib/who_need_help_web/live/activity_live/index.ex:609 +#: lib/who_need_help_web/live/request_live/index.ex:641 +#, elixir-autogen, elixir-format +msgid "Updating results for the visible map area…" +msgstr "Оновлюємо результати для видимої області карти…" diff --git a/test/who_need_help/activities_test.exs b/test/who_need_help/activities_test.exs index f5876f4..66d5cb4 100644 --- a/test/who_need_help/activities_test.exs +++ b/test/who_need_help/activities_test.exs @@ -381,6 +381,17 @@ defmodule WhoNeedHelp.ActivitiesTest do assert nearby.id in ids refute far_away.id in ids + assert Activities.count_open_activities(context.outsider_scope, %{}, viewport: viewport) == 1 + + map_count = + context.outsider_scope + |> Activities.map_discovery_items(%{}, viewport) + |> Enum.reduce(0, fn + %{type: "cluster", count: count}, total -> total + count + _activity, total -> total + 1 + end) + + assert map_count == length(ids) end test "activity discovery filters by the published approximate point, not the exact point", diff --git a/test/who_need_help/mutual_aid_flow_test.exs b/test/who_need_help/mutual_aid_flow_test.exs index b70d7da..5869a95 100644 --- a/test/who_need_help/mutual_aid_flow_test.exs +++ b/test/who_need_help/mutual_aid_flow_test.exs @@ -461,11 +461,11 @@ defmodule WhoNeedHelp.MutualAidFlowTest do |> Map.put("location_label", "Kyiv center") ) - {:ok, intersecting_area} = + {:ok, radius_only_intersection} = Help.create_request( context.requester_scope, context.request_attrs - |> Map.put("title", "Area intersects viewport") + |> Map.put("title", "Radius intersects but marker is outside viewport") |> Map.put("location_label", "Kyiv western edge") |> Map.put("longitude", "29.99") |> Map.put("location_radius_meters", 2_000) @@ -490,8 +490,19 @@ defmodule WhoNeedHelp.MutualAidFlowTest do |> Enum.map(& &1.id) assert kyiv_request.id in ids - assert intersecting_area.id in ids + refute radius_only_intersection.id in ids refute berlin_request.id in ids + assert Help.count_open_requests(context.helper_scope, %{}, viewport: viewport) == 1 + + map_count = + context.helper_scope + |> Help.map_discovery_items(%{}, viewport) + |> Enum.reduce(0, fn + %{type: "cluster", count: count}, total -> total + count + _request, total -> total + 1 + end) + + assert map_count == length(ids) end test "hidden coordinates require an explicit area-label search and never become map points", diff --git a/test/who_need_help_web/live/mutual_aid_live_test.exs b/test/who_need_help_web/live/mutual_aid_live_test.exs index 06dde97..ecdd629 100644 --- a/test/who_need_help_web/live/mutual_aid_live_test.exs +++ b/test/who_need_help_web/live/mutual_aid_live_test.exs @@ -379,6 +379,79 @@ defmodule WhoNeedHelpWeb.MutualAidLiveTest do ) end + test "request discovery keeps the previous list until a moved map area is applied", %{ + conn: conn, + scope: scope + } do + category = Catalog.seed_defaults() + {:ok, request} = Help.create_request(scope, request_attrs(category)) + {:ok, view, _html} = live(conn, requests_in_kyiv_path()) + + render_async(view) + + assert has_element?(view, "#open-request-#{request.id}") + assert render(view) =~ "Showing 1 of 1 in the list." + assert has_element?(view, "#request-map-auto-update:not([checked])") + + moved = %{ + "west" => "30.50", + "south" => "50.40", + "east" => "30.60", + "north" => "50.50", + "zoom" => "13", + "width" => "900", + "height" => "700" + } + + render_hook(view, "map-viewport-change", moved) + + assert has_element?(view, "#search-map-area", "Show requests in this area") + assert render(view) =~ "Results still show the previous area." + assert has_element?(view, "#open-request-#{request.id}") + + view |> element("#search-map-area") |> render_click() + + assert_patch( + view, + ~p"/requests?#{Map.merge(moved, %{"east" => "30.6", "north" => "50.5", "south" => "50.4", "view" => "split", "west" => "30.5"})}" + ) + + render_async(view) + end + + test "request discovery can update automatically after map movement", %{conn: conn} do + path = + ~p"/requests?#{%{west: 30, south: 50, east: 31, north: 51, zoom: 10, width: 1200, height: 720, view: "split", map_update: "auto"}}" + + {:ok, view, _html} = live(conn, path) + render_async(view) + + assert has_element?(view, "#request-map-auto-update[checked]") + assert render(view) =~ "Results update automatically after you stop moving the map." + + moved = %{ + "west" => "30.50", + "south" => "50.40", + "east" => "30.60", + "north" => "50.50", + "zoom" => "13", + "width" => "900", + "height" => "700" + } + + render_hook(view, "map-viewport-change", moved) + assert render(view) =~ "Updating results for the visible map area" + refute has_element?(view, "#search-map-area") + + assert_patch( + view, + ~p"/requests?#{Map.merge(moved, %{"east" => "30.6", "map_update" => "auto", "north" => "50.5", "south" => "50.4", "view" => "split", "west" => "30.5"})}", + 1_000 + ) + + render_async(view) + end + test "activity cluster expansion immediately searches the expanded viewport", %{conn: conn} do {:ok, view, _html} = live(conn, activities_in_kyiv_path())