Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions app.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@ export default {
ios: {
infoPlist: {
NSCameraUsageDescription:
"프로필 사진 촬영/업로드를 위해 카메라 접근 권한이 필요합니다.",
"프로필 사진 또는 팀 활동 이미지를 직접 촬영해 등록하려면 카메라 접근 권한이 필요합니다. 촬영한 이미지에만 접근하며, 권한을 허용하지 않아도 다른 기능은 사용할 수 있습니다.",
NSPhotoLibraryUsageDescription:
"프로필 사진 선택/업로드를 위해 사진 보관함 접근 권한이 필요합니다.",
"프로필 사진 또는 팀 활동 이미지로 사용할 사진을 선택하려면 사진 보관함 접근 권한이 필요합니다. 사용자가 선택한 사진만 업로드되며, 전체 보관함을 임의로 수집하지 않습니다.",
NSPhotoLibraryAddUsageDescription:
"프로필 사진 저장을 위해 사진 보관함 접근 권한이 필요합니다.",
"촬영하거나 편집한 이미지를 기기 사진 보관함에 저장하려면 저장 권한이 필요합니다. 저장 기능 외 다른 목적에는 사용되지 않습니다.",
NSAppTransportSecurity: {
NSAllowsArbitraryLoads: true,
},
Expand Down Expand Up @@ -91,7 +91,8 @@ export default {
[
"expo-image-picker",
{
photosPermission: "“Nemonemo” would like to access the camera.",
photosPermission:
"프로필 사진 및 팀 활동 이미지를 등록하거나 변경하려면 사진 보관함 접근 권한이 필요합니다. 선택한 사진만 앱에 업로드되며, 동의하지 않아도 다른 기능은 계속 사용할 수 있습니다.",
},
],
"expo-secure-store",
Expand Down
8 changes: 3 additions & 5 deletions app/(my)/info.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -227,12 +227,10 @@ const Info = () => {

return (
<SafeAreaView style={{ flex: 1, overflow: "scroll" }}>
<View style={styles.header}>
<Pressable onPress={() => router.back()}>
<AntDesign name="left" size={16} color={globalGray700} />
</Pressable>
<Pressable style={styles.header} onPress={() => router.back()}>
<AntDesign name="left" size={16} color={globalGray700} />
<NemoText level="h3">개인 정보 처리 방침</NemoText>
</View>
</Pressable>

<FlatList
data={SECTIONS}
Expand Down
8 changes: 3 additions & 5 deletions app/(my)/myInfo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -105,12 +105,10 @@ const MyInfo = () => {

return (
<SafeAreaView style={{ flex: 1 }}>
<View style={styles.header}>
<Pressable onPress={() => route.back()}>
<AntDesign name="left" size={16} color={globalGray700} />
</Pressable>
<Pressable style={styles.header} onPress={() => route.back()}>
<AntDesign name="left" size={16} color={globalGray700} />
<NemoText level="h3">내 정보관리</NemoText>
</View>
</Pressable>
<View style={styles.main}>
<Pressable
style={styles.profileSection}
Expand Down
31 changes: 15 additions & 16 deletions app/(my)/teamAlarm.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import {
getTeamNotificationSettings,
TeamNotificationSettings,
updateTeamNotificationSettings,
} from "@/features/notifications/api/notification";
import { TeamNotificationSettings } from "@/features/notifications/types/notification.model";
import { teamListUp } from "@/features/team/api/list";
import { TeamList } from "@/features/team/types/team.model";
import {
Expand Down Expand Up @@ -54,10 +54,10 @@ const TeamAlarm = ({}: TeamAlarmProps) => {
const queryClient = useQueryClient();
const [isOpenTeamList, setIsOpenTeamList] = useState(false);
const [currentTeam, setCurrentTeam] = useState<TeamList | undefined>(
undefined,
undefined
);
const [settings, setSettings] = useState<TeamNotificationSettings | null>(
null,
null
);
const [isOpenScheduleModal, setIsOpenScheduleModal] = useState(false);
const [isOpenTodoModal, setIsOpenTodoModal] = useState(false);
Expand Down Expand Up @@ -87,7 +87,7 @@ const TeamAlarm = ({}: TeamAlarmProps) => {
onSuccess: (updatedSettings) => {
queryClient.setQueryData(
["teamNotificationSettings", currentTeam?.teamId],
updatedSettings,
updatedSettings
);
},
});
Expand All @@ -100,17 +100,17 @@ const TeamAlarm = ({}: TeamAlarmProps) => {

const updateSettings = (
updater: (
prevSettings: TeamNotificationSettings,
) => TeamNotificationSettings,
prevSettings: TeamNotificationSettings
) => TeamNotificationSettings
) => {
if (!currentTeam || !settings) return;

setSettings((prev) => {
setSettings((prev: TeamNotificationSettings | null) => {
if (!prev) return null;
const nextSettings = updater(prev);
const nextSettings: TeamNotificationSettings = updater(prev);

updateMutation.mutate({
teamId: currentTeam.teamId,
teamId: currentTeam!.teamId,
settings: nextSettings,
});

Expand Down Expand Up @@ -151,12 +151,11 @@ const TeamAlarm = ({}: TeamAlarmProps) => {
};
return (
<SafeAreaView style={{ flex: 1 }}>
<View style={styles.header}>
<Pressable onPress={() => route.back()}>
<AntDesign name="left" size={16} color={globalGray700} />
</Pressable>
<Pressable style={styles.header} onPress={() => route.back()}>
<AntDesign name="left" size={16} color={globalGray700} />

<NemoText level="h3">팀 알림 설정</NemoText>
</View>
</Pressable>
<View style={styles.main}>
<Pressable onPress={handleToggleTeamList}>
<View style={[styles.linkContainer, styles.link]}>
Expand Down Expand Up @@ -274,7 +273,7 @@ const TeamAlarm = ({}: TeamAlarmProps) => {
}}
>
{formatAlarm(
toAlarmState(settings.schedulePreNotificationMinutes),
toAlarmState(settings.schedulePreNotificationMinutes)
)}
</NemoText>
</Pressable>
Expand Down Expand Up @@ -328,7 +327,7 @@ const TeamAlarm = ({}: TeamAlarmProps) => {
}}
>
{formatAlarm(
toAlarmState(settings.todoDeadlineNotificationMinutes),
toAlarmState(settings.todoDeadlineNotificationMinutes)
)}
</NemoText>
</Pressable>
Expand Down
19 changes: 12 additions & 7 deletions app/auth/permission.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,10 @@ export default function PermissionsScreen() {
<NotificationIcon />
<View style={styles.rowText}>
<Text style={styles.text_h3}>알림(선택)</Text>
<Text style={styles.text_body1}>메시지 및 알림 수신</Text>
<Text style={styles.text_body1}>
팀 초대 및 공지 변경 등의 정보를 안내하기 위해 필요한
권한입니다.
</Text>
</View>
</View>
</View>
Expand All @@ -126,27 +129,29 @@ export default function PermissionsScreen() {
<Text style={styles.text_h3}>
사진/미디어 저장소 권한(선택)
</Text>
<Text style={styles.text_body1}>프로필 변경 및 사진 첨부</Text>
<Text style={styles.text_body1}>
팀 프로필 및 개인 프로필 사진을 설정하거나 변경하기 위해
필요한 권한입니다. 선택한 이미지는 프로필 이미 지로만
사용됩니다.
</Text>
</View>
</View>
</View>

<View style={styles.divider} />
<Text style={styles.text_body3}>
접근 권한에 동의하지 않아도 서비스를 이용할 수 있으나, 일부 기능
사용에 제한이 있을 수 있습니다.
</Text>

<View style={styles.divider} />

<Text style={styles.text_body2}>선택적 접근권한 철회 방법</Text>
<Text style={styles.text_body3}>
설정 {`>`} 개인정보보호 {`>`} 해당 접근권한 {`>`} 접근권한 철회
설정 {`>`} Nemonemo 에서 접근 허용을 변경하실 수 있습니다
</Text>
</View>
</View>

<CtaButton
label={isSubmitting ? "처리 중..." : "동의하기"}
label={isSubmitting ? "처리 중..." : "확인"}
onPress={handleComplete}
isActive={canSubmit}
/>
Expand Down