From 745bd1ff3a460ff5ec392d740c402b26bafe2c0f Mon Sep 17 00:00:00 2001
From: Abdul <106555838+AbdulTheActivePiecer@users.noreply.github.com>
Date: Sun, 22 Feb 2026 13:31:58 +0300
Subject: [PATCH 1/8] fix: add link to activepieces.com if on cloud (#11331)
---
.../piece-settings/connection-select.tsx | 2 +-
.../react-ui/src/app/routes/sign-in/index.tsx | 2 -
.../react-ui/src/app/routes/sign-up/index.tsx | 2 -
.../components/auth-form-template.tsx | 62 +++++++++++--------
4 files changed, 37 insertions(+), 31 deletions(-)
diff --git a/packages/react-ui/src/app/builder/step-settings/piece-settings/connection-select.tsx b/packages/react-ui/src/app/builder/step-settings/piece-settings/connection-select.tsx
index d5d812a8d66..e31344f4b76 100644
--- a/packages/react-ui/src/app/builder/step-settings/piece-settings/connection-select.tsx
+++ b/packages/react-ui/src/app/builder/step-settings/piece-settings/connection-select.tsx
@@ -144,7 +144,7 @@ function ConnectionSelect(params: ConnectionSelectProps) {
!field.disabled &&
selectedConnection &&
(!isGlobalConnection || isPLatformAdmin) && (
-
+
diff --git a/packages/react-ui/src/app/routes/sign-in/index.tsx b/packages/react-ui/src/app/routes/sign-in/index.tsx
index 2c57409f030..a3acd14d8d4 100644
--- a/packages/react-ui/src/app/routes/sign-in/index.tsx
+++ b/packages/react-ui/src/app/routes/sign-in/index.tsx
@@ -1,10 +1,8 @@
-import { FullLogo } from '@/components/ui/full-logo';
import { AuthFormTemplate } from '@/features/authentication/components/auth-form-template';
const SignInPage: React.FC = () => {
return (
);
diff --git a/packages/react-ui/src/app/routes/sign-up/index.tsx b/packages/react-ui/src/app/routes/sign-up/index.tsx
index c49f717d100..d07fe4b9223 100644
--- a/packages/react-ui/src/app/routes/sign-up/index.tsx
+++ b/packages/react-ui/src/app/routes/sign-up/index.tsx
@@ -1,10 +1,8 @@
-import { FullLogo } from '@/components/ui/full-logo';
import { AuthFormTemplate } from '@/features/authentication/components/auth-form-template';
const SignUpPage: React.FC = () => {
return (
);
diff --git a/packages/react-ui/src/features/authentication/components/auth-form-template.tsx b/packages/react-ui/src/features/authentication/components/auth-form-template.tsx
index df1b176cd22..e98b9f327c0 100644
--- a/packages/react-ui/src/features/authentication/components/auth-form-template.tsx
+++ b/packages/react-ui/src/features/authentication/components/auth-form-template.tsx
@@ -9,6 +9,7 @@ import {
CardHeader,
CardTitle,
} from '@/components/ui/card';
+import { FullLogo } from '@/components/ui/full-logo';
import { authenticationSession } from '@/lib/authentication-session';
import { useRedirectAfterLogin } from '@/lib/navigation-utils';
import {
@@ -77,6 +78,7 @@ const AuthFormTemplate = React.memo(
const { data: isEmailAuthEnabled } = flagsHooks.useFlag(
ApFlagId.EMAIL_AUTH_ENABLED,
);
+ const isCloud = window.location.hostname === 'cloud.activepieces.com';
const data = {
signin: {
title: t('Welcome Back!'),
@@ -101,35 +103,43 @@ const AuthFormTemplate = React.memo(
}
return (
-
- {!showCheckYourEmailNote && (
-
- {data.title}
- {data.description}
-
+ <>
+ {isCloud && (
+
+
+
)}
+ {!isCloud && }
+
+ {!showCheckYourEmailNote && (
+
+ {data.title}
+ {data.description}
+
+ )}
-
- {!showCheckYourEmailNote && }
-
- {isEmailAuthEnabled ? (
- isSignUp ? (
-
- ) : (
-
- )
- ) : null}
-
+
+ {!showCheckYourEmailNote && }
+
+ {isEmailAuthEnabled ? (
+ isSignUp ? (
+
+ ) : (
+
+ )
+ ) : null}
+
-
-
+
+
+ >
);
},
);
From 3014c8618061f249fcda94a1374a6c75c6be7a97 Mon Sep 17 00:00:00 2001
From: Hazem Adel
Date: Sun, 22 Feb 2026 13:49:14 +0200
Subject: [PATCH 2/8] refactor: improve roles selection in project members
settings (#11333)
---
.../project-settings/members/columns.tsx | 17 ++--
.../users/actions/update-user-dialog.tsx | 1 +
.../invite-user/invite-user-dialog.tsx | 46 ++--------
.../component/platform-role-select.tsx | 1 +
.../members/component/project-role-select.tsx | 87 ++++++++-----------
.../members/component/role-selector.tsx | 16 ++--
6 files changed, 64 insertions(+), 104 deletions(-)
diff --git a/packages/react-ui/src/app/components/project-settings/members/columns.tsx b/packages/react-ui/src/app/components/project-settings/members/columns.tsx
index 676cffcc7ea..30207120c48 100644
--- a/packages/react-ui/src/app/components/project-settings/members/columns.tsx
+++ b/packages/react-ui/src/app/components/project-settings/members/columns.tsx
@@ -17,7 +17,7 @@ import {
TooltipTrigger,
} from '@/components/ui/tooltip';
import { UserAvatar } from '@/components/ui/user-avatar';
-import { RoleDropdown } from '@/features/members/component/role-selector';
+import { RoleSelector } from '@/features/members/component/role-selector';
import { projectMembersApi } from '@/features/members/lib/project-members-api';
import { userInvitationApi } from '@/features/members/lib/user-invitation';
import { projectRoleApi } from '@/features/platform-admin/lib/project-role-api';
@@ -138,12 +138,15 @@ const RoleCell = ({
return (
-
+
+
+
);
};
diff --git a/packages/react-ui/src/app/routes/platform/users/actions/update-user-dialog.tsx b/packages/react-ui/src/app/routes/platform/users/actions/update-user-dialog.tsx
index f17f6a0e8c7..2f82154d965 100644
--- a/packages/react-ui/src/app/routes/platform/users/actions/update-user-dialog.tsx
+++ b/packages/react-ui/src/app/routes/platform/users/actions/update-user-dialog.tsx
@@ -80,6 +80,7 @@ export const UpdateUserDialog = ({
type="platform"
value={field.value}
onValueChange={field.onChange}
+ showDescriptionInTrigger={true}
/>
diff --git a/packages/react-ui/src/features/members/component/invite-user/invite-user-dialog.tsx b/packages/react-ui/src/features/members/component/invite-user/invite-user-dialog.tsx
index e7bfd928615..12ce6f5bd88 100644
--- a/packages/react-ui/src/features/members/component/invite-user/invite-user-dialog.tsx
+++ b/packages/react-ui/src/features/members/component/invite-user/invite-user-dialog.tsx
@@ -1,6 +1,6 @@
import { typeboxResolver } from '@hookform/resolvers/typebox';
import { Static, Type } from '@sinclair/typebox';
-import { useMutation, useQuery } from '@tanstack/react-query';
+import { useMutation } from '@tanstack/react-query';
import { t } from 'i18next';
import { CopyIcon } from 'lucide-react';
import { useState, useRef } from 'react';
@@ -29,9 +29,8 @@ import {
TooltipTrigger,
} from '@/components/ui/tooltip';
import { PlatformRoleSelect } from '@/features/members/component/platform-role-select';
-import { RoleSelector } from '@/features/members/component/role-selector';
+import { ProjectRoleSelect } from '@/features/members/component/project-role-select';
import { userInvitationApi } from '@/features/members/lib/user-invitation';
-import { projectRoleApi } from '@/features/platform-admin/lib/project-role-api';
import { useAuthorization } from '@/hooks/authorization-hooks';
import { platformHooks } from '@/hooks/platform-hooks';
import { projectCollectionUtils } from '@/hooks/project-collection';
@@ -39,7 +38,6 @@ import { HttpError } from '@/lib/api';
import { formatUtils } from '@/lib/utils';
import {
InvitationType,
- isNil,
Permission,
PlatformRole,
ProjectType,
@@ -141,18 +139,6 @@ export const InviteUserDialog = ({
},
});
- const { data: rolesData } = useQuery({
- queryKey: ['project-roles'],
- queryFn: () => projectRoleApi.list(),
- enabled:
- !isNil(platform.plan.projectRolesEnabled) &&
- platform.plan.projectRolesEnabled,
- });
-
- const roles = rolesData?.data ?? [];
- const defaultProjectRole =
- roles?.find((role) => role.name === 'Editor')?.name || roles?.[0]?.name;
-
const form = useForm({
resolver: typeboxResolver(FormSchema),
defaultValues: {
@@ -163,7 +149,7 @@ export const InviteUserDialog = ({
? InvitationType.PROJECT
: InvitationType.PLATFORM,
platformRole: PlatformRole.MEMBER,
- projectRole: defaultProjectRole,
+ projectRole: undefined,
},
});
@@ -191,8 +177,7 @@ export const InviteUserDialog = ({
return;
}
- const projectRole = data.projectRole || defaultProjectRole;
- if (data.type === InvitationType.PROJECT && !projectRole) {
+ if (data.type === InvitationType.PROJECT && !data.projectRole) {
form.setError('projectRole', {
type: 'required',
message: t('Please select a project role'),
@@ -200,10 +185,7 @@ export const InviteUserDialog = ({
return;
}
- mutate({
- ...data,
- projectRole,
- });
+ mutate(data);
};
const copyInvitationLink = () => {
@@ -318,23 +300,7 @@ export const InviteUserDialog = ({
)}
{form.getValues().type === InvitationType.PROJECT && (
- (
-
-
-
-
-
- )}
- />
+
)}
{form?.formState?.errors?.root?.serverError && (
diff --git a/packages/react-ui/src/features/members/component/platform-role-select.tsx b/packages/react-ui/src/features/members/component/platform-role-select.tsx
index 97da0a557fc..612406f1b8d 100644
--- a/packages/react-ui/src/features/members/component/platform-role-select.tsx
+++ b/packages/react-ui/src/features/members/component/platform-role-select.tsx
@@ -21,6 +21,7 @@ export const PlatformRoleSelect = ({ form }: PlatformRoleSelectProps) => {
value={field.value}
onValueChange={field.onChange}
placeholder={t('Select a platform role')}
+ showDescriptionInTrigger={true}
/>
diff --git a/packages/react-ui/src/features/members/component/project-role-select.tsx b/packages/react-ui/src/features/members/component/project-role-select.tsx
index 7f482acd71e..5c2137e7864 100644
--- a/packages/react-ui/src/features/members/component/project-role-select.tsx
+++ b/packages/react-ui/src/features/members/component/project-role-select.tsx
@@ -1,78 +1,61 @@
+import { useQuery } from '@tanstack/react-query';
import { t } from 'i18next';
+import { useEffect } from 'react';
import { UseFormReturn } from 'react-hook-form';
import { FormField, FormItem, FormMessage } from '@/components/ui/form';
import { Label } from '@/components/ui/label';
-import {
- Select,
- SelectContent,
- SelectGroup,
- SelectItem,
- SelectLabel,
- SelectTrigger,
- SelectValue,
-} from '@/components/ui/select';
+import { RoleSelector } from '@/features/members/component/role-selector';
+import { projectRoleApi } from '@/features/platform-admin/lib/project-role-api';
import { platformHooks } from '@/hooks/platform-hooks';
-import { DefaultProjectRole } from '@activepieces/shared';
+import { isNil } from '@activepieces/shared';
type ProjectRoleSelectProps = {
form: UseFormReturn;
};
-const RolesDisplayNames: { [k: string]: string } = {
- [DefaultProjectRole.ADMIN]: t('Admin'),
- [DefaultProjectRole.EDITOR]: t('Editor'),
- [DefaultProjectRole.VIEWER]: t('Viewer'),
-};
-
-const ProjectRoleSelect = ({ form }: ProjectRoleSelectProps) => {
+export const ProjectRoleSelect = ({ form }: ProjectRoleSelectProps) => {
const { platform } = platformHooks.useCurrentPlatform();
- const invitationRoles = Object.values(DefaultProjectRole)
- .filter((f) => {
- if (f === DefaultProjectRole.ADMIN) {
- return true;
+ const { data: rolesData } = useQuery({
+ queryKey: ['project-roles'],
+ queryFn: () => projectRoleApi.list(),
+ enabled:
+ !isNil(platform.plan.projectRolesEnabled) &&
+ platform.plan.projectRolesEnabled,
+ });
+
+ const roles = rolesData?.data ?? [];
+ const defaultProjectRole =
+ roles?.find((role) => role.name === 'Editor')?.name || roles?.[0]?.name;
+
+ useEffect(() => {
+ if (roles.length > 0 && defaultProjectRole) {
+ const current = form.getValues('projectRole');
+ if (!current) {
+ form.setValue('projectRole', defaultProjectRole);
}
- const showNonAdmin = platform.plan.projectRolesEnabled;
- return showNonAdmin;
- })
- .map((role) => {
- return {
- value: role,
- name: RolesDisplayNames[role],
- };
- })
- .map((r) => {
- return (
-
- {r.name}
-
- );
- });
+ }
+ }, [roles.length, defaultProjectRole, form]);
return (
(
-
+
)}
- >
+ />
);
};
-
-export { ProjectRoleSelect };
diff --git a/packages/react-ui/src/features/members/component/role-selector.tsx b/packages/react-ui/src/features/members/component/role-selector.tsx
index a62dd1b91e3..047a4ac25bf 100644
--- a/packages/react-ui/src/features/members/component/role-selector.tsx
+++ b/packages/react-ui/src/features/members/component/role-selector.tsx
@@ -56,6 +56,7 @@ interface RoleSelectorProps {
disabled?: boolean;
placeholder?: string;
roles?: Array<{ name: string }>;
+ showDescriptionInTrigger?: boolean;
}
export const RoleSelector = ({
@@ -65,6 +66,7 @@ export const RoleSelector = ({
disabled = false,
placeholder,
roles = [],
+ showDescriptionInTrigger = false,
}: RoleSelectorProps) => {
const isPlatform = type === 'platform';
@@ -88,12 +90,16 @@ export const RoleSelector = ({