diff --git a/config/i18n.json b/config/i18n.json
index 53e8ef422d..0b572e9b51 100644
--- a/config/i18n.json
+++ b/config/i18n.json
@@ -901,7 +901,8 @@
"Fashion": "Fashion (shaders & ornaments)",
"Subclass": "Subclass customization",
"LoadoutOptimizer": "Loadout Optimizer settings",
- "Notes": "Notes"
+ "Notes": "Notes",
+ "SocketOverrides": "Subclass/artifact customization"
},
"ShareLoadout": "Share",
"ShowModPlacement": "Show Mod Placement",
diff --git a/src/app/loadout/loadout-share/LoadoutShareSheet.tsx b/src/app/loadout/loadout-share/LoadoutShareSheet.tsx
index 7fcf77a4ef..6bf5d7f903 100644
--- a/src/app/loadout/loadout-share/LoadoutShareSheet.tsx
+++ b/src/app/loadout/loadout-share/LoadoutShareSheet.tsx
@@ -77,7 +77,7 @@ export default function LoadoutShareSheet({
const numMods = loadout.parameters?.mods?.length ?? 0;
const numItems = count(loadout.items, (i) => !i.socketOverrides);
const hasFashion = Boolean(loadout.parameters?.modsByBucket);
- const hasSubclass = loadout.items.some((i) => i.equip && i.socketOverrides);
+ const hasOverrides = loadout.items.some((i) => i.equip && i.socketOverrides);
const hasLoParams = Boolean(
loadout.parameters &&
(loadout.parameters.query ||
@@ -106,9 +106,9 @@ export default function LoadoutShareSheet({
{t('Loadouts.Share.Summary')}
{numItems > 0 && - {t('Loadouts.Share.NumItems', { count: numItems })}
}
- {numMods > 0 && - {t('Loadouts.Share.NumMods', { count: numItems })}
}
+ {numMods > 0 && - {t('Loadouts.Share.NumMods', { count: numMods })}
}
{hasFashion && - {t('Loadouts.Share.Fashion')}
}
- {hasSubclass && - {t('Loadouts.Share.Subclass')}
}
+ {hasOverrides && - {t('Loadouts.Share.SocketOverrides')}
}
{hasLoParams && - {t('Loadouts.Share.LoadoutOptimizer')}
}
{loadout.notes && - {t('Loadouts.Share.Notes')}
}
diff --git a/src/app/loadout/spreadsheets.ts b/src/app/loadout/spreadsheets.ts
index 73634f964f..ed60767567 100644
--- a/src/app/loadout/spreadsheets.ts
+++ b/src/app/loadout/spreadsheets.ts
@@ -82,7 +82,9 @@ export function downloadLoadoutsCsv(): ThunkResult {
const fragments = subclassPlugs.filter((p) =>
fragmentSocketCategoryHashes.includes(p.socketCategoryHash),
);
- // TODO artifact and artifactPlugs
+ const artifact = resolvedLoadout.resolvedLoadoutItems.find(
+ (item) => item.item.bucket.hash === BucketHashes.Artifacts,
+ );
const stats: CsvRow = {};
const equippedArmor = resolvedLoadout.resolvedLoadoutItems.filter(
(i) => i.loadoutItem.equip && i.item.bucket.inArmor,
@@ -122,7 +124,12 @@ export function downloadLoadoutsCsv(): ThunkResult {
);
const equippedItems = resolvedLoadout.resolvedLoadoutItems
- .filter((i) => i.loadoutItem.equip && i.item.bucket.hash !== BucketHashes.Subclass)
+ .filter(
+ (i) =>
+ i.loadoutItem.equip &&
+ i.item.bucket.hash !== BucketHashes.Subclass &&
+ i.item.bucket.hash !== BucketHashes.Artifacts,
+ )
.sort(sortItems);
const equippedItemValues = Object.fromEntries(
@@ -163,9 +170,16 @@ export function downloadLoadoutsCsv(): ThunkResult {
Aspects: localizeResolvedPlugs(aspects),
Fragments: localizeResolvedPlugs(fragments),
Mods: mods.map((mod) => mod.displayProperties.name),
- 'Artifact Season': loadout.parameters?.artifactUnlocks?.seasonNumber,
- 'Artifact Unlocks': loadout.parameters?.artifactUnlocks?.unlockedItemHashes.map(
- (modHash) => defs.InventoryItem.get(modHash)?.displayProperties.name,
+ 'Artifact Season':
+ artifact?.item.name || loadout.parameters?.artifactUnlocks?.seasonNumber || '',
+ 'Artifact Unlocks': (
+ artifact?.item.sockets?.allSockets?.map(
+ (s) => artifact?.loadoutItem.socketOverrides?.[s.socketIndex] || 0,
+ ) ||
+ loadout.parameters?.artifactUnlocks?.unlockedItemHashes ||
+ []
+ ).map(
+ (modHash) => (modHash && defs.InventoryItem.get(modHash)?.displayProperties.name) || '',
),
};
});
diff --git a/src/locale/en.json b/src/locale/en.json
index 56178dc7e1..4b6119415a 100644
--- a/src/locale/en.json
+++ b/src/locale/en.json
@@ -948,7 +948,7 @@
"NumMods_one": "{{count}} mod",
"NumMods_other": "{{count}} mods",
"Placeholder": "Loading share link",
- "Subclass": "Subclass customization",
+ "SocketOverrides": "Subclass/artifact customization",
"Summary": "Share this loadout containing:",
"Title": "Share \"{{name}}\""
},