You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import React, { useEffect, useRef, useState } from "react";
  2. import { TextFieldContainer, TextFieldStyled } from "./TextField.styled";
  3. import PropTypes from "prop-types";
  4. export const TextField = (props) => {
  5. const [isFieldEmpty, setIsFieldEmpty] = useState(true);
  6. // for italicPlaceholder
  7. useEffect(() => {
  8. if (props?.value?.length === 0) {
  9. setIsFieldEmpty(true);
  10. } else {
  11. setIsFieldEmpty(false);
  12. }
  13. }, [props.value]);
  14. const textInputRef = useRef();
  15. return (
  16. <TextFieldContainer
  17. style={props.containerStyle}
  18. className={props.className}
  19. height={props.height}
  20. >
  21. <TextFieldStyled
  22. placeholder={props.placeholder}
  23. width={props.width}
  24. height={props.height}
  25. id={props.id}
  26. name={props.name}
  27. value={props.value}
  28. onChange={props.onChange}
  29. error={props.error}
  30. multiline={props.multiline}
  31. minRows={props.minRows}
  32. // helperText={props.helperText}
  33. autoFocus={props.autoFocus}
  34. fullWidth={props.fullWidth}
  35. type={props.type}
  36. textsize={props.textsize}
  37. font={props.font}
  38. InputProps={props.InputProps}
  39. sx={props.style}
  40. label={props.showAnimation ? props.placeholder : ""}
  41. italicplaceholder={(props.italicPlaceholder && isFieldEmpty) ? "true" : "false"}
  42. ref={textInputRef}
  43. focused={props.focused}
  44. >
  45. {props.children}
  46. </TextFieldStyled>
  47. </TextFieldContainer>
  48. );
  49. };
  50. TextField.propTypes = {
  51. history: PropTypes.shape({
  52. replace: PropTypes.func,
  53. push: PropTypes.func,
  54. location: PropTypes.shape({
  55. pathname: PropTypes.string,
  56. }),
  57. }),
  58. children: PropTypes.node,
  59. className: PropTypes.string,
  60. placeholder: PropTypes.string,
  61. style: PropTypes.any,
  62. showAnimation: PropTypes.bool,
  63. containerStyle: PropTypes.any,
  64. italicPlaceholder: PropTypes.bool,
  65. width: PropTypes.string,
  66. height: PropTypes.string,
  67. name: PropTypes.string,
  68. label: PropTypes.string,
  69. value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
  70. onChange: PropTypes.func,
  71. id: PropTypes.number,
  72. error: PropTypes.bool,
  73. helperText: PropTypes.string,
  74. autoFocus: PropTypes.bool,
  75. fullWidth: PropTypes.bool,
  76. type: PropTypes.string,
  77. textsize: PropTypes.string,
  78. font: PropTypes.string,
  79. ref: PropTypes.any,
  80. minRows: PropTypes.number,
  81. multiline: PropTypes.bool,
  82. focused: PropTypes.bool,
  83. InputProps: PropTypes.shape({
  84. startAdornment: PropTypes.node,
  85. endAdornment: PropTypes.node,
  86. style: PropTypes.any,
  87. }),
  88. };
  89. TextField.defaultProps = {
  90. italicPlaceholder: false,
  91. showAnimation: false,
  92. height: "48px",
  93. // font: "Open Sans"
  94. };