mirror of https://github.com/nocodb/nocodb
23 changed files with 375 additions and 214 deletions
@ -0,0 +1,74 @@
|
||||
<script lang="ts" setup> |
||||
import { RoleColors, RoleIcons, RoleLabels } from 'nocodb-sdk' |
||||
import { toRef } from '#imports' |
||||
|
||||
const props = withDefaults( |
||||
defineProps<{ |
||||
role: keyof typeof RoleLabels |
||||
clickable?: boolean |
||||
inherit?: boolean |
||||
border?: boolean |
||||
}>(), |
||||
{ |
||||
clickable: false, |
||||
inherit: false, |
||||
border: true, |
||||
}, |
||||
) |
||||
|
||||
const roleRef = toRef(props, 'role') |
||||
const clickableRef = toRef(props, 'clickable') |
||||
const inheritRef = toRef(props, 'inherit') |
||||
const borderRef = toRef(props, 'border') |
||||
|
||||
const roleProperties = computed(() => { |
||||
const role = roleRef.value |
||||
|
||||
const color = RoleColors[role] |
||||
const icon = RoleIcons[role] |
||||
const label = RoleLabels[role] |
||||
|
||||
return { |
||||
color, |
||||
icon, |
||||
label, |
||||
} |
||||
}) |
||||
</script> |
||||
|
||||
<template> |
||||
<div |
||||
class="flex items-center !border-0" |
||||
:class="{ |
||||
'cursor-pointer': clickableRef, |
||||
}" |
||||
style="width: fit-content" |
||||
> |
||||
<NcBadge class="!h-auto !px-[8px]" :color="roleProperties.color" :border="borderRef"> |
||||
<div |
||||
class="badge-text flex items-center gap-[4px]" |
||||
:class="{ |
||||
'text-purple-500': roleProperties.color === 'purple', |
||||
'text-blue-500': roleProperties.color === 'blue', |
||||
'text-green-500': roleProperties.color === 'green', |
||||
'text-orange-500': roleProperties.color === 'orange', |
||||
'text-yellow-500': roleProperties.color === 'yellow', |
||||
'text-red-500': roleProperties.color === 'red', |
||||
'text-gray-300': !roleProperties.color, |
||||
}" |
||||
> |
||||
<GeneralIcon :icon="roleProperties.icon" /> |
||||
{{ roleProperties.label }} |
||||
<GeneralIcon v-if="clickableRef" icon="arrowDown" /> |
||||
</div> |
||||
</NcBadge> |
||||
<div class="flex-1"></div> |
||||
<!-- |
||||
<a-tooltip v-if="inheritRef" placement="bottom"> |
||||
<div class="text-gray-400 text-xs p-1 rounded-md">Workspace Role</div> |
||||
</a-tooltip> |
||||
--> |
||||
</div> |
||||
</template> |
||||
|
||||
<style scoped lang="scss"></style> |
@ -0,0 +1,57 @@
|
||||
<script lang="ts" setup> |
||||
import { RoleDescriptions } from 'nocodb-sdk' |
||||
import type { RoleLabels } from 'nocodb-sdk' |
||||
import { toRef } from '#imports' |
||||
|
||||
const props = withDefaults( |
||||
defineProps<{ |
||||
role: keyof typeof RoleLabels |
||||
roles: (keyof typeof RoleLabels)[] |
||||
description?: boolean |
||||
inherit?: string |
||||
onRoleChange: (role: keyof typeof RoleLabels) => void |
||||
}>(), |
||||
{ |
||||
description: true, |
||||
}, |
||||
) |
||||
|
||||
const roleRef = toRef(props, 'role') |
||||
const inheritRef = toRef(props, 'inherit') |
||||
const descriptionRef = toRef(props, 'description') |
||||
</script> |
||||
|
||||
<template> |
||||
<NcDropdown> |
||||
<RolesBadge class="border-1" data-testid="roles" :role="roleRef" :inherit="inheritRef === role" clickable /> |
||||
<template #overlay> |
||||
<div class="nc-role-select-dropdown flex flex-col gap-[4px] p-1"> |
||||
<div class="flex flex-col gap-[4px]"> |
||||
<div v-for="rl in props.roles" :key="rl" :value="rl" :selected="rl === roleRef" @click="props.onRoleChange(rl)"> |
||||
<div |
||||
class="flex flex-col py-[3px] px-[8px] gap-[4px] bg-transparent cursor-pointer" |
||||
:class="{ |
||||
'w-[350px]': descriptionRef, |
||||
'w-[200px]': !descriptionRef, |
||||
}" |
||||
> |
||||
<div class="flex items-center justify-between"> |
||||
<RolesBadge |
||||
class="!bg-white hover:!bg-gray-100" |
||||
:class="`nc-role-select-${rl}`" |
||||
:role="rl" |
||||
:inherit="inheritRef === rl" |
||||
:border="false" |
||||
/> |
||||
<GeneralIcon v-if="rl === roleRef" icon="check" /> |
||||
</div> |
||||
<div v-if="descriptionRef" class="text-gray-500">{{ RoleDescriptions[rl] }}</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</template> |
||||
</NcDropdown> |
||||
</template> |
||||
|
||||
<style scoped lang="scss"></style> |
Loading…
Reference in new issue