CitySettings.vue 5.22 KB
<template>
    <div>
        <h2 class="mt-12 font-bold text-2xl">Cities</h2>

        <div v-if="cities.length" class="mt-4 flex flex-wrap">
            <select-input v-model="city" class="pr-6">
                <option v-for="city in cities" :value="city.id">
                    {{ city.name }}
                </option>
            </select-input>

            <button class="btn-indigo hover:underline"
                    tabindex="-1"
                    type="button"
                    @click="cityAdd"
            >
                Add
            </button>

        </div>

        <div class="mt-6 bg-white rounded shadow">
            <table class="w-full whitespace-nowrap">
                <tr class="text-left font-bold">
                    <th class="px-6 pt-6 pb-4" colspan="2">Name</th>
                    <th class="px-6 pt-6 pb-4">Обновлять?</th>
                    <th class="px-6 pt-6 pb-4"></th>
                </tr>
                <template v-for="city in token.cities">
                    <tr :key="city.id" class="hover:bg-gray-100 focus-within:bg-gray-100">
                        <td colspan="2" class="border-t">
                            <div class="px-6 py-4">
                                {{ city.name }}
                            </div>
                        </td>
                        <td class="border-t">
                            <div class="px-6 py-4">
                                <input :checked="city.update"
                                       @change="cityUpdated(city.id, !city.update)"
                                       type="checkbox"
                                >
                            </div>
                        </td>
                        <td class="border-t w-px">
                            <div class="px-6 py-4">
                                <button class="px-4 flex items-center"
                                        tabindex="-1"
                                        @click="cityDelete(city.id)"
                                >
                                    <icon name="trash" class="block w-6 h-6 fill-gray-400"/>
                                </button>
                            </div>
                        </td>
                    </tr>
                    <tr v-if="city.campaigns.length">
                        <th class="px-6 pt-6 pb-4"></th>
                        <th class="px-6 pt-6 pb-4">Кампания</th>
                        <th class="px-6 pt-6 pb-4">Синхронизировать?</th>
                        <th></th>
                    </tr>
                    <tr v-if="city.campaigns.length" :key="campaign.id" v-for="campaign in city.campaigns">
                        <td class="border-t"></td>
                        <td class="border-t">
                            <span class="px-6 py-4 flex items-center focus:text-indigo-500">
                                 <inertia-link class="hover:text-indigo-500 focus:text-indigo-500"
                                               :href="route('token.campaign.vars', [token.id, campaign.id])"
                                 >
                                    {{ campaign.pivot.name }}
                                 </inertia-link>
                            </span>
                        </td>
                        <td class="border-t text-center">
                            <input :checked="campaign.pivot.updated !== '0'"
                                   @change="campaignUpdated(city.id, campaign.id, !(campaign.pivot.updated !== '0'))"
                                   type="checkbox"
                            >
                        </td>
                        <td class="border-t">
                            <inertia-link class="px-4 flex items-center"
                                          tabindex="-1"
                                          :href="route('token.campaign.vars', [token.id, campaign.id])"
                            >
                                <icon name="book" class="block w-6 h-6 fill-gray-400"/>
                            </inertia-link>
                        </td>
                    </tr>
                </template>
                <tr v-if="token.cities.length === 0">
                    <td class="border-t px-6 py-4" colspan="4">No City found.</td>
                </tr>
            </table>
        </div>
    </div>
</template>

<script>

    import SelectInput from "../../Shared/SelectInput";
    import Icon from "../../Shared/Icon";

    export default {
        components: {Icon, SelectInput},
        props: {
            cities: Array,
            token: Object,
            main_token_campaigns: Array,
        },
        data() {
            return {
                city: false
            }
        },
        watch: {},
        mounted() {

        },
        methods: {
            cityAdd() {
                this.$emit('add', this.city)
            },
            cityDelete(id) {
                this.$emit('delete', id)
            },
            cityUpdated(id, updated) {
                this.$emit('updated', id, updated)
            },
            campaignUpdated(city_id, campaign_id, updated) {
                this.$emit('campaignUpdated', city_id, campaign_id, updated)
            },
        }
    }
</script>