121 lines
3.0 KiB
TypeScript
Raw Normal View History

2024-10-23 00:29:37 +09:00
import { Archetype, Group, ProcessedOperator } from '../types/operators'
2024-09-27 23:46:45 +09:00
2024-09-28 00:41:52 +09:00
export function processOperators(
data: Group[],
selectedArchetypes: Archetype[],
): ProcessedOperator[] {
2024-10-23 00:29:37 +09:00
const hasSelectedArchetypes = selectedArchetypes?.length > 0
2024-09-28 00:41:52 +09:00
return data?.flatMap((group) => {
const groupArchetype = group.name.slice(0, -1) as Archetype
const isSelectedArchetype = hasSelectedArchetypes
? selectedArchetypes.includes(groupArchetype)
: true
if (isSelectedArchetype) {
return group.operators.map((operator) => ({
id: operator.id.toString(),
image: operator.image_400_jpeg_url,
gif: operator.image_400_url,
2024-11-02 02:08:19 +09:00
pixelated: operator.image_pixalated_url,
2024-11-01 18:16:16 +09:00
name: operator.archetype__name,
2024-09-28 01:26:45 +09:00
comp: operator.comp,
background: operator.background,
skin: operator.skin,
helmet: operator.helmet,
jacket: operator.jacket,
archetype: groupArchetype,
2024-09-28 00:41:52 +09:00
isStaked: false,
isPinned: false,
}))
}
return []
})
2024-09-27 23:46:45 +09:00
}
2024-10-23 00:29:37 +09:00
export function processMyOperators(operators: any[]) {
if (!operators) {
return []
}
return operators?.map((operator) => ({
2024-10-23 02:56:39 +09:00
id: operator.id,
2024-10-23 00:29:37 +09:00
arcgetypeId: operator.archetype_id,
image: operator.image_400_jpeg_url,
gif: operator.image_400_url,
name: operator.name,
2024-11-02 14:11:51 +09:00
stakingXPPerBlock: operator.staking_xp_per_block,
2024-10-23 00:29:37 +09:00
comp: operator.comp,
background: operator.background,
skin: operator.skin,
helmet: operator.helmet,
jacket: operator.jacket,
2024-11-01 18:16:16 +09:00
archetype: operator.archetype__name,
2024-10-23 00:29:37 +09:00
isStaked: operator.is_currently_staked,
isPinned: operator.is_user_pinned,
2024-11-02 02:08:19 +09:00
pixelated: operator.image_pixalated_url,
2024-10-23 00:29:37 +09:00
}))
}
2024-09-27 23:46:45 +09:00
export function getRandomSubset<T>(array: T[], count: number): T[] {
const shuffled = array?.sort(() => 0.5 - Math.random())
return shuffled?.slice(0, count)
}
2024-09-28 01:26:45 +09:00
export function getAllIds(groups: Group[]): number[] {
const ids: number[] = []
// Extract group IDs
groups.forEach((group) => {
ids.push(group.id)
// Extract operator IDs within each group
group.operators.forEach((operator) => {
ids.push(operator.id)
})
})
return ids
}
export function findOperatorById(
operators: ProcessedOperator[],
operatorId: number | string,
): ProcessedOperator | undefined {
return operators.find(
(operator) => String(operator.id) === String(operatorId),
)
}
2024-10-03 14:04:28 +09:00
export function shuffleOperators(
array: ProcessedOperator[],
): ProcessedOperator[] {
for (let i = array?.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1))
;[array[i], array[j]] = [array[j], array[i]]
}
return array
}
2024-10-04 09:26:36 +09:00
export function extractUniqueValues(data: any, field: string) {
if (!data || !field) {
return []
}
const uniqueValues = new Set()
function traverse(item: any) {
if (item[field]) {
uniqueValues.add(item[field])
}
if (item.operators && Array.isArray(item.operators)) {
item.operators?.forEach(traverse)
}
}
data.forEach(traverse)
return Array.from(uniqueValues)
}