Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 12 additions & 9 deletions apiserver/plane/app/serializers/workspace.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class Meta:
class WorkspaceLiteSerializer(BaseSerializer):
class Meta:
model = Workspace
fields = ["name", "slug", "id"]
fields = ["name", "slug", "id", "logo_url"]
read_only_fields = fields


Expand Down Expand Up @@ -90,9 +90,11 @@ class Meta:


class WorkSpaceMemberInviteSerializer(BaseSerializer):
workspace = WorkSpaceSerializer(read_only=True)
total_members = serializers.IntegerField(read_only=True)
created_by_detail = UserLiteSerializer(read_only=True, source="created_by")
workspace = WorkspaceLiteSerializer(read_only=True)
invite_link = serializers.SerializerMethodField()

def get_invite_link(self, obj):
return f"/workspace-invitations/?invitation_id={obj.id}&email={obj.email}&slug={obj.workspace.slug}"

class Meta:
model = WorkspaceMemberInvite
Expand All @@ -106,6 +108,7 @@ class Meta:
"responded_at",
"created_at",
"updated_at",
"invite_link",
]


Expand Down Expand Up @@ -148,12 +151,12 @@ def validate_url(self, value):

def create(self, validated_data):
# Filtering the WorkspaceUserLink with the given url to check if the link already exists.

url = validated_data.get("url")

workspace_user_link = WorkspaceUserLink.objects.filter(
url=url,
workspace_id=validated_data.get("workspace_id"),
url=url,
workspace_id=validated_data.get("workspace_id"),
owner_id=validated_data.get("owner_id")
)

Expand All @@ -170,8 +173,8 @@ def update(self, instance, validated_data):
url = validated_data.get("url")

workspace_user_link = WorkspaceUserLink.objects.filter(
url=url,
workspace_id=instance.workspace_id,
url=url,
workspace_id=instance.workspace_id,
owner=instance.owner
)

Expand Down
3 changes: 1 addition & 2 deletions apiserver/plane/app/views/workspace/invite.py
Original file line number Diff line number Diff line change
Expand Up @@ -251,8 +251,7 @@ def get_queryset(self):
super()
.get_queryset()
.filter(email=self.request.user.email)
.select_related("workspace", "workspace__owner", "created_by")
.annotate(total_members=Count("workspace__workspace_member"))
.select_related("workspace")
)

@invalidate_cache(path="/api/workspaces/", user=False)
Expand Down
5 changes: 4 additions & 1 deletion packages/i18n/src/locales/en/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -672,7 +672,9 @@
"disconnect": "Disconnect",
"disconnecting": "Disconnecting",
"installing": "Installing",
"install": "Install"
"install": "Install",
"pending": "Pending",
"invite": "Invite"
},

"form": {
Expand Down Expand Up @@ -1279,6 +1281,7 @@
"members": {
"title": "Members",
"add_member": "Add member",
"pending_invites": "Pending invites",
"invitations_sent_successfully": "Invitations sent successfully",
"leave_confirmation": "Are you sure you want to leave the workspace? You will no longer have access to this workspace. This action cannot be undone.",
"details": {
Expand Down
5 changes: 4 additions & 1 deletion packages/i18n/src/locales/es/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -842,7 +842,9 @@
"disconnect": "Desconectar",
"disconnecting": "Desconectando",
"installing": "Instalando",
"install": "Instalar"
"install": "Instalar",
"pending": "Pendiente",
"invite": "Invitar"
},

"form": {
Expand Down Expand Up @@ -1448,6 +1450,7 @@
"members": {
"title": "Miembros",
"add_member": "Agregar miembro",
"pending_invites": "Invitaciones pendientes",
"invitations_sent_successfully": "Invitaciones enviadas exitosamente",
"leave_confirmation": "¿Estás seguro de que quieres abandonar el espacio de trabajo? Ya no tendrás acceso a este espacio de trabajo. Esta acción no se puede deshacer.",
"details": {
Expand Down
5 changes: 4 additions & 1 deletion packages/i18n/src/locales/fr/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -842,7 +842,9 @@
"disconnect": "Déconnecter",
"disconnecting": "Déconnexion",
"installing": "Installation",
"install": "Installer"
"install": "Installer",
"pending": "En attente",
"invite": "Inviter"
},

"form": {
Expand Down Expand Up @@ -1448,6 +1450,7 @@
"members": {
"title": "Membres",
"add_member": "Ajouter un membre",
"pending_invites": "Invitations en attente",
"invitations_sent_successfully": "Invitations envoyées avec succès",
"leave_confirmation": "Êtes-vous sûr de vouloir quitter l'espace de travail ? Vous n'aurez plus accès à cet espace de travail. Cette action ne peut pas être annulée.",
"details": {
Expand Down
5 changes: 4 additions & 1 deletion packages/i18n/src/locales/ja/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -842,7 +842,9 @@
"disconnect": "切断",
"disconnecting": "切断中",
"installing": "インストール中",
"install": "インストール"
"install": "インストール",
"pending": "保留中",
"invite": "招待"
},

"form": {
Expand Down Expand Up @@ -1448,6 +1450,7 @@
"members": {
"title": "メンバー",
"add_member": "メンバーを追加",
"pending_invites": "保留中の招待",
"invitations_sent_successfully": "招待が正常に送信されました",
"leave_confirmation": "ワークスペースから退出してもよろしいですか?このワークスペースにアクセスできなくなります。この操作は取り消せません。",
"details": {
Expand Down
5 changes: 4 additions & 1 deletion packages/i18n/src/locales/zh-CN/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -842,7 +842,9 @@
"disconnect": "断开连接",
"disconnecting": "正在断开连接",
"installing": "正在安装",
"install": "安装"
"install": "安装",
"pending": "待处理",
"invite": "邀请"
},

"form": {
Expand Down Expand Up @@ -1448,6 +1450,7 @@
"members": {
"title": "成员",
"add_member": "添加成员",
"pending_invites": "待处理邀请",
"invitations_sent_successfully": "邀请发送成功",
"leave_confirmation": "您确定要离开工作区吗?您将无法再访问此工作区。此操作无法撤消。",
"details": {
Expand Down
3 changes: 2 additions & 1 deletion packages/types/src/workspace.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,10 @@ export interface IWorkspaceMemberInvitation {
responded_at: Date;
role: TUserPermissions;
token: string;
invite_link: string;
workspace: {
id: string;
logo: string;
logo_url: string;
name: string;
slug: string;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ const WorkspaceMembersSettingsPage = observer(() => {
onSubmit={handleWorkspaceInvite}
/>
<section
className={cn("w-full overflow-y-auto", {
className={cn("w-full h-full overflow-y-auto", {
"opacity-60": !canPerformWorkspaceMemberActions,
})}
>
Expand Down
21 changes: 6 additions & 15 deletions web/app/invitations/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import type { IWorkspaceMemberInvitation } from "@plane/types";
import { Button, TOAST_TYPE, setToast } from "@plane/ui";
// components
import { EmptyState } from "@/components/common";
import { WorkspaceLogo } from "@/components/workspace/logo";
import { USER_WORKSPACES_LIST } from "@/constants/fetch-keys";
// helpers
import { truncateText } from "@/helpers/string.helper";
Expand Down Expand Up @@ -167,21 +168,11 @@ const UserInvitationsPage = observer(() => {
onClick={() => handleInvitation(invitation, isSelected ? "withdraw" : "accepted")}
>
<div className="flex-shrink-0">
<div className="grid h-9 w-9 place-items-center rounded">
{invitation.workspace.logo && invitation.workspace.logo.trim() !== "" ? (
<img
src={invitation.workspace.logo}
height="100%"
width="100%"
className="rounded"
alt={invitation.workspace.name}
/>
) : (
<span className="grid h-9 w-9 place-items-center rounded bg-gray-700 px-3 py-1.5 uppercase text-white">
{invitation.workspace.name[0]}
</span>
)}
</div>
<WorkspaceLogo
logo={invitation.workspace.logo_url}
name={invitation.workspace.name}
classNames="size-9 flex-shrink-0"
/>
</div>
<div className="min-w-0 flex-1">
<div className="text-sm font-medium">{truncateText(invitation.workspace.name, 30)}</div>
Expand Down
2 changes: 1 addition & 1 deletion web/core/components/account/auth-forms/auth-header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ export const AuthHeader: FC<TAuthHeader> = observer((props) => {
header: (
<div className="relative inline-flex items-center gap-2">
{t("common.join")}{" "}
<WorkspaceLogo logo={workspace?.logo} name={workspace?.name} classNames="w-8 h-9 flex-shrink-0" />{" "}
<WorkspaceLogo logo={workspace?.logo_url} name={workspace?.name} classNames="size-9 flex-shrink-0" />{" "}
{workspace.name}
</div>
),
Expand Down
21 changes: 6 additions & 15 deletions web/core/components/onboarding/invitations.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { IWorkspaceMemberInvitation } from "@plane/types";
import { Button, Checkbox, Spinner } from "@plane/ui";
// constants
// helpers
import { WorkspaceLogo } from "@/components/workspace/logo";
import { truncateText } from "@/helpers/string.helper";
import { getUserRole } from "@/helpers/user.helper";
// hooks
Expand Down Expand Up @@ -94,21 +95,11 @@ export const Invitations: React.FC<Props> = (props) => {
onClick={() => handleInvitation(invitation, isSelected ? "withdraw" : "accepted")}
>
<div className="flex-shrink-0">
<div className="grid h-9 w-9 place-items-center rounded">
{invitedWorkspace?.logo && invitedWorkspace.logo !== "" ? (
<img
src={invitedWorkspace.logo}
height="100%"
width="100%"
className="rounded"
alt={invitedWorkspace.name}
/>
) : (
<span className="grid h-9 w-9 place-items-center rounded bg-gray-700 px-3 py-1.5 uppercase text-white">
{invitedWorkspace?.name[0]}
</span>
)}
</div>
<WorkspaceLogo
logo={invitedWorkspace?.logo_url}
name={invitedWorkspace?.name}
classNames="size-9 flex-shrink-0"
/>
</div>
<div className="min-w-0 flex-1">
<div className="text-sm font-medium">{truncateText(invitedWorkspace?.name, 30)}</div>
Expand Down
Loading