82 lines
2.3 KiB
Vue
82 lines
2.3 KiB
Vue
<template>
|
|
<UTooltip
|
|
:text="tooltipText"
|
|
:prevent="!unavailable || !tooltipText"
|
|
>
|
|
<div
|
|
v-track.new_integration_click="{ name: integration.id }"
|
|
role="button"
|
|
:class="{
|
|
'hover:bg-blue-50 group cursor-pointer': !unavailable,
|
|
'cursor-not-allowed': unavailable,
|
|
}"
|
|
class="bg-gray-50 border border-gray-200 rounded-md transition-colors p-4 pb-2 items-center justify-center w-[170px] h-[110px] flex flex-col relative"
|
|
@click="onClick"
|
|
>
|
|
<div class="flex justify-center">
|
|
<div
|
|
class="h-10 w-10 text-gray-500 group-hover:text-blue-500 transition-colors flex items-center"
|
|
>
|
|
<Icon
|
|
:name="integration.icon"
|
|
size="40px"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="flex-grow flex items-center">
|
|
<div class="text-gray-400 font-medium text-sm text-center">
|
|
{{ integration.name
|
|
}}<span
|
|
v-if="integration.coming_soon"
|
|
class="text-xs"
|
|
>
|
|
(coming soon)</span>
|
|
</div>
|
|
<Icon
|
|
v-if="integration.is_external"
|
|
class="inline h-4 w-4 ml-1 inline text-gray-500"
|
|
name="heroicons:arrow-top-right-on-square-20-solid"
|
|
/>
|
|
</div>
|
|
<pro-tag
|
|
v-if="integration?.is_pro === true"
|
|
class="absolute top-0 right-1"
|
|
/>
|
|
</div>
|
|
</UTooltip>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { computed } from 'vue'
|
|
import { useWorkspacesStore } from '@/stores/workspaces'
|
|
|
|
const emit = defineEmits(["select"])
|
|
const props = defineProps({
|
|
integration: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
})
|
|
|
|
const workspacesStore = useWorkspacesStore()
|
|
const currentWorkspace = computed(() => workspacesStore.getCurrent)
|
|
|
|
const unavailable = computed(() => {
|
|
return (
|
|
props.integration.coming_soon ||
|
|
(props.integration.requires_subscription && !currentWorkspace.value.is_pro)
|
|
)
|
|
})
|
|
|
|
const tooltipText = computed(() => {
|
|
if (props.integration.coming_soon) return "This integration is coming soon"
|
|
if (props.integration.requires_subscription && !currentWorkspace.value.is_pro )
|
|
return "You need a subscription to use this integration."
|
|
return null
|
|
})
|
|
|
|
const onClick = () => {
|
|
if (unavailable.value) return
|
|
emit("select", props.integration.id)
|
|
}
|
|
</script> |