mirror of
https://github.com/vkaelin/LeagueStats.git
synced 2026-03-25 21:07:27 +00:00
refactor: use CDragon data for everything instead of DDragon
This commit is contained in:
parent
4565eece17
commit
7a199d3194
14 changed files with 349 additions and 2057 deletions
|
|
@ -1,7 +1,10 @@
|
||||||
<template>
|
<template>
|
||||||
<transition name="slide">
|
<transition name="slide">
|
||||||
<div v-if="data.status === 'loaded' && detailsOpen" class="bg-blue-800 rounded-b-lg">
|
<div v-if="data.status === 'loaded' && detailsOpen" class="bg-blue-800 rounded-b-lg">
|
||||||
<DetailedMatchTeam :data="allyTeam" :all-players="[...allyTeam.players, ...enemyTeam.players]" />
|
<DetailedMatchTeam
|
||||||
|
:data="allyTeam"
|
||||||
|
:all-players="[...allyTeam.players, ...enemyTeam.players]"
|
||||||
|
/>
|
||||||
|
|
||||||
<div class="px-3 py-2 flex justify-between items-start">
|
<div class="px-3 py-2 flex justify-between items-start">
|
||||||
<DetailedMatchGlobalStats :team="allyTeam" :ally-team="true" />
|
<DetailedMatchGlobalStats :team="allyTeam" :ally-team="true" />
|
||||||
|
|
@ -9,7 +12,10 @@
|
||||||
<DetailedMatchGlobalStats :team="enemyTeam" :ally-team="false" />
|
<DetailedMatchGlobalStats :team="enemyTeam" :ally-team="false" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<DetailedMatchTeam :data="enemyTeam" :all-players="[...allyTeam.players, ...enemyTeam.players]" />
|
<DetailedMatchTeam
|
||||||
|
:data="enemyTeam"
|
||||||
|
:all-players="[...allyTeam.players, ...enemyTeam.players]"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div v-else-if="data.status === 'loading' && detailsOpen">
|
<div v-else-if="data.status === 'loading' && detailsOpen">
|
||||||
<p class="bg-blue-800 py-5 text-blue-100 text-lg font-semibold">Loading...</p>
|
<p class="bg-blue-800 py-5 text-blue-100 text-lg font-semibold">Loading...</p>
|
||||||
|
|
@ -18,7 +24,6 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapGetters } from 'vuex'
|
|
||||||
import DetailedMatchGlobalStats from '@/components/Match/DetailedMatchGlobalStats.vue'
|
import DetailedMatchGlobalStats from '@/components/Match/DetailedMatchGlobalStats.vue'
|
||||||
import DetailedMatchTeam from '@/components/Match/DetailedMatchTeam.vue'
|
import DetailedMatchTeam from '@/components/Match/DetailedMatchTeam.vue'
|
||||||
import SwitchToggle from '@/components/SwitchToggle.vue'
|
import SwitchToggle from '@/components/SwitchToggle.vue'
|
||||||
|
|
@ -46,8 +51,7 @@ export default {
|
||||||
},
|
},
|
||||||
enemyTeam() {
|
enemyTeam() {
|
||||||
return this.data.blueTeam.players.some(p => p.name.toLowerCase() === this.$route.params.name.toLowerCase()) ? this.data.redTeam : this.data.blueTeam
|
return this.data.blueTeam.players.some(p => p.name.toLowerCase() === this.$route.params.name.toLowerCase()) ? this.data.redTeam : this.data.blueTeam
|
||||||
},
|
}
|
||||||
...mapGetters('ddragon', ['version']),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
class="relative ban inline-block border-2 rounded-full"
|
class="relative ban inline-block border-2 rounded-full"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
:style="[ban.champion.id ? {backgroundImage: `url('https://ddragon.leagueoflegends.com/cdn/${version}/img/champion/${ban.champion.id}.png')`} : '']"
|
:style="[ban.champion.id ? {backgroundImage: `url('${ban.champion.icon}')`} : '']"
|
||||||
class="ban-img w-6 h-6 bg-cover bg-center bg-blue-1000 rounded-full"
|
class="ban-img w-6 h-6 bg-cover bg-center bg-blue-1000 rounded-full"
|
||||||
></div>
|
></div>
|
||||||
<div
|
<div
|
||||||
|
|
@ -61,8 +61,6 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapGetters } from 'vuex'
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
team: {
|
team: {
|
||||||
|
|
@ -84,8 +82,7 @@ export default {
|
||||||
},
|
},
|
||||||
bgColor() {
|
bgColor() {
|
||||||
return this.allyTeam ? 'bg-teal-500' : 'bg-red-500'
|
return this.allyTeam ? 'bg-teal-500' : 'bg-red-500'
|
||||||
},
|
}
|
||||||
...mapGetters('ddragon', ['version']),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@
|
||||||
></div>
|
></div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
:style="{backgroundImage: `url('https://ddragon.leagueoflegends.com/cdn/${version}/img/champion/${player.champion.id}.png')`}"
|
:style="{backgroundImage: `url('${player.champion.icon}')`}"
|
||||||
class="ml-2 relative w-8 h-8 bg-cover bg-center bg-blue-1000 rounded-full"
|
class="ml-2 relative w-8 h-8 bg-cover bg-center bg-blue-1000 rounded-full"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
|
|
@ -155,7 +155,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapGetters, mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
import MatchItems from '@/components/Match/MatchItems'
|
import MatchItems from '@/components/Match/MatchItems'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|
@ -184,7 +184,6 @@ export default {
|
||||||
statsFormat() {
|
statsFormat() {
|
||||||
return this.percentSettings === 'true' ? 'percentStats' : 'stats'
|
return this.percentSettings === 'true' ? 'percentStats' : 'stats'
|
||||||
},
|
},
|
||||||
...mapGetters('ddragon', ['version']),
|
|
||||||
...mapState({
|
...mapState({
|
||||||
percentSettings: state => state.settings.percent
|
percentSettings: state => state.settings.percent
|
||||||
}),
|
}),
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
>LVL {{ data.level }}</div>
|
>LVL {{ data.level }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
:style="{backgroundImage: `url('https://ddragon.leagueoflegends.com/cdn/${version}/img/champion/${data.champion.id}.png')`}"
|
:style="{backgroundImage: `url('${data.champion.icon}')`}"
|
||||||
class="ml-2 w-16 h-16 crop-champion bg-blue-1000 rounded-lg"
|
class="ml-2 w-16 h-16 crop-champion bg-blue-1000 rounded-lg"
|
||||||
></div>
|
></div>
|
||||||
<div class="ml-2 flex flex-col justify-around">
|
<div class="ml-2 flex flex-col justify-around">
|
||||||
|
|
@ -56,7 +56,9 @@
|
||||||
<span class>/</span>
|
<span class>/</span>
|
||||||
<span class>{{ data.stats.assists }}</span>
|
<span class>{{ data.stats.assists }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="relative z-30 mt-2 text-white text-xs font-extrabold">{{ data.stats.kda }} KDA</div>
|
<div
|
||||||
|
class="relative z-30 mt-2 text-white text-xs font-extrabold"
|
||||||
|
>{{ data.stats.kda }} KDA</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -105,7 +107,7 @@
|
||||||
>{{ ally.name }}</div>
|
>{{ ally.name }}</div>
|
||||||
<div
|
<div
|
||||||
:class="index !== 0 ? '-mt-1': ''"
|
:class="index !== 0 ? '-mt-1': ''"
|
||||||
:style="{backgroundImage: `url('https://ddragon.leagueoflegends.com/cdn/${version}/img/champion/${ally.champion.id}.png')`}"
|
:style="{backgroundImage: `url('${ally.champion.icon}')`}"
|
||||||
class="ml-1 w-6 h-6 bg-blue-1000 bg-center bg-cover rounded-full overflow-hidden"
|
class="ml-1 w-6 h-6 bg-blue-1000 bg-center bg-cover rounded-full overflow-hidden"
|
||||||
></div>
|
></div>
|
||||||
<div
|
<div
|
||||||
|
|
@ -114,7 +116,7 @@
|
||||||
></div>
|
></div>
|
||||||
<div
|
<div
|
||||||
:class="index !== 0 ? '-mt-1' : ''"
|
:class="index !== 0 ? '-mt-1' : ''"
|
||||||
:style="{backgroundImage: `url('https://ddragon.leagueoflegends.com/cdn/${version}/img/champion/${data.enemyTeam[index].champion.id}.png')`}"
|
:style="{backgroundImage: `url('${data.enemyTeam[index].champion.icon}')`}"
|
||||||
class="w-6 h-6 bg-blue-1000 bg-center bg-cover rounded-full"
|
class="w-6 h-6 bg-blue-1000 bg-center bg-cover rounded-full"
|
||||||
></div>
|
></div>
|
||||||
<div
|
<div
|
||||||
|
|
@ -164,7 +166,6 @@ export default {
|
||||||
...mapState({
|
...mapState({
|
||||||
roles: state => state.roles
|
roles: state => state.roles
|
||||||
}),
|
}),
|
||||||
...mapGetters('ddragon', ['version']),
|
|
||||||
...mapGetters('detailedMatch', ['getMatchDetails']),
|
...mapGetters('detailedMatch', ['getMatchDetails']),
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,10 +46,10 @@
|
||||||
<div class="absolute text-xs" style="left: 6px;">{{ index + 1 }}.</div>
|
<div class="absolute text-xs" style="left: 6px;">{{ index + 1 }}.</div>
|
||||||
<div class="ml-2 w-champion flex items-center">
|
<div class="ml-2 w-champion flex items-center">
|
||||||
<div
|
<div
|
||||||
:style="{backgroundImage: `url('https://ddragon.leagueoflegends.com/cdn/${version}/img/champion/${champion._id}.png')`}"
|
:style="{backgroundImage: `url('${champion.champion.icon}')`}"
|
||||||
class="w-8 h-8 bg-center bg-cover bg-blue-1000 rounded-full flex-shrink-0"
|
class="w-8 h-8 bg-center bg-cover bg-blue-1000 rounded-full flex-shrink-0"
|
||||||
></div>
|
></div>
|
||||||
<div class="mx-1 truncate">{{ champion.champion }}</div>
|
<div class="mx-1 truncate">{{ champion.champion.name }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="w-plays">
|
<div class="w-plays">
|
||||||
<div class="text-blue-400 text-xs">{{ champion.count }}</div>
|
<div class="text-blue-400 text-xs">{{ champion.count }}</div>
|
||||||
|
|
@ -80,7 +80,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapGetters, mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
import Dropdown from '@/components/Dropdown.vue'
|
import Dropdown from '@/components/Dropdown.vue'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|
@ -98,7 +98,6 @@ export default {
|
||||||
mostPlayed() {
|
mostPlayed() {
|
||||||
return this.stats.champion.reduce((a, b) => a.count > b.count ? a : b).count
|
return this.stats.champion.reduce((a, b) => a.count > b.count ? a : b).count
|
||||||
},
|
},
|
||||||
...mapGetters('ddragon', ['version']),
|
|
||||||
...mapState({
|
...mapState({
|
||||||
stats: state => state.summoner.infos.stats
|
stats: state => state.summoner.infos.stats
|
||||||
}),
|
}),
|
||||||
|
|
|
||||||
|
|
@ -184,7 +184,7 @@
|
||||||
:class="{'bg-blue-760': index % 2 !== 0}"
|
:class="{'bg-blue-760': index % 2 !== 0}"
|
||||||
class="flex justify-between items-center px-4 py-1 leading-tight"
|
class="flex justify-between items-center px-4 py-1 leading-tight"
|
||||||
>
|
>
|
||||||
<div class="w-2/4 text-left">{{ championClass._id }}</div>
|
<div class="w-2/4 text-left capitalize">{{ championClass._id }}</div>
|
||||||
<div
|
<div
|
||||||
:class="calculateWinrate(championClass.wins, championClass.count).color"
|
:class="calculateWinrate(championClass.wins, championClass.count).color"
|
||||||
class="w-1/4"
|
class="w-1/4"
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,7 +1,6 @@
|
||||||
import { timeDifference } from '@/helpers/functions.js'
|
import { timeDifference } from '@/helpers/functions.js'
|
||||||
import { maps, gameModes } from '@/data/data.js'
|
import { maps, gameModes } from '@/data/data.js'
|
||||||
import summonersJSON from '@/data/summoner.json'
|
import summonersJSON from '@/data/summoner.json'
|
||||||
import store from '@/store'
|
|
||||||
|
|
||||||
const uniqueLeagues = ['CHALLENGER', 'GRANDMASTER', 'MASTER']
|
const uniqueLeagues = ['CHALLENGER', 'GRANDMASTER', 'MASTER']
|
||||||
const leaguesNumbers = { 'I': 1, 'II': 2, 'III': 3, 'IV': 4 }
|
const leaguesNumbers = { 'I': 1, 'II': 2, 'III': 3, 'IV': 4 }
|
||||||
|
|
@ -101,6 +100,6 @@ export function getRankImg(leagueData) {
|
||||||
|
|
||||||
function getSummonerLink(id) {
|
function getSummonerLink(id) {
|
||||||
if(id === 0) return null
|
if(id === 0) return null
|
||||||
const spellName = Object.entries(summonersJSON.data).find(([, spell]) => Number(spell.key) === id)[0]
|
const spellName = summonersJSON.find(s => s.id === id).iconPath.split('/assets/')[1].toLowerCase()
|
||||||
return `https://ddragon.leagueoflegends.com/cdn/${store.getters['ddragon/version']}/img/spell/${spellName}.png`
|
return `https://raw.communitydragon.org/latest/plugins/rcp-be-lol-game-data/global/default/${spellName}`
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
<div
|
<div
|
||||||
:class="{'border-2': !playing}"
|
:class="{'border-2': !playing}"
|
||||||
class="relative z-10 w-24 h-24 rounded-full bg-blue-1000 bg-center bg-cover border-teal-400"
|
class="relative z-10 w-24 h-24 rounded-full bg-blue-1000 bg-center bg-cover border-teal-400"
|
||||||
:style="{backgroundImage: getSummonerIcon}"
|
:style="{backgroundImage: `url('https://raw.communitydragon.org/latest/plugins/rcp-be-lol-game-data/global/default/v1/profile-icons/${summonerInfos.account.profileIconId}.jpg')`}"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="absolute left-0 bottom-0 w-8 h-8 flex items-center justify-center bg-blue-900 rounded-full text-xs text-teal-500 font-extrabold border-2 border-teal-400"
|
class="absolute left-0 bottom-0 w-8 h-8 flex items-center justify-center bg-blue-900 rounded-full text-xs text-teal-500 font-extrabold border-2 border-teal-400"
|
||||||
|
|
@ -133,9 +133,6 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
getSummonerIcon() {
|
|
||||||
return `url(https://ddragon.leagueoflegends.com/cdn/${this.version}/img/profileicon/${this.summonerInfos.account.profileIconId}.png)`
|
|
||||||
},
|
|
||||||
summoner() {
|
summoner() {
|
||||||
return this.$route.params.name
|
return this.$route.params.name
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ class MatchRepository {
|
||||||
{
|
{
|
||||||
$group: {
|
$group: {
|
||||||
_id: "$champion.id",
|
_id: "$champion.id",
|
||||||
champion: { $first: "$champion.name" },
|
champion: { $first: "$champion" },
|
||||||
count: { $sum: 1 },
|
count: { $sum: 1 },
|
||||||
wins: {
|
wins: {
|
||||||
$sum: {
|
$sum: {
|
||||||
|
|
@ -60,7 +60,7 @@ class MatchRepository {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
$group: {
|
$group: {
|
||||||
_id: { "$arrayElemAt": ["$champion.tags", 0] },
|
_id: { "$arrayElemAt": ["$champion.roles", 0] },
|
||||||
count: { $sum: 1 },
|
count: { $sum: 1 },
|
||||||
wins: {
|
wins: {
|
||||||
$sum: {
|
$sum: {
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ class BasicMatchTransformer extends MatchTransformer {
|
||||||
const playerInfos = {
|
const playerInfos = {
|
||||||
name: summoner.player.summonerName,
|
name: summoner.player.summonerName,
|
||||||
role: super.getRoleName(allData.timeline),
|
role: super.getRoleName(allData.timeline),
|
||||||
champion: (({ id, name }) => ({ id, name }))(Object.entries(this.champions).find(([, champion]) => Number(champion.key) === allData.championId)[1])
|
champion: super.getChampion(allData.championId)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (allData.teamId === player.teamId) {
|
if (allData.teamId === player.teamId) {
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ class DetailedMatchTransformer extends MatchTransformer {
|
||||||
name: null
|
name: null
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
b.champion = (({ id, name }) => ({ id, name }))(Object.entries(this.champions).find(([, champion]) => Number(champion.key) === b.championId)[1])
|
b.champion = super.getChampion(b.championId)
|
||||||
}
|
}
|
||||||
return b
|
return b
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -13,18 +13,29 @@ class MatchTransformer {
|
||||||
*/
|
*/
|
||||||
async getContext() {
|
async getContext() {
|
||||||
const items = await Jax.CDragon.items()
|
const items = await Jax.CDragon.items()
|
||||||
const champions = await Jax.DDragon.Champion.list()
|
const champions = await Jax.CDragon.champions()
|
||||||
const perks = await Jax.CDragon.perks()
|
const perks = await Jax.CDragon.perks()
|
||||||
const perkstyles = await Jax.CDragon.perkstyles()
|
const perkstyles = await Jax.CDragon.perkstyles()
|
||||||
const version = Jax.DDragon.Version
|
const version = Jax.DDragon.Version
|
||||||
|
|
||||||
this.champions = champions.data
|
this.champions = champions
|
||||||
this.items = items
|
this.items = items
|
||||||
this.perks = perks
|
this.perks = perks
|
||||||
this.perkstyles = perkstyles.styles
|
this.perkstyles = perkstyles.styles
|
||||||
this.version = version
|
this.version = version
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get champion specific data
|
||||||
|
* @param id of the champion
|
||||||
|
*/
|
||||||
|
getChampion(id) {
|
||||||
|
const champion = { ...this.champions.find(c => c.id === id) }
|
||||||
|
champion.icon = `https://raw.communitydragon.org/latest/plugins/rcp-be-lol-game-data/global/default/${champion.squarePortraitPath.split('/assets/')[1].toLowerCase()}`
|
||||||
|
delete champion.squarePortraitPath
|
||||||
|
return champion
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get global data about the match
|
* Get global data about the match
|
||||||
*/
|
*/
|
||||||
|
|
@ -47,7 +58,7 @@ class MatchTransformer {
|
||||||
getPlayerData(match, player, detailed, teamStats = {}) {
|
getPlayerData(match, player, detailed, teamStats = {}) {
|
||||||
const identity = match.participantIdentities.find(p => p.participantId === player.participantId)
|
const identity = match.participantIdentities.find(p => p.participantId === player.participantId)
|
||||||
const name = identity.player.summonerName
|
const name = identity.player.summonerName
|
||||||
const champion = (({ id, name, tags }) => ({ id, name, tags }))(Object.entries(this.champions).find(([, champion]) => Number(champion.key) === player.championId)[1])
|
const champion = this.getChampion(player.championId)
|
||||||
const role = this.getRoleName(player.timeline)
|
const role = this.getRoleName(player.timeline)
|
||||||
const level = player.stats.champLevel
|
const level = player.stats.champLevel
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
const CDragonRequest = require('../CDragonRequest')
|
const CDragonRequest = require('../CDragonRequest')
|
||||||
|
|
||||||
class CDragonEndpoint {
|
class CDragonEndpoint {
|
||||||
|
champions() {
|
||||||
|
return new CDragonRequest('champion-summary.json').execute()
|
||||||
|
}
|
||||||
|
|
||||||
items() {
|
items() {
|
||||||
return new CDragonRequest('items.json').execute()
|
return new CDragonRequest('items.json').execute()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue