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],