|
1 | 1 | import type { PropsWithChildren } from 'react'; |
2 | 2 | import defaultServiceVariants from '../../lib/config/services/defaultServiceVariants'; |
3 | | -import { Variants } from '../../models/types/global'; |
| 3 | +import { |
| 4 | + ServicesVariantsProps, |
| 5 | + ServicesWithVariants, |
| 6 | + Variants, |
| 7 | +} from '../../models/types/global'; |
| 8 | +import { LoadableTheme } from '../../models/types/theming'; |
4 | 9 | import themes from './themes/loadableConfig'; |
5 | 10 |
|
6 | | -interface Props { |
7 | | - service: 'mundo'; |
| 11 | +const isLoadableTheme = (theme: unknown): theme is LoadableTheme => |
| 12 | + theme !== null && typeof theme === 'object' && 'render' in theme; |
| 13 | + |
| 14 | +type Props = Omit<ServicesVariantsProps, 'variant'> & { |
8 | 15 | variant?: Variants | null; |
9 | | -} |
| 16 | +}; |
10 | 17 |
|
11 | 18 | export const ThemeProvider = ({ |
12 | 19 | children, |
13 | 20 | service, |
14 | 21 | variant, |
15 | 22 | }: PropsWithChildren<Props>) => { |
16 | | - // eslint-disable-next-line @typescript-eslint/no-explicit-any |
17 | | - let LoadableContextProvider; |
| 23 | + let LoadableContextProvider: LoadableTheme | undefined; |
18 | 24 |
|
19 | 25 | const serviceVariant: Variants = variant || defaultServiceVariants[service]; |
| 26 | + const serviceTheme = themes[service]; |
20 | 27 |
|
21 | | - if (serviceVariant === 'default' || !serviceVariant) { |
22 | | - LoadableContextProvider = themes[service]; |
23 | | - } else { |
24 | | - // eslint-disable-next-line @typescript-eslint/ban-ts-comment |
25 | | - // @ts-ignore - TODO: come back to this |
26 | | - LoadableContextProvider = themes[service][serviceVariant]; |
| 28 | + if (isLoadableTheme(serviceTheme)) { |
| 29 | + LoadableContextProvider = serviceTheme; |
| 30 | + } else if (serviceVariant !== 'default') { |
| 31 | + LoadableContextProvider = |
| 32 | + serviceTheme[serviceVariant as ServicesWithVariants['variant']]; |
27 | 33 | } |
28 | 34 |
|
29 | 35 | if (!LoadableContextProvider) { |
|
0 commit comments