diff --git a/messages/en.json b/messages/en.json index 95cbbe26..0d95a0d1 100644 --- a/messages/en.json +++ b/messages/en.json @@ -25,6 +25,7 @@ "extra_weapons": "Additional Weapons", "context_view_details": "View Details", + "context_view_in_database": "View in Database", "context_replace": "Replace", "context_remove": "Remove", diff --git a/messages/ja.json b/messages/ja.json index cd07aa35..c5c8e749 100644 --- a/messages/ja.json +++ b/messages/ja.json @@ -25,6 +25,7 @@ "extra_weapons": "追加武器", "context_view_details": "詳細を見る", + "context_view_in_database": "データベースで見る", "context_replace": "交換", "context_remove": "削除", diff --git a/src/lib/components/ui/menu/MenuItems.svelte b/src/lib/components/ui/menu/MenuItems.svelte index 6a405719..ea0eb263 100644 --- a/src/lib/components/ui/menu/MenuItems.svelte +++ b/src/lib/components/ui/menu/MenuItems.svelte @@ -3,22 +3,26 @@ interface MenuItemsProps { onViewDetails?: (() => void) | undefined + onViewInDatabase?: (() => void) | undefined onReplace?: (() => void) | undefined onRemove?: (() => void | Promise) | undefined canEdit?: boolean | undefined variant?: 'context' | 'dropdown' viewDetailsLabel?: string | undefined + viewInDatabaseLabel?: string | undefined replaceLabel?: string | undefined removeLabel?: string | undefined } let { onViewDetails, + onViewInDatabase, onReplace, onRemove, canEdit = false, variant = 'context', viewDetailsLabel = 'View Details', + viewInDatabaseLabel = 'View in Database', replaceLabel = 'Replace', removeLabel = 'Remove' }: MenuItemsProps = $props() @@ -36,6 +40,12 @@ {/if} +{#if onViewInDatabase} + + {viewInDatabaseLabel} + +{/if} + {#if canEdit} {#if onReplace} diff --git a/src/lib/components/units/CharacterUnit.svelte b/src/lib/components/units/CharacterUnit.svelte index d1889ffa..3f8b0f6c 100644 --- a/src/lib/components/units/CharacterUnit.svelte +++ b/src/lib/components/units/CharacterUnit.svelte @@ -2,6 +2,8 @@ import type { GridCharacter } from '$lib/types/api/party' import type { Party } from '$lib/types/api/party' import { getContext } from 'svelte' + import { page } from '$app/stores' + import { goto } from '$app/navigation' import Icon from '$lib/components/Icon.svelte' import UnitMenuContainer from '$lib/components/ui/menu/UnitMenuContainer.svelte' import MenuItems from '$lib/components/ui/menu/MenuItems.svelte' @@ -128,6 +130,14 @@ } } + function viewInDatabase() { + if (!item?.character?.granblueId) return + goto(`/database/characters/${item.character.granblueId}`) + } + + // Check if user can view database (role >= 7) + let canViewDatabase = $derived(($page.data.account?.role ?? 0) >= 7) + async function togglePerpetuity(e: Event) { e.stopPropagation() if (!item?.id || !ctx?.canEdit()) return @@ -224,11 +234,13 @@ {#snippet contextMenu()} @@ -237,11 +249,13 @@ {#snippet dropdownMenu()} diff --git a/src/lib/components/units/SummonUnit.svelte b/src/lib/components/units/SummonUnit.svelte index 09adc89c..037034b6 100644 --- a/src/lib/components/units/SummonUnit.svelte +++ b/src/lib/components/units/SummonUnit.svelte @@ -2,6 +2,8 @@ import type { GridSummon } from '$lib/types/api/party' import type { Party } from '$lib/types/api/party' import { getContext } from 'svelte' + import { page } from '$app/stores' + import { goto } from '$app/navigation' import Icon from '$lib/components/Icon.svelte' import UnitMenuContainer from '$lib/components/ui/menu/UnitMenuContainer.svelte' import MenuItems from '$lib/components/ui/menu/MenuItems.svelte' @@ -102,6 +104,13 @@ } } + function viewInDatabase() { + if (!item?.summon?.granblueId) return + goto(`/database/summons/${item.summon.granblueId}`) + } + + // Check if user can view database (role >= 7) + let canViewDatabase = $derived(($page.data.account?.role ?? 0) >= 7) @@ -134,11 +143,13 @@ {#snippet contextMenu()} @@ -147,11 +158,13 @@ {#snippet dropdownMenu()} diff --git a/src/lib/components/units/WeaponUnit.svelte b/src/lib/components/units/WeaponUnit.svelte index b58ac95b..49aa4945 100644 --- a/src/lib/components/units/WeaponUnit.svelte +++ b/src/lib/components/units/WeaponUnit.svelte @@ -2,6 +2,8 @@ import type { GridWeapon } from '$lib/types/api/party' import type { Party } from '$lib/types/api/party' import { getContext } from 'svelte' + import { page } from '$app/stores' + import { goto } from '$app/navigation' import Icon from '$lib/components/Icon.svelte' import UnitMenuContainer from '$lib/components/ui/menu/UnitMenuContainer.svelte' import MenuItems from '$lib/components/ui/menu/MenuItems.svelte' @@ -135,6 +137,14 @@ ctx.openPicker({ type: 'weapon', position, item }) } } + + function viewInDatabase() { + if (!item?.weapon?.granblueId) return + goto(`/database/weapons/${item.weapon.granblueId}`) + } + + // Check if user can view database (role >= 7) + let canViewDatabase = $derived(($page.data.account?.role ?? 0) >= 7)
@@ -206,11 +218,13 @@ {#snippet dropdownMenu()}