Skip to main content

UI/UX Change: Re-specifying Event Detail Screen to Branch Promotion

Last Updated: 16/07/2026
Type: UI/UX & Functional Change β€” Event Detail Page
Screen: Event/Promotion Detail Screen (EventDetailScreen)
Severity: πŸ”΄ High β€” Refactoring event/workshop concepts into local branch promotion concepts

Feedback Screenshot:


1. Overview & Business Rationale​

The Event tab in the app was previously designed as a workshop/seminar registration portal (where users register to join events, buy tickets, or redeem points for entry).

However, for the current MVP launch:

  • The app does not support point-to-ticket redemption yet.
  • Events are actually Branch Promotions & Spa Offers (Ζ―u Δ‘Γ£i chi nhΓ‘nh) rather than physical workshops.

Decisions:​

  1. Hide "Register Now" (Đăng kΓ½ ngay) Button: Remove/hide the bottom sticky action button since registration flows are not active in this release.
  2. Remove "Free" (Miα»…n phΓ­) Tag: Remove the price/ticket status indicator tag (G Miα»…n phΓ­) since promotions are discount-based and not ticket-based.
  3. Redefine Status States:
    • Change status label "Đang mở" (Open) β†’ "Đang hoαΊ‘t Δ‘α»™ng" (Active)
    • Change status label "Đã Δ‘Γ³ng" (Closed) β†’ "Đã kαΊΏt thΓΊc" (Ended)
  4. Simplify Timeframe Display: Show a calendar range (Start Date - End Date) rather than workshop hours (e.g. 09:00 - 20:00 β€’ 14/03/2026 β†’ 14/03/2026 - 31/03/2026).

2. UI Adjustments & Mappings​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ [ Banner Image ] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ [Đang hoαΊ‘t Δ‘α»™ng] ← Status badge β”‚
β”‚ β”‚
β”‚ Weekend Getaway - Healing World 210K β”‚
β”‚ β”‚
β”‚ πŸ“… 14/03/2026 - 31/03/2026 ← Start to End date β”‚
β”‚ πŸ“ Golden Lotus Healing World Thao Dien β”‚
β”‚ (Remove "Free" tag completely) β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Promotion Content β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Details of the weekend wellness package... β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
(Bottom Sticky Button "Đăng kΓ½ ngay" is HIDDEN/REMOVED)

3. Style & Layout Adjustments (React Native)​

3.1 Hiding the Registration Button​

Modify the layout return statement in EventDetailScreen.tsx:

// ❌ Before
return (
<View style={styles.container}>
<ScrollView style={styles.scroll}>
{/* Event Details */}
</ScrollView>
<TouchableOpacity style={styles.stickyButton} onPress={handleRegister}>
<Text style={styles.buttonText}>Đăng kΓ½ ngay</Text>
</TouchableOpacity>
</View>
);

// βœ… After: Hide / Remove the sticky button
return (
<View style={styles.container}>
<ScrollView
style={styles.scroll}
contentContainerStyle={{ paddingBottom: 32 }} // Normal padding instead of button height padding
>
{/* Event Details */}
</ScrollView>
</View>
);

3.2 Removing the Ticket Price Tag​

// ❌ Before
<View style={styles.metaRow}>
<Icon name="tag" />
<Text style={styles.priceTag}>Miα»…n phΓ­</Text>
</View>

// βœ… After
// Completely remove the price tag row component.

3.3 Dynamic Status Badges​

Map the backend status payload keys to the new Vietnamese statuses:

const getStatusLabel = (status: 'open' | 'closed' | 'active' | 'ended') => {
switch (status) {
case 'open':
case 'active':
return { text: 'Đang hoαΊ‘t Δ‘α»™ng', color: '#4CAF50' };
case 'closed':
case 'ended':
return { text: 'Đã kết thúc', color: '#9E9E9E' };
default:
return { text: 'Đang hoαΊ‘t Δ‘α»™ng', color: '#4CAF50' };
}
};

4. CMS Fields Mapping (For Admins)​

In the CMS article/event creation panel:

FieldPurpose in Promotion context
TiΓͺu đềName of the promotion package (e.g. "Ζ―u Δ‘Γ£i HSSV Healing World 90K")
BαΊ­t tα»« (Start Date)Start date of the discount period
TαΊ―t sau (End Date)Expiration date of the discount period
Chi nhΓ‘nh (Branch)Target branch where this promotion is valid
Nα»™i dung (Body)Detailed terms, checklists, and instructions for the offer

Technical Checklist​

  • Locate the event detail view file (EventDetailScreen.tsx).
  • Remove the bottom sticky button container (stickyButton and <Text>Đăng kΓ½ ngay</Text>).
  • Remove the ticket price tag element containing "Miα»…n phΓ­" or pricing properties.
  • Update the status badge translation mapping:
    • Maps open/active status to "Đang hoαΊ‘t Δ‘α»™ng" (Active).
    • Maps closed/ended status to "Đã kαΊΏt thΓΊc" (Ended).
  • Update the date field display: render the range startDate to endDate instead of individual event start times.
  • Confirm layout spacing: verify the ScrollView padding matches the new viewport after button removal.