Skip to content

Commit 277fa99

Browse files
committed
Add level progress using circular progress bar
1 parent be4b01e commit 277fa99

File tree

6 files changed

+22
-2
lines changed

6 files changed

+22
-2
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"dependencies": {
1111
"core-js": "^3.8.3",
1212
"vue": "^3.4.15",
13+
"vue-ellipse-progress": "^2.1.2",
1314
"vuex": "^4.1.0"
1415
},
1516
"devDependencies": {

src/components/TodoList.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<br />
66
<p>XP: {{ xps }}</p>
77
<br />
8+
<ve-progress :progress="progresses">Level {{ levels }}</ve-progress>
89
<ul class="todos">
910
<li v-for="todo in todos" :key="todo.newId" class="todo">
1011
<span
@@ -76,6 +77,9 @@ export default defineComponent({
7677
xps() {
7778
return store.getters.getXp; //get current xp
7879
},
80+
progresses() {
81+
return store.getters.getProgress; //get curent progress
82+
},
7983
},
8084
methods: {
8185
completeTodo: function (id: number) {

src/main.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import { createApp, h } from "vue";
22
import App from "./App.vue";
33
import store from "./store";
4+
import veProgress from "vue-ellipse-progress";
45

56
createApp({ render: () => h(App) })
67
.use(store)
8+
.use(veProgress)
79
.mount("#app");
810
store.dispatch("loadUser"); //load user data
911
store.dispatch("loadTodos"); //load task list data

src/store/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ export default createStore({
66
user: {
77
level: 0,
88
xp: 0,
9+
progress: 0,
910
},
1011
},
1112
getters: {
1213
getTodos: (state) => state.todos, //get task list
1314
getXp: (state) => state.user.xp, //get user xp
1415
getLevel: (state) => state.user.level, //get user level
16+
getProgress: (state) => state.user.progress, //get user level progress
1517
},
1618
mutations: {
1719
updateXp: (state, payload) => {
@@ -20,6 +22,11 @@ export default createStore({
2022
);
2123
const xp = Math.max(task.difficulty * task.priority, 1); //get at least 1 xp when the task is completed
2224
state.user.xp += xp;
25+
state.user.level = Math.floor(Math.pow(state.user.xp, 1 / 3)); //calculate level based on how many xp
26+
state.user.progress =
27+
((state.user.xp - Math.pow(state.user.level, 3)) /
28+
(Math.pow(state.user.level + 1, 3) - Math.pow(state.user.level, 3))) *
29+
100; //calculate level progress
2330
},
2431
create_Todo: (state, payload) => {
2532
const createTask = {

src/typings/global.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
declare module "vue-ellipse-progress";

tsconfig.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
{
22
"compilerOptions": {
3+
"typeRoots": [
4+
"./types",
5+
"./node_modules/@types"
6+
],
37
"target": "esnext",
48
"module": "esnext",
59
"strict": true,
@@ -35,6 +39,7 @@
3539
"tests/**/*.tsx"
3640
],
3741
"exclude": [
38-
"node_modules"
42+
"node_modules",
43+
"typings"
3944
]
40-
}
45+
}

0 commit comments

Comments
 (0)