Edit.vue 5.82 KB
<template>
    <div>
        <h1 class="mb-8 font-bold text-3xl">
            <inertia-link class="text-indigo-400 hover:text-indigo-600" :href="route('tokens')">Tokens</inertia-link>
            <span class="text-indigo-400 font-medium">/</span>
            {{ form.login }}
        </h1>
        <div class="bg-white rounded-md shadow overflow-hidden max-w-3xl">
            <form @submit.prevent="tokenUpdate">
                <div class="p-8 -mr-6 -mb-8 flex flex-wrap">
                    <text-input v-model="form.login" :error="form.errors.login" :readonly="true" class="pr-6 pb-8 w-full lg:w-1/2"
                                label="Login"/>
                    <text-input v-model="form.token" :error="form.errors.token" :readonly="true" class="pr-6 pb-8 w-full lg:w-1/2"
                                label="Token"/>
                    <text-input v-model="form.api" :error="form.errors.api" :readonly="true" class="pr-6 pb-8 w-full lg:w-1/2"
                                label="API"/>
                    <select-input v-model="form.type" :error="form.errors.type"
                                  :readonly="form.type"
                                  class="pr-6 pb-8 w-full lg:w-1/2"
                                  label="Type">
                        <option :value="null"/>
                        <option v-for="type,key in types" :value="key">{{ type }}</option>
                    </select-input>
                </div>
                <div class="px-8 py-4 bg-gray-50 border-t border-gray-100 flex items-center">
                    <button class="text-red-600 hover:underline"
                            tabindex="-1"
                            type="button"
                            @click="tokenDestroy"
                    >
                        Delete Token
                    </button>
                    <loading-button :loading="form.processing" v-if="!this.token.type" class="btn-indigo ml-auto" type="submit">
                        Update Token
                    </loading-button>
                </div>
            </form>
        </div>

        <campaigns-settings v-if="campaigns.length && token.main"
                            :campaigns="campaigns"
                            :token="token"
                            v-on:add="campaignAdd"
                            v-on:enabled="campaignEnabled"
                            v-on:delete="campaignDelete"
        ></campaigns-settings>

        <city-settings v-if="token.type !== 'main'"
                       :cities="cities"
                       :token_cities="token.cities"
                       :main_token_campaigns="main_token_campaigns"
                       v-on:add="cityAdd"
                       v-on:updated="cityUpdated"
                       v-on:delete="cityDelete"
                       v-on:campaignUpdated="campaignUpdated"
        ></city-settings>
    </div>
</template>

<script>
import Icon from '@/Shared/Icon'
import Layout from '@/Shared/Layout'
import TextInput from '@/Shared/TextInput'
import SelectInput from '@/Shared/SelectInput'
import LoadingButton from '@/Shared/LoadingButton'
import TrashedMessage from '@/Shared/TrashedMessage'
import CitySettings from "./CitySettings";
import CampaignsSettings from "./CampaignsSettings";

export default {
    metaInfo() {
        return {title: this.form.login}
    },
    components: {
        CampaignsSettings,
        CitySettings,
        Icon,
        LoadingButton,
        SelectInput,
        TextInput,
        TrashedMessage,
    },
    layout: Layout,
    props: {
        campaigns: Array,
        token: Object,
        types: Object,
        cities: Array,
        main_token_campaigns: Array,
    },
    remember: 'form',
    data() {
        return {
            form: this.$inertia.form({
                id: this.token.id,
                login: this.token.login,
                token: this.token.token,
                api: this.token.api,
                type: this.token.type,
            }),
        }
    },
    methods: {
        cityAdd(id) {
            this.$inertia.post(this.route('token.city.store', [this.token.id, id]))
        },
        cityUpdated(id, updated) {
            this.$inertia.post(this.route('token.city.updated', [this.token.id, id]), {
                updated: updated ? 1 : 0,
            })
        },
        campaignUpdated(id, updated) {
            this.$inertia.post(this.route('token.city.campaign.updated', [this.token.id, id]), {
                updated: updated ? 1 : 0,
            })
        },
        cityDelete(id) {
            this.$inertia.delete(this.route('token.city.destroy', [this.token.id, id]))
        },
        tokenUpdate() {
            this.form.post(this.route('token.update', this.token.id))
        },
        tokenDestroy() {
            if (confirm('Are you sure you want to delete this token?')) {
                this.$inertia.delete(this.route('token.destroy', this.token.id))
            }
        },
        campaignEnabled(campaign_id, enabled) {
            this.$inertia.post(this.route('token.campaign.enabled', [this.token.id, campaign_id]), {
                enabled: enabled ? 1 : 0,
            });
        },
        campaignManaged(campaign_id, managed) {
            this.$inertia.post(this.route('token.campaign.managed', [this.token.id, campaign_id]), {
                managed: managed ? 1 : 0,
            });
        },
        campaignDelete(campaign_id) {
            if (confirm('Are you sure you want to delete this campaign?')) {
                this.campaignManaged(campaign_id, 0);
            }
        },
        campaignAdd(campaign_id) {
            this.campaignManaged(campaign_id, 1);
        },
        filterCampaigns(token_campaigns) {
            return this.campaigns.filter(
                campaign => token_campaigns.map((campaign) => campaign.id).indexOf(campaign.id) === -1
            )
        },
    },
}
</script>