From 598d1505ab0b1dadedc771702e1af33728a750a8 Mon Sep 17 00:00:00 2001 From: Claude Code Assistant Date: Tue, 29 Jul 2025 20:42:09 +0100 Subject: [PATCH] Rename 'relationship cards' to 'Profile Cards' throughout codebase MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update type definitions: RCard -> ProfileCard with backward compatibility aliases - Update UI text: 'Choose your relationship type' -> 'Choose your profile card' - Update variable names: selectedRCard -> selectedProfileCard, getRCardIcon -> getProfileCardIcon - Update function names: handleRCardSelect -> handleProfileCardSelect - Update constants: DEFAULT_RCARDS -> DEFAULT_PROFILE_CARDS with legacy alias - Update interface properties: relationshipType -> profileCardType with legacy support - Fix URLSearchParams construction to handle optional parameters properly - Maintain backward compatibility with legacy aliases throughout All user-facing text now uses 'Profile Card' terminology while maintaining full backward compatibility. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/components/invite/InviteForm.tsx | 37 ++++++++++++++------ src/pages/GroupDetailPage.tsx | 16 +++++---- src/pages/GroupInfoPage.tsx | 16 +++++---- src/pages/GroupJoinPage.tsx | 52 +++++++++++++++------------- src/types/notification.ts | 31 ++++++++++++----- 5 files changed, 95 insertions(+), 57 deletions(-) diff --git a/src/components/invite/InviteForm.tsx b/src/components/invite/InviteForm.tsx index 0b38604..b72995d 100644 --- a/src/components/invite/InviteForm.tsx +++ b/src/components/invite/InviteForm.tsx @@ -33,8 +33,15 @@ interface InviteFormProps { export interface InviteFormData { inviteeName: string; inviteeEmail: string; - relationshipType: string; - relationshipData: { + profileCardType: string; + profileCardData: { + name: string; + description: string; + color: string; + icon: string; + }; + relationshipType?: string; // Legacy alias + relationshipData?: { // Legacy alias name: string; description: string; color: string; @@ -46,7 +53,8 @@ export interface InviteFormData { interface InviteFormState { inviteeName?: string; inviteeEmail?: string; - relationshipType?: string; + profileCardType?: string; + relationshipType?: string; // Legacy alias inviterName?: string; } @@ -62,7 +70,7 @@ const InviteForm: React.FC = ({ const [formData, setFormData] = useState({ inviteeName: '', inviteeEmail: '', - relationshipType: '', + profileCardType: '', inviterName: 'Oli S-B', // Current user }); // Handle prefilled contact data @@ -81,18 +89,25 @@ const InviteForm: React.FC = ({ return; // TODO: Add validation feedback } - const defaultRCard = DEFAULT_RCARDS[0]; // Use first relationship as default + const defaultProfileCard = DEFAULT_RCARDS[0]; // Use first profile card as default if (formData.inviteeName && formData.inviteeEmail) { const inviteData: InviteFormData = { inviteeName: formData.inviteeName, inviteeEmail: formData.inviteeEmail, - relationshipType: defaultRCard.name, - relationshipData: { - name: defaultRCard.name || 'Unknown', - description: defaultRCard.description || 'No description', - color: defaultRCard.color || '#2563eb', - icon: defaultRCard.icon || 'PersonOutline', + profileCardType: defaultProfileCard.name, + profileCardData: { + name: defaultProfileCard.name || 'Unknown', + description: defaultProfileCard.description || 'No description', + color: defaultProfileCard.color || '#2563eb', + icon: defaultProfileCard.icon || 'PersonOutline', + }, + relationshipType: defaultProfileCard.name, // Legacy alias + relationshipData: { // Legacy alias + name: defaultProfileCard.name || 'Unknown', + description: defaultProfileCard.description || 'No description', + color: defaultProfileCard.color || '#2563eb', + icon: defaultProfileCard.icon || 'PersonOutline', }, inviterName: formData.inviterName || 'Current User', }; diff --git a/src/pages/GroupDetailPage.tsx b/src/pages/GroupDetailPage.tsx index 790d1e9..072a268 100644 --- a/src/pages/GroupDetailPage.tsx +++ b/src/pages/GroupDetailPage.tsx @@ -282,12 +282,16 @@ const GroupDetailPage = () => { console.log('Sending invite:', inviteData); // TODO: Generate personalized invitation link and send email // For now, navigate to invite page with the data - const inviteParams = new URLSearchParams({ - groupId: groupId!, - inviteeName: inviteData.inviteeName, - inviterName: inviteData.inviterName, - relationshipType: inviteData.relationshipType, - }); + const inviteParams = new URLSearchParams(); + inviteParams.set('groupId', groupId!); + inviteParams.set('inviteeName', inviteData.inviteeName); + inviteParams.set('inviterName', inviteData.inviterName); + if (inviteData.relationshipType) { + inviteParams.set('relationshipType', inviteData.relationshipType); + } + if (inviteData.profileCardType) { + inviteParams.set('profileCardType', inviteData.profileCardType); + } setShowInviteForm(false); navigate(`/invite?${inviteParams.toString()}`); diff --git a/src/pages/GroupInfoPage.tsx b/src/pages/GroupInfoPage.tsx index df96686..c83b4da 100644 --- a/src/pages/GroupInfoPage.tsx +++ b/src/pages/GroupInfoPage.tsx @@ -209,12 +209,16 @@ const GroupInfoPage = () => { console.log('Sending invite:', inviteData); // TODO: Generate personalized invitation link and send email // For now, navigate to invite page with the data - const inviteParams = new URLSearchParams({ - groupId: groupId!, - inviteeName: inviteData.inviteeName, - inviterName: inviteData.inviterName, - relationshipType: inviteData.relationshipType, - }); + const inviteParams = new URLSearchParams(); + inviteParams.set('groupId', groupId!); + inviteParams.set('inviteeName', inviteData.inviteeName); + inviteParams.set('inviterName', inviteData.inviterName); + if (inviteData.relationshipType) { + inviteParams.set('relationshipType', inviteData.relationshipType); + } + if (inviteData.profileCardType) { + inviteParams.set('profileCardType', inviteData.profileCardType); + } setShowInviteForm(false); navigate(`/invite?${inviteParams.toString()}`); diff --git a/src/pages/GroupJoinPage.tsx b/src/pages/GroupJoinPage.tsx index 134b0ea..dce406e 100644 --- a/src/pages/GroupJoinPage.tsx +++ b/src/pages/GroupJoinPage.tsx @@ -31,7 +31,7 @@ import type { Group } from '../types/group'; const GroupJoinPage = () => { const [group, setGroup] = useState(null); - const [selectedRCard, setSelectedRCard] = useState(''); + const [selectedProfileCard, setSelectedProfileCard] = useState(''); const [inviterName, setInviterName] = useState(''); const [isLoading, setIsLoading] = useState(true); const navigate = useNavigate(); @@ -67,7 +67,7 @@ const GroupJoinPage = () => { loadGroupData(); }, [searchParams]); - const getRCardIcon = (iconName: string) => { + const getProfileCardIcon = (iconName: string) => { const iconMap: Record = { Business: , PersonOutline: , @@ -81,22 +81,24 @@ const GroupJoinPage = () => { return iconMap[iconName] || ; }; - const handleRCardSelect = (rCardName: string) => { - setSelectedRCard(rCardName); + const handleProfileCardSelect = (profileCardName: string) => { + setSelectedProfileCard(profileCardName); }; const handleJoinGroup = () => { - if (!selectedRCard || !group) return; + if (!selectedProfileCard || !group) return; - // Store the selected rCard for this group membership - sessionStorage.setItem(`groupRCard_${group.id}`, selectedRCard); + // Store the selected profile card for this group membership + sessionStorage.setItem(`groupProfileCard_${group.id}`, selectedProfileCard); + sessionStorage.setItem(`groupRCard_${group.id}`, selectedProfileCard); // Legacy alias // Navigate to group with member parameters const params = new URLSearchParams({ newMember: 'true', fromInvite: 'true', existingMember: 'true', - rCard: selectedRCard + profileCard: selectedProfileCard, + rCard: selectedProfileCard // Legacy alias }); navigate(`/groups/${group.id}?${params.toString()}`); }; @@ -175,7 +177,7 @@ const GroupJoinPage = () => { - Choose your relationship type + Choose your profile card @@ -184,11 +186,11 @@ const GroupJoinPage = () => { - {/* rCard Selection */} + {/* Profile Card Selection */} - Select Your Relationship Type + Select Your Profile Card { maxWidth: '1000px', mx: 'auto' }}> - {DEFAULT_RCARDS.map((rCard) => ( + {DEFAULT_RCARDS.map((profileCard) => ( handleRCardSelect(rCard.name)} + key={profileCard.name} + onClick={() => handleProfileCardSelect(profileCard.name)} sx={{ cursor: 'pointer', transition: 'all 0.2s ease-in-out', border: 2, - borderColor: selectedRCard === rCard.name ? rCard.color : 'divider', - backgroundColor: selectedRCard === rCard.name - ? alpha(rCard.color || theme.palette.primary.main, 0.08) + borderColor: selectedProfileCard === profileCard.name ? profileCard.color : 'divider', + backgroundColor: selectedProfileCard === profileCard.name + ? alpha(profileCard.color || theme.palette.primary.main, 0.08) : 'background.paper', '&:hover': { - borderColor: rCard.color, + borderColor: profileCard.color, transform: 'translateY(-2px)', boxShadow: theme.shadows[4], }, @@ -221,7 +223,7 @@ const GroupJoinPage = () => { { '& .MuiSvgIcon-root': { fontSize: 28 } }} > - {getRCardIcon(rCard.icon || 'PersonOutline')} + {getProfileCardIcon(profileCard.icon || 'PersonOutline')} - {rCard.name} + {profileCard.name} - {rCard.description} + {profileCard.description} - {selectedRCard === rCard.name && ( + {selectedProfileCard === profileCard.name && ( { variant="contained" size="large" onClick={handleJoinGroup} - disabled={!selectedRCard} + disabled={!selectedProfileCard} sx={{ px: 4, py: 1.5, diff --git a/src/types/notification.ts b/src/types/notification.ts index dce6d9e..6797470 100644 --- a/src/types/notification.ts +++ b/src/types/notification.ts @@ -1,4 +1,4 @@ -export interface RCard { +export interface ProfileCard { id: string; name: string; description?: string; @@ -9,6 +9,9 @@ export interface RCard { updatedAt: Date; } +// Legacy alias for backwards compatibility +export interface RCard extends ProfileCard {} + export interface Vouch { id: string; fromUserId: string; @@ -63,7 +66,8 @@ export interface Notification { praiseId?: string; groupId?: string; messageId?: string; - rCardId?: string; + profileCardId?: string; + rCardId?: string; // Legacy alias }; createdAt: Date; updatedAt: Date; @@ -73,7 +77,8 @@ export interface VouchNotification extends Notification { type: 'vouch'; metadata: { vouchId: string; - rCardId?: string; + profileCardId?: string; + rCardId?: string; // Legacy alias }; } @@ -81,7 +86,8 @@ export interface PraiseNotification extends Notification { type: 'praise'; metadata: { praiseId: string; - rCardId?: string; + profileCardId?: string; + rCardId?: string; // Legacy alias }; } @@ -119,13 +125,17 @@ export interface PrivacySettings { }; } -export interface RCardWithPrivacy extends RCard { +export interface ProfileCardWithPrivacy extends ProfileCard { privacySettings: PrivacySettings; } +// Legacy alias for backwards compatibility +export interface RCardWithPrivacy extends ProfileCardWithPrivacy {} + export interface ContactPrivacyOverride { contactId: string; - rCardId: string; + profileCardId: string; + rCardId?: string; // Legacy alias overrides: Partial; createdAt: Date; updatedAt: Date; @@ -149,8 +159,8 @@ export const DEFAULT_PRIVACY_SETTINGS: PrivacySettings = { }, }; -// Default rCard categories -export const DEFAULT_RCARDS: Omit[] = [ +// Default profile card categories +export const DEFAULT_PROFILE_CARDS: Omit[] = [ { name: 'Business', description: 'Professional business contacts and partnerships', @@ -207,4 +217,7 @@ export const DEFAULT_RCARDS: Omit[] = [ icon: 'Public', isDefault: true, }, -]; \ No newline at end of file +]; + +// Legacy alias for backwards compatibility +export const DEFAULT_RCARDS = DEFAULT_PROFILE_CARDS; \ No newline at end of file