react-native-notificare-push-ui
Version:
Notificare Push UI React Native module.
137 lines (136 loc) • 5.08 kB
JavaScript
/* eslint-disable @typescript-eslint/no-unused-vars */
Object.defineProperty(exports, "__esModule", { value: true });
exports.withNotificarePushUIAndroidStyle = void 0;
const Manifest_1 = require("@expo/config-plugins/build/android/Manifest");
const config_plugins_1 = require("expo/config-plugins");
const TRANSLUCENT_STYLE_THEME = 'Theme.Notificare.PushUI.Translucent';
const PUSH_UI_ACTIVITY = 're.notifica.push.ui.NotificationActivity';
const withApplyCustomStyle = (config, props) => {
return (0, config_plugins_1.withAndroidManifest)(config, (newConfig) => {
if (!props?.android?.customStyle)
return newConfig;
const application = (0, Manifest_1.getMainApplication)(newConfig.modResults);
if (!application) {
console.warn('No ".MainApplication" found in manifest.');
return newConfig;
}
const notificationActivity = {
$: {
'android:name': PUSH_UI_ACTIVITY,
'android:theme': `@style/${props.android.customStyle}`,
},
};
const activities = application.activity;
if (!activities) {
application.activity = [notificationActivity];
return newConfig;
}
if (!activities.find((activity) => activity.$['android:name'] === notificationActivity.$['android:name'])) {
activities.push(notificationActivity);
}
return newConfig;
});
};
const withCreateTranslucentStyle = (config, props) => {
return (0, config_plugins_1.withAndroidStyles)(config, (newConfig) => {
const styles = newConfig.modResults.resources.style;
const itemWindowTranslucent = {
_: 'true',
$: {
name: 'android:windowIsTranslucent',
},
};
const itemWindowBackground = {
_: '@android:color/transparent',
$: {
name: 'android:windowBackground',
},
};
const windowLightStatusBar = {
_: '?attr/isLightTheme',
$: {
name: 'android:windowLightStatusBar',
},
};
const statusBarColor = {
_: '@android:color/transparent',
$: {
name: 'android:statusBarColor',
},
};
const newStyle = {
$: {
name: TRANSLUCENT_STYLE_THEME,
parent: 'Theme.AppCompat.DayNight',
},
item: [
itemWindowTranslucent,
itemWindowBackground,
windowLightStatusBar,
statusBarColor,
],
};
if (!styles) {
newConfig.modResults.resources.style = [newStyle];
return newConfig;
}
if (!styles.find((style) => style.$.name === TRANSLUCENT_STYLE_THEME)) {
styles.push(newStyle);
}
return newConfig;
});
};
const withApplyTranslucentStyle = (config, props) => {
return (0, config_plugins_1.withAndroidManifest)(config, (newConfig) => {
const application = (0, Manifest_1.getMainApplication)(newConfig.modResults);
if (!application) {
console.warn('No ".MainApplication" found in manifest.');
return newConfig;
}
const notificationActivity = {
$: {
'android:name': PUSH_UI_ACTIVITY,
'android:theme': `@style/${TRANSLUCENT_STYLE_THEME}`,
},
};
const activities = application.activity;
if (!activities) {
application.activity = [notificationActivity];
return newConfig;
}
if (!activities.find((activity) => activity.$['android:name'] === notificationActivity.$['android:name'])) {
activities.push(notificationActivity);
}
return newConfig;
});
};
const withRemoveStyle = (config, props) => {
return (0, config_plugins_1.withAndroidManifest)(config, (newConfig) => {
const application = (0, Manifest_1.getMainApplication)(newConfig.modResults);
if (!application) {
console.warn('No ".MainApplication" found in manifest.');
return newConfig;
}
const activities = application.activity;
if (!activities) {
return newConfig;
}
application.activity = activities.filter((activity) => activity.$['android:name'] !== PUSH_UI_ACTIVITY);
return newConfig;
});
};
const withNotificarePushUIAndroidStyle = (config, props) => {
if (props?.android?.customStyle) {
config = withApplyCustomStyle(config, props);
return config;
}
if (props?.android?.useTranslucentStyle !== false) {
config = withCreateTranslucentStyle(config, props);
config = withApplyTranslucentStyle(config, props);
return config;
}
config = withRemoveStyle(config, props);
return config;
};
exports.withNotificarePushUIAndroidStyle = withNotificarePushUIAndroidStyle;
;