improvement: address feedback

This commit is contained in:
Scott Wilson
2025-07-29 17:06:33 -07:00
parent 4f00fc6777
commit 2aa548c7dc
4 changed files with 9 additions and 8 deletions
+4 -4
View File
@@ -15,7 +15,7 @@ type TDeleteOrgMembership = {
userAliasDAL: Pick<TUserAliasDALFactory, "delete">; userAliasDAL: Pick<TUserAliasDALFactory, "delete">;
licenseService: Pick<TLicenseServiceFactory, "updateSubscriptionOrgMemberCount">; licenseService: Pick<TLicenseServiceFactory, "updateSubscriptionOrgMemberCount">;
projectUserAdditionalPrivilegeDAL: Pick<TProjectUserAdditionalPrivilegeDALFactory, "delete">; projectUserAdditionalPrivilegeDAL: Pick<TProjectUserAdditionalPrivilegeDALFactory, "delete">;
userId: string; userId?: string;
}; };
type TDeleteOrgMemberships = { type TDeleteOrgMemberships = {
@@ -27,7 +27,7 @@ type TDeleteOrgMemberships = {
userAliasDAL: Pick<TUserAliasDALFactory, "delete">; userAliasDAL: Pick<TUserAliasDALFactory, "delete">;
licenseService: Pick<TLicenseServiceFactory, "updateSubscriptionOrgMemberCount">; licenseService: Pick<TLicenseServiceFactory, "updateSubscriptionOrgMemberCount">;
projectUserAdditionalPrivilegeDAL: Pick<TProjectUserAdditionalPrivilegeDALFactory, "delete">; projectUserAdditionalPrivilegeDAL: Pick<TProjectUserAdditionalPrivilegeDALFactory, "delete">;
userId: string; userId?: string;
}; };
export const deleteOrgMembershipFn = async ({ export const deleteOrgMembershipFn = async ({
@@ -44,7 +44,7 @@ export const deleteOrgMembershipFn = async ({
const deletedMembership = await orgDAL.transaction(async (tx) => { const deletedMembership = await orgDAL.transaction(async (tx) => {
const orgMembership = await orgDAL.deleteMembershipById(orgMembershipId, orgId, tx); const orgMembership = await orgDAL.deleteMembershipById(orgMembershipId, orgId, tx);
if (orgMembership.userId === userId) { if (userId && orgMembership.userId === userId) {
// scott: this is temporary, we will add a leave org endpoint with proper handling to ensure org isn't abandoned/broken // scott: this is temporary, we will add a leave org endpoint with proper handling to ensure org isn't abandoned/broken
throw new BadRequestError({ message: "You cannot remove yourself from an organization" }); throw new BadRequestError({ message: "You cannot remove yourself from an organization" });
} }
@@ -125,7 +125,7 @@ export const deleteOrgMembershipsFn = async ({
.filter((member) => Boolean(member.userId)) .filter((member) => Boolean(member.userId))
.map((member) => member.userId) as string[]; .map((member) => member.userId) as string[];
if (membershipUserIds.includes(userId)) { if (userId && membershipUserIds.includes(userId)) {
// scott: this is temporary, we will add a leave org endpoint with proper handling to ensure org isn't abandoned/broken // scott: this is temporary, we will add a leave org endpoint with proper handling to ensure org isn't abandoned/broken
throw new BadRequestError({ message: "You cannot remove yourself from an organization" }); throw new BadRequestError({ message: "You cannot remove yourself from an organization" });
} }
@@ -339,7 +339,6 @@ export const projectMembershipDALFactory = (db: TDbClient) => {
) )
.select( .select(
db.ref("id").withSchema(TableName.ProjectMembership), db.ref("id").withSchema(TableName.ProjectMembership),
db.ref("userId").withSchema(TableName.ProjectMembership),
db.ref("isGhost").withSchema(TableName.Users), db.ref("isGhost").withSchema(TableName.Users),
db.ref("username").withSchema(TableName.Users), db.ref("username").withSchema(TableName.Users),
db.ref("email").withSchema(TableName.Users), db.ref("email").withSchema(TableName.Users),
@@ -159,7 +159,7 @@ export const OrgMembersSection = () => {
)} )}
> >
<div className="flex items-center rounded-md border border-mineshaft-600 bg-mineshaft-800 px-4 py-2 text-bunker-300"> <div className="flex items-center rounded-md border border-mineshaft-600 bg-mineshaft-800 px-4 py-2 text-bunker-300">
<div className="mr-2 text-sm">{selectedMemberIds.length > 0} Selected</div> <div className="mr-2 text-sm">{selectedMemberIds.length} Selected</div>
<button <button
type="button" type="button"
className="mr-auto text-xs text-mineshaft-400 underline-offset-2 hover:text-mineshaft-200 hover:underline" className="mr-auto text-xs text-mineshaft-400 underline-offset-2 hover:text-mineshaft-200 hover:underline"
@@ -271,7 +271,7 @@ export const OrgMembersSection = () => {
{(popUp.removeMembers.data?.selectedOrgMemberships as OrgUser[])?.map((member) => { {(popUp.removeMembers.data?.selectedOrgMemberships as OrgUser[])?.map((member) => {
const email = member.user.email ?? member.user.username ?? member.inviteEmail; const email = member.user.email ?? member.user.username ?? member.inviteEmail;
return ( return (
<li className="flex items-center"> <li key={member.id} className="flex items-center">
<span className={userId === member.user.id ? "line-through" : ""}> <span className={userId === member.user.id ? "line-through" : ""}>
{member.user.firstName || member.user.lastName {member.user.firstName || member.user.lastName
? `${`${member.user.firstName} ${member.user.lastName}`.trim()} (${email})` ? `${`${member.user.firstName} ${member.user.lastName}`.trim()} (${email})`
@@ -387,7 +387,9 @@ export const OrgMembersTable = ({
onCheckedChange={() => { onCheckedChange={() => {
if (isPageSelected) { if (isPageSelected) {
setSelectedMemberIds((prev) => setSelectedMemberIds((prev) =>
prev.filter((member) => !filteredMembersPage.find((m) => m.id !== member)) prev.filter(
(memberId) => !filteredMembersPage.find((m) => m.id === memberId)
)
); );
} else { } else {
setSelectedMemberIds((prev) => [ setSelectedMemberIds((prev) => [