mirror of https://github.com/wg-easy/wg-easy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.7 KiB
67 lines
1.7 KiB
<!-- EditableAddress.vue -->
|
|
<template>
|
|
<span class="group">
|
|
<!-- Show -->
|
|
<input
|
|
v-show="editAddressId === client.id"
|
|
:ref="'client-' + client.id + '-address'"
|
|
v-model="editAddress"
|
|
class="rounded border-2 dark:bg-neutral-700 border-gray-100 dark:border-neutral-600 focus:border-gray-200 dark:focus:border-neutral-500 outline-none w-20 text-black dark:text-neutral-300 dark:placeholder:text-neutral-500"
|
|
@keyup.enter="updateAddress"
|
|
@keyup.escape="cancelEdit"
|
|
/>
|
|
<span v-show="editAddressId !== client.id" class="inline-block">{{ client.address }}</span>
|
|
|
|
<!-- Edit -->
|
|
<span
|
|
v-show="editAddressId !== client.id"
|
|
class="cursor-pointer opacity-0 group-hover:opacity-100 transition-opacity p-0.5"
|
|
@click="edit"
|
|
>
|
|
<IconEdit />
|
|
</span>
|
|
</span>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { ref, nextTick } from 'vue';
|
|
import IconEdit from './icons/IconEdit.vue';
|
|
import api from '@/services/apiInstance';
|
|
|
|
const props = defineProps({
|
|
client: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
});
|
|
const editAddress = ref(null);
|
|
const editAddressId = ref(null);
|
|
|
|
const updateAddress = () => {
|
|
api.updateClientAddress({
|
|
clientId: editAddressId.value,
|
|
address: editAddress.value,
|
|
});
|
|
|
|
editAddress.value = null;
|
|
editAddressId.value = null;
|
|
};
|
|
|
|
const cancelEdit = () => {
|
|
editAddress.value = null;
|
|
editAddressId.value = null;
|
|
};
|
|
|
|
const edit = () => {
|
|
editAddress.value = props.client.address;
|
|
editAddressId.value = props.client.id;
|
|
|
|
// ? remove this ?
|
|
nextTick(() => {
|
|
const clientAddressRef = ['client-' + props.client.id + '-address'];
|
|
if (clientAddressRef.value) {
|
|
clientAddressRef.value.select();
|
|
}
|
|
});
|
|
};
|
|
</script>
|
|
|