import { FunctionComponent } from "react";
import { TextInput, View } from "react-native";
import { cssInterop, registerCSS, render, screen } from "test";
const testID = "react-native-css-interop";
it("can create custom components", () => {
registerCSS(`
.a {
color: red;
text-align: center;
}
.b {
color: blue;
}
`);
const MyTextInput = cssInterop(TextInput, {
className: {
target: "style",
nativeStyleToProp: {
textAlign: true,
},
},
placeholderClassName: {
// This is just for a test, people should use `placeholder:`
target: false,
nativeStyleToProp: {
color: "placeholderTextColor",
},
},
});
render(
,
);
const comp = screen.getByTestId(testID);
expect(comp.props).toStrictEqual({
children: undefined,
testID,
placeholderTextColor: "#0000ff",
textAlign: "center",
style: {
color: "#ff0000",
},
});
});
it("can target deeply nested props", () => {
registerCSS(`
.a {
color: red;
background-color: blue;
}
`);
const MyComp: FunctionComponent<{
testID?: string;
deeply?: { nested: { target: any; backgroundColor: string } };
}> = jest.fn((props) => );
const MyStyledComp = cssInterop(MyComp, {
className: {
target: "deeply.nested.target",
nativeStyleToProp: {
backgroundColor: "deeply.nested.backgroundColor",
},
},
});
render();
expect(screen.getByTestId(testID).props).toStrictEqual({
testID,
children: undefined,
deeply: {
nested: {
backgroundColor: "#0000ff",
target: {
color: "#ff0000",
},
},
},
});
});
it("works with @rn-move", () => {
registerCSS(`
.a {
@rn-move color myColor;
color: red;
font-size: 14px;
background-color: blue;
}
`);
const MyComp: FunctionComponent<{
testID?: string;
deeply?: { nested: { target: any; backgroundColor: string } };
}> = jest.fn((props) => );
const MyStyledComp = cssInterop(MyComp, {
className: {
target: "deeply.nested.target",
nativeStyleToProp: {
backgroundColor: "deeply.nested.backgroundColor",
},
},
});
render();
expect(screen.getByTestId(testID).props).toStrictEqual({
testID,
children: undefined,
deeply: {
nested: {
backgroundColor: "#0000ff",
myColor: "#ff0000",
target: {
fontSize: 14,
},
},
},
});
});
it("works with @rn-move and nativeStyleToProps", () => {
registerCSS(`
.a {
@rn-move color myColor;
color: red;
font-size: 14px;
background-color: blue;
}
`);
const MyComp: FunctionComponent<{
testID?: string;
deeply?: {
nested: { target: any; backgroundColor: string };
color?: string;
};
}> = jest.fn((props) => );
const MyStyledComp = cssInterop(MyComp, {
className: {
target: "deeply.nested.target",
nativeStyleToProp: {
color: "deeply.color",
},
},
});
render();
expect(screen.getByTestId(testID).props).toStrictEqual({
testID,
children: undefined,
deeply: {
nested: {
myColor: "#ff0000",
target: {
backgroundColor: "#0000ff",
fontSize: 14,
},
},
},
});
});