Component

unlisted ⁨5⁩ ⁨files⁩ 2021-06-06 20:17:04 UTC

Item.vue

Raw
<template>
    <fragment>
        <md-table-cell md-label="Nom">{{
                player.username
            }}</md-table-cell>
        <md-table-cell md-label="Uuid">{{
                player.minecraftUuid
            }}</md-table-cell>
        <md-table-cell md-label="Grades">
            <template v-if="player.playerRanks !== undefined && player.playerRanks.length">
                <player-ranks-badge :player-ranks="player.playerRanks"></player-ranks-badge>
            </template>
        </md-table-cell>
        <md-table-cell md-label="Actions">
            <router-link
                class="md-just-icon md-info md-simple"
                v-slot="{ href, navigate }"
                :to="{name: 'PlayerShow', params: { id: player['@id'] }}">
                <md-button :href="href" class="md-just-icon md-info md-simple" @click.native="navigate">
                    <md-icon>eye</md-icon>
                </md-button>
            </router-link>
        </md-table-cell>
    </fragment>
</template>

<script>
import PlayerRanksBadge from "@/views/components/Badges/PlayerRanksBadge";

export default {
    components: {PlayerRanksBadge},
    props: {
        player: {
            type: Object
        }
    },
};
</script>

List.vue

Raw
<template>
    <md-card-content>
        <loading :active.sync="isLoading"
                 :can-cancel="false"
                 :isFullPage="false"
                />
        <div
            v-if="error"
            class="alert alert-danger">{{ error }}</div>
        <md-table
            :value="items"
            class="paginated-table table-striped table-hover"
        >
            <md-table-row slot="md-table-row" slot-scope="{ item }" :key="item['@id']">
                <Item :player="item" />
            </md-table-row>
        </md-table>
    </md-card-content>
</template>

<script>
import { mapActions } from 'vuex';
import { createHelpers } from 'vuex-map-fields';
import Loading from 'vue-loading-overlay'
import Item from './Item';

const { mapFields } = createHelpers({
    getterType: 'AdminPlayerModule/List/getField',
    mutationType: 'AdminPlayerModule/List/updateField',
});

export default {
    components: {
        Item,
        Loading,
    },
    computed: {
        ...mapFields({
            error: 'error',
            items: 'items',
            isLoading: 'isLoading',
        }),
    },
    mounted() {
        this.getPage(this.$route.query);
    },
    watch: {
        $route: function() {
            this.getPage(this.$route.query);
        },
    },
    methods: {
        ...mapActions({
            getPage: 'AdminPlayerModule/List/default',
        }),
    },
};
</script>

PlayerRankBadge

Raw
<template>
    <RankBadge :rank="getItem(playerRank)"></RankBadge>
</template>

<script>
import RankBadge from './RankBadge';
import { mapGetters, mapActions } from 'vuex';

export default {
    name: "PlayerRanksBadge",
    components: {
        RankBadge,
    },
    computed: {
        ...mapGetters({
            getItem: "ComponentModule/getItem",
        }),
    },
    props: {
        playerRank: {
            type: String,
            required: true,
        }
    },
    mounted() {
        this.getPage(this.$route.query);
    },
    methods: {
        ...mapActions({
            getPage: 'AdminPlayerModule/List/default',
        }),
    },
}
</script>

PlayerRanksBadge

Raw
<template>
    <div>
        <template v-for="playerRank in playerRanks">
            <player-rank-badge v-bind:key="playerRank" :player-rank="playerRank"/>
        </template>
    </div>
</template>

<script>
import PlayerRankBadge from './PlayerRankBadge';

export default {
    name: "PlayerRanksBadge",
    components: {
        PlayerRankBadge
    },
    props: {
        playerRanks: {
            type: Array,
            required: true,
        }
    },
}
</script>

RankBadge

Raw
<template>
    <badge>{{ getItem(this.rank) }}</badge>
</template>

<script>
import Badge from '@/components/Badge';
import { mapGetters } from 'vuex';

export default {
    name: "PlayerRanksBadge",
    components: {
        Badge,
    },
    computed: {
        ...mapGetters({
            getItem: "ComponentModule/getItem",
        }),
    },
    props: {
        rank: {
            type: String,
            required: true,
        }
    },
}
</script>