103 lines
3 KiB
JavaScript
103 lines
3 KiB
JavaScript
import { VirtualNotificationTypes } from "./virtualNotifications";
|
|
import { getNotificationContent } from "./content";
|
|
import openSettings from "~/lib/native/openSettings";
|
|
import { navActions } from "~/stores";
|
|
|
|
export const getNotificationColor = (notification, theme) => {
|
|
const { colors } = theme;
|
|
return (
|
|
theme.custom.appColors[
|
|
notification.alertLevel || notification.data.level
|
|
] || colors.primary
|
|
);
|
|
};
|
|
|
|
export const getNotificationTypeText = (notification) => {
|
|
// Handle virtual notifications with a type-based mapping
|
|
if (notification.isVirtual) {
|
|
if (notification.type === VirtualNotificationTypes.REGISTER_RELATIVES) {
|
|
return "Aucun contact d'urgence enregistré";
|
|
}
|
|
|
|
if (notification.type === VirtualNotificationTypes.UNREAD_ALERT_MESSAGES) {
|
|
// No longer include code or subject in title
|
|
return `Nouveaux messages`;
|
|
}
|
|
|
|
return notification.type;
|
|
}
|
|
|
|
if (!notification.data) {
|
|
return notification.type;
|
|
}
|
|
|
|
try {
|
|
const parsedData = JSON.parse(notification.data);
|
|
return getNotificationContent(notification.type, parsedData).title;
|
|
} catch (e) {
|
|
console.error("Error parsing notification data:", e);
|
|
return notification.type;
|
|
}
|
|
};
|
|
|
|
export const getNotificationMessageText = (notification) => {
|
|
// Simple cases first
|
|
if (notification.isVirtual || notification.message) {
|
|
return notification.message;
|
|
}
|
|
|
|
if (!notification.data) {
|
|
return notification.type;
|
|
}
|
|
|
|
// Parse data for regular notifications
|
|
try {
|
|
const parsedData = JSON.parse(notification.data);
|
|
return getNotificationContent(notification.type, parsedData).body;
|
|
} catch (e) {
|
|
console.error("Error parsing notification data:", e);
|
|
return notification.type;
|
|
}
|
|
};
|
|
|
|
export const createNotificationHandlers = (handlers) => {
|
|
const { openAlert, openRelatives } = handlers;
|
|
|
|
// Virtual notification handlers
|
|
const virtualNotificationHandlers = {
|
|
[VirtualNotificationTypes.REGISTER_RELATIVES]: async () =>
|
|
await openRelatives({ data: {} }),
|
|
[VirtualNotificationTypes.UNREAD_ALERT_MESSAGES]: async (notification) =>
|
|
await openAlert({
|
|
data: {
|
|
alertId: notification.alertId,
|
|
},
|
|
tab: "AlertCurMessage",
|
|
}),
|
|
};
|
|
|
|
// Regular notification handlers
|
|
const regularNotificationHandlers = {
|
|
alert: async (data) => await openAlert({ data }),
|
|
alert_emergency_info: async (data) => await openAlert({ data }),
|
|
suggest_close: async (data) => await openAlert({ data }),
|
|
suggest_keep_open: async (data) => await openAlert({ data }),
|
|
relative_invitation: async (data) => await openRelatives({ data }),
|
|
relative_allow_ask: async (data) => await openRelatives({ data }),
|
|
background_geolocation_lost: async (_data) => {
|
|
navActions.setNextNavigation([
|
|
{
|
|
name: "Params",
|
|
params: {
|
|
anchor: "permissions",
|
|
},
|
|
},
|
|
]);
|
|
},
|
|
};
|
|
|
|
return {
|
|
virtualNotificationHandlers,
|
|
regularNotificationHandlers,
|
|
};
|
|
};
|