mirror of
https://github.com/YunoHost/yunohost-portal.git
synced 2024-09-03 20:06:23 +02:00
50 lines
997 B
Vue
50 lines
997 B
Vue
<script setup lang="ts">
|
|
const props = defineProps<{
|
|
loading: boolean | null
|
|
text?: string
|
|
loadingText?: string
|
|
icon?: string
|
|
loadingIcon?: string
|
|
}>()
|
|
|
|
const { t } = useI18n()
|
|
const baseAttrs = useAttrs()
|
|
const attrs = computed(() => {
|
|
return {
|
|
text: props.loading
|
|
? props.loadingText || t('saving')
|
|
: props.text || t('save'),
|
|
icon:
|
|
props.loading === true
|
|
? props.loadingIcon || 'mdi:loading'
|
|
: props.loading === false
|
|
? 'mdi:thumb-up'
|
|
: props.icon,
|
|
iconClass: props.loading ? 'animate-spin' : '',
|
|
...baseAttrs,
|
|
}
|
|
})
|
|
|
|
const onClick = (e: MouseEvent) => {
|
|
if (props.loading !== null) {
|
|
e.preventDefault()
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<YButton
|
|
v-bind="attrs"
|
|
:aria-disabled="loading !== null"
|
|
:class="{ 'btn-disabled no-animation': loading !== null }"
|
|
type="submit"
|
|
@click="onClick"
|
|
/>
|
|
</template>
|
|
|
|
<style scoped>
|
|
.btn-disabled {
|
|
pointer-events: unset;
|
|
cursor: not-allowed;
|
|
}
|
|
</style>
|