Skip to content

Commit 03c2e97

Browse files
committed
Refactor Skills components to use functional style
Converted Skills and SkillContainer components from class-based to functional components using hooks. Centralized skill image imports in a new index.tsx file for better maintainability and updated image references accordingly.
1 parent 6e3bc86 commit 03c2e97

3 files changed

Lines changed: 60 additions & 38 deletions

File tree

src/Components/Skills/SkillContainer/SkillContainer.tsx

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,49 @@
1-
import React from 'react';
2-
class Skills extends React.Component {
3-
constructor(props) {
4-
super(props)
5-
this.state = {}
6-
}
1+
import './SkillContainer.css';
72

8-
render() {
9-
return (
10-
<div className="skill-container">
11-
<h1>{`${this.props.skillName} lvl ${(this.props.xp > this.props.levelInfo.val) ? this.props.levelInfo.id : this.props.levelInfo.id - 1} `}</h1>
12-
<span>
13-
Current XP: {this.props.xp} <br />
14-
Level Up in: { (this.props.xp > 15000) ? 0 : (this.props.levelInfo.val - this.props.xp)}<br />
15-
Max level in: { (this.props.xp > 15000) ? "Maxed" : 15000 - this.props.xp}
16-
</span>
17-
<img src={this.props.skillImg} alt={this.props.index} ></img>
3+
type SkillProps = {
4+
skillImg: string;
5+
skillName: string;
6+
xp: number;
7+
levelInfo: {
8+
id: number;
9+
val: number;
10+
};
11+
};
12+
13+
const Skills = ({
14+
skillImg,
15+
skillName,
16+
xp,
17+
levelInfo
18+
}: SkillProps) => {
19+
const currentLevel = (xp > levelInfo.val) ? levelInfo.id : levelInfo.id - 1;
20+
const xpToNextLevel = (xp > 15000) ? 0 : (levelInfo.val - xp);
21+
const xpToMax = (xp > 15000) ? "Maxed" : 15000 - xp;
22+
23+
return (
24+
<div className="skill-container">
25+
<p className="skill-container__title">
26+
{`${skillName} lvl ${currentLevel}`}
27+
</p>
28+
<div className="skill-container__stats">
29+
<div className="skill-container__stats-line">
30+
Current XP: {xp}
31+
</div>
32+
<div className="skill-container__stats-line">
33+
Level Up in: {xpToNextLevel}
34+
</div>
35+
<div className="skill-container__stats-line">
36+
Max level in: {xpToMax}
37+
</div>
1838
</div>
19-
);
20-
}
21-
}
39+
<img
40+
src={skillImg}
41+
alt={skillName}
42+
className="skill-container__icon"
43+
title={`${skillName} - Level ${currentLevel}`}
44+
/>
45+
</div>
46+
);
47+
};
2248

2349
export default Skills;
24-

src/Components/Skills/Skills.tsx

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,27 @@
1-
import React from 'react';
1+
import { useState } from 'react'
22
import SkillContainer from './SkillContainer/SkillContainer'
3-
import Fa_img from '../../Media/Skills/Farming.png'
4-
import Mi_img from '../../Media/Skills/Mining.png'
5-
import Fo_img from '../../Media/Skills/Foraging.png'
6-
import Fi_img from '../../Media/Skills/Fishing.png'
7-
import Co_img from '../../Media/Skills/Combat.png'
8-
class Skills extends React.Component {
9-
constructor(props) {
10-
super(props)
11-
this.state = {
12-
skillImg: [Fa_img, Fi_img, Fo_img, Mi_img, Co_img],
13-
skills: this.props.xp
14-
}
15-
}
3+
import {Farming, Mining, Foraging, Fishing, Combat} from '@media/Skills'
4+
5+
const Skills = (props) => {
6+
console.log(props)
7+
let [skills, setSkills] = useState(props.xp)
8+
let [skillImg, setSkillImg] = useState([Farming, Fishing, Foraging, Mining, Combat])
169

17-
render() {
1810
return (
1911
<section className="stats-container">
2012
<div className="skill-info">
21-
{this.state.skills.map((item, i) => (i === 5) ? "" :
13+
{skills.map((item, i: number) => (i === 5) ? "" :
2214
<SkillContainer
2315
key={i}
2416
index={i}
25-
skillImg={this.state.skillImg[i]}
17+
skillImg={skillImg[i]}
2618
skillName={item.skill}
2719
xp={item.xp}
2820
levelInfo={item.levelInfo}
2921
/>)}
3022
</div>
3123
</section>
3224
);
33-
}
3425
}
3526

3627
export default Skills;

src/Media/Skills/index.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// Export all tab images
2+
export { default as Combat } from '@media/skills/Combat.png'
3+
export { default as Farming } from '@media/skills/Farming.png'
4+
export { default as Fishing } from '@media/skills/Fishing.png'
5+
export { default as Foraging } from '@media/skills/Foraging.png'
6+
export { default as Mining } from '@media/skills/Mining.png'

0 commit comments

Comments
 (0)