Skip to content

[Feat/native/#231] 회원가입 약관 페이지 연결#232

Merged
sterdsterd merged 2 commits intodevelopfrom
feat/native/terms-#231
Feb 20, 2026
Merged

[Feat/native/#231] 회원가입 약관 페이지 연결#232
sterdsterd merged 2 commits intodevelopfrom
feat/native/terms-#231

Conversation

@sterdsterd
Copy link
Collaborator

@sterdsterd sterdsterd commented Feb 20, 2026

📌 Related Issue Number


✅ Key Changes

이번 PR에서 작업한 내용을 간략히 설명해주세요

  1. TermsConsentSheet의 chevron touch event에 인 앱 브라우저 약관 링크 추가

…TermsConsentSheet

- Introduced TERMS_URLS constant for service, privacy, and marketing consent links
- Updated ConsentRow to handle chevron press events for opening links in a web browser
- Enhanced user experience by allowing direct access to terms and privacy policies
@sterdsterd sterdsterd requested a review from Copilot February 20, 2026 22:48
@sterdsterd sterdsterd self-assigned this Feb 20, 2026
@sterdsterd sterdsterd added the 🐞 Fix 버그 수정 label Feb 20, 2026
@vercel
Copy link

vercel bot commented Feb 20, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
pointer-admin Ready Ready Preview, Comment Feb 20, 2026 10:57pm

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR implements the ability to open terms and conditions documents in an in-app browser from the signup consent sheet. When users tap the chevron icon next to service terms, privacy policy, or marketing consent rows, the corresponding Notion page opens in a browser.

Changes:

  • Added TERMS_URLS constant containing Notion URLs for service, privacy, and marketing consent documents
  • Integrated expo-web-browser to open terms links in an in-app browser
  • Updated ConsentRow component to support chevron press events separate from checkbox toggle
  • Improved code formatting for better readability

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +134 to +148
onChevronPress={() => WebBrowser.openBrowserAsync(TERMS_URLS.service)}
/>
<ConsentRow
checked={agreements.privacy}
onToggle={() => toggleAgreement('privacy')}
label='(필수) 개인정보 수집 및 이용 필수동의'
withChevron
onChevronPress={() => WebBrowser.openBrowserAsync(TERMS_URLS.privacy)}
/>
<ConsentRow
checked={agreements.marketing}
onToggle={() => toggleAgreement('marketing')}
label='(선택) 마케팅 정보 수신 동의'
withChevron
onChevronPress={() => WebBrowser.openBrowserAsync(TERMS_URLS.marketing)}
Copy link

Copilot AI Feb 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The WebBrowser.openBrowserAsync calls should include error handling. This API can fail for various reasons (network issues, browser not available, user cancellation, etc.) and currently there's no handling for these failures. Consider wrapping these calls in try-catch blocks or using .catch() to handle potential errors gracefully. This is important for production reliability as seen in other parts of the codebase where async operations are wrapped in try-catch blocks.

Suggested change
onChevronPress={() => WebBrowser.openBrowserAsync(TERMS_URLS.service)}
/>
<ConsentRow
checked={agreements.privacy}
onToggle={() => toggleAgreement('privacy')}
label='(필수) 개인정보 수집 및 이용 필수동의'
withChevron
onChevronPress={() => WebBrowser.openBrowserAsync(TERMS_URLS.privacy)}
/>
<ConsentRow
checked={agreements.marketing}
onToggle={() => toggleAgreement('marketing')}
label='(선택) 마케팅 정보 수신 동의'
withChevron
onChevronPress={() => WebBrowser.openBrowserAsync(TERMS_URLS.marketing)}
onChevronPress={() => {
WebBrowser.openBrowserAsync(TERMS_URLS.service).catch(error => {
console.error('Failed to open service terms URL:', error);
});
}}
/>
<ConsentRow
checked={agreements.privacy}
onToggle={() => toggleAgreement('privacy')}
label='(필수) 개인정보 수집 및 이용 필수동의'
withChevron
onChevronPress={() => {
WebBrowser.openBrowserAsync(TERMS_URLS.privacy).catch(error => {
console.error('Failed to open privacy terms URL:', error);
});
}}
/>
<ConsentRow
checked={agreements.marketing}
onToggle={() => toggleAgreement('marketing')}
label='(선택) 마케팅 정보 수신 동의'
withChevron
onChevronPress={() => {
WebBrowser.openBrowserAsync(TERMS_URLS.marketing).catch(error => {
console.error('Failed to open marketing terms URL:', error);
});
}}

Copilot uses AI. Check for mistakes.
Comment on lines +14 to +16
service: 'https://www.notion.so/2b4fa6e6a8fe80119c13d84d794a63a3?source=copy_link',
privacy: 'https://www.notion.so/2b4fa6e6a8fe8031ac2aef3009552575?source=copy_link',
marketing: 'https://www.notion.so/2b4fa6e6a8fe80359e8bf33c870967d9?source=copy_link',
Copy link

Copilot AI Feb 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider moving the terms URLs to environment variables or a centralized configuration file. The app.config.ts file shows a pattern of using environment variables for URLs and configuration values (lines 134-145). Hardcoding Notion URLs directly in the component makes them harder to update across environments or when terms pages change. This would improve maintainability by centralizing configuration values.

Suggested change
service: 'https://www.notion.so/2b4fa6e6a8fe80119c13d84d794a63a3?source=copy_link',
privacy: 'https://www.notion.so/2b4fa6e6a8fe8031ac2aef3009552575?source=copy_link',
marketing: 'https://www.notion.so/2b4fa6e6a8fe80359e8bf33c870967d9?source=copy_link',
service:
process.env.EXPO_PUBLIC_TERMS_URL_SERVICE ??
'https://www.notion.so/2b4fa6e6a8fe80119c13d84d794a63a3?source=copy_link',
privacy:
process.env.EXPO_PUBLIC_TERMS_URL_PRIVACY ??
'https://www.notion.so/2b4fa6e6a8fe8031ac2aef3009552575?source=copy_link',
marketing:
process.env.EXPO_PUBLIC_TERMS_URL_MARKETING ??
'https://www.notion.so/2b4fa6e6a8fe80359e8bf33c870967d9?source=copy_link',

Copilot uses AI. Check for mistakes.
</View>
{withChevron ? <ChevronRightIcon size={18} color={colors['gray-600']} /> : null}
{withChevron ? (
<Pressable onPress={onChevronPress} hitSlop={8}>
Copy link

Copilot AI Feb 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The chevron Pressable should include accessibility attributes to improve screen reader support. Consider adding accessibilityRole='button' and accessibilityLabel (e.g., '약관 보기' or '서비스 이용약관 보기') to indicate to screen reader users that this element opens the terms document. This follows accessibility best practices and improves the experience for users with disabilities.

Suggested change
<Pressable onPress={onChevronPress} hitSlop={8}>
<Pressable
onPress={onChevronPress}
hitSlop={8}
accessibilityRole='button'
accessibilityLabel='약관 보기'>

Copilot uses AI. Check for mistakes.
…et.tsx

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@sterdsterd sterdsterd linked an issue Feb 20, 2026 that may be closed by this pull request
@sterdsterd sterdsterd merged commit 9190b49 into develop Feb 20, 2026
2 checks passed
@sterdsterd sterdsterd deleted the feat/native/terms-#231 branch February 20, 2026 22:57
@sterdsterd sterdsterd restored the feat/native/terms-#231 branch February 21, 2026 21:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🐞 Fix 버그 수정

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feat] 회원가입 약관 페이지 연결

2 participants