|
@@ -2,9 +2,9 @@
|
|
<SmartModal v-if="show" :title="t('team.invite')" @close="hideModal">
|
|
<SmartModal v-if="show" :title="t('team.invite')" @close="hideModal">
|
|
<template #body>
|
|
<template #body>
|
|
<div v-if="sendInvitesResult.length" class="flex flex-col px-4">
|
|
<div v-if="sendInvitesResult.length" class="flex flex-col px-4">
|
|
- <div class="flex flex-col max-w-md justify-center items-center">
|
|
|
|
- <SmartIcon class="h-6 text-accent w-6" name="users" />
|
|
|
|
- <h3 class="my-2 text-center text-lg">
|
|
|
|
|
|
+ <div class="flex flex-col items-center justify-center max-w-md">
|
|
|
|
+ <SmartIcon class="w-6 h-6 text-accent" name="users" />
|
|
|
|
+ <h3 class="my-2 text-lg text-center">
|
|
{{ t("team.we_sent_invite_link") }}
|
|
{{ t("team.we_sent_invite_link") }}
|
|
</h3>
|
|
</h3>
|
|
<p class="text-center">
|
|
<p class="text-center">
|
|
@@ -14,12 +14,13 @@
|
|
<div
|
|
<div
|
|
class="
|
|
class="
|
|
flex
|
|
flex
|
|
- border border-dividerLight
|
|
|
|
- mt-8
|
|
|
|
- rounded
|
|
|
|
|
|
+ border-dividerLight
|
|
flex-col
|
|
flex-col
|
|
- space-y-6
|
|
|
|
p-4
|
|
p-4
|
|
|
|
+ mt-8
|
|
|
|
+ space-y-6
|
|
|
|
+ border
|
|
|
|
+ rounded
|
|
"
|
|
"
|
|
>
|
|
>
|
|
<div
|
|
<div
|
|
@@ -28,7 +29,7 @@
|
|
>
|
|
>
|
|
<p class="flex items-center">
|
|
<p class="flex items-center">
|
|
<i
|
|
<i
|
|
- class="material-icons mr-4"
|
|
|
|
|
|
+ class="mr-4 material-icons"
|
|
:class="
|
|
:class="
|
|
invitee.status === 'error' ? 'text-red-500' : 'text-green-500'
|
|
invitee.status === 'error' ? 'text-red-500' : 'text-green-500'
|
|
"
|
|
"
|
|
@@ -41,7 +42,7 @@
|
|
</i>
|
|
</i>
|
|
<span class="truncate">{{ invitee.email }}</span>
|
|
<span class="truncate">{{ invitee.email }}</span>
|
|
</p>
|
|
</p>
|
|
- <p v-if="invitee.status === 'error'" class="ml-8 text-red-500 mt-2">
|
|
|
|
|
|
+ <p v-if="invitee.status === 'error'" class="mt-2 ml-8 text-red-500">
|
|
{{ getErrorMessage(invitee.error) }}
|
|
{{ getErrorMessage(invitee.error) }}
|
|
</p>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
@@ -49,20 +50,20 @@
|
|
</div>
|
|
</div>
|
|
<div
|
|
<div
|
|
v-else-if="sendingInvites"
|
|
v-else-if="sendingInvites"
|
|
- class="flex p-4 items-center justify-center"
|
|
|
|
|
|
+ class="flex items-center justify-center p-4"
|
|
>
|
|
>
|
|
<SmartSpinner />
|
|
<SmartSpinner />
|
|
</div>
|
|
</div>
|
|
<div v-else class="flex flex-col px-2">
|
|
<div v-else class="flex flex-col px-2">
|
|
- <div class="flex flex-1 justify-between items-center">
|
|
|
|
- <label for="memberList" class="pb-4 px-4">
|
|
|
|
|
|
+ <div class="flex items-center justify-between flex-1">
|
|
|
|
+ <label for="memberList" class="px-4 pb-4">
|
|
{{ t("team.pending_invites") }}
|
|
{{ t("team.pending_invites") }}
|
|
</label>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
- <div class="divide-y divide-dividerLight border-divider border rounded">
|
|
|
|
|
|
+ <div class="border rounded divide-dividerLight border-divider divide-y">
|
|
<div
|
|
<div
|
|
v-if="pendingInvites.loading"
|
|
v-if="pendingInvites.loading"
|
|
- class="flex p-4 items-center justify-center"
|
|
|
|
|
|
+ class="flex items-center justify-center p-4"
|
|
>
|
|
>
|
|
<SmartSpinner />
|
|
<SmartSpinner />
|
|
</div>
|
|
</div>
|
|
@@ -74,16 +75,17 @@
|
|
v-for="(invitee, index) in pendingInvites.data.right.team
|
|
v-for="(invitee, index) in pendingInvites.data.right.team
|
|
.teamInvitations"
|
|
.teamInvitations"
|
|
:key="`invitee-${index}`"
|
|
:key="`invitee-${index}`"
|
|
- class="divide-x divide-dividerLight flex"
|
|
|
|
|
|
+ class="flex divide-dividerLight divide-x"
|
|
>
|
|
>
|
|
<input
|
|
<input
|
|
v-if="invitee"
|
|
v-if="invitee"
|
|
class="
|
|
class="
|
|
- bg-transparent
|
|
|
|
- flex flex-1
|
|
|
|
|
|
+ flex
|
|
text-secondaryLight
|
|
text-secondaryLight
|
|
- py-2
|
|
|
|
|
|
+ flex-1
|
|
px-4
|
|
px-4
|
|
|
|
+ py-2
|
|
|
|
+ bg-transparent
|
|
"
|
|
"
|
|
:placeholder="`${t('team.email')}`"
|
|
:placeholder="`${t('team.email')}`"
|
|
:name="'param' + index"
|
|
:name="'param' + index"
|
|
@@ -92,11 +94,12 @@
|
|
/>
|
|
/>
|
|
<input
|
|
<input
|
|
class="
|
|
class="
|
|
- bg-transparent
|
|
|
|
- flex flex-1
|
|
|
|
|
|
+ flex
|
|
text-secondaryLight
|
|
text-secondaryLight
|
|
- py-2
|
|
|
|
|
|
+ flex-1
|
|
px-4
|
|
px-4
|
|
|
|
+ py-2
|
|
|
|
+ bg-transparent
|
|
"
|
|
"
|
|
:placeholder="`${t('team.permissions')}`"
|
|
:placeholder="`${t('team.permissions')}`"
|
|
:name="'value' + index"
|
|
:name="'value' + index"
|
|
@@ -124,11 +127,12 @@
|
|
pendingInvites.data.right.team.teamInvitations.length === 0
|
|
pendingInvites.data.right.team.teamInvitations.length === 0
|
|
"
|
|
"
|
|
class="
|
|
class="
|
|
- flex flex-col
|
|
|
|
|
|
+ flex
|
|
text-secondaryLight
|
|
text-secondaryLight
|
|
- p-4
|
|
|
|
|
|
+ flex-col
|
|
items-center
|
|
items-center
|
|
justify-center
|
|
justify-center
|
|
|
|
+ p-4
|
|
"
|
|
"
|
|
>
|
|
>
|
|
<span class="text-center">
|
|
<span class="text-center">
|
|
@@ -137,14 +141,14 @@
|
|
</div>
|
|
</div>
|
|
<div
|
|
<div
|
|
v-if="!pendingInvites.loading && E.isLeft(pendingInvites.data)"
|
|
v-if="!pendingInvites.loading && E.isLeft(pendingInvites.data)"
|
|
- class="flex flex-col p-4 items-center"
|
|
|
|
|
|
+ class="flex flex-col items-center p-4"
|
|
>
|
|
>
|
|
<i class="mb-4 material-icons">help_outline</i>
|
|
<i class="mb-4 material-icons">help_outline</i>
|
|
{{ t("error.something_went_wrong") }}
|
|
{{ t("error.something_went_wrong") }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <div class="flex pt-4 flex-1 justify-between items-center">
|
|
|
|
|
|
+ <div class="flex items-center justify-between flex-1 pt-4">
|
|
<label for="memberList" class="p-4">
|
|
<label for="memberList" class="p-4">
|
|
{{ t("team.invite_tooltip") }}
|
|
{{ t("team.invite_tooltip") }}
|
|
</label>
|
|
</label>
|
|
@@ -157,15 +161,15 @@
|
|
/>
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <div class="divide-y divide-dividerLight border-divider border rounded">
|
|
|
|
|
|
+ <div class="border rounded divide-dividerLight border-divider divide-y">
|
|
<div
|
|
<div
|
|
v-for="(invitee, index) in newInvites"
|
|
v-for="(invitee, index) in newInvites"
|
|
:key="`new-invitee-${index}`"
|
|
:key="`new-invitee-${index}`"
|
|
- class="divide-x divide-dividerLight flex"
|
|
|
|
|
|
+ class="flex divide-dividerLight divide-x"
|
|
>
|
|
>
|
|
<input
|
|
<input
|
|
v-model="invitee.key"
|
|
v-model="invitee.key"
|
|
- class="bg-transparent flex flex-1 py-2 px-4"
|
|
|
|
|
|
+ class="flex flex-1 px-4 py-2 bg-transparent"
|
|
:placeholder="`${t('team.email')}`"
|
|
:placeholder="`${t('team.email')}`"
|
|
:name="'invitee' + index"
|
|
:name="'invitee' + index"
|
|
autofocus
|
|
autofocus
|
|
@@ -182,11 +186,11 @@
|
|
<span class="select-wrapper">
|
|
<span class="select-wrapper">
|
|
<input
|
|
<input
|
|
class="
|
|
class="
|
|
- bg-transparent
|
|
|
|
- cursor-pointer
|
|
|
|
flex flex-1
|
|
flex flex-1
|
|
- py-2
|
|
|
|
px-4
|
|
px-4
|
|
|
|
+ py-2
|
|
|
|
+ bg-transparent
|
|
|
|
+ cursor-pointer
|
|
"
|
|
"
|
|
:placeholder="`${t('team.permissions')}`"
|
|
:placeholder="`${t('team.permissions')}`"
|
|
:name="'value' + index"
|
|
:name="'value' + index"
|
|
@@ -242,27 +246,29 @@
|
|
<div
|
|
<div
|
|
v-if="newInvites.length === 0"
|
|
v-if="newInvites.length === 0"
|
|
class="
|
|
class="
|
|
- flex flex-col
|
|
|
|
|
|
+ flex
|
|
text-secondaryLight
|
|
text-secondaryLight
|
|
- p-4
|
|
|
|
|
|
+ flex-col
|
|
items-center
|
|
items-center
|
|
justify-center
|
|
justify-center
|
|
|
|
+ p-4
|
|
"
|
|
"
|
|
>
|
|
>
|
|
<img
|
|
<img
|
|
:src="`/images/states/${$colorMode.value}/add_group.svg`"
|
|
:src="`/images/states/${$colorMode.value}/add_group.svg`"
|
|
loading="lazy"
|
|
loading="lazy"
|
|
class="
|
|
class="
|
|
|
|
+ object-contain
|
|
|
|
+ inline-flex
|
|
flex-col
|
|
flex-col
|
|
- mb-4
|
|
|
|
- object-contain object-center
|
|
|
|
- h-16
|
|
|
|
|
|
+ object-center
|
|
w-16
|
|
w-16
|
|
- inline-flex
|
|
|
|
|
|
+ h-16
|
|
|
|
+ mb-4
|
|
"
|
|
"
|
|
:alt="`${t('empty.invites')}`"
|
|
:alt="`${t('empty.invites')}`"
|
|
/>
|
|
/>
|
|
- <span class="text-center pb-4">
|
|
|
|
|
|
+ <span class="pb-4 text-center">
|
|
{{ t("empty.invites") }}
|
|
{{ t("empty.invites") }}
|
|
</span>
|
|
</span>
|
|
<ButtonSecondary
|
|
<ButtonSecondary
|
|
@@ -275,30 +281,33 @@
|
|
<div
|
|
<div
|
|
v-if="newInvites.length"
|
|
v-if="newInvites.length"
|
|
class="
|
|
class="
|
|
|
|
+ flex
|
|
|
|
+ border-dividerLight
|
|
|
|
+ flex-col
|
|
|
|
+ items-start
|
|
px-4
|
|
px-4
|
|
- mt-4
|
|
|
|
py-4
|
|
py-4
|
|
|
|
+ mt-4
|
|
|
|
+ border
|
|
rounded
|
|
rounded
|
|
- border border-dividerLight
|
|
|
|
- flex flex-col
|
|
|
|
- items-start
|
|
|
|
"
|
|
"
|
|
>
|
|
>
|
|
<span
|
|
<span
|
|
class="
|
|
class="
|
|
- mb-4
|
|
|
|
- px-2
|
|
|
|
- py-1
|
|
|
|
|
|
+ bg-primaryDark
|
|
|
|
+ border-divider
|
|
flex
|
|
flex
|
|
- justify-center
|
|
|
|
items-center
|
|
items-center
|
|
|
|
+ justify-center
|
|
|
|
+ px-2
|
|
|
|
+ py-1
|
|
|
|
+ mb-4
|
|
font-semibold
|
|
font-semibold
|
|
|
|
+ border
|
|
rounded-full
|
|
rounded-full
|
|
- bg-primaryDark
|
|
|
|
- border border-divider
|
|
|
|
"
|
|
"
|
|
>
|
|
>
|
|
- <i class="text-secondaryLight mr-2 material-icons">help_outline</i>
|
|
|
|
|
|
+ <i class="mr-2 text-secondaryLight material-icons">help_outline</i>
|
|
{{ t("profile.roles") }}
|
|
{{ t("profile.roles") }}
|
|
</span>
|
|
</span>
|
|
<p>
|
|
<p>
|
|
@@ -310,12 +319,12 @@
|
|
<li class="flex">
|
|
<li class="flex">
|
|
<span
|
|
<span
|
|
class="
|
|
class="
|
|
- font-semibold
|
|
|
|
text-secondaryDark
|
|
text-secondaryDark
|
|
- uppercase
|
|
|
|
- truncate
|
|
|
|
max-w-16
|
|
max-w-16
|
|
w-1/4
|
|
w-1/4
|
|
|
|
+ font-semibold
|
|
|
|
+ uppercase
|
|
|
|
+ truncate
|
|
"
|
|
"
|
|
>
|
|
>
|
|
{{ t("profile.owner") }}
|
|
{{ t("profile.owner") }}
|
|
@@ -327,12 +336,12 @@
|
|
<li class="flex">
|
|
<li class="flex">
|
|
<span
|
|
<span
|
|
class="
|
|
class="
|
|
- font-semibold
|
|
|
|
text-secondaryDark
|
|
text-secondaryDark
|
|
- uppercase
|
|
|
|
- truncate
|
|
|
|
max-w-16
|
|
max-w-16
|
|
w-1/4
|
|
w-1/4
|
|
|
|
+ font-semibold
|
|
|
|
+ uppercase
|
|
|
|
+ truncate
|
|
"
|
|
"
|
|
>
|
|
>
|
|
{{ t("profile.editor") }}
|
|
{{ t("profile.editor") }}
|
|
@@ -344,12 +353,12 @@
|
|
<li class="flex">
|
|
<li class="flex">
|
|
<span
|
|
<span
|
|
class="
|
|
class="
|
|
- font-semibold
|
|
|
|
text-secondaryDark
|
|
text-secondaryDark
|
|
- uppercase
|
|
|
|
- truncate
|
|
|
|
max-w-16
|
|
max-w-16
|
|
w-1/4
|
|
w-1/4
|
|
|
|
+ font-semibold
|
|
|
|
+ uppercase
|
|
|
|
+ truncate
|
|
"
|
|
"
|
|
>
|
|
>
|
|
{{ t("profile.viewer") }}
|
|
{{ t("profile.viewer") }}
|
|
@@ -365,7 +374,7 @@
|
|
<template #footer>
|
|
<template #footer>
|
|
<p
|
|
<p
|
|
v-if="sendInvitesResult.length"
|
|
v-if="sendInvitesResult.length"
|
|
- class="flex flex-1 text-secondaryLight justify-between"
|
|
|
|
|
|
+ class="flex justify-between flex-1 text-secondaryLight"
|
|
>
|
|
>
|
|
<SmartAnchor
|
|
<SmartAnchor
|
|
class="link"
|
|
class="link"
|