Edit.vue 7.42 KB
<template>
    <div>
        <h1 class="mb-8 font-bold text-3xl">Campaign vars</h1>
        <div class="mb-6 flex justify-between items-center">
            <div class="mt-4 flex flex-wrap">
                <text-input v-model="name"
                            class="pr-6"
                            placeholder="Name"
                >
                </text-input>
                <text-input v-model="default_value"
                            class="pr-6"
                            placeholder="Default value"
                >
                </text-input>
                <button class="btn-indigo hover:underline"
                        tabindex="-1"
                        type="button"
                        @click="add"
                >
                    Add
                </button>
            </div>
        </div>
        <div class="bg-white rounded-md shadow overflow-x-auto">
            <table class="w-full whitespace-nowrap">
                <tr class="text-left font-bold">
                    <th class="px-6 pt-6 pb-4">Name</th>
                    <th class="px-6 pt-6 pb-4">Default value</th>
                </tr>
                <tr v-for="campaign_var in campaign.vars" :key="campaign_var.id" class="hover:bg-gray-100 focus-within:bg-gray-100">
                    <td class="px-6 py-4 border-t">
                        <div v-if="!inputs[campaign_var.id] || !inputs[campaign_var.id].name || !inputs[campaign_var.id].name.editable"
                             class="hover:text-indigo-500 focus:text-indigo-500 cursor-pointer"
                             @click="edit(campaign_var.id, 'name', campaign_var.name)"
                        >
                            {{ campaign_var.name }}
                        </div>
                        <div v-else class="inline-flex">
                            <text-input v-model="inputs[campaign_var.id].name.val"
                                        class="pr-6"
                            >
                            </text-input>
                            <button class="btn-indigo hover:underline mr-6"
                                    tabindex="-1"
                                    type="button"
                                    @click="save(campaign_var.id, 'name')"
                            >

                                Save
                            </button>
                            <button class="btn-indigo hover:underline"
                                    tabindex="-1"
                                    type="button"
                                    @click="editCancel(campaign_var.id, 'name')"
                            >

                                Cancel
                            </button>
                        </div>
                    </td>
                    <td class="px-6 py-4 border-t">
                        <div v-if="!inputs[campaign_var.id] || !inputs[campaign_var.id].default_value || !inputs[campaign_var.id].default_value.editable"
                             class="hover:text-indigo-500 focus:text-indigo-500 cursor-pointer"
                             @click="edit(campaign_var.id, 'default_value', campaign_var.default_value)"
                        >
                            {{ campaign_var.default_value }}
                        </div>
                        <div v-else class="inline-flex">
                            <text-input v-model="inputs[campaign_var.id].default_value.val"
                                        class="pr-6"
                            >
                            </text-input>
                            <button class="btn-indigo hover:underline mr-6"
                                    tabindex="-1"
                                    type="button"
                                    @click="save(campaign_var.id, 'default_value')"
                            >

                                Save
                            </button>
                            <button class="btn-indigo hover:underline"
                                    tabindex="-1"
                                    type="button"
                                    @click="editCancel(campaign_var.id, 'default_value')"
                            >

                                Cancel
                            </button>
                        </div>
                    </td>
                    <td class="px-6 py-4 border-t w-px">
                        <button class="px-4 flex items-center"
                                type="button"
                                tabindex="-1"
                                @click="destroy(campaign_var.id)"
                        >
                            <icon name="trash" class="block w-6 h-6 fill-gray-400"/>
                        </button>
                    </td>
                </tr>
                <tr v-if="campaign.vars.length === 0">
                    <td class="border-t px-6 py-4" colspan="4">No campaign vars found.</td>
                </tr>
            </table>
        </div>
    </div>
</template>

<script>
    import Layout from '@/Shared/Layout'
    import Icon from '@/Shared/Icon'
    import TextInput from '@/Shared/TextInput'

    export default {
        metaInfo: { title: 'Campaign vars' },
        components: {
            Icon,
            TextInput,
        },
        layout: Layout,
        props: {
            token: Object,
            campaign: Object,
            errors: Object,
        },
        data() {
            return {
                name: '',
                default_value: '',
                inputs: {},
            }
        },
        watch: {
        },
        methods: {
            add() {
                this.$inertia.post(this.route('token.campaign.vars', [this.token.id, this.campaign.id]), {
                    name: this.name,
                    default_value: this.default_value,
                });

                this.name = '';
                this.default_value = '';
            },
            edit(campaign_var_id, key, val) {
                this.inputs = {
                    ...this.inputs,
                    [campaign_var_id]: {
                        ...this.inputs[campaign_var_id],
                        [key]: {
                            editable: true,
                            val: val,
                        }
                    }
                };
            },
            editCancel(campaign_var_id, key) {
                this.inputs = {
                    ...this.inputs,
                    [campaign_var_id]: {
                        ...this.inputs[campaign_var_id],
                        [key]: {
                            ...this.inputs[campaign_var_id][key],
                            editable: false,
                        }
                    }
                };
            },
            save(campaign_var_id, key) {
                this.$inertia.patch(this.route('token.campaign.vars', [this.token.id, this.campaign.id]), {
                    id: campaign_var_id,
                    [key]: this.inputs[campaign_var_id][key].val,
                });
                this.editCancel(campaign_var_id, key);
            },
            destroy(campaign_var_id) {
                if (confirm('Are you sure you want to delete this campaign var?')) {
                    this.$inertia.delete(this.route('token.campaign.vars', [this.token.id, this.campaign.id]), {
                        id: campaign_var_id,
                    });
                }
            },
        },
    }
</script>