import { BigNumber } from '@ethersproject/bignumber'
import { Row } from '@past3lle/components'
import {
SkillForgeW3AppConfig,
SkillId,
SkillRarity,
useSkillForgeBalancesAtom,
useSkillForgeMetadataMapReadAtom
} from '@past3lle/skillforge-web3'
import { convertToRomanNumerals } from '@past3lle/utils'
import React, { useMemo } from 'react'
import { CANVAS_CONTAINER_ID, MINIMUM_COLLECTION_BOARD_SIZE } from '../../constants/skills'
import { useVectorsAtom } from '../../state/Skills'
import { SkillContainerAbsolute, SkillpointHeader } from '../Common'
import { Skillpoint } from '../Skillpoint'
import { LightningCanvas } from './canvasApi'
import { Vector } from './canvasApi/api/vector'
import { SkillCanvasContainer, SkillInnerCanvasContainer } from './styleds'
export interface SkillsCanvasProps {
options?: SkillForgeW3AppConfig['skillOptions']
}
export function SkillsCanvas(props: SkillsCanvasProps) {
const [{ vectors }] = useVectorsAtom()
const [metadataMap] = useSkillForgeMetadataMapReadAtom()
const [{ balances }] = useSkillForgeBalancesAtom()
const VectorsMap = useMemo(
() =>
vectors.map(({ skillId, vector }) => {
if (!vector) return
const skillBalance = skillId && balances?.[skillId]
const missingSkill = !skillBalance || !skillId
const zeroBalance = !!skillBalance && BigNumber.from(skillBalance).isZero()
const skillpointProps = !missingSkill
? {
key: skillId,
metadata: metadataMap[skillId],
hasSkill: !zeroBalance
}
: { key: `EMPTY-${vector.X1}-${vector.Y1}`, metadata: EMPTY_METADATA, hasSkill: true }
return (
)
}),
[balances, metadataMap, props.options?.metadataFetchOptions?.gatewayUris, vectors]
)
return (
{vectors.slice(0, MINIMUM_COLLECTION_BOARD_SIZE).map(({ vector }, idx) => {
const idxToRoman = convertToRomanNumerals(idx + 1)
if (!vector) return null
return (
{idxToRoman}
)
})}
{VectorsMap}
{/* CANVAS */}
)
}
const EMPTY_METADATA = {
name: 'EMPTY_SKILL',
description: 'Empty skill',
image: '',
properties: {
id: 'EMPTY-EMPTY' as SkillId,
rarity: 'common' as SkillRarity,
shopifyId: '0x0',
dependencies: []
}
}