Add loading prop to button
This commit is contained in:
@@ -6,14 +6,16 @@ type Props = {
|
|||||||
startIcon?: string;
|
startIcon?: string;
|
||||||
endIcon?: string;
|
endIcon?: string;
|
||||||
loading?: boolean;
|
loading?: boolean;
|
||||||
|
disabled?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
// props
|
// props
|
||||||
const props = withDefaults(defineProps<Props>(), {
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
variant: "solid",
|
variant: "solid",
|
||||||
size: "lg",
|
size: "lg",
|
||||||
|
disabled: false,
|
||||||
});
|
});
|
||||||
const { variant, size, loading } = toRefs(props);
|
const { variant, size, loading, disabled } = toRefs(props);
|
||||||
|
|
||||||
// computed
|
// computed
|
||||||
const classes = computed(() => {
|
const classes = computed(() => {
|
||||||
@@ -32,17 +34,30 @@ const classes = computed(() => {
|
|||||||
"btn-md": size.value === "md",
|
"btn-md": size.value === "md",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pointer-events-none opacity-80 cursor-not-allowed": loading.value,
|
"pointer-events-none cursor-not-allowed": loading.value || disabled.value,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<button :class="classes" :disabled="loading">
|
<button
|
||||||
<Icon v-if="!loading && startIcon" :name="startIcon" />
|
:class="classes"
|
||||||
|
:disabled="loading || disabled"
|
||||||
|
>
|
||||||
|
<Icon
|
||||||
|
v-if="!loading && startIcon"
|
||||||
|
:name="startIcon"
|
||||||
|
/>
|
||||||
<slot v-if="!loading" />
|
<slot v-if="!loading" />
|
||||||
<Icon v-if="!loading && endIcon" :name="endIcon" />
|
<Icon
|
||||||
<Icon v-if="loading" name="ci:svg-spinners-3-dots-fade" class="my-0.5" />
|
v-if="!loading && endIcon"
|
||||||
|
:name="endIcon"
|
||||||
|
/>
|
||||||
|
<Icon
|
||||||
|
v-if="loading"
|
||||||
|
name="ci:svg-spinners-3-dots-fade"
|
||||||
|
class="my-0.5"
|
||||||
|
/>
|
||||||
</button>
|
</button>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
Reference in New Issue
Block a user