mirror of
https://github.com/wanderer-industries/wanderer
synced 2025-12-02 22:12:55 +00:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3f6364c9ea | ||
|
|
0d11b12282 | ||
|
|
a5020b58f2 | ||
|
|
f039a74a8f | ||
|
|
0e6bb7390b |
18
CHANGELOG.md
18
CHANGELOG.md
@@ -2,6 +2,24 @@
|
||||
|
||||
<!-- changelog -->
|
||||
|
||||
## [v1.31.0](https://github.com/wanderer-industries/wanderer/compare/v1.30.2...v1.31.0) (2024-12-20)
|
||||
|
||||
|
||||
|
||||
|
||||
### Features:
|
||||
|
||||
* Core: Show tracking for new users by default. Auto link characters to account fix. Add character loading indicators.
|
||||
|
||||
## [v1.30.2](https://github.com/wanderer-industries/wanderer/compare/v1.30.1...v1.30.2) (2024-12-17)
|
||||
|
||||
|
||||
|
||||
|
||||
### Bug Fixes:
|
||||
|
||||
* Map: Fixed problem with ship size change.
|
||||
|
||||
## [v1.30.1](https://github.com/wanderer-industries/wanderer/compare/v1.30.0...v1.30.1) (2024-12-17)
|
||||
|
||||
|
||||
|
||||
@@ -97,14 +97,16 @@ export const useContextMenuConnectionHandlers = () => {
|
||||
},
|
||||
});
|
||||
|
||||
outCommand({
|
||||
type: OutCommand.updateConnectionMassStatus,
|
||||
data: {
|
||||
source: edge.source,
|
||||
target: edge.target,
|
||||
value: MassState.normal,
|
||||
},
|
||||
});
|
||||
if (status === ShipSizeStatus.small) {
|
||||
outCommand({
|
||||
type: OutCommand.updateConnectionMassStatus,
|
||||
data: {
|
||||
source: edge.source,
|
||||
target: edge.target,
|
||||
value: MassState.normal,
|
||||
},
|
||||
});
|
||||
}
|
||||
}, []);
|
||||
|
||||
const onToggleMassSave = useCallback((locked: boolean) => {
|
||||
|
||||
@@ -8,6 +8,7 @@ import CopyToClipboard from './copyToClipboard';
|
||||
import DownloadJson from './downloadJson';
|
||||
import NewVersionUpdate from './newVersionUpdate';
|
||||
import MapAction from './maps/mapAction';
|
||||
import ShowCharactersAddAlert from './showCharactersAddAlert';
|
||||
|
||||
export default {
|
||||
DownloadJson,
|
||||
@@ -20,4 +21,5 @@ export default {
|
||||
Ping,
|
||||
CopyToClipboard,
|
||||
NewVersionUpdate,
|
||||
ShowCharactersAddAlert,
|
||||
};
|
||||
|
||||
11
assets/js/hooks/showCharactersAddAlert.ts
Normal file
11
assets/js/hooks/showCharactersAddAlert.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
export default {
|
||||
mounted() {
|
||||
this.pushEvent('restore_show_characters_add_alert', {
|
||||
value: localStorage.getItem('wanderer:hide_characters_add_alert') !== 'true',
|
||||
});
|
||||
|
||||
document.getElementById('characters-add-alert-hide')?.addEventListener('click', e => {
|
||||
localStorage.setItem('wanderer:hide_characters_add_alert', 'true');
|
||||
});
|
||||
},
|
||||
};
|
||||
@@ -93,13 +93,9 @@ defmodule WandererAppWeb.AuthController do
|
||||
|> redirect(to: ~p"/")
|
||||
end
|
||||
|
||||
def maybe_update_character_user_id(character, user_id) do
|
||||
case character.user_id do
|
||||
nil ->
|
||||
WandererApp.Api.Character.assign_user!(character, %{user_id: user_id})
|
||||
|
||||
_ ->
|
||||
Logger.debug("character already has user_id")
|
||||
end
|
||||
def maybe_update_character_user_id(character, user_id) when not is_nil(user_id) do
|
||||
WandererApp.Api.Character.assign_user!(character, %{user_id: user_id})
|
||||
end
|
||||
|
||||
def maybe_update_character_user_id(_character, _user_id), do: :ok
|
||||
end
|
||||
|
||||
@@ -28,6 +28,7 @@ defmodule WandererAppWeb.CharactersLive do
|
||||
{:ok,
|
||||
socket
|
||||
|> assign(
|
||||
show_characters_add_alert: true,
|
||||
mode: :blocks,
|
||||
wallet_tracking_enabled?: WandererApp.Env.wallet_tracking_enabled?(),
|
||||
characters: characters |> Enum.sort_by(& &1.name, :asc) |> Enum.map(&map_ui_character/1),
|
||||
@@ -45,6 +46,13 @@ defmodule WandererAppWeb.CharactersLive do
|
||||
{:noreply, apply_action(socket, socket.assigns.live_action, params)}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_event("restore_show_characters_add_alert", %{"value" => value}, socket) do
|
||||
{:noreply,
|
||||
socket
|
||||
|> assign(show_characters_add_alert: value)}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_event("authorize", form, socket) do
|
||||
track_wallet = form |> Map.get("track_wallet", false)
|
||||
|
||||
@@ -29,9 +29,45 @@
|
||||
id="characters-list"
|
||||
class="w-full h-full col-span-2 lg:col-span-1 p-4 pl-20 pb-20 overflow-auto"
|
||||
>
|
||||
<div
|
||||
:if={@show_characters_add_alert}
|
||||
role="alert"
|
||||
class="alert"
|
||||
id="characters-add-alert"
|
||||
phx-hook="ShowCharactersAddAlert"
|
||||
phx-ignore
|
||||
data-key="show_characters_add_alert"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
class="h-6 w-6 shrink-0 stroke-current"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
|
||||
>
|
||||
</path>
|
||||
</svg>
|
||||
<span>
|
||||
All added characters will be automatically linked to your user account. You can't have same characters linked to several accounts.
|
||||
</span>
|
||||
<div>
|
||||
<button
|
||||
class="btn btn-sm"
|
||||
id="characters-add-alert-hide"
|
||||
phx-click={JS.toggle_class("hidden", to: "#characters-add-alert")}
|
||||
>
|
||||
Hide
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
:if={@mode == :blocks}
|
||||
class="gap-4 grid grid-cols-1 lg:grid-cols-5 md:grid-cols-3 sm:grid-cols-2 "
|
||||
class="gap-4 grid grid-cols-1 lg:grid-cols-5 md:grid-cols-3 sm:grid-cols-2 mt-4"
|
||||
>
|
||||
<.link patch={~p"/characters/authorize"}>
|
||||
<div class="card card-side rounded-none h-full items-center hover:text-white bg-gradient-to-l from-stone-950 to-stone-900 transform transition duration-500">
|
||||
@@ -51,9 +87,24 @@
|
||||
<div class="absolute left-0 bottom-0 w-full h-30 bg-opacity-60 bg-gray-900">
|
||||
<h2 class="absolute w-full flex justify-between px-4 left-0 top-10 text-xs">
|
||||
Corporation:
|
||||
<span
|
||||
:if={
|
||||
is_nil(
|
||||
character
|
||||
|> get(
|
||||
path(:corporation_name),
|
||||
nil
|
||||
)
|
||||
)
|
||||
}
|
||||
class="loading loading-dots loading-xs"
|
||||
/>
|
||||
<span>
|
||||
<%= character
|
||||
|> get(path(:corporation_name), "-") %>
|
||||
|> get(
|
||||
path(:corporation_name),
|
||||
""
|
||||
) %>
|
||||
</span>
|
||||
</h2>
|
||||
<h2 class="absolute w-full flex justify-between px-4 left-0 top-16 text-xs">
|
||||
@@ -65,9 +116,21 @@
|
||||
</h2>
|
||||
<h2 class="absolute left-0 bottom-12 px-4 text-xs w-full flex justify-between">
|
||||
Location:
|
||||
<span
|
||||
:if={
|
||||
is_nil(
|
||||
character
|
||||
|> get(
|
||||
path(:location / :solar_system_info / :solar_system_name, :map),
|
||||
nil
|
||||
)
|
||||
)
|
||||
}
|
||||
class="loading loading-dots loading-xs"
|
||||
/>
|
||||
<span>
|
||||
<%= character
|
||||
|> get(path(:location / :solar_system_info / :solar_system_name, :map), "-") %>
|
||||
|> get(path(:location / :solar_system_info / :solar_system_name, :map), "") %>
|
||||
</span>
|
||||
</h2>
|
||||
<h2
|
||||
@@ -126,7 +189,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div :if={@mode == :table} class="flex flex-col gap-4">
|
||||
<div :if={@mode == :table} class="flex flex-col gap-4 mt-4">
|
||||
<.link patch={~p"/characters/authorize"}>
|
||||
<button
|
||||
type="button"
|
||||
|
||||
@@ -66,35 +66,9 @@ defmodule WandererAppWeb.MapCharactersEventHandler do
|
||||
def handle_ui_event(
|
||||
"add_character",
|
||||
_,
|
||||
%{
|
||||
assigns: %{
|
||||
current_user: current_user,
|
||||
map_id: map_id,
|
||||
user_permissions: %{track_character: true}
|
||||
}
|
||||
} = socket
|
||||
) do
|
||||
{:noreply,
|
||||
socket
|
||||
|> assign(show_tracking?: true)
|
||||
|> assign_async(:characters, fn ->
|
||||
{:ok, map} =
|
||||
map_id
|
||||
|> WandererApp.MapRepo.get([:acls])
|
||||
|
||||
{:ok, character_settings} =
|
||||
case WandererApp.MapCharacterSettingsRepo.get_all_by_map(map_id) do
|
||||
{:ok, settings} -> {:ok, settings}
|
||||
_ -> {:ok, []}
|
||||
end
|
||||
|
||||
map
|
||||
|> WandererApp.Maps.load_characters(
|
||||
character_settings,
|
||||
current_user.id
|
||||
)
|
||||
end)}
|
||||
end
|
||||
socket
|
||||
),
|
||||
do: {:noreply, socket |> add_character()}
|
||||
|
||||
def handle_ui_event(
|
||||
"add_character",
|
||||
@@ -222,6 +196,38 @@ defmodule WandererAppWeb.MapCharactersEventHandler do
|
||||
def handle_ui_event(event, body, socket),
|
||||
do: MapCoreEventHandler.handle_ui_event(event, body, socket)
|
||||
|
||||
def add_character(
|
||||
%{
|
||||
assigns: %{
|
||||
current_user: current_user,
|
||||
map_id: map_id,
|
||||
user_permissions: %{track_character: true}
|
||||
}
|
||||
} = socket
|
||||
),
|
||||
do:
|
||||
socket
|
||||
|> assign(show_tracking?: true)
|
||||
|> assign_async(:characters, fn ->
|
||||
{:ok, map} =
|
||||
map_id
|
||||
|> WandererApp.MapRepo.get([:acls])
|
||||
|
||||
{:ok, character_settings} =
|
||||
case WandererApp.MapCharacterSettingsRepo.get_all_by_map(map_id) do
|
||||
{:ok, settings} -> {:ok, settings}
|
||||
_ -> {:ok, []}
|
||||
end
|
||||
|
||||
map
|
||||
|> WandererApp.Maps.load_characters(
|
||||
character_settings,
|
||||
current_user.id
|
||||
)
|
||||
end)
|
||||
|
||||
def add_character(socket), do: socket
|
||||
|
||||
def has_tracked_characters?([]), do: false
|
||||
def has_tracked_characters?(_user_characters), do: true
|
||||
|
||||
|
||||
@@ -221,8 +221,9 @@ defmodule WandererAppWeb.MapCoreEventHandler do
|
||||
socket
|
||||
|> put_flash(
|
||||
:error,
|
||||
"You should enable tracking for at least one character."
|
||||
)}
|
||||
"You should enable tracking for at least one character!"
|
||||
)
|
||||
|> MapCharactersEventHandler.add_character()}
|
||||
|
||||
def handle_ui_event(event, body, socket) do
|
||||
Logger.warning(fn -> "unhandled map ui event: #{event} #{inspect(body)}" end)
|
||||
@@ -448,23 +449,35 @@ defmodule WandererAppWeb.MapCoreEventHandler do
|
||||
|> filter_map_characters(user_character_eve_ids, user_permissions, options)
|
||||
|> Enum.map(&MapCharactersEventHandler.map_ui_character/1)
|
||||
|
||||
socket
|
||||
|> assign(
|
||||
map_loaded?: true,
|
||||
map_user_settings: map_user_settings,
|
||||
user_characters: user_character_eve_ids,
|
||||
has_tracked_characters?:
|
||||
MapCharactersEventHandler.has_tracked_characters?(user_character_eve_ids)
|
||||
)
|
||||
|> MapEventHandler.push_map_event(
|
||||
"init",
|
||||
initial_data
|
||||
|> Map.put(:characters, map_characters)
|
||||
)
|
||||
|> push_event("js-exec", %{
|
||||
to: "#map-loader",
|
||||
attr: "data-loaded"
|
||||
})
|
||||
has_tracked_characters? =
|
||||
MapCharactersEventHandler.has_tracked_characters?(user_character_eve_ids)
|
||||
|
||||
socket =
|
||||
socket
|
||||
|> assign(
|
||||
map_loaded?: true,
|
||||
map_user_settings: map_user_settings,
|
||||
user_characters: user_character_eve_ids,
|
||||
has_tracked_characters?: has_tracked_characters?
|
||||
)
|
||||
|> MapEventHandler.push_map_event(
|
||||
"init",
|
||||
initial_data
|
||||
|> Map.put(:characters, map_characters)
|
||||
)
|
||||
|> push_event("js-exec", %{
|
||||
to: "#map-loader",
|
||||
attr: "data-loaded"
|
||||
})
|
||||
|
||||
case not has_tracked_characters? && user_permissions.track_character do
|
||||
true ->
|
||||
socket
|
||||
|> MapCharactersEventHandler.add_character()
|
||||
|
||||
_ ->
|
||||
socket
|
||||
end
|
||||
end
|
||||
|
||||
defp handle_map_start_events(socket, map_id, events) do
|
||||
@@ -487,10 +500,6 @@ defmodule WandererAppWeb.MapCoreEventHandler do
|
||||
|
||||
:empty_tracked_characters ->
|
||||
socket
|
||||
|> put_flash(
|
||||
:info,
|
||||
"You should enable tracking for at least one character to work with map."
|
||||
)
|
||||
|
||||
:map_character_limit ->
|
||||
socket
|
||||
|
||||
@@ -6,7 +6,7 @@ defmodule WandererAppWeb.MapLive do
|
||||
|
||||
@impl true
|
||||
def mount(%{"slug" => map_slug} = _params, _session, socket) when is_connected?(socket) do
|
||||
Process.send_after(self(), %{event: :load_map}, Enum.random(10..500))
|
||||
Process.send_after(self(), %{event: :load_map}, Enum.random(10..800))
|
||||
|
||||
{:ok,
|
||||
socket
|
||||
@@ -76,13 +76,15 @@ defmodule WandererAppWeb.MapLive do
|
||||
|
||||
def handle_info(:not_all_characters_tracked, %{assigns: %{map_slug: map_slug}} = socket),
|
||||
do:
|
||||
{:noreply,
|
||||
socket
|
||||
|> put_flash(
|
||||
:error,
|
||||
"You should enable tracking for all characters that have access to this map first!"
|
||||
)
|
||||
|> push_navigate(to: ~p"/tracking/#{map_slug}")}
|
||||
WandererAppWeb.MapEventHandler.handle_ui_event(
|
||||
%{event: "add_character"},
|
||||
nil,
|
||||
socket
|
||||
|> put_flash(
|
||||
:error,
|
||||
"You should enable tracking for all characters that have access to this map first!"
|
||||
)
|
||||
)
|
||||
|
||||
@impl true
|
||||
def handle_info(info, socket),
|
||||
|
||||
@@ -92,12 +92,12 @@
|
||||
<.modal
|
||||
:if={assigns |> Map.get(:show_tracking?, false)}
|
||||
id="map-tracking-modal"
|
||||
title="Characters tracking"
|
||||
title="Track Characters"
|
||||
show
|
||||
on_cancel={JS.push("hide_tracking")}
|
||||
>
|
||||
<.async_result :let={characters} assign={@characters}>
|
||||
<:loading><span class="loading loading-dots loading-xs" />.</:loading>
|
||||
<:loading><span class="loading loading-dots loading-xs" /></:loading>
|
||||
<:failed :let={reason}><%= reason %></:failed>
|
||||
|
||||
<.table
|
||||
@@ -106,7 +106,7 @@
|
||||
class="h-[400px] !overflow-y-auto"
|
||||
rows={characters}
|
||||
>
|
||||
<:col :let={character} label="Tracked">
|
||||
<:col :let={character} label="Track">
|
||||
<label class="flex items-center gap-3">
|
||||
<input
|
||||
type="checkbox"
|
||||
|
||||
2
mix.exs
2
mix.exs
@@ -2,7 +2,7 @@ defmodule WandererApp.MixProject do
|
||||
use Mix.Project
|
||||
|
||||
@source_url "https://github.com/wanderer-industries/wanderer"
|
||||
@version "1.30.1"
|
||||
@version "1.31.0"
|
||||
|
||||
def project do
|
||||
[
|
||||
|
||||
@@ -755,11 +755,11 @@ groupID,categoryID,groupName,iconID,useBasePrice,anchored,anchorable,fittableNon
|
||||
944,9,Capital Industrial Ship Blueprint,None,1,0,0,0,1
|
||||
945,9,Industrial Command Ship Blueprint,None,1,0,0,0,1
|
||||
952,11,Mission Container,0,0,1,0,0,0
|
||||
954,32,Defensive Subsystem,None,0,0,0,0,1
|
||||
954,32,Defensive Subsystem,3631,0,0,0,0,1
|
||||
955,17,Depricated Subsystems,None,0,0,0,0,0
|
||||
956,32,Offensive Subsystem,None,0,0,0,0,1
|
||||
957,32,Propulsion Subsystem,None,0,0,0,0,1
|
||||
958,32,Core Subsystem,None,0,0,0,0,1
|
||||
956,32,Offensive Subsystem,3641,0,0,0,0,1
|
||||
957,32,Propulsion Subsystem,3646,0,0,0,0,1
|
||||
958,32,Core Subsystem,3636,0,0,0,0,1
|
||||
959,11,Deadspace Sleeper Sleepless Sentinel,0,0,0,0,0,0
|
||||
960,11,Deadspace Sleeper Awakened Sentinel,0,0,0,0,0,0
|
||||
961,11,Deadspace Sleeper Emergent Sentinel,0,0,0,0,0,0
|
||||
@@ -1529,6 +1529,8 @@ groupID,categoryID,groupName,iconID,useBasePrice,anchored,anchorable,fittableNon
|
||||
4811,9,Mercenary Den Blueprint,None,1,0,0,0,1
|
||||
4820,9,Mutaplasmid Blueprint,None,1,0,0,0,1
|
||||
4821,17,Atavum,None,1,0,0,0,1
|
||||
4824,17,Infomorph Systems,None,1,0,0,0,1
|
||||
4825,2,Local Beacon,None,0,1,0,0,0
|
||||
350858,350001,Infantry Weapons,None,1,0,0,0,0
|
||||
351064,350001,Infantry Dropsuits,None,1,0,0,0,0
|
||||
351121,350001,Infantry Modules,None,1,0,0,0,0
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user