goldenChat base source add
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
/**
|
||||
* 브라우저 알림 서비스
|
||||
*/
|
||||
|
||||
let notificationPermission: NotificationPermission = 'default';
|
||||
|
||||
/**
|
||||
* 알림 권한 요청
|
||||
*/
|
||||
export const requestNotificationPermission = async (): Promise<boolean> => {
|
||||
if (!('Notification' in window)) {
|
||||
console.warn('이 브라우저는 알림을 지원하지 않습니다.');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Notification.permission === 'granted') {
|
||||
notificationPermission = 'granted';
|
||||
return true;
|
||||
}
|
||||
|
||||
if (Notification.permission === 'denied') {
|
||||
notificationPermission = 'denied';
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
const permission = await Notification.requestPermission();
|
||||
notificationPermission = permission;
|
||||
return permission === 'granted';
|
||||
} catch (error) {
|
||||
console.error('알림 권한 요청 실패:', error);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 브라우저 알림 표시
|
||||
*/
|
||||
export const showNotification = (title: string, options?: NotificationOptions): Notification | null => {
|
||||
if (!('Notification' in window)) {
|
||||
console.warn('이 브라우저는 알림을 지원하지 않습니다.');
|
||||
return null;
|
||||
}
|
||||
|
||||
if (Notification.permission !== 'granted') {
|
||||
console.warn('알림 권한이 허용되지 않았습니다.');
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
const notification = new Notification(title, {
|
||||
icon: '/favicon.ico',
|
||||
badge: '/favicon.ico',
|
||||
...options,
|
||||
});
|
||||
|
||||
// 알림 클릭 시 창 포커스
|
||||
notification.onclick = () => {
|
||||
window.focus();
|
||||
notification.close();
|
||||
|
||||
// 알림 페이지로 이동 (옵션)
|
||||
if (options?.data?.page) {
|
||||
window.location.hash = options.data.page;
|
||||
}
|
||||
};
|
||||
|
||||
return notification;
|
||||
} catch (error) {
|
||||
console.error('알림 표시 실패:', error);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 알림 권한 상태 확인
|
||||
*/
|
||||
export const getNotificationPermission = (): NotificationPermission => {
|
||||
if (!('Notification' in window)) {
|
||||
return 'denied';
|
||||
}
|
||||
return Notification.permission;
|
||||
};
|
||||
|
||||
/**
|
||||
* 알림 지원 여부 확인
|
||||
*/
|
||||
export const isNotificationSupported = (): boolean => {
|
||||
return 'Notification' in window;
|
||||
};
|
||||
|
||||
export default {
|
||||
requestNotificationPermission,
|
||||
showNotification,
|
||||
getNotificationPermission,
|
||||
isNotificationSupported,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user