Skip to content

babel plugin does not handle re-exports, causes incorrect theming  #4874

@sacha-c

Description

@sacha-c

Current behaviour

When re-exporting components from react-native paper, e.g. export { TextInput } from 'react-native-paper, the components are not styled using the theme set in the Provider.

Investigating I found that it seemed related to the babel plugin which does not rewrite these imports. I can't explain though why these paths not being re-written is actually causing issues in applying the theme 🤔

Expected behaviour

export { TextInput } from 'react-native-paper

Should use the theme set in the app's Provider.

And the babel plugin should accurately rewrite the import paths

How to reproduce?

With an app (shows the theme issue):

Latest 'react-native-paper', an app theme which overrides a color for example onSurface which is used in TextInput.

themeProvider.ts

const theme = {
  ...DefaultTheme,
  colors: {
    ...DefaultTheme.colors,
    onSurface: 'black',
  },
};

export default function Main() {
  return (
    <PaperProvider theme={theme}>
      <App />
    </PaperProvider>
  );

src/components/index.ts

export { TextInput } from 'react-native-paper'

In the babel tests of this repo (shows the babel issue):
I also checked the babel implementation. If you:

  1. Add export { TextInput } from 'react-native-paper'; https://github.com/callstack/react-native-paper/blob/main/src/babel/__fixtures__/rewrite-imports/code.js
  2. Run tests
  3. You see that the test generates an output with + export { TextInput } from 'react-native-paper';, which is not rewritten to the full path. My assumption is that this is what is causing the app them behavior

Preview

with the re-export:
Image

with the explicit import & then export:
Image

What have you tried so far?

Adding an explicit import, followed by explicit export

Your Environment

software version
ios x
android x
react-native x.x.x
react-native-paper 5.14.5
node x.x.x
npm or yarn x.x.x
expo sdk x.x.x

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions