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.
3.9 KiB
3.9 KiB
HomeView.vue Notification Constants Migration
Overview
This document describes the proper pattern for using notification constants in TimeSafari migrations, demonstrated through the HomeView.vue migration.
Pattern: Constants vs Literal Strings
Use Constants For
- Static, reusable messages that appear in multiple components
- Standard user-facing notifications with consistent wording
- Error messages that are used across the application
Use Literal Strings For
- Dynamic messages with variables or user input
- Contextual error messages that include specific details
- Messages that are truly one-off and unlikely to be reused
Implementation Example
1. Define Constants in src/constants/notifications.ts
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.",
};
2. Import Constants in Component
import {
NOTIFY_CONTACT_LOADING_ISSUE,
NOTIFY_FEED_LOADING_ISSUE,
NOTIFY_CONFIRMATION_ERROR,
} from "@/constants/notifications";
3. Use Constants in Notification Calls
// ✅ CORRECT - Using constants for static messages
this.notify.warning(
NOTIFY_CONTACT_LOADING_ISSUE.message,
TIMEOUTS.LONG
);
// ✅ CORRECT - Using literal strings for dynamic messages
this.notify.error(
userMessage || "There was an error loading your data. Please try refreshing the page.",
TIMEOUTS.LONG
);
Benefits
Consistency
- Ensures consistent wording across the application
- Reduces typos and variations in messaging
- Makes UI text easier to review and update
Maintainability
- Changes to notification text only need to be made in one place
- Easier to track which messages are used where
- Better support for future internationalization
Type Safety
- TypeScript can catch missing constants at compile time
- IDE autocompletion helps prevent errors
- Structured approach to notification management
Migration Checklist
When migrating notifications to use constants:
- Identify reusable messages in the component
- Add constants to
src/constants/notifications.ts
- Import constants in the component
- Replace literal strings with constant references
- Preserve dynamic messages as literal strings
- Test notifications to ensure they still work correctly
Examples From HomeView.vue
Type | Message | Constant Used |
---|---|---|
Warning | "Some contact information may be unavailable." | NOTIFY_CONTACT_LOADING_ISSUE.message |
Warning | "Some feed data may be unavailable. Pull to refresh." | NOTIFY_FEED_LOADING_ISSUE.message |
Error | "There was a problem submitting the confirmation." | NOTIFY_CONFIRMATION_ERROR.message |
Dynamic | userMessage || "fallback message" |
(literal string - dynamic content) |
Best Practices
- Use descriptive constant names that clearly indicate the message purpose
- Group related constants together in the notifications file
- Include both title and message in constant objects for consistency
- Document why certain messages remain as literal strings (dynamic content)
- Consider future reusability when deciding whether to create a constant
Integration with Existing Pattern
This approach builds on the existing notification helper pattern:
- Still uses
createNotifyHelpers()
for method abstraction - Still uses
TIMEOUTS
constants for consistent timing - Adds message constants for better content management
- Maintains compatibility with existing notification infrastructure
Author
Matthew Raymer
Date
2024-01-XX