Skip to content

Commit

Permalink
fix: introduce accepted project member status and don't verify user o…
Browse files Browse the repository at this point in the history
…n invite accept
  • Loading branch information
AbdulTheActivePiecer committed Dec 3, 2023
1 parent b161b67 commit 77878ff
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 33 deletions.
Expand Up @@ -60,7 +60,7 @@ export const projectMemberService = {
userId: invitedUser.id,
projectId,
role,
status: getStatusFromEdition(),
status: ProjectMemberStatus.PENDING,
},
['projectId', 'userId'],
)
Expand Down Expand Up @@ -91,15 +91,22 @@ export const projectMemberService = {
},
})
}
const user = await userService.get({ id: projectMember.userId })
if (isNil(user)) {
throw new ActivepiecesError({
code: ErrorCode.ENTITY_NOT_FOUND,
params: {
message: 'user not found',
},
})
}
const memberStatus = user.status === UserStatus.INVITED ? ProjectMemberStatus.ACCEPTED : ProjectMemberStatus.ACTIVE
await projectMemberRepo.update(projectMember.id, {
status: ProjectMemberStatus.ACTIVE,
})
await userService.verify({
id: projectMember.userId,
status: memberStatus,
})
return {
...projectMember,
status: ProjectMemberStatus.ACTIVE,
status: memberStatus,
}
},
async list(
Expand Down Expand Up @@ -185,17 +192,6 @@ export const projectMemberService = {
},
}

function getStatusFromEdition(): ProjectMemberStatus {
const edition = getEdition()
switch (edition) {
case ApEdition.CLOUD:
return ProjectMemberStatus.PENDING
case ApEdition.ENTERPRISE:
return ProjectMemberStatus.ACTIVE
default:
throw new Error('Unnkown project status ' + edition)
}
}

const createOrGetUser = async ({ platformId, email }: CreateOrGetUserParams): Promise<User> => {
const user = await userService.getByPlatformAndEmail({
Expand Down
Expand Up @@ -12,7 +12,7 @@

<ng-container matColumnDef="status">
<th mat-header-cell *matHeaderCellDef i18n>Status</th>
<td mat-cell *matCellDef="let member">{{ statusText(member.status) }}</td>
<td mat-cell *matCellDef="let member" [matTooltip]="member.statusTooltip">{{member.statusText}}</td>
</ng-container>

<ng-container matColumnDef="role">
Expand Down
Expand Up @@ -128,15 +128,6 @@ export class ProjectMembersTableComponent implements OnInit {
);
}

statusText(status: ProjectMemberStatus) {
switch (status) {
case ProjectMemberStatus.ACTIVE:
return $localize`Active`;
case ProjectMemberStatus.PENDING:
return $localize`Pending`;
}
}

get projectMemberRole() {
return ProjectMemberRole;
}
Expand Down
Expand Up @@ -10,16 +10,21 @@ import {
catchError,
of,
} from 'rxjs';
import { ProjectMember } from '@activepieces/ee-shared';
import { ProjectMember, ProjectMemberStatus } from '@activepieces/ee-shared';
import { ProjectMemberService } from '../service/project-members.service';
import { UnhandledSwitchCaseError } from '@activepieces/shared';

export type ProjectMemberWithUiData = ProjectMember & {
statusText: string;
statusTooltip: string;
};
/**
* Data source for the LogsTable view. This class should
* encapsulate all logic for fetching and manipulating the displayed data
* (including sorting, pagination, and filtering).
*/
export class ProjectMembersTableDataSource extends DataSource<ProjectMember> {
data: ProjectMember[] = [];
data: ProjectMemberWithUiData[] = [];
public isLoading$ = new BehaviorSubject(false);
constructor(
private projectMemberService: ProjectMemberService,
Expand All @@ -33,7 +38,7 @@ export class ProjectMembersTableDataSource extends DataSource<ProjectMember> {
* the returned stream emits new items.
* @returns A stream of the items to be rendered.
*/
connect(): Observable<ProjectMember[]> {
connect(): Observable<ProjectMemberWithUiData[]> {
return combineLatest({
refresh: this.refresh$,
}).pipe(
Expand All @@ -49,10 +54,19 @@ export class ProjectMembersTableDataSource extends DataSource<ProjectMember> {
})
);
}),
tap((members) => {
this.data = members.data;
map((res) => {
const members = res.data.map((pm) => {
return {
...pm,
statusText: getStatusText(pm.status),
statusTooltip: getStatusTooltip(pm.status),
};
});
return members;
}),
map(() => this.data)
tap((members) => {
this.data = members;
})
);
}

Expand All @@ -64,3 +78,26 @@ export class ProjectMembersTableDataSource extends DataSource<ProjectMember> {
//ignore
}
}

const getStatusText = (status: ProjectMemberStatus) => {
switch (status) {
case ProjectMemberStatus.ACCEPTED:
return $localize`Accepted`;
case ProjectMemberStatus.ACTIVE:
return $localize`Active`;
case ProjectMemberStatus.PENDING:
return $localize`Pending`;
}
};
const getStatusTooltip = (status: ProjectMemberStatus) => {
switch (status) {
case ProjectMemberStatus.ACCEPTED:
return $localize`User has accepted your invite, and should create account`;
case ProjectMemberStatus.ACTIVE:
return $localize`User is activated as a member`;
case ProjectMemberStatus.PENDING:
return $localize`User has been invitied, awating his acceptance`;
default:
throw new UnhandledSwitchCaseError(status);
}
};
Expand Up @@ -6,6 +6,7 @@ export type ProjectMemberId = string;

export enum ProjectMemberStatus {
ACTIVE = "ACTIVE",
ACCEPTED = "ACCEPTED",
PENDING = "PENDING",
}

Expand Down

0 comments on commit 77878ff

Please sign in to comment.