Initial commit
This commit is contained in:
19
src/definitions.ts
Normal file
19
src/definitions.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
export interface DailyNotificationPlugin {
|
||||
initialize(options: DailyNotificationOptions): Promise<void>;
|
||||
checkPermissions(): Promise<PermissionStatus>;
|
||||
requestPermissions(): Promise<PermissionStatus>;
|
||||
}
|
||||
|
||||
export interface DailyNotificationOptions {
|
||||
url: string;
|
||||
notificationTime: string; // "HH:mm" format
|
||||
title?: string;
|
||||
body?: string;
|
||||
}
|
||||
|
||||
export interface PermissionStatus {
|
||||
notifications: PermissionState;
|
||||
backgroundRefresh?: PermissionState; // iOS only
|
||||
}
|
||||
|
||||
export type PermissionState = 'prompt' | 'prompt-with-rationale' | 'granted' | 'denied';
|
||||
10
src/index.ts
Normal file
10
src/index.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { registerPlugin } from '@capacitor/core';
|
||||
|
||||
import type { DailyNotificationPlugin } from './definitions';
|
||||
|
||||
const DailyNotification = registerPlugin<DailyNotificationPlugin>('DailyNotification', {
|
||||
web: () => import('./web').then(m => new m.DailyNotificationWeb()),
|
||||
});
|
||||
|
||||
export * from './definitions';
|
||||
export { DailyNotification };
|
||||
45
src/web.ts
Normal file
45
src/web.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import { WebPlugin } from '@capacitor/core';
|
||||
|
||||
import type { DailyNotificationPlugin, DailyNotificationOptions, PermissionStatus } from './definitions';
|
||||
|
||||
export class DailyNotificationWeb extends WebPlugin implements DailyNotificationPlugin {
|
||||
async initialize(options: DailyNotificationOptions): Promise<void> {
|
||||
console.warn('DailyNotification.initialize() is not implemented on web');
|
||||
return;
|
||||
}
|
||||
|
||||
async checkPermissions(): Promise<PermissionStatus> {
|
||||
if ('Notification' in window) {
|
||||
const status = await Notification.permission;
|
||||
return {
|
||||
notifications: this.mapWebPermission(status),
|
||||
};
|
||||
}
|
||||
return {
|
||||
notifications: 'denied',
|
||||
};
|
||||
}
|
||||
|
||||
async requestPermissions(): Promise<PermissionStatus> {
|
||||
if ('Notification' in window) {
|
||||
const status = await Notification.requestPermission();
|
||||
return {
|
||||
notifications: this.mapWebPermission(status),
|
||||
};
|
||||
}
|
||||
return {
|
||||
notifications: 'denied',
|
||||
};
|
||||
}
|
||||
|
||||
private mapWebPermission(permission: NotificationPermission): PermissionState {
|
||||
switch (permission) {
|
||||
case 'granted':
|
||||
return 'granted';
|
||||
case 'denied':
|
||||
return 'denied';
|
||||
default:
|
||||
return 'prompt';
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user