Skip to content

Instantly share code, notes, and snippets.

@aquiseb
Last active December 17, 2021 10:30
Show Gist options
  • Select an option

  • Save aquiseb/007d408820dd480bab705bd249c3fccf to your computer and use it in GitHub Desktop.

Select an option

Save aquiseb/007d408820dd480bab705bd249c3fccf to your computer and use it in GitHub Desktop.
import React from "react";
import styled from "styled-components";
export default class Ov extends React.Component {
render() {
return (
<Autocomplete
overrides={{
Hello: {
props: { coucou: "coucou" }
},
Bye: {
component: () => "Goooodbye"
}
}}
/>
);
}
}
const Red = styled.div`
color: red;
`;
const Blue = styled.div`
color: blue;
`;
const defaultComponents = {
Hello: props => <Red>Hello {props.coucou}</Red>,
Bye: props => <Blue>Bye</Blue>
};
class Autocomplete extends React.PureComponent {
state = {};
render() {
const {
Hello: { component: Hello, props: helloProps },
Bye: { component: Bye, props: byeProps }
} = getComponents(defaultComponents, overrides);
return (
<React.Fragment>
<Hello coucou="default_coucou" {...helloProps} />
<Bye {...byeProps} />
</React.Fragment>
);
}
}
function getComponents(defaultComponents, overrides) {
return Object.keys(defaultComponents).reduce((acc, name) => {
const override = overrides[name] || {};
acc[name] = {
component: override.component || defaultComponents[name],
props: { $style: override.style, ...override.props }
};
return acc;
}, {});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment