Skip to content

Commit 4cfbc25

Browse files
committed
Make user first name mandatory and use accross the app
1 parent cfae126 commit 4cfbc25

File tree

16 files changed

+62
-44
lines changed

16 files changed

+62
-44
lines changed

front/lib/api/assistant/conversation.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,9 @@ async function renderUserMessage(
221221
providerId: user.providerId,
222222
username: user.username,
223223
email: user.email,
224-
name: user.name,
224+
firstName: user.firstName,
225+
lastName: user.lastName,
226+
fullName: user.firstName + (user.lastName ? ` ${user.lastName}` : ""),
225227
image: null,
226228
workspaces: [],
227229
isDustSuperUser: false,

front/lib/api/assistant/global_agents.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ async function _getHelperGlobalAgent(
6565
const user = auth.user();
6666
if (user) {
6767
const role = auth.role();
68-
prompt = `The user you're interacting with is granted with the role ${role}. Their name is ${user.name}. `;
68+
prompt = `The user you're interacting with is granted with the role ${role}. Their name is ${user.fullName}. `;
6969
}
7070

7171
const helperAssistantPromptInstance = HelperAssistantPrompt.getInstance();

front/lib/api/workspace.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,9 @@ export async function getMembers(auth: Authenticator): Promise<UserType[]> {
7676
providerId: u.providerId,
7777
username: u.username,
7878
email: u.email,
79-
name: u.name,
79+
fullName: u.firstName + (u.lastName ? ` ${u.lastName}` : ""),
80+
firstName: u.firstName,
81+
lastName: u.lastName,
8082
image: null,
8183
workspaces: [{ ...owner, role }],
8284
isDustSuperUser: u.isDustSuperUser,

front/lib/auth.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,11 @@ export class Authenticator {
290290
providerId: this._user.providerId,
291291
username: this._user.username,
292292
email: this._user.email,
293-
name: this._user.name,
293+
fullName:
294+
this._user.firstName +
295+
(this._user.lastName ? ` ${this._user.lastName}` : ""),
296+
firstName: this._user.firstName,
297+
lastName: this._user.lastName || null,
294298
// Not available from this method
295299
image: null,
296300
workspaces: [],
@@ -354,7 +358,9 @@ export async function getUserFromSession(
354358
providerId: user.providerId,
355359
username: user.username,
356360
email: user.email,
357-
name: user.name,
361+
firstName: user.firstName,
362+
lastName: user.lastName,
363+
fullName: user.firstName + (user.lastName ? ` ${user.lastName}` : ""),
358364
image: session.user ? session.user.image : null,
359365
workspaces: workspaces.map((w) => {
360366
const m = memberships.find((m) => m.workspaceId === w.id);

front/lib/models/user.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export class User extends Model<
2121
declare username: string;
2222
declare email: string;
2323
declare name: string;
24-
declare firstName: string | null;
24+
declare firstName: string;
2525
declare lastName: string | null;
2626

2727
declare isDustSuperUser: CreationOptional<boolean>;
@@ -65,7 +65,7 @@ User.init(
6565
},
6666
firstName: {
6767
type: DataTypes.STRING,
68-
allowNull: true,
68+
allowNull: false,
6969
},
7070
lastName: {
7171
type: DataTypes.STRING,

front/lib/user.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,14 @@ export function setUserMetadataFromClient(metadata: UserMetadataType) {
6161

6262
export const guessFirstandLastNameFromFullName = (
6363
fullName: string
64-
): { firstName: string | null; lastName: string | null } => {
65-
if (!fullName) return { firstName: null, lastName: null };
66-
64+
): { firstName: string; lastName: string | null } => {
6765
const nameParts = fullName.split(" ");
6866

69-
if (nameParts.length === 1) return { firstName: fullName, lastName: null };
70-
71-
const firstName = nameParts.shift() || null;
72-
const lastName = nameParts.join(" ");
73-
74-
return { firstName, lastName };
67+
if (nameParts.length > 1) {
68+
const firstName = nameParts.shift() || fullName;
69+
const lastName = nameParts.join(" ");
70+
return { firstName, lastName };
71+
} else {
72+
return { firstName: fullName, lastName: null };
73+
}
7574
};

front/migrations/20231017_user_first_and_last_name.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
import { Op } from "sequelize";
2-
31
import { User } from "@app/lib/models";
42
import { guessFirstandLastNameFromFullName } from "@app/lib/user";
53

64
async function main() {
7-
const users = await User.findAll({
8-
where: {
9-
firstName: {
10-
[Op.or]: [null, ""],
11-
},
12-
},
5+
const users: User[] = await User.findAll({
6+
// Was run with this were but then we make first name non nullable and linter is not happy
7+
// where: {
8+
// firstName: {
9+
// [Op.or]: [null, ""],
10+
// },
11+
// },
1312
});
1413

1514
console.log(`Found ${users.length} users to update`);
@@ -23,7 +22,7 @@ async function main() {
2322
console.log(`Processing chunk ${i}/${chunks.length}...`);
2423
const chunk = chunks[i];
2524
await Promise.all(
26-
chunk.map((u) => {
25+
chunk.map((u: User) => {
2726
return (async () => {
2827
if (!u.firstName) {
2928
const { firstName, lastName } = guessFirstandLastNameFromFullName(

front/pages/api/w/[wId]/assistant/conversations/[cId]/messages/[mId]/reactions/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ async function handler(
118118
user: user,
119119
context: {
120120
username: user.username,
121-
fullName: user.name,
121+
fullName: user.fullName,
122122
},
123123
reaction: bodyValidation.right.reaction,
124124
});
@@ -142,7 +142,7 @@ async function handler(
142142
user: user,
143143
context: {
144144
username: user.username,
145-
fullName: user.name,
145+
fullName: user.fullName,
146146
},
147147
reaction: bodyValidation.right.reaction,
148148
});

front/pages/api/w/[wId]/assistant/conversations/[cId]/messages/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ async function handler(
118118
context: {
119119
timezone: context.timezone,
120120
username: user.username,
121-
fullName: user.name,
121+
fullName: user.fullName,
122122
email: user.email,
123123
profilePictureUrl: context.profilePictureUrl,
124124
},

front/pages/api/w/[wId]/assistant/conversations/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ async function handler(
138138
context: {
139139
timezone: message.context.timezone,
140140
username: user.username,
141-
fullName: user.name,
141+
fullName: user.fullName,
142142
email: user.email,
143143
profilePictureUrl: message.context.profilePictureUrl,
144144
},

front/pages/api/w/[wId]/members/[userId]/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,9 @@ async function handler(
121121
providerId: user.providerId,
122122
username: user.username,
123123
email: user.email,
124-
name: user.name,
124+
firstName: user.firstName,
125+
lastName: user.lastName,
126+
fullName: user.firstName + (user.lastName ? ` ${user.lastName}` : ""),
125127
image: null,
126128
workspaces: [w],
127129
isDustSuperUser: user.isDustSuperUser,

front/pages/poke/[wId]/memberships.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ const MembershipsPage = ({
105105
>
106106
<div className="flex items-center justify-between">
107107
<h3 className="mb-2 text-lg font-semibold">
108-
{m.username} ({m.name})
108+
{m.username} ({m.fullName})
109109
</h3>
110110
</div>
111111
<p>

front/pages/w/[wId]/assistant/new.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ export default function AssistantNew({
183183
<div className="text-sm font-normal text-element-800">
184184
<Page.Vertical gap="md" align="left">
185185
<Page.Header
186-
title={"Welcome " + user.name.split(" ")[0] + "!"} //Not solid
186+
title={`Welcome ${user.firstName}!`}
187187
icon={ChatBubbleLeftRightIcon}
188188
/>
189189
{/* FEATURED AGENTS */}

front/pages/w/[wId]/members/index.tsx

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -189,12 +189,12 @@ export default function WorkspaceAdmin({
189189
| MembershipInvitationType
190190
)[] = [
191191
...members
192-
.sort((a, b) => a.name.localeCompare(b.name))
192+
.sort((a, b) => a.fullName.localeCompare(b.fullName))
193193
.filter((m) => m.workspaces[0].role !== "none")
194194
.filter(
195195
(m) =>
196196
!searchText ||
197-
m.name.toLowerCase().includes(searchText.toLowerCase()) ||
197+
m.fullName.toLowerCase().includes(searchText.toLowerCase()) ||
198198
m.email?.toLowerCase().includes(searchText.toLowerCase()) ||
199199
m.username?.toLowerCase().includes(searchText.toLowerCase())
200200
),
@@ -275,13 +275,17 @@ export default function WorkspaceAdmin({
275275
{isInvitation(item) ? (
276276
<Avatar size="sm" />
277277
) : (
278-
<Avatar visual={item.image} name={item.name} size="sm" />
278+
<Avatar
279+
visual={item.image}
280+
name={item.fullName}
281+
size="sm"
282+
/>
279283
)}
280284
</div>
281285
<div className="flex grow flex-col gap-1 sm:flex-row sm:gap-3">
282286
{!isInvitation(item) && (
283287
<div className="font-medium text-element-900">
284-
{item.name}
288+
{item.fullName}
285289
{user?.id === item.id && " (you)"}
286290
</div>
287291
)}
@@ -650,7 +654,7 @@ function ChangeMemberModal({
650654
sendNotification({
651655
type: "success",
652656
title: "Role updated",
653-
description: `Role updated for ${member.name}.`,
657+
description: `Role updated for ${member.fullName}.`,
654658
});
655659
await mutate(`/api/w/${owner.sId}/members`);
656660
}
@@ -670,7 +674,7 @@ function ChangeMemberModal({
670674
hasChanged={
671675
selectedRole !== null && selectedRole !== member.workspaces[0].role
672676
}
673-
title={member.name || "Unreachable"}
677+
title={member.fullName || "Unreachable"}
674678
type="right-side"
675679
onSave={async () => {
676680
setIsSaving(true);
@@ -687,9 +691,11 @@ function ChangeMemberModal({
687691
>
688692
<div className="mt-6 flex flex-col gap-9 px-2 text-sm text-element-700">
689693
<div className="flex items-center gap-4">
690-
<Avatar size="lg" visual={member.image} name={member.name} />
694+
<Avatar size="lg" visual={member.image} name={member.fullName} />
691695
<div className="flex grow flex-col">
692-
<div className="font-semibold text-element-900">{member.name}</div>
696+
<div className="font-semibold text-element-900">
697+
{member.fullName}
698+
</div>
693699
<div className="font-normal">{member.email}</div>
694700
</div>
695701
</div>
@@ -747,7 +753,7 @@ function ChangeMemberModal({
747753
<div className="mt-6 flex flex-col gap-6 px-2">
748754
<div>
749755
Revoke access for user{" "}
750-
<span className="font-bold">{member.name}</span>?
756+
<span className="font-bold">{member.fullName}</span>?
751757
</div>
752758
<div className="flex gap-2">
753759
<Button

front/pages/w/[wId]/welcome.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ export default function Welcome({
7575
gaTrackingId,
7676
}: InferGetServerSidePropsType<typeof getServerSideProps>) {
7777
const router = useRouter();
78-
const [firstName, setFirstName] = useState<string>(user.name.split(" ")[0]);
79-
const [lastName, setLastName] = useState<string>(user.name.split(" ")[1]);
78+
const [firstName, setFirstName] = useState<string>(user.firstName);
79+
const [lastName, setLastName] = useState<string>(user.lastName || "");
8080
const [expertise, setExpertise] = useState<string>(defaultExpertise);
8181
const [adminInterest, setAdminInterest] =
8282
useState<string>(defaultAdminInterest);

front/types/user.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ export type UserType = {
1717
providerId: string;
1818
username: string;
1919
email: string;
20-
name: string;
20+
firstName: string;
21+
lastName: string | null;
22+
fullName: string;
2123
image: string | null;
2224
workspaces: WorkspaceType[];
2325
isDustSuperUser: boolean;

0 commit comments

Comments
 (0)