# 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`
```typescript
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
```typescript
import {
  NOTIFY_CONTACT_LOADING_ISSUE,
  NOTIFY_FEED_LOADING_ISSUE,
  NOTIFY_CONFIRMATION_ERROR,
} from "@/constants/notifications";
```

### 3. Use Constants in Notification Calls
```typescript
// ✅ 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:

1. **Identify reusable messages** in the component
2. **Add constants** to `src/constants/notifications.ts`
3. **Import constants** in the component
4. **Replace literal strings** with constant references
5. **Preserve dynamic messages** as literal strings
6. **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

1. **Use descriptive constant names** that clearly indicate the message purpose
2. **Group related constants** together in the notifications file
3. **Include both title and message** in constant objects for consistency
4. **Document why** certain messages remain as literal strings (dynamic content)
5. **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 