diff --git a/apps/web/ce/components/workspace/settings/useMemberColumns.tsx b/apps/web/ce/components/workspace/settings/useMemberColumns.tsx index 8f2286a6f53..b8ed09087ea 100644 --- a/apps/web/ce/components/workspace/settings/useMemberColumns.tsx +++ b/apps/web/ce/components/workspace/settings/useMemberColumns.tsx @@ -1,6 +1,6 @@ import { useState } from "react"; import { useParams } from "next/navigation"; -import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EUserPermissions, EUserPermissionsLevel, LOGIN_MEDIUM_LABELS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { renderFormattedDate } from "@plane/utils"; import { MemberHeaderColumn } from "@/components/project/member-header-column"; @@ -29,6 +29,7 @@ export const useMemberColumns = () => { const isAdmin = allowPermissions([EUserPermissions.ADMIN], EUserPermissionsLevel.WORKSPACE); const isSuspended = (rowData: RowData) => rowData.is_active === false; + // handlers const handleDisplayFilterUpdate = (filterUpdates: Partial) => { updateFilters(filterUpdates); @@ -49,7 +50,7 @@ export const useMemberColumns = () => { tdRender: (rowData: RowData) => ( { handleDisplayFilterUpdate={handleDisplayFilterUpdate} /> ), - tdRender: (rowData: RowData) => , + tdRender: (rowData: RowData) => , }, { key: "Authentication", content: t("workspace_settings.settings.members.details.authentication"), - tdRender: (rowData: RowData) => - isSuspended(rowData) ? null : ( -
{rowData.member.last_login_medium?.replace("-", " ")}
- ), + tdRender: (rowData: RowData) => { + if (isSuspended(rowData)) return null; + const loginMedium = rowData.member.last_login_medium; + if (!loginMedium) return null; + return
{LOGIN_MEDIUM_LABELS[loginMedium]}
; + }, }, { diff --git a/packages/constants/src/auth/core.ts b/packages/constants/src/auth/core.ts new file mode 100644 index 00000000000..a7693487923 --- /dev/null +++ b/packages/constants/src/auth/core.ts @@ -0,0 +1,10 @@ +import type { TCoreLoginMediums } from "@plane/types"; + +export const CORE_LOGIN_MEDIUM_LABELS: Record = { + email: "Email", + "magic-code": "Magic code", + github: "GitHub", + gitlab: "GitLab", + google: "Google", + gitea: "Gitea", +}; diff --git a/packages/constants/src/auth/extended.ts b/packages/constants/src/auth/extended.ts new file mode 100644 index 00000000000..97eb974bd1e --- /dev/null +++ b/packages/constants/src/auth/extended.ts @@ -0,0 +1,3 @@ +import type { TExtendedLoginMediums } from "@plane/types"; + +export const EXTENDED_LOGIN_MEDIUM_LABELS: Record = {}; diff --git a/packages/constants/src/auth.ts b/packages/constants/src/auth/index.ts similarity index 93% rename from packages/constants/src/auth.ts rename to packages/constants/src/auth/index.ts index 953375c0e52..2c52598e336 100644 --- a/packages/constants/src/auth.ts +++ b/packages/constants/src/auth/index.ts @@ -1,3 +1,7 @@ +import type { TLoginMediums } from "@plane/types"; +import { CORE_LOGIN_MEDIUM_LABELS } from "./core"; +import { EXTENDED_LOGIN_MEDIUM_LABELS } from "./extended"; + export enum E_PASSWORD_STRENGTH { EMPTY = "empty", LENGTH_NOT_VALID = "length_not_valid", @@ -156,3 +160,8 @@ export enum EAuthErrorCodes { // Rate limit RATE_LIMIT_EXCEEDED = "5900", } + +export const LOGIN_MEDIUM_LABELS: Record = { + ...CORE_LOGIN_MEDIUM_LABELS, + ...EXTENDED_LOGIN_MEDIUM_LABELS, +} as const; diff --git a/packages/types/src/instance/auth-ee.ts b/packages/types/src/instance/auth-ee.ts new file mode 100644 index 00000000000..5bead56aaa7 --- /dev/null +++ b/packages/types/src/instance/auth-ee.ts @@ -0,0 +1 @@ +export type TExtendedLoginMediums = never; diff --git a/packages/types/src/instance/auth.ts b/packages/types/src/instance/auth.ts index c65f9ebb8b8..5024849e900 100644 --- a/packages/types/src/instance/auth.ts +++ b/packages/types/src/instance/auth.ts @@ -43,3 +43,5 @@ export type TGetBaseAuthenticationModeProps = { updateConfig: (key: TInstanceAuthenticationMethodKeys, value: string) => void; resolvedTheme: string | undefined; }; + +export type TCoreLoginMediums = "email" | "magic-code" | "github" | "gitlab" | "google" | "gitea"; diff --git a/packages/types/src/instance/base.ts b/packages/types/src/instance/base.ts index 975e1238609..10aa0d39ab0 100644 --- a/packages/types/src/instance/base.ts +++ b/packages/types/src/instance/base.ts @@ -5,7 +5,9 @@ import type { TInstanceImageConfigurationKeys, TInstanceAuthenticationKeys, TInstanceWorkspaceConfigurationKeys, + TCoreLoginMediums, } from "./"; +import type { TExtendedLoginMediums } from "./auth-ee"; export interface IInstanceInfo { instance: IInstance; @@ -98,3 +100,5 @@ export interface IInstanceConfiguration { export type IFormattedInstanceConfiguration = { [key in TInstanceConfigurationKeys]: string; }; + +export type TLoginMediums = TCoreLoginMediums | TExtendedLoginMediums; diff --git a/packages/types/src/instance/index.ts b/packages/types/src/instance/index.ts index bc6474b832f..ec67eb273aa 100644 --- a/packages/types/src/instance/index.ts +++ b/packages/types/src/instance/index.ts @@ -1,5 +1,6 @@ export * from "./ai"; export * from "./auth"; +export * from "./auth-ee"; export * from "./base"; export * from "./email"; export * from "./image"; diff --git a/packages/types/src/users.ts b/packages/types/src/users.ts index ef1bfa5a2df..9278996a7ab 100644 --- a/packages/types/src/users.ts +++ b/packages/types/src/users.ts @@ -1,5 +1,6 @@ import type { TUserPermissions } from "./enums"; import type { IIssueActivity, TIssuePriorities, TStateGroups } from "."; +import type { TLoginMediums } from "./instance"; /** * @description The start of the week for the user @@ -15,8 +16,6 @@ export enum EStartOfTheWeek { SATURDAY = 6, } -export type TLoginMediums = "email" | "magic-code" | "github" | "gitlab" | "google"; - export interface IUserLite { avatar_url: string; display_name: string; diff --git a/packages/types/src/workspace.ts b/packages/types/src/workspace.ts index 356d0993ec0..aee3c3f3491 100644 --- a/packages/types/src/workspace.ts +++ b/packages/types/src/workspace.ts @@ -3,6 +3,7 @@ import type { ICycle } from "./cycle"; import type { TUserPermissions } from "./enums"; import type { TProjectMembership } from "./project"; import type { IUser, IUserLite } from "./users"; +import type { TLoginMediums } from "./instance"; import type { IWorkspaceViewProps } from "./view-props"; export enum EUserWorkspaceRoles { @@ -82,7 +83,7 @@ export interface IWorkspaceMember { last_name?: string; joining_date?: string; display_name?: string; - last_login_medium?: string; + last_login_medium?: TLoginMediums; is_active?: boolean; }