1import { ExpoConfig } from '@expo/config-types';
2
3import { assignColorValue } from './Colors';
4import { assignStylesValue, getAppThemeLightNoActionBarGroup } from './Styles';
5import { ConfigPlugin } from '../Plugin.types';
6import { withAndroidColors, withAndroidStyles } from '../plugins/android-plugins';
7
8const COLOR_PRIMARY_KEY = 'colorPrimary';
9const DEFAULT_PRIMARY_COLOR = '#023c69';
10
11export const withPrimaryColor: ConfigPlugin = (config) => {
12  config = withPrimaryColorColors(config);
13  config = withPrimaryColorStyles(config);
14  return config;
15};
16
17export const withPrimaryColorColors: ConfigPlugin = (config) => {
18  return withAndroidColors(config, (config) => {
19    config.modResults = assignColorValue(config.modResults, {
20      name: COLOR_PRIMARY_KEY,
21      value: getPrimaryColor(config),
22    });
23    return config;
24  });
25};
26
27export const withPrimaryColorStyles: ConfigPlugin = (config) => {
28  return withAndroidStyles(config, (config) => {
29    config.modResults = assignStylesValue(config.modResults, {
30      add: !!getPrimaryColor(config),
31      parent: getAppThemeLightNoActionBarGroup(),
32      name: COLOR_PRIMARY_KEY,
33      value: `@color/${COLOR_PRIMARY_KEY}`,
34    });
35    return config;
36  });
37};
38
39export function getPrimaryColor(config: Pick<ExpoConfig, 'primaryColor'>) {
40  return config.primaryColor ?? DEFAULT_PRIMARY_COLOR;
41}
42