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 = ({