You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

854 lines
28 KiB

// Notification message constants for user-facing notifications
// Add new notification messages here as needed
//
// DOCUMENTATION FORMAT:
// Each constant is documented with a comment showing where it's used:
// "Used in: ComponentName.vue (method - specific usage description)"
// This helps maintain consistency and track usage across the codebase.
//
// Functions are documented with the specific component methods that call them.
// Constants marked with "[Component usage not yet documented]" need their
// usage locations verified and documented.
// Used in: [Component usage not yet documented]
export const NOTIFY_PERSON_HIDDEN = {
title: "Person Outside Your Network",
message: "This person is not visible to you.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_UNKNOWN_PERSON = {
title: "Unidentified Person",
message: "Nobody specific was recognized.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_CONTACT_LOADING_ISSUE = {
title: "Contact Loading Issue",
message: "Some contact information may be unavailable.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_FEED_LOADING_ISSUE = {
title: "Feed Loading Issue",
message: "Some feed data may be unavailable. Pull to refresh.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_CONFIRMATION_ERROR = {
title: "Error",
message: "There was a problem submitting the confirmation.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_DEFAULT_TO_ACTIVE_DID = {
title: "Your Info",
message: "No user was specified so showing your info.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_CONTACT_DELETED = {
title: "Deleted",
message: "Contact has been removed.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_CONTACT_DELETE_FAILED = {
title: "Error",
message: "Failed to delete contact.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_REGISTRATION_SUCCESS = {
title: "Registration Success",
message: "has been registered.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_REGISTRATION_ERROR = {
title: "Registration Error",
message: "Something went wrong during registration.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_SERVER_ACCESS_ERROR = {
title: "Error",
message: "There was a problem accessing the server. Try again later.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_NO_IDENTITY_ERROR = {
title: "No Identity",
message: "There is no identity to use to check visibility.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_VISIBILITY_SET = {
title: "Visibility Set",
message: "visibility updated.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_VISIBILITY_REFRESHED = {
title: "Visibility Refreshed",
message: "visibility status updated.",
};
// QuickActionBvcEndView.vue specific constants
// Used in: QuickActionBvcEndView.vue (created method - error retrieving claims)
export const NOTIFY_ERROR_RETRIEVING_CLAIMS = {
title: "Error",
message: "There was an error retrieving today's claims to confirm.",
};
// Used in: QuickActionBvcEndView.vue (record method - sending status)
export const NOTIFY_SENDING_STATUS = {
title: "Sent...",
message: "",
};
// Used in: QuickActionBvcEndView.vue (record method - confirmation error)
export const NOTIFY_CONFIRMATION_SEND_ERROR = {
title: "Error",
message: "There was an error sending some of the confirmations.",
};
// Used in: QuickActionBvcEndView.vue (record method - all confirmations error)
export const NOTIFY_ALL_CONFIRMATIONS_ERROR = {
title: "Error",
message: "There was an error sending all of the confirmations.",
};
// Used in: QuickActionBvcEndView.vue (record method - give error)
export const NOTIFY_GIVE_SEND_ERROR = {
title: "Error",
message: "There was an error sending that give.",
};
// Used in: QuickActionBvcEndView.vue (record method - claims send error)
export const NOTIFY_CLAIMS_SEND_ERROR = {
title: "Error",
message: "There was an error sending claims.",
};
// Used in: QuickActionBvcEndView.vue (record method - single confirmation success)
export const NOTIFY_SINGLE_CONFIRMATION_SUCCESS = {
title: "Success",
message: "Your confirmation has been recorded.",
};
// Used in: QuickActionBvcEndView.vue (record method - multiple confirmations success)
export const NOTIFY_MULTIPLE_CONFIRMATIONS_SUCCESS = {
title: "Success",
message: "Your confirmations have been recorded.",
};
// Used in: QuickActionBvcEndView.vue (record method - give success)
export const NOTIFY_GIVE_SUCCESS = {
title: "Success",
message: "That give has been recorded.",
};
// Used in: QuickActionBvcEndView.vue (record method - confirmations and give success)
export const NOTIFY_CONFIRMATIONS_AND_GIVE_SUCCESS = {
title: "Success",
message: "Your confirmations and that give have been recorded.",
};
// Used in: QuickActionBvcEndView.vue (record method - confirmations only success)
export const NOTIFY_CONFIRMATIONS_ONLY_SUCCESS = {
title: "Success",
message: "Your confirmations have been recorded.",
};
// ContactsView.vue specific constants
// Used in: ContactsView.vue (processInviteJwt method - blank invite error)
export const NOTIFY_BLANK_INVITE = {
title: "Blank Invite",
message:
"The invite was not included, which can happen when your iOS device cuts off the link. Try pasting the full link into a browser.",
};
// Used in: ContactsView.vue (processInviteJwt method - registration success)
export const NOTIFY_INVITE_REGISTRATION_SUCCESS = {
title: "Registered",
message: "You are now registered.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_INVITE_ERROR = {
title: "Error with Invite",
message: "Got an error sending the invite.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_ONBOARDING_CONFIRM = {
title: "They're Added To Your List",
message: "Would you like to go to the main page now?",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_REGISTER_NOT_AVAILABLE = {
title: "Not Registered",
message: "You must get registered before you can create invites.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_REGISTER_PROCESSING = {
title: "Processing",
message: "Sent...",
};
// Used in: getRegisterPersonSuccessMessage function
export const NOTIFY_REGISTER_PERSON_SUCCESS = {
title: "Registration Success",
message: "has been registered.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_REGISTER_PERSON_ERROR = {
title: "Registration Error",
message: "Something went wrong during registration.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_VISIBILITY_ERROR = {
title: "Error Setting Visibility",
message: "Could not set visibility on the server.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_UNCONFIRMED_HOURS = {
title: "Unconfirmed Hours",
message: "Would you like to confirm some of those hours?",
};
// Dynamic message template for unconfirmed hours (used in ContactsView.vue)
export const NOTIFY_UNCONFIRMED_HOURS_DYNAMIC = {
title: "Unconfirmed Hours",
// Template: "There {is/are} {count} unconfirmed {hour/hours} from them. Would you like to confirm some of those hours?"
getMessage: (count: number): string => {
const isAre = count === 1 ? "is" : "are";
const hours = count === 1 ? "hour" : "hours";
return `There ${isAre} ${count} unconfirmed ${hours} from them. Would you like to confirm some of those hours?`;
},
};
// Complex modal constants (for raw $notify calls with advanced features)
// MembersList.vue complex modals
// Used in: MembersList.vue (complex modal for adding contacts)
export const NOTIFY_ADD_CONTACT_FIRST = {
title: "Add as Contact First?",
text: "This person is not in your contacts. Would you like to add them as a contact first?",
yesText: "Add as Contact",
noText: "Skip Adding Contact",
};
// Used in: MembersList.vue (complex modal for continuing without adding)
export const NOTIFY_CONTINUE_WITHOUT_ADDING = {
title: "Continue Without Adding?",
text: "Are you sure you want to proceed with admission? If they are not a contact, you will not know their name after this meeting.",
yesText: "Continue",
};
// ContactsView.vue complex modals
// Used in: ContactsView.vue (addContact method - complex modal for registration)
export const NOTIFY_REGISTER_CONTACT = {
title: "Register",
text: "Do you want to register them?",
};
// Used in: ContactsView.vue (showOnboardMeetingDialog method - complex modal for onboarding meeting)
export const NOTIFY_ONBOARDING_MEETING = {
title: "Onboarding Meeting",
text: "Would you like to start a new meeting?",
yesText: "Start New Meeting",
noText: "Join Existing Meeting",
};
// TestView.vue specific constants
// Used in: TestView.vue (executeSql method - SQL error handling)
export const NOTIFY_SQL_ERROR = {
title: "SQL Error",
message: "Database operation failed.",
};
// Used in: TestView.vue (register method - complex modal for name requirement)
export const NOTIFY_PASSKEY_NAME_REQUIRED = {
title: "No Name",
text: "You should have a name to attach to this passkey. Would you like to enter your own name first?",
noText: "try again and use",
};
// IdentitySwitcherView.vue specific constants
// Used in: IdentitySwitcherView.vue (created method - error loading accounts)
export const NOTIFY_ERROR_LOADING_ACCOUNTS = {
title: "Error Loading Accounts",
message: "Clear your cache and start over (after data backup).",
};
// Used in: IdentitySwitcherView.vue (notifyCannotDelete method - warning for active identity)
export const NOTIFY_CANNOT_DELETE_ACTIVE_IDENTITY = {
title: "Cannot Delete",
message:
"You cannot delete the active identity. Set to another identity or 'no identity' first.",
};
// Used in: IdentitySwitcherView.vue (deleteAccount method - complex modal for delete confirmation)
export const NOTIFY_DELETE_IDENTITY_CONFIRM = {
title: "Delete Identity?",
text: "Are you sure you want to erase this identity? (There is no undo. You may want to select it and back it up just in case.)",
};
// ProjectViewView.vue complex modals
// Used in: ProjectViewView.vue (complex modal for claim confirmation)
export const NOTIFY_CONFIRM_CLAIM = {
title: "Confirm",
text: "Do you personally confirm that this is true?",
};
// UserProfileView.vue constants
// Used in: UserProfileView.vue (profile loading error)
export const NOTIFY_PROFILE_LOAD_ERROR = {
title: "Profile Load Error",
message: "There was a problem loading the profile.",
};
// ProjectsView.vue constants
// Used in: ProjectsView.vue (no account error)
export const NOTIFY_NO_ACCOUNT_ERROR = {
title: "No Account Found",
message: "You need an identifier to load your projects.",
};
// Used in: ProjectsView.vue (project load error)
export const NOTIFY_PROJECT_LOAD_ERROR = {
title: "Project Load Error",
message: "Failed to get projects from the server.",
};
// Used in: ProjectsView.vue (project initialization error)
export const NOTIFY_PROJECT_INIT_ERROR = {
title: "Initialization Error",
message: "Something went wrong loading your projects.",
};
// Used in: ProjectsView.vue (offers load error)
export const NOTIFY_OFFERS_LOAD_ERROR = {
title: "Offer Load Error",
message: "Failed to get offers from the server.",
};
// Used in: ProjectsView.vue (offers fetch error)
export const NOTIFY_OFFERS_FETCH_ERROR = {
title: "Offer Fetch Error",
message: "Got an error loading offers.",
};
// ProjectsView.vue complex modals
// Used in: ProjectsView.vue (complex modal for camera sharing method)
export const NOTIFY_CAMERA_SHARE_METHOD = {
title: "Are you nearby with cameras?",
text: "If so, we'll use those with QR codes to share.",
yesText: "we are nearby with cameras",
noText: "we will share another way",
};
// SharedPhotoView.vue constants
// Used in: SharedPhotoView.vue (photo data loading error)
export const NOTIFY_SHARED_PHOTO_LOAD_ERROR = {
title: "Error",
message: "Got an error loading this data.",
};
// Used in: SharedPhotoView.vue (photo saving error)
export const NOTIFY_SHARED_PHOTO_SAVE_ERROR = {
title: "Error",
message: "There was a problem saving the picture.",
};
// OfferDialog.vue constants
// Used in: OfferDialog.vue (settings retrieval error)
export const NOTIFY_OFFER_SETTINGS_ERROR = {
title: "Error",
message: "There was an error retrieving your settings.",
};
// Used in: OfferDialog.vue (offer recording in progress)
export const NOTIFY_OFFER_RECORDING = {
text: "Recording the offer...",
title: "",
};
// Used in: OfferDialog.vue (identity required for offer)
export const NOTIFY_OFFER_IDENTITY_REQUIRED = {
title: "Error",
message: "You must select an identity before you can record an offer.",
};
// Used in: OfferDialog.vue (description required for offer)
export const NOTIFY_OFFER_DESCRIPTION_REQUIRED = {
title: "Error",
message: "You must enter a description or some number of {unit}.",
};
// Used in: OfferDialog.vue (offer creation error)
export const NOTIFY_OFFER_CREATION_ERROR = {
title: "Error",
message: "There was an error creating the offer.",
};
// Used in: OfferDialog.vue (offer recorded successfully)
export const NOTIFY_OFFER_SUCCESS = {
title: "Success",
message: "That offer was recorded.",
};
// Used in: OfferDialog.vue (offer submission error)
export const NOTIFY_OFFER_SUBMISSION_ERROR = {
title: "Error",
message: "There was an error recording the offer.",
};
// PhotoDialog.vue constants
// Used in: PhotoDialog.vue (settings retrieval error)
export const NOTIFY_PHOTO_SETTINGS_ERROR = {
title: "Error",
message: "There was an error retrieving your settings.",
};
// Used in: PhotoDialog.vue (photo capture error)
export const NOTIFY_PHOTO_CAPTURE_ERROR = {
title: "Error",
message: "Failed to take picture. Please try again.",
};
// Used in: PhotoDialog.vue (camera access error)
export const NOTIFY_PHOTO_CAMERA_ERROR = {
title: "Camera Error",
message: "Could not access camera. Please check permissions and try again.",
};
// Used in: PhotoDialog.vue (photo upload error)
export const NOTIFY_PHOTO_UPLOAD_ERROR = {
title: "Upload Error",
message: "Failed to upload image. Please try again.",
};
// Used in: PhotoDialog.vue (photo upload success)
export const NOTIFY_PHOTO_UPLOAD_SUCCESS = {
title: "Success",
message: "Image uploaded successfully.",
};
// Used in: PhotoDialog.vue (unsupported file format)
export const NOTIFY_PHOTO_UNSUPPORTED_FORMAT = {
title: "Unsupported Format",
message: "This file format is not supported. Please try a different image.",
};
// Used in: PhotoDialog.vue (file size too large)
export const NOTIFY_PHOTO_SIZE_ERROR = {
title: "File Too Large",
message: "Image file is too large. Please choose a smaller image.",
};
// Used in: PhotoDialog.vue (image processing error)
export const NOTIFY_PHOTO_PROCESSING_ERROR = {
title: "Processing Error",
message: "Failed to process image. Please try again.",
};
// OnboardMeetingSetupView.vue constants
// Used in: OnboardMeetingSetupView.vue (meeting time validation)
export const NOTIFY_MEETING_INVALID_TIME = {
title: "Invalid Time",
message: "Select a future time for the meeting expiration.",
};
// Used in: OnboardMeetingSetupView.vue (meeting name validation)
export const NOTIFY_MEETING_NAME_REQUIRED = {
title: "Invalid Name",
message: "Please enter your name.",
};
// Used in: OnboardMeetingSetupView.vue (meeting password validation)
export const NOTIFY_MEETING_PASSWORD_REQUIRED = {
title: "Invalid Password",
message: "Please enter a password.",
};
// Used in: OnboardMeetingSetupView.vue (meeting creation success)
export const NOTIFY_MEETING_CREATED = {
title: "Success",
message: "Meeting created.",
};
// Used in: OnboardMeetingSetupView.vue (meeting deletion success)
export const NOTIFY_MEETING_DELETED = {
title: "Success",
message: "Meeting deleted successfully.",
};
// Used in: OnboardMeetingSetupView.vue (member link copied)
export const NOTIFY_MEETING_LINK_COPIED = {
title: "Copied",
message: "The member link is copied to the clipboard.",
};
// ContactsView.vue extracted notification messages
// Used in: ContactsView.vue (onClickNewContact method - no contact info error)
export const NOTIFY_CONTACT_NO_INFO = {
title: "No Contact Info",
message: "There was no contact info to add. Try the other green buttons.",
};
// Used in: [Component usage not yet documented]
export const NOTIFY_CONTACT_INVALID_URL = {
title: "Invalid URL",
message: "Invalid contact URL format.",
};
// Used in: ContactsView.vue (onClickNewContact method - CSV contacts added success)
export const NOTIFY_CONTACTS_ADDED_CSV = {
title: "Contacts Added",
message: "Each contact was added. Nothing was sent to the server.",
};
// Used in: ContactsView.vue (onClickNewContact method - CSV add error)
export const NOTIFY_CONTACTS_ADD_ERROR = {
title: "Add Contacts Error",
message: "An error occurred. Some contacts may have been added.",
};
// Used in: ContactsView.vue (onClickNewContact method - JSON array parse error)
export const NOTIFY_CONTACT_INPUT_PARSE_ERROR = {
title: "Invalid Contact List",
message: "The input could not be parsed.",
};
// Used in: ContactsView.vue (onClickNewContact method - no contact found in input)
export const NOTIFY_CONTACT_NO_CONTACT_FOUND = {
title: "No Contact Info",
message: "No contact info was found in that input.",
};
// Used in: ContactsView.vue (addContact method - contact has no DID)
export const NOTIFY_CONTACT_NO_DID = {
title: "Incomplete Contact",
message: "Cannot add a contact without a DID.",
};
// Used in: ContactsView.vue (addContact method - invalid DID format)
export const NOTIFY_CONTACT_INVALID_DID = {
title: "Invalid DID",
message: "The DID must begin with 'did:'",
};
// Used in: ContactsView.vue (addContact method - contact import error)
export const NOTIFY_CONTACT_IMPORT_ERROR = {
title: "Contact Not Added",
message: "An error prevented this import.",
};
// Used in: ContactsView.vue (addContact method - contact already exists)
export const NOTIFY_CONTACT_IMPORT_CONFLICT = {
title: "Contact Not Added",
message:
"A contact with that DID is already in your contact list. Edit them directly below.",
};
// Used in: ContactsView.vue (addContact method - constraint error)
export const NOTIFY_CONTACT_IMPORT_CONSTRAINT = {
title: "Contact Not Added",
message: "Check that the contact doesn't conflict with any you already have.",
};
// Used in: ContactsView.vue (loadGives method - gives loading error)
export const NOTIFY_GIVES_LOAD_ERROR = {
title: "Gives Load Error",
message: "Got an error loading your gives.",
};
// Used in: ContactsView.vue (toggleShowContactAmounts method - setting save error)
export const NOTIFY_CONTACT_SETTING_SAVE_ERROR = {
title: "Setting Save Error",
message:
"The setting may not have saved. Try again, maybe after restarting the app.",
};
// Used in: ContactsView.vue (showOnboardMeetingDialog method - meeting status error)
export const NOTIFY_MEETING_STATUS_ERROR = {
title: "Meeting Error",
message: "There was an error checking your meeting status.",
};
// Used in: ContactsView.vue (addContact method - contact added with visibility)
export const NOTIFY_CONTACTS_ADDED_VISIBLE = {
title: "Contact Added",
message: "They were added, and your activity is visible to them.",
};
// Used in: ContactsView.vue (addContact method - contact added without visibility)
export const NOTIFY_CONTACTS_ADDED = {
title: "Contact Added",
message: "They were added.",
};
// Used in: ContactsView.vue (showCopySelectionsInfo method - info about copying contacts)
export const NOTIFY_CONTACT_INFO_COPY = {
title: "Info",
message: "Contact info will include name, ID, profile image, and public key.",
};
// Used in: ContactsView.vue (copySelectedContacts method - no contacts selected error)
export const NOTIFY_CONTACTS_SELECT_TO_COPY = {
title: "Select Contacts",
message: "You must select contacts to copy.",
};
// Used in: ContactsView.vue (copySelectedContacts method - contact link copied success)
export const NOTIFY_CONTACT_LINK_COPIED = {
title: "Copied",
message: "contact link",
};
// Template for registration success message
// Used in: ContactsView.vue (register method - registration success with contact name)
export const getRegisterPersonSuccessMessage = (name?: string): string =>
`${name || "That unnamed person"} ${NOTIFY_REGISTER_PERSON_SUCCESS.message}`;
// Template for visibility success message
// Used in: ContactsView.vue (setVisibility method - visibility success with contact name)
export const getVisibilitySuccessMessage = (
name?: string,
visible = true,
): string =>
`${name || "That user"} can ${visible ? "" : "not "}see your activity.`;
// Template for gives retrieval error message
// Used in: ContactsView.vue (loadGives method - gives retrieval error with direction)
export const getGivesRetrievalErrorMessage = (useRecipient: boolean): string =>
`Got an error retrieving your ${useRecipient ? "given" : "received"} data from the server.`;
// Additional constants for ContactsView.vue
// Used in: ContactsView.vue (register method - registration error fallback)
export const NOTIFY_REGISTRATION_ERROR_FALLBACK = {
title: "Registration Error",
message: "Something went wrong during registration.",
};
// Used in: ContactsView.vue (register method - generic registration error)
export const NOTIFY_REGISTRATION_ERROR_GENERIC = {
title: "Registration Error",
message: "There was an error.",
};
// Used in: ContactsView.vue (setVisibility method - visibility error fallback)
export const NOTIFY_VISIBILITY_ERROR_FALLBACK = {
title: "Error Setting Visibility",
message: "Could not set visibility on the server.",
};
// ContactEditView.vue constants
// Used in: ContactEditView.vue (contact not found error)
export const NOTIFY_CONTACT_NOT_FOUND = {
title: "Contact Not Found",
message: "Contact not found with DID",
};
// Used in: ContactEditView.vue (contact methods updated)
export const NOTIFY_CONTACT_METHODS_UPDATED = {
title: "Contact Methods Updated",
message:
"Contact methods updated. Note that some methods have been updated, such as uppercasing 'email' to 'EMAIL'. Save again if the changes are acceptable.",
};
// Used in: ContactEditView.vue (contact saved successfully)
export const NOTIFY_CONTACT_SAVED = {
title: "Contact Saved",
message: "Contact saved successfully",
};
/**
* Creates a contact not found error message with the specific DID
* Used in: [Component usage not yet documented]
*/
export const createContactNotFoundMessage = (did: string): string =>
`${NOTIFY_CONTACT_NOT_FOUND.message} ${did}`;
/**
* Creates a SQL error notification message
* Used in: TestView.vue (executeSql method)
*/
export const createSqlErrorMessage = (error: unknown): string => {
const errorMessage = error instanceof Error ? error.message : String(error);
return errorMessage;
};
/**
* Creates passkey name requirement modal configuration
* Used in: TestView.vue (register method)
*/
export const createPasskeyNameModal = (
defaultUsername: string,
onNoCallback: () => Promise<void>,
onYesCallback: () => Promise<void>,
) => ({
group: "modal",
type: "confirm",
title: NOTIFY_PASSKEY_NAME_REQUIRED.title,
text: NOTIFY_PASSKEY_NAME_REQUIRED.text,
onNo: onNoCallback,
onYes: onYesCallback,
noText: `${NOTIFY_PASSKEY_NAME_REQUIRED.noText} ${defaultUsername}`,
});
// ContactAmountsView.vue constants
// Used in: ContactAmountsView.vue (settings retrieval error)
export const NOTIFY_SETTINGS_RETRIEVAL_ERROR = {
title: "Error",
message: "There was an error retrieving your settings or contacts or gives.",
};
// Used in: ContactAmountsView.vue (server retrieval error)
export const NOTIFY_SERVER_RETRIEVAL_ERROR = {
title: "Error With Server",
message: "Got an error retrieving your given time from the server.",
};
// Used in: ContactAmountsView.vue (confirmation restriction)
export const NOTIFY_CONFIRMATION_RESTRICTION = {
title: "Not Allowed",
message: "Only the recipient can confirm final receipt.",
};
// =================================================
// INVITE MANAGEMENT NOTIFICATIONS
// =================================================
/**
* Invite Management Notifications
* For InviteOneView.vue component
*/
export const NOTIFY_INVITE_LOAD_ERROR = {
group: "alert",
type: "danger",
title: "Load Error",
message: "Got an error loading your invites.",
} as const;
export const NOTIFY_INVITE_LINK_COPIED = {
group: "alert",
type: "success",
title: "Copied",
message: "Your clipboard now contains the link for invite",
} as const;
export const NOTIFY_INVITE_ID_COPIED = {
group: "alert",
type: "success",
title: "Copied",
message: "Your clipboard now contains the invite ID",
} as const;
export const NOTIFY_CONTACT_ADDED = {
group: "alert",
type: "success",
title: "Contact Added",
message: "has been added to your contacts.",
} as const;
export const NOTIFY_INVITE_DELETE_CONFIRM = {
group: "modal",
type: "confirm",
title: "Delete Invite?",
message: "Are you sure you want to erase the invite for",
} as const;
export const NOTIFY_INVITE_DELETED = {
group: "alert",
type: "success",
title: "Deleted",
message: "Invite deleted.",
} as const;
/**
* Creates invite link copy notification message
* @param inviteId - ID of the invitation
* @returns Formatted notification message
*/
export function createInviteLinkCopyMessage(inviteId: string): string {
return `${NOTIFY_INVITE_LINK_COPIED.message} ${inviteId}`;
}
/**
* Creates invite ID copy notification message with status
* @param inviteId - ID of the invitation
* @param redeemed - Whether invite has been redeemed
* @param expired - Whether invite has expired
* @returns Formatted notification message
*/
export function createInviteIdCopyMessage(
inviteId: string,
redeemed: boolean,
expired: boolean,
): string {
let message = `${NOTIFY_INVITE_ID_COPIED.message} ${inviteId}`;
if (redeemed) {
message += " (This invite has been used.)";
} else if (expired) {
message += " (This invite has expired.)";
}
return message;
}
/**
* Creates contact added notification message
* @param contactName - Name of the contact added
* @returns Formatted notification message
*/
export function createContactAddedMessage(contactName: string): string {
return `${contactName} ${NOTIFY_CONTACT_ADDED.message}`;
}
/**
* Creates invite delete confirmation message
* @param notes - Notes from the invite
* @returns Formatted confirmation message
*/
export function createInviteDeleteConfirmMessage(notes: string): string {
return `${NOTIFY_INVITE_DELETE_CONFIRM.message} "${notes}"? (There is no undo.)`;
}
/**
* Creates confirmation success message based on count
* @param count - Number of confirmations
* @returns Formatted success message
*/
export function createConfirmationSuccessMessage(count: number): string {
return count === 1
? NOTIFY_SINGLE_CONFIRMATION_SUCCESS.message
: NOTIFY_MULTIPLE_CONFIRMATIONS_SUCCESS.message;
}
/**
* Creates combined success message for confirmations and give
* @param confirmCount - Number of confirmations
* @param hasGive - Whether a give was also recorded
* @returns Formatted success message
*/
export function createCombinedSuccessMessage(
confirmCount: number,
hasGive: boolean,
): string {
if (confirmCount > 0 && hasGive) {
return NOTIFY_CONFIRMATIONS_AND_GIVE_SUCCESS.message;
} else if (hasGive) {
return NOTIFY_GIVE_SUCCESS.message;
} else {
const confirms = confirmCount === 1 ? "confirmation" : "confirmations";
const hasHave = confirmCount === 1 ? "has" : "have";
return `Your ${confirms} ${hasHave} been recorded.`;
}
}