mirror of
https://github.com/solidtime-io/solidtime.git
synced 2026-08-10 17:22:15 +01:00
48 lines
1.5 KiB
Vue
48 lines
1.5 KiB
Vue
<script setup lang="ts">
|
|
import { computed, ref } from 'vue';
|
|
|
|
const value = defineModel();
|
|
const emit = defineEmits(['changed']);
|
|
|
|
function onChange(event: Event) {
|
|
const target = event.target as HTMLInputElement;
|
|
if (target.value !== value.value) {
|
|
emit('changed', target.value);
|
|
value.value = target.value;
|
|
}
|
|
}
|
|
|
|
function onInput(event: Event) {
|
|
liveDataValue.value = (event.target as HTMLInputElement).value;
|
|
}
|
|
|
|
const liveDataValue = ref(value.value);
|
|
|
|
const displaysPlaceholder = computed(() => {
|
|
return liveDataValue.value === '' || liveDataValue.value === null;
|
|
});
|
|
</script>
|
|
|
|
<template>
|
|
<div
|
|
class="relative min-w-0 flex-1 text-ellipsis whitespace-nowrap overflow-hidden">
|
|
<div class="relative text-sm font-medium min-w-0">
|
|
<div
|
|
:class="[
|
|
'opacity-0 py-2 text-sm whitespace-pre min-w-0 pl-3 pr-1',
|
|
{ 'min-w-[130px]': displaysPlaceholder },
|
|
]">
|
|
{{ liveDataValue }}
|
|
</div>
|
|
<input
|
|
data-testid="time_entry_description"
|
|
:value="liveDataValue"
|
|
@blur="onChange"
|
|
@input="onInput"
|
|
@keydown.enter="onChange"
|
|
placeholder="Add a description"
|
|
class="absolute px-0 h-full min-w-0 pl-3 pr-1 left-0 top-0 w-full text-sm text-white font-medium bg-transparent focus-visible:ring-0 rounded-lg border-0" />
|
|
</div>
|
|
</div>
|
|
</template>
|