diff --git a/src/app/item-popup/ItemDetails.tsx b/src/app/item-popup/ItemDetails.tsx index 1ed4aa9324..50f585b624 100644 --- a/src/app/item-popup/ItemDetails.tsx +++ b/src/app/item-popup/ItemDetails.tsx @@ -1,6 +1,8 @@ import { DestinyTooltipText } from 'app/dim-ui/DestinyTooltipText'; +import { PressTip } from 'app/dim-ui/PressTip'; import { t, tl } from 'app/i18next-t'; import { createItemContextSelector, storesSelector } from 'app/inventory/selectors'; +import { getCraftedSocket } from 'app/inventory/store/crafted'; import { isTrialsPassage } from 'app/inventory/store/objectives'; import { applySocketOverrides, useSocketOverrides } from 'app/inventory/store/override-sockets'; import { getStore } from 'app/inventory/stores-helpers'; @@ -10,7 +12,7 @@ import { ActivityModifier } from 'app/progress/ActivityModifier'; import Objective from 'app/progress/Objective'; import { Reward } from 'app/progress/Reward'; import { RootState } from 'app/store/types'; -import { getItemKillTrackerInfo, isD1Item } from 'app/utils/item-utils'; +import { getItemCurrentKillTrackerInfo, getItemKillTrackers, isD1Item } from 'app/utils/item-utils'; import { SingleVendorSheetContext } from 'app/vendors/single-vendor/SingleVendorSheetContainer'; import clsx from 'clsx'; import { BucketHashes, ItemCategoryHashes } from 'data/d2/generated-enums'; @@ -55,7 +57,14 @@ export default function ItemDetails({ const ownerStore = useSelector((state: RootState) => getStore(storesSelector(state), item.owner)); - const killTrackerInfo = getItemKillTrackerInfo(item); + const killTrackerInfo = getItemCurrentKillTrackerInfo(item); + const killTrackers = getItemKillTrackers(item); + const shapedDateObjective = + item.crafted && + item.craftedInfo && + getCraftedSocket(item)?.plugged?.plugObjectives.find( + (o) => o.progress === item.craftedInfo?.craftedDate, + ); const showVendor = use(SingleVendorSheetContext); @@ -103,15 +112,40 @@ export default function ItemDetails({ )} - {defs.isDestiny2 && } - - {defs.isDestiny2 && } - - {defs.isDestiny2 && } - - {killTrackerInfo && defs.isDestiny2 && ( - - )} + 1) && ( + <> + {shapedDateObjective && } + {shapedDateObjective && killTrackers.length > 1 &&
} + {killTrackers.length > 1 && + killTrackers.map((kt) => ( + + ))} + + ) + } + placement="bottom" + > + {defs.isDestiny2 && } + + {defs.isDestiny2 && } + + {defs.isDestiny2 && } + + {killTrackerInfo && defs.isDestiny2 && ( + + )} +
{item.classified &&
{t('ItemService.Classified2')}
} diff --git a/src/app/item-popup/WeaponCraftedInfo.tsx b/src/app/item-popup/WeaponCraftedInfo.tsx index f1e4af90b1..c2d9f371fe 100644 --- a/src/app/item-popup/WeaponCraftedInfo.tsx +++ b/src/app/item-popup/WeaponCraftedInfo.tsx @@ -1,9 +1,6 @@ -import { PressTip } from 'app/dim-ui/PressTip'; import { t } from 'app/i18next-t'; import { DimItem } from 'app/inventory/item-types'; -import { getCraftedSocket } from 'app/inventory/store/crafted'; -import { KillTrackerInfo } from 'app/item-popup/KillTracker'; -import Objective, { +import { ObjectiveDescription, ObjectiveProgress, ObjectiveProgressBar, @@ -11,8 +8,6 @@ import Objective, { } from 'app/progress/Objective'; import { percentWithSingleDecimal } from 'app/shell/formatters'; import { AppIcon, enhancedIcon, shapedIcon } from 'app/shell/icons'; -import { filterMap } from 'app/utils/collections'; -import { isKillTrackerSocket, plugToKillTracker } from 'app/utils/item-utils'; import * as styles from './WeaponCraftedInfo.m.scss'; /** @@ -42,39 +37,10 @@ export function WeaponCraftedInfo({ item, className }: { item: DimItem; classNam } function CraftedDataMedallion({ item }: { item: DimItem }) { - const killTrackers = filterMap( - item.sockets?.allSockets.find((s) => isKillTrackerSocket(s))?.plugOptions ?? [], - (p) => plugToKillTracker(p), - ); - const shapedDateObjective = getCraftedSocket(item)?.plugged?.plugObjectives.find( - (o) => o.progress === item.craftedInfo?.craftedDate, - ); - return ( - - {shapedDateObjective && ( - <> - -
- - )} - {killTrackers.map((kt) => ( - - ))} - - } - > - -
+ ); } diff --git a/src/app/organizer/Columns.tsx b/src/app/organizer/Columns.tsx index 2054cb7d25..6fcfd6e587 100644 --- a/src/app/organizer/Columns.tsx +++ b/src/app/organizer/Columns.tsx @@ -47,8 +47,8 @@ import { Comparator, compareBy, primitiveComparator } from 'app/utils/comparator import { getArmor3StatFocus, getArmor3TuningStat, + getItemCurrentKillTrackerInfo, getItemDamageShortName, - getItemKillTrackerInfo, getItemYear, getMasterworkStatNames, getSpecialtySocketMetadata, @@ -841,11 +841,12 @@ export function getColumns( id: 'killTracker', header: t('Organizer.Columns.KillTracker'), value: (item) => { - const killTrackerInfo = getItemKillTrackerInfo(item); + const killTrackerInfo = getItemCurrentKillTrackerInfo(item); return killTrackerInfo?.count; }, cell: (_val, item) => { - const killTrackerInfo = getItemKillTrackerInfo(item); + const killTrackerInfo = getItemCurrentKillTrackerInfo(item); + // TODO add additional kill trackers to display if present return ( killTrackerInfo && ( diff --git a/src/app/search/items/search-filters/range-numeric.ts b/src/app/search/items/search-filters/range-numeric.ts index 75ed00064c..bd4e8ea161 100644 --- a/src/app/search/items/search-filters/range-numeric.ts +++ b/src/app/search/items/search-filters/range-numeric.ts @@ -1,5 +1,5 @@ import { tl } from 'app/i18next-t'; -import { getItemKillTrackerInfo, getItemYear } from 'app/utils/item-utils'; +import { getItemCurrentKillTrackerInfo, getItemYear } from 'app/utils/item-utils'; import { ItemFilterDefinition } from '../item-filter-types'; const simpleRangeFilters: ItemFilterDefinition[] = [ @@ -41,7 +41,7 @@ const simpleRangeFilters: ItemFilterDefinition[] = [ filter: ({ filterValue, compare }) => (item) => { - const killTrackerInfo = getItemKillTrackerInfo(item); + const killTrackerInfo = getItemCurrentKillTrackerInfo(item); return Boolean( killTrackerInfo && (!filterValue.length || filterValue === killTrackerInfo.type) && diff --git a/src/app/utils/item-utils.ts b/src/app/utils/item-utils.ts index 42b0f035a9..92d001546f 100644 --- a/src/app/utils/item-utils.ts +++ b/src/app/utils/item-utils.ts @@ -34,7 +34,7 @@ import { PlugCategoryHashes, StatHashes, } from 'data/d2/generated-enums'; -import { objectifyArray } from './collections'; +import { filterMap, objectifyArray } from './collections'; import { getArmor3TuningSocket } from './socket-utils'; // damage is a mess! @@ -215,9 +215,14 @@ export function plugToKillTracker(killTrackerPlug: DimPlug) { } /** returns an item's kill tracker info */ -export const getItemKillTrackerInfo = (item: DimItem): KillTracker | null | undefined => +export const getItemCurrentKillTrackerInfo = (item: DimItem): KillTracker | null | undefined => getSocketKillTrackerInfo(getKillTrackerSocket(item)); +export const getItemKillTrackers = (item: DimItem): KillTracker[] => + filterMap(item.sockets?.allSockets.find((s) => isKillTrackerSocket(s))?.plugOptions ?? [], (p) => + plugToKillTracker(p), + ); + const d1YearSourceHashes = { // tTK Variks CoE FoTL Kings Fall year2: [2659839637, 512830513, 1537575125, 3475869915, 1662673928],