Guest User

Untitled

a guest
Jan 23rd, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.06 KB | None | 0 0
  1. import { Component } from 'inferno';
  2. import { createElement } from 'inferno-create-element';
  3. import { renderToString } from 'inferno-server';
  4.  
  5. const classNames = {
  6. button: "betton",
  7. buttonActive: "bettonactef",
  8. buttonDisabled: "bettondeselbled",
  9. };
  10.  
  11. function propsToClassName(className: string, props: Object, classes: Object): ClassNameProp {
  12. let c = classes[className];
  13. const mods = Object.keys(props)
  14. .filter(k => typeof props[k] === "boolean" && props[k] === true);
  15. if(mods.length > 0) {
  16. c = `${c} ${mods.map(
  17. mod => classes[ `${className}${ mod.charAt(0).toUpperCase() + mod.slice(1) }` ]
  18. ).join(' ')}`;
  19. }
  20.  
  21. return { className: c };
  22. }
  23.  
  24. interface ClassNameProp {
  25. className: string,
  26. }
  27.  
  28. interface ButtonProps {
  29. disabled?: boolean,
  30. active?: boolean,
  31. }
  32.  
  33. class Button extends Component<ButtonProps> {
  34. public render() {
  35. return createElement('div', propsToClassName("button", this.props, classNames));
  36. }
  37. }
  38.  
  39. console.log(renderToString(createElement(Button, {disabled: true, active: true})));
Add Comment
Please, Sign In to add comment