| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- <!--
- Affichage texte qui passe en mode édition lorsqu'on clique dessus
- Utilisé par exemple pour le choix de l'année active
- -->
- <template>
- <main>
- <!-- Mode édition activé -->
- <div v-if="edit" class="d-flex align-center x-editable-input">
- <UiInputText class="ma-0 pa-0" :type="type" v-model="inputValue" />
- <v-icon
- icon="fas fa-check"
- aria-hidden="false"
- class="valid icons text-primary"
- size="small"
- @click="update"
- />
- <v-icon
- icon="fas fa-times"
- aria-hidden="false"
- class="cancel icons text-neutral-strong"
- size="small"
- @click="close"
- />
- </div>
- <!-- Mode édition désactivé -->
- <div v-else class="edit-link d-flex align-center" @click="edit = true">
- <slot name="xeditable.read" v-bind="{ inputValue }" />
- </div>
- </main>
- </template>
- <script setup lang="ts">
- import { ref } from '@vue/reactivity'
- import type { Ref } from '@vue/reactivity'
- const props = defineProps({
- type: {
- type: String,
- required: false,
- default: null,
- },
- data: {
- type: [String, Number],
- required: false,
- default: null,
- },
- })
- const emit = defineEmits(['update'])
- const edit: Ref<boolean> = ref(false)
- const inputValue: Ref<string | number | null> = ref(props.data)
- const update = () => {
- edit.value = false
- if (inputValue.value !== props.data) {
- emit('update', inputValue.value)
- }
- }
- const close = () => {
- edit.value = false
- inputValue.value = props.data
- }
- </script>
- <style scoped lang="scss">
- .v-input {
- height: 24px;
- }
- .v-icon {
- padding: 2px;
- height: 24px;
- width: 24px;
- margin: 0 2px;
- }
- .edit-link {
- cursor: pointer;
- }
- </style>
|