forked from jsnbuchanan/crowd-funder-for-time-pwa
Database Migration: Replace databaseUtil + PlatformServiceFactory with PlatformServiceMixin SQL Abstraction: Use $first<Temp>(), $dbQuery(), $dbExec(), $accountSettings(), $updateSettings() Notification Migration: Add 2 constants, migrate 3 $notify calls to helper methods Documentation: Add comprehensive file and method-level documentation Time: 6 minutes | Complexity: Medium | Issues: Linting fixed Testing: Manual required | Validation: Full Enhanced Triple Migration Pattern Component Features: - External image sharing from device apps via deep linking - Image upload to server with JWT authentication - Convert images to gifts (GiveAction) or profile pictures - Temporary storage management and cleanup - Integration with PhotoDialog for profile image cropping - Comprehensive error handling for upload scenarios Technical Updates: - Type-safe database operations with proper result mapping - Centralized notification constants for consistency - Enhanced error handling with detailed logging - Clean separation of concerns between data access and UI
287 lines
7.5 KiB
TypeScript
287 lines
7.5 KiB
TypeScript
// Notification message constants for user-facing notifications
|
|
// Add new notification messages here as needed
|
|
|
|
export const NOTIFY_PERSON_HIDDEN = {
|
|
title: "Person Outside Your Network",
|
|
message: "This person is not visible to you.",
|
|
};
|
|
|
|
export const NOTIFY_UNKNOWN_PERSON = {
|
|
title: "Unidentified Person",
|
|
message: "Nobody specific was recognized.",
|
|
};
|
|
|
|
export const NOTIFY_CONTACT_LOADING_ISSUE = {
|
|
title: "Contact Loading Issue",
|
|
message: "Some contact information may be unavailable.",
|
|
};
|
|
|
|
export const NOTIFY_FEED_LOADING_ISSUE = {
|
|
title: "Feed Loading Issue",
|
|
message: "Some feed data may be unavailable. Pull to refresh.",
|
|
};
|
|
|
|
export const NOTIFY_CONFIRMATION_ERROR = {
|
|
title: "Error",
|
|
message: "There was a problem submitting the confirmation.",
|
|
};
|
|
|
|
export const NOTIFY_DEFAULT_TO_ACTIVE_DID = {
|
|
title: "Your Info",
|
|
message: "No user was specified so showing your info.",
|
|
};
|
|
|
|
export const NOTIFY_CONTACT_DELETED = {
|
|
title: "Deleted",
|
|
message: "Contact has been removed.",
|
|
};
|
|
|
|
export const NOTIFY_CONTACT_DELETE_FAILED = {
|
|
title: "Error",
|
|
message: "Failed to delete contact.",
|
|
};
|
|
|
|
export const NOTIFY_REGISTRATION_SUCCESS = {
|
|
title: "Registration Success",
|
|
message: "has been registered.",
|
|
};
|
|
|
|
export const NOTIFY_REGISTRATION_ERROR = {
|
|
title: "Registration Error",
|
|
message: "Something went wrong during registration.",
|
|
};
|
|
|
|
export const NOTIFY_SERVER_ACCESS_ERROR = {
|
|
title: "Error",
|
|
message: "There was a problem accessing the server. Try again later.",
|
|
};
|
|
|
|
export const NOTIFY_NO_IDENTITY_ERROR = {
|
|
title: "No Identity",
|
|
message: "There is no identity to use to check visibility.",
|
|
};
|
|
|
|
export const NOTIFY_VISIBILITY_SET = {
|
|
title: "Visibility Set",
|
|
message: "visibility updated.",
|
|
};
|
|
|
|
export const NOTIFY_VISIBILITY_REFRESHED = {
|
|
title: "Visibility Refreshed",
|
|
message: "visibility status updated.",
|
|
};
|
|
|
|
// ContactsView.vue specific constants
|
|
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.",
|
|
};
|
|
|
|
export const NOTIFY_INVITE_REGISTRATION_SUCCESS = {
|
|
title: "Registered",
|
|
message: "You are now registered.",
|
|
};
|
|
|
|
export const NOTIFY_INVITE_ERROR = {
|
|
title: "Error with Invite",
|
|
message: "Got an error sending the invite.",
|
|
};
|
|
|
|
export const NOTIFY_ONBOARDING_CONFIRM = {
|
|
title: "They're Added To Your List",
|
|
message: "Would you like to go to the main page now?",
|
|
};
|
|
|
|
export const NOTIFY_REGISTER_NOT_AVAILABLE = {
|
|
title: "Not Registered",
|
|
message: "You must get registered before you can create invites.",
|
|
};
|
|
|
|
export const NOTIFY_REGISTER_PROCESSING = {
|
|
title: "Processing",
|
|
message: "Sent...",
|
|
};
|
|
|
|
export const NOTIFY_REGISTER_PERSON_SUCCESS = {
|
|
title: "Registration Success",
|
|
message: "has been registered.",
|
|
};
|
|
|
|
export const NOTIFY_REGISTER_PERSON_ERROR = {
|
|
title: "Registration Error",
|
|
message: "Something went wrong during registration.",
|
|
};
|
|
|
|
export const NOTIFY_VISIBILITY_ERROR = {
|
|
title: "Error Setting Visibility",
|
|
message: "Could not set visibility on the server.",
|
|
};
|
|
|
|
export const NOTIFY_UNCONFIRMED_HOURS = {
|
|
title: "Unconfirmed Hours",
|
|
message: "Would you like to confirm some of those hours?",
|
|
};
|
|
|
|
// Complex modal constants (for raw $notify calls with advanced features)
|
|
// MembersList.vue complex modals
|
|
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",
|
|
};
|
|
|
|
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
|
|
export const NOTIFY_REGISTER_CONTACT = {
|
|
title: "Register",
|
|
text: "Do you want to register them?",
|
|
};
|
|
|
|
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",
|
|
};
|
|
|
|
// ProjectViewView.vue complex modals
|
|
export const NOTIFY_CONFIRM_CLAIM = {
|
|
title: "Confirm",
|
|
text: "Do you personally confirm that this is true?",
|
|
};
|
|
|
|
// UserProfileView.vue constants
|
|
export const NOTIFY_PROFILE_LOAD_ERROR = {
|
|
title: "Profile Load Error",
|
|
message: "There was a problem loading the profile.",
|
|
};
|
|
|
|
// ProjectsView.vue constants
|
|
export const NOTIFY_NO_ACCOUNT_ERROR = {
|
|
title: "No Account Found",
|
|
message: "You need an identifier to load your projects.",
|
|
};
|
|
|
|
export const NOTIFY_PROJECT_LOAD_ERROR = {
|
|
title: "Project Load Error",
|
|
message: "Failed to get projects from the server.",
|
|
};
|
|
|
|
export const NOTIFY_PROJECT_INIT_ERROR = {
|
|
title: "Initialization Error",
|
|
message: "Something went wrong loading your projects.",
|
|
};
|
|
|
|
export const NOTIFY_OFFERS_LOAD_ERROR = {
|
|
title: "Offer Load Error",
|
|
message: "Failed to get offers from the server.",
|
|
};
|
|
|
|
export const NOTIFY_OFFERS_FETCH_ERROR = {
|
|
title: "Offer Fetch Error",
|
|
message: "Got an error loading offers.",
|
|
};
|
|
|
|
// ProjectsView.vue complex modals
|
|
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
|
|
export const NOTIFY_SHARED_PHOTO_LOAD_ERROR = {
|
|
title: "Error",
|
|
message: "Got an error loading this data.",
|
|
};
|
|
|
|
export const NOTIFY_SHARED_PHOTO_SAVE_ERROR = {
|
|
title: "Error",
|
|
message: "There was a problem saving the picture.",
|
|
};
|
|
|
|
// OfferDialog.vue constants
|
|
export const NOTIFY_OFFER_SETTINGS_ERROR = {
|
|
title: "Error",
|
|
message: "There was an error retrieving your settings.",
|
|
};
|
|
|
|
export const NOTIFY_OFFER_RECORDING = {
|
|
text: "Recording the offer...",
|
|
title: "",
|
|
};
|
|
|
|
export const NOTIFY_OFFER_IDENTITY_REQUIRED = {
|
|
title: "Error",
|
|
message: "You must select an identity before you can record an offer.",
|
|
};
|
|
|
|
export const NOTIFY_OFFER_DESCRIPTION_REQUIRED = {
|
|
title: "Error",
|
|
message: "You must enter a description or some number of {unit}.",
|
|
};
|
|
|
|
export const NOTIFY_OFFER_CREATION_ERROR = {
|
|
title: "Error",
|
|
message: "There was an error creating the offer.",
|
|
};
|
|
|
|
export const NOTIFY_OFFER_SUCCESS = {
|
|
title: "Success",
|
|
message: "That offer was recorded.",
|
|
};
|
|
|
|
export const NOTIFY_OFFER_SUBMISSION_ERROR = {
|
|
title: "Error",
|
|
message: "There was an error recording the offer.",
|
|
};
|
|
|
|
// PhotoDialog.vue constants
|
|
export const NOTIFY_PHOTO_SETTINGS_ERROR = {
|
|
title: "Error",
|
|
message: "There was an error retrieving your settings.",
|
|
};
|
|
|
|
export const NOTIFY_PHOTO_CAPTURE_ERROR = {
|
|
title: "Error",
|
|
message: "Failed to take picture. Please try again.",
|
|
};
|
|
|
|
export const NOTIFY_PHOTO_CAMERA_ERROR = {
|
|
title: "Camera Error",
|
|
message: "Could not access camera. Please check permissions and try again.",
|
|
};
|
|
|
|
export const NOTIFY_PHOTO_UPLOAD_ERROR = {
|
|
title: "Upload Error",
|
|
message: "Failed to upload image. Please try again.",
|
|
};
|
|
|
|
export const NOTIFY_PHOTO_UPLOAD_SUCCESS = {
|
|
title: "Success",
|
|
message: "Image uploaded successfully.",
|
|
};
|
|
|
|
export const NOTIFY_PHOTO_UNSUPPORTED_FORMAT = {
|
|
title: "Unsupported Format",
|
|
message: "This file format is not supported. Please try a different image.",
|
|
};
|
|
|
|
export const NOTIFY_PHOTO_SIZE_ERROR = {
|
|
title: "File Too Large",
|
|
message: "Image file is too large. Please choose a smaller image.",
|
|
};
|
|
|
|
export const NOTIFY_PHOTO_PROCESSING_ERROR = {
|
|
title: "Processing Error",
|
|
message: "Failed to process image. Please try again.",
|
|
};
|