Synchronize discovery maps and lists

This commit is contained in:
SimpleTest 2026-07-29 03:45:53 +03:00
parent ee6a1f7e70
commit af922b015f
12 changed files with 1227 additions and 780 deletions

View File

@ -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 {

View File

@ -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)

View File

@ -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)

View File

@ -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"
>
<div class="request-discovery-toolbar">
<div :if={@view_mode != "list" && @discovery_loading}>
<div :if={@discovery_loading}>
<strong>{gettext("Loading results…")}</strong>
</div>
<div :if={@view_mode != "list" && !@discovery_loading}>
<div :if={!@discovery_loading} class="min-w-0" aria-live="polite">
<strong>
{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)
)}
</strong>
<span class="ml-1 text-sm text-base-content/60">
{gettext("of %{count} matching activities with map locations",
count: @map_total_count
<span :if={@view_mode != "map"} class="ml-1 text-sm text-base-content/60">
{gettext("Showing %{shown} of %{count} in the list.",
shown: length(@activities),
count: @list_result_count
)}
</span>
<p class="text-sm text-base-content/60">
{gettext("Move the map, then search the newly visible area.")}
<p
:if={@pending_viewport && @map_update_mode == "manual"}
class="mt-1 text-sm font-medium text-warning"
>
{gettext("Map moved. Results still show the previous area.")}
</p>
<p
:if={@pending_viewport && @map_update_mode == "auto"}
class="mt-1 text-sm text-base-content/60"
>
{gettext("Updating results for the visible map area…")}
</p>
<p
:if={!@pending_viewport && @map_update_mode == "auto"}
class="mt-1 text-sm text-base-content/60"
>
{gettext("Results update automatically after you stop moving the map.")}
</p>
<p
:if={!@pending_viewport && @map_update_mode == "manual"}
class="mt-1 text-sm text-base-content/60"
>
{gettext("Move or zoom the map, then choose “Show activities in this area”.")}
</p>
</div>
<div class="request-view-switcher" role="group" aria-label={gettext("Results layout")}>
<button
type="button"
phx-click="set-view"
phx-value-view="list"
aria-pressed={to_string(@view_mode == "list")}
class={["btn btn-sm", @view_mode == "list" && "btn-active"]}
>
<.icon name="hero-list-bullet" class="size-4" />
<span>{gettext("List")}</span>
</button>
<button
type="button"
phx-click="set-view"
phx-value-view="split"
aria-pressed={to_string(@view_mode == "split")}
class={["btn btn-sm request-view-split", @view_mode == "split" && "btn-active"]}
>
<.icon name="hero-squares-2x2" class="size-4" />
<span>{gettext("Together")}</span>
</button>
<button
type="button"
phx-click="set-view"
phx-value-view="map"
aria-pressed={to_string(@view_mode == "map")}
class={["btn btn-sm", @view_mode == "map" && "btn-active"]}
>
<.icon name="hero-map" class="size-4" />
<span>{gettext("Map")}</span>
</button>
<div class="request-discovery-controls">
<label class="request-map-update-control">
<input
id="activity-map-auto-update"
type="checkbox"
checked={@map_update_mode == "auto"}
phx-click="set-map-update-mode"
phx-value-mode={if(@map_update_mode == "auto", do: "manual", else: "auto")}
class="toggle toggle-sm toggle-info"
/>
<span>{gettext("Update results as map moves")}</span>
</label>
<div class="request-view-switcher" role="group" aria-label={gettext("Results layout")}>
<button
type="button"
phx-click="set-view"
phx-value-view="list"
aria-pressed={to_string(@view_mode == "list")}
class={["btn btn-sm", @view_mode == "list" && "btn-active"]}
>
<.icon name="hero-list-bullet" class="size-4" />
<span>{gettext("List")}</span>
</button>
<button
type="button"
phx-click="set-view"
phx-value-view="split"
aria-pressed={to_string(@view_mode == "split")}
class={["btn btn-sm request-view-split", @view_mode == "split" && "btn-active"]}
>
<.icon name="hero-squares-2x2" class="size-4" />
<span>{gettext("Together")}</span>
</button>
<button
type="button"
phx-click="set-view"
phx-value-view="map"
aria-pressed={to_string(@view_mode == "map")}
class={["btn btn-sm", @view_mode == "map" && "btn-active"]}
>
<.icon name="hero-map" class="size-4" />
<span>{gettext("Map")}</span>
</button>
</div>
</div>
</div>
@ -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"
>
<div class="flex items-start justify-between gap-4">
<div>
@ -683,14 +780,14 @@ defmodule WhoNeedHelpWeb.ActivityLive.Index do
class="aid-map request-discovery-map"
/>
<button
:if={@pending_viewport}
:if={@pending_viewport && @map_update_mode == "manual"}
id="search-activity-map-area"
type="button"
phx-click="search-map-area"
class="btn btn-info request-map-search-button"
>
<.icon name="hero-magnifying-glass" class="size-4" />
{gettext("Search this area")}
{gettext("Show activities in this area")}
</button>
</div>
</aside>

View File

@ -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"
>
<div class="request-discovery-toolbar">
<div :if={@view_mode != "list" && @discovery_loading}>
<div :if={@discovery_loading}>
<strong>{gettext("Loading results…")}</strong>
</div>
<div :if={@view_mode != "list" && !@discovery_loading}>
<div :if={!@discovery_loading} class="min-w-0" aria-live="polite">
<strong>
{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)
)}
</strong>
<span class="ml-1 text-sm text-base-content/60">
{gettext("of %{count} matching requests with map locations",
count: @map_total_count
<span :if={@view_mode != "map"} class="ml-1 text-sm text-base-content/60">
{gettext("Showing %{shown} of %{count} in the list.",
shown: length(@requests),
count: @list_result_count
)}
</span>
<p class="text-sm text-base-content/60">
{gettext("Move the map, then search the newly visible area.")}
<p
:if={@pending_viewport && @map_update_mode == "manual"}
class="mt-1 text-sm font-medium text-warning"
>
{gettext("Map moved. Results still show the previous area.")}
</p>
<p
:if={@pending_viewport && @map_update_mode == "auto"}
class="mt-1 text-sm text-base-content/60"
>
{gettext("Updating results for the visible map area…")}
</p>
<p
:if={!@pending_viewport && @map_update_mode == "auto"}
class="mt-1 text-sm text-base-content/60"
>
{gettext("Results update automatically after you stop moving the map.")}
</p>
<p
:if={!@pending_viewport && @map_update_mode == "manual"}
class="mt-1 text-sm text-base-content/60"
>
{gettext("Move or zoom the map, then choose “Show requests in this area”.")}
</p>
</div>
<div class="request-view-switcher" role="group" aria-label={gettext("Results layout")}>
<button
type="button"
phx-click="set-view"
phx-value-view="list"
aria-pressed={to_string(@view_mode == "list")}
class={["btn btn-sm", @view_mode == "list" && "btn-active"]}
>
<.icon name="hero-list-bullet" class="size-4" />
<span>{gettext("List")}</span>
</button>
<button
type="button"
phx-click="set-view"
phx-value-view="split"
aria-pressed={to_string(@view_mode == "split")}
class={["btn btn-sm request-view-split", @view_mode == "split" && "btn-active"]}
>
<.icon name="hero-squares-2x2" class="size-4" />
<span>{gettext("Together")}</span>
</button>
<button
type="button"
phx-click="set-view"
phx-value-view="map"
aria-pressed={to_string(@view_mode == "map")}
class={["btn btn-sm", @view_mode == "map" && "btn-active"]}
>
<.icon name="hero-map" class="size-4" />
<span>{gettext("Map")}</span>
</button>
<div class="request-discovery-controls">
<label class="request-map-update-control">
<input
id="request-map-auto-update"
type="checkbox"
checked={@map_update_mode == "auto"}
phx-click="set-map-update-mode"
phx-value-mode={if(@map_update_mode == "auto", do: "manual", else: "auto")}
class="toggle toggle-sm toggle-success"
/>
<span>{gettext("Update results as map moves")}</span>
</label>
<div class="request-view-switcher" role="group" aria-label={gettext("Results layout")}>
<button
type="button"
phx-click="set-view"
phx-value-view="list"
aria-pressed={to_string(@view_mode == "list")}
class={["btn btn-sm", @view_mode == "list" && "btn-active"]}
>
<.icon name="hero-list-bullet" class="size-4" />
<span>{gettext("List")}</span>
</button>
<button
type="button"
phx-click="set-view"
phx-value-view="split"
aria-pressed={to_string(@view_mode == "split")}
class={["btn btn-sm request-view-split", @view_mode == "split" && "btn-active"]}
>
<.icon name="hero-squares-2x2" class="size-4" />
<span>{gettext("Together")}</span>
</button>
<button
type="button"
phx-click="set-view"
phx-value-view="map"
aria-pressed={to_string(@view_mode == "map")}
class={["btn btn-sm", @view_mode == "map" && "btn-active"]}
>
<.icon name="hero-map" class="size-4" />
<span>{gettext("Map")}</span>
</button>
</div>
</div>
</div>
@ -709,14 +824,14 @@ defmodule WhoNeedHelpWeb.RequestLive.Index do
class="aid-map request-discovery-map"
/>
<button
:if={@pending_viewport}
:if={@pending_viewport && @map_update_mode == "manual"}
id="search-map-area"
type="button"
phx-click="search-map-area"
class="btn btn-primary request-map-search-button"
>
<.icon name="hero-magnifying-glass" class="size-4" />
{gettext("Search this area")}
{gettext("Show requests in this area")}
</button>
</div>

View File

@ -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 ""

View File

@ -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…"

View File

@ -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 "Обновляем результаты для видимой области карты…"

View File

@ -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 "Оновлюємо результати для видимої області карти…"

View File

@ -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",

View File

@ -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",

View File

@ -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())