Skip to content

Instantly share code, notes, and snippets.

@JeffreyWay
Last active October 14, 2023 19:44
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JeffreyWay/9ca33e4213c9e7c66cf3319eecc7b8a6 to your computer and use it in GitHub Desktop.
Save JeffreyWay/9ca33e4213c9e7c66cf3319eecc7b8a6 to your computer and use it in GitHub Desktop.
Learn Vue 3: Step By Step, Ep 27 - Build and Fill a Team Store - https://laracasts.com/series/learn-vue-3-step-by-step/episodes/27
{
"name": "Smiley",
"spots": 5,
"members": [
{
"name": "John Doe",
"email": "john@doe.com",
"status": "Active"
},
{
"name": "Sarah Doe",
"email": "sarah@doe.com",
"status": "Active"
},
{
"name": "Steve Doe",
"email": "steve@doe.com",
"status": "Active"
},
{
"name": "Jen Doe",
"email": "jen@doe.com",
"status": "Active"
},
{
"name": "Joe Doe",
"email": "joe@doe.com",
"status": "Active"
}
]
}
import { defineStore } from "pinia";
export let useTeamStore = defineStore('team', {
state: () => ({
name: '',
spots: 0,
members: []
}),
actions: {
async fill() {
let r = await import('@/team.json');
this.$state = r.default;
},
grow(spots) {
this.spots = spots;
}
},
getters: {
spotsRemaining() {
return this.spots - this.members.length;
}
}
});
<script setup>
import TeamHeader from "@/components/Teams/TeamHeader.vue";
import TeamMembers from "@/components/Teams/TeamMembers.vue";
import TeamFooter from "@/components/Teams/TeamFooter.vue";
import { useTeamStore } from "@/stores/TeamStore";
let team = useTeamStore();
team.fill();
// Example of calling a store action.
setTimeout(() => {
team.grow(25);
}, 2000);
</script>
<template>
<TeamHeader />
<div class="place-self-center flex flex-col gap-y-3" style="width: 725px">
<TeamMembers />
</div>
<TeamFooter />
</template>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment