<template> <div v-if="cards && cards.length > 0"> <div class="saved-cards-heading"> <h5>Card</h5> <h5>Default</h5> <h5>Delete</h5> </div> <div v-for="card in cards" :key="card.id" class="saved-card"> <span>{{card.card.brand[0].toUpperCase() + card.card.brand.substring(1)}} (••••{{card.card.last4}})</span> <span><input :checked="card.id == preferred" :value="card.id" name="selected-card" type="radio" @change="change(card.id)"></span> <span><img @click="remove(card.id)" src="../../images/close-icon-black.svg"/></span> </div> <p id="billing-error"></p> </div> </template> <script> function get() { fetch('/panel/cards', { method: 'GET', headers: {'Content-Type': 'application/json', 'Accept': 'application/json', 'X-XSRF-TOKEN': this.token} }).then((response) => {response.json().then(data => { this.cards = data.data })}) } function change(card) { fetch('/panel/change-card', { method: 'POST', headers: {'Content-Type': 'application/json', 'Accept': 'application/json', 'X-XSRF-TOKEN': this.token}, body: JSON.stringify({'card': card}) }).then((response) => { if (response.ok) { response.json().then((data) => { this.cards = data.data }) } else { console.log('bad') document.getElementById("billing-error").textContent = `${response.status}: ${response.statusText}` } }) } function remove(card) { if (card.length == 1) { return } fetch('/panel/delete-card', { method: 'POST', headers: {'Content-Type': 'application/json', 'Accept': 'application/json', 'X-XSRF-TOKEN': this.token}, body: JSON.stringify({'card': card}) }).then((response) => { if (response.ok) { response.json().then((data) => { this.cards = data.data }) } else { document.getElementById("billing-error").textContent = `${response.status}: ${response.statusText}` } }) } export default { data() { return {cards: null} }, methods: {get, change, remove}, created() { this.get() }, props: ['token', 'preferred'], } </script>