namirasoft-site-react 1.3.61 → 1.3.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/dist/App.js +2 -2
  2. package/dist/App.js.map +1 -1
  3. package/dist/Validator.d.ts +7 -2
  4. package/dist/Validator.js +57 -15
  5. package/dist/Validator.js.map +1 -1
  6. package/dist/components/NSButton.module.css +1 -1
  7. package/dist/components/NSButtonBlue.js +5 -4
  8. package/dist/components/NSButtonBlue.js.map +1 -1
  9. package/dist/components/NSButtonGreen.js +5 -4
  10. package/dist/components/NSButtonGreen.js.map +1 -1
  11. package/dist/components/NSButtonRed.js +5 -4
  12. package/dist/components/NSButtonRed.js.map +1 -1
  13. package/dist/components/NSCard.module.css +2 -3
  14. package/dist/components/NSCopyToClipboard.js +1 -1
  15. package/dist/components/NSCopyToClipboard.js.map +1 -1
  16. package/dist/components/NSCopyToClipboard.module.css +1 -1
  17. package/dist/components/NSEntityBar.module.css +2 -2
  18. package/dist/components/NSEntityCardBackground.module.css +2 -2
  19. package/dist/components/NSFooter.js.map +1 -1
  20. package/dist/components/NSHeader.js +1 -1
  21. package/dist/components/NSHeader.js.map +1 -1
  22. package/dist/components/NSInput.module.css +29 -0
  23. package/dist/components/NSInputDate.d.ts +3 -1
  24. package/dist/components/NSInputDate.js +14 -4
  25. package/dist/components/NSInputDate.js.map +1 -1
  26. package/dist/components/NSInputDate.module.css +5 -2
  27. package/dist/components/NSInputDuration.d.ts +6 -1
  28. package/dist/components/NSInputDuration.js +15 -6
  29. package/dist/components/NSInputDuration.js.map +1 -1
  30. package/dist/components/NSInputEmail.d.ts +1 -1
  31. package/dist/components/NSInputEmail.js +5 -3
  32. package/dist/components/NSInputEmail.js.map +1 -1
  33. package/dist/components/NSInputFloat.d.ts +4 -4
  34. package/dist/components/NSInputFloat.js +8 -9
  35. package/dist/components/NSInputFloat.js.map +1 -1
  36. package/dist/components/NSInputIP.d.ts +5 -1
  37. package/dist/components/NSInputIP.js +17 -7
  38. package/dist/components/NSInputIP.js.map +1 -1
  39. package/dist/components/NSInputInteger.d.ts +9 -5
  40. package/dist/components/NSInputInteger.js +16 -8
  41. package/dist/components/NSInputInteger.js.map +1 -1
  42. package/dist/components/NSInputPassword.d.ts +5 -1
  43. package/dist/components/NSInputPassword.js +15 -6
  44. package/dist/components/NSInputPassword.js.map +1 -1
  45. package/dist/components/NSInputPhone.d.ts +8 -3
  46. package/dist/components/NSInputPhone.js +18 -12
  47. package/dist/components/NSInputPhone.js.map +1 -1
  48. package/dist/components/NSInputPrice.d.ts +7 -2
  49. package/dist/components/NSInputPrice.js +15 -7
  50. package/dist/components/NSInputPrice.js.map +1 -1
  51. package/dist/components/NSInputSearch.d.ts +6 -1
  52. package/dist/components/NSInputSearch.js +15 -6
  53. package/dist/components/NSInputSearch.js.map +1 -1
  54. package/dist/components/NSInputString.d.ts +5 -1
  55. package/dist/components/NSInputString.js +15 -6
  56. package/dist/components/NSInputString.js.map +1 -1
  57. package/dist/components/NSInputText.d.ts +5 -1
  58. package/dist/components/NSInputText.js +15 -6
  59. package/dist/components/NSInputText.js.map +1 -1
  60. package/dist/components/NSInputTime.d.ts +5 -1
  61. package/dist/components/NSInputTime.js +16 -6
  62. package/dist/components/NSInputTime.js.map +1 -1
  63. package/dist/components/NSLayoutTitle.d.ts +1 -4
  64. package/dist/components/NSLayoutTitle.js +7 -11
  65. package/dist/components/NSLayoutTitle.js.map +1 -1
  66. package/dist/components/NSLink.d.ts +5 -0
  67. package/dist/components/NSLink.js +7 -0
  68. package/dist/components/NSLink.js.map +1 -0
  69. package/dist/components/{NSLinkBlue.module.css → NSLink.module.css} +3 -3
  70. package/dist/components/NSLinkBlue.d.ts +2 -5
  71. package/dist/components/NSLinkBlue.js +2 -3
  72. package/dist/components/NSLinkBlue.js.map +1 -1
  73. package/dist/components/NSLinkGreen.d.ts +2 -16
  74. package/dist/components/NSLinkGreen.js +3 -18
  75. package/dist/components/NSLinkGreen.js.map +1 -1
  76. package/dist/components/NSLinkRed.d.ts +2 -16
  77. package/dist/components/NSLinkRed.js +3 -18
  78. package/dist/components/NSLinkRed.js.map +1 -1
  79. package/dist/components/NSNotification.d.ts +2 -10
  80. package/dist/components/NSNotification.js +4 -20
  81. package/dist/components/NSNotification.js.map +1 -1
  82. package/dist/components/NSPagination.d.ts +1 -9
  83. package/dist/components/NSPagination.js +25 -33
  84. package/dist/components/NSPagination.js.map +1 -1
  85. package/dist/components/NSSectionBars.d.ts +1 -0
  86. package/dist/components/NSSectionBars.js.map +1 -1
  87. package/dist/components/NSSectionCards.d.ts +1 -2
  88. package/dist/components/NSSectionCards.js +1 -1
  89. package/dist/components/NSSectionCards.js.map +1 -1
  90. package/dist/components/NSSectionTitle.d.ts +1 -2
  91. package/dist/components/NSSectionTitle.js +1 -1
  92. package/dist/components/NSSectionTitle.js.map +1 -1
  93. package/dist/components/NSSelectBox.d.ts +6 -3
  94. package/dist/components/NSSelectBox.js +21 -6
  95. package/dist/components/NSSelectBox.js.map +1 -1
  96. package/dist/components/NSSelectBox.module.css +3 -3
  97. package/dist/components/NSTable.js +1 -1
  98. package/dist/components/NSTable.js.map +1 -1
  99. package/dist/pages/NSLoginPage.d.ts +1 -4
  100. package/dist/pages/NSLoginPage.js +8 -11
  101. package/dist/pages/NSLoginPage.js.map +1 -1
  102. package/dist/pages/NSNotFoundPage.d.ts +1 -4
  103. package/dist/pages/NSNotFoundPage.js +2 -6
  104. package/dist/pages/NSNotFoundPage.js.map +1 -1
  105. package/dist/props/ValidationNumberProps.d.ts +1 -2
  106. package/dist/props/ValidationProps.d.ts +1 -0
  107. package/dist/props/ValidationStringProps.d.ts +1 -2
  108. package/package.json +4 -4
  109. package/src/App.tsx +13 -3
  110. package/src/Validator.ts +67 -18
  111. package/src/components/NSButton.module.css +1 -1
  112. package/src/components/NSButtonBlue.tsx +6 -4
  113. package/src/components/NSButtonGreen.tsx +5 -4
  114. package/src/components/NSButtonRed.tsx +5 -4
  115. package/src/components/NSCard.module.css +2 -3
  116. package/src/components/NSCopyToClipboard.module.css +1 -1
  117. package/src/components/NSCopyToClipboard.tsx +3 -3
  118. package/src/components/NSEntityBar.module.css +2 -2
  119. package/src/components/NSEntityCardBackground.module.css +2 -2
  120. package/src/components/NSHeader.tsx +3 -3
  121. package/src/components/NSInput.module.css +29 -0
  122. package/src/components/NSInputDate.module.css +5 -2
  123. package/src/components/NSInputDate.tsx +29 -12
  124. package/src/components/NSInputDuration.tsx +44 -23
  125. package/src/components/NSInputEmail.tsx +10 -5
  126. package/src/components/NSInputFloat.tsx +33 -32
  127. package/src/components/NSInputIP.tsx +44 -24
  128. package/src/components/NSInputInteger.tsx +48 -31
  129. package/src/components/NSInputPassword.tsx +42 -23
  130. package/src/components/NSInputPhone.tsx +45 -29
  131. package/src/components/NSInputPrice.tsx +45 -23
  132. package/src/components/NSInputSearch.tsx +43 -21
  133. package/src/components/NSInputString.tsx +42 -23
  134. package/src/components/NSInputText.tsx +42 -23
  135. package/src/components/NSInputTime.tsx +44 -23
  136. package/src/components/NSLayoutTitle.tsx +24 -30
  137. package/src/components/{NSLinkBlue.module.css → NSLink.module.css} +3 -3
  138. package/src/components/NSLink.tsx +22 -0
  139. package/src/components/NSLinkBlue.tsx +3 -19
  140. package/src/components/NSLinkGreen.tsx +3 -42
  141. package/src/components/NSLinkRed.tsx +3 -42
  142. package/src/components/NSNotification.tsx +19 -51
  143. package/src/components/NSPagination.tsx +56 -72
  144. package/src/components/NSSectionBars.tsx +1 -0
  145. package/src/components/NSSectionCards.tsx +3 -3
  146. package/src/components/NSSectionTitle.tsx +3 -3
  147. package/src/components/NSSelectBox.module.css +3 -3
  148. package/src/components/NSSelectBox.tsx +48 -23
  149. package/src/components/NSTable.tsx +1 -1
  150. package/src/pages/NSLoginPage.tsx +20 -24
  151. package/src/pages/NSNotFoundPage.tsx +7 -13
  152. package/src/props/ValidationNumberProps.ts +1 -3
  153. package/src/props/ValidationProps.ts +1 -0
  154. package/src/props/ValidationStringProps.ts +1 -3
  155. package/dist/components/NSInputDuration.module.css +0 -26
  156. package/dist/components/NSInputEmail.module.css +0 -38
  157. package/dist/components/NSInputFloat.module.css +0 -26
  158. package/dist/components/NSInputIP.module.css +0 -26
  159. package/dist/components/NSInputInteger.module.css +0 -26
  160. package/dist/components/NSInputPassword.module.css +0 -27
  161. package/dist/components/NSInputPhone.module.css +0 -33
  162. package/dist/components/NSInputPrice.module.css +0 -27
  163. package/dist/components/NSInputSearch.module.css +0 -27
  164. package/dist/components/NSInputString.module.css +0 -27
  165. package/dist/components/NSInputText.module.css +0 -28
  166. package/dist/components/NSInputTime.module.css +0 -27
  167. package/dist/components/NSLinkGreen.module.css +0 -16
  168. package/dist/components/NSLinkRed.module.css +0 -16
  169. package/src/components/NSInputDuration.module.css +0 -26
  170. package/src/components/NSInputEmail.module.css +0 -38
  171. package/src/components/NSInputFloat.module.css +0 -26
  172. package/src/components/NSInputIP.module.css +0 -26
  173. package/src/components/NSInputInteger.module.css +0 -26
  174. package/src/components/NSInputPassword.module.css +0 -27
  175. package/src/components/NSInputPhone.module.css +0 -33
  176. package/src/components/NSInputPrice.module.css +0 -27
  177. package/src/components/NSInputSearch.module.css +0 -27
  178. package/src/components/NSInputString.module.css +0 -27
  179. package/src/components/NSInputText.module.css +0 -28
  180. package/src/components/NSInputTime.module.css +0 -27
  181. package/src/components/NSLinkGreen.module.css +0 -16
  182. package/src/components/NSLinkRed.module.css +0 -16
@@ -1,21 +1,26 @@
1
1
  "use client";
2
2
 
3
3
  import React from "react";
4
- import Styles from "./NSInputInteger.module.css";
4
+ import Styles from "./NSInput.module.css";
5
5
  import IconInputInteger from '../assets/images/icon-input-integer.svg';
6
6
  import { BaseComponentProps } from "../props/BaseComponentProps";
7
+ import { ValidationNumberProps } from "../props/ValidationNumberProps";
8
+ import { ValidationProps } from "../props/ValidationProps";
9
+ import { Validator } from "../Validator";
10
+ import { NSInputErrorNotifier } from "./NSInputErrorNotifier";
7
11
 
8
- export interface NSInputIntegerProps extends BaseComponentProps
12
+ export interface NSInputIntegerProps extends BaseComponentProps, ValidationProps, ValidationNumberProps
9
13
  {
10
14
  title: string;
11
- defaultValue?: string;
15
+ defaultValue?: number;
12
16
  onChanged?: (e: React.ChangeEvent<HTMLInputElement>) => void;
13
17
  placeholder?: string;
14
18
  }
15
19
 
16
20
  export interface NSInputIntegerState
17
21
  {
18
- value: string;
22
+ value?: number;
23
+ error?: string;
19
24
  }
20
25
 
21
26
  export class NSInputInteger extends React.Component<NSInputIntegerProps, NSInputIntegerState>
@@ -23,50 +28,62 @@ export class NSInputInteger extends React.Component<NSInputIntegerProps, NSInput
23
28
  constructor(props: NSInputIntegerProps)
24
29
  {
25
30
  super(props);
26
- this.state = {
27
- value: props.defaultValue ?? "",
28
- };
31
+ this.state = { value: props.defaultValue };
29
32
  this.getValue = this.getValue.bind(this);
30
33
  this.setValue = this.setValue.bind(this);
31
34
  this.onChanged = this.onChanged.bind(this);
32
35
  }
33
- getValue(): string
36
+ getError(): string | null
34
37
  {
38
+ return (
39
+ Validator.getError(this.props.title, this.state.value, this.props) &&
40
+ Validator.getErrorNumber(this.props.title, this.state.value, this.props)
41
+ );
42
+ }
43
+ getValue(): number | undefined
44
+ {
45
+ let error = this.getError();
46
+ if (error)
47
+ {
48
+ this.setState({ error });
49
+ throw new Error(error);
50
+ }
35
51
  return this.state.value;
36
52
  }
37
- setValue(value: string): void
53
+ setValue(value: number | undefined): void
38
54
  {
39
55
  this.setState({ value });
40
56
  }
41
57
  private onChanged(e: React.ChangeEvent<HTMLInputElement>): void
42
58
  {
43
- this.setValue(e.target.value);
59
+ this.setValue(parseInt(e.target.value));
44
60
  if (this.props.onChanged)
45
61
  this.props.onChanged(e);
46
62
  }
47
63
  override render()
48
64
  {
49
65
  return (
50
- <div className={`${Styles.ns_input_parent} p-2 ${this.props.classList?.join(" ")}`} style={this.props.style}>
51
- <span className={Styles.ns_input_title}>{this.props.title}</span>
52
- <img
53
- className={Styles.ns_input_icon}
54
- src={IconInputInteger}
55
- alt="icon"
56
- width={24}
57
- height={24}
58
- />
59
- <input
60
- value={this.state.value}
61
- onChange={this.onChanged}
62
- type="number"
63
- className={Styles.ns_input}
64
- placeholder={this.props.placeholder}
65
- />
66
-
67
- </div>
66
+ <>
67
+ <div className={`${Styles.ns_input_parent} p-2 ${this.props.classList?.join(" ")}`} style={this.props.style}>
68
+ <span className={Styles.ns_input_title}> {this.props.required && <span style={{ color: "red" }} >*</span>} {this.props.title} </span>
69
+ <img
70
+ className={Styles.ns_input_icon}
71
+ src={IconInputInteger}
72
+ alt="Integer Icon"
73
+ width={24}
74
+ height={24}
75
+ />
76
+ <input
77
+ id={this.props.id}
78
+ value={this.state.value}
79
+ onChange={this.onChanged}
80
+ type="number"
81
+ className={Styles.ns_input}
82
+ placeholder={this.props.placeholder}
83
+ />
84
+ </div>
85
+ <NSInputErrorNotifier error={this.state.error} />
86
+ </>
68
87
  );
69
88
  }
70
- }
71
-
72
-
89
+ }
@@ -1,11 +1,15 @@
1
1
  "use client";
2
2
 
3
3
  import React from "react";
4
- import Styles from "./NSInputPassword.module.css";
4
+ import Styles from "./NSInput.module.css";
5
5
  import IconInputString from '../assets/images/icon-input-string.svg';
6
6
  import { BaseComponentProps } from "../props/BaseComponentProps";
7
+ import { ValidationProps } from "../props/ValidationProps";
8
+ import { ValidationStringProps } from "../props/ValidationStringProps";
9
+ import { Validator } from "../Validator";
10
+ import { NSInputErrorNotifier } from "./NSInputErrorNotifier";
7
11
 
8
- export interface NSInputPasswordProps extends BaseComponentProps
12
+ export interface NSInputPasswordProps extends BaseComponentProps, ValidationProps, ValidationStringProps
9
13
  {
10
14
  title: string;
11
15
  defaultValue?: string;
@@ -16,6 +20,7 @@ export interface NSInputPasswordProps extends BaseComponentProps
16
20
  export interface NSInputPasswordState
17
21
  {
18
22
  value: string;
23
+ error?: string;
19
24
  }
20
25
 
21
26
  export class NSInputPassword extends React.Component<NSInputPasswordProps, NSInputPasswordState>
@@ -23,15 +28,26 @@ export class NSInputPassword extends React.Component<NSInputPasswordProps, NSInp
23
28
  constructor(props: NSInputPasswordProps)
24
29
  {
25
30
  super(props);
26
- this.state = {
27
- value: props.defaultValue ?? "",
28
- };
31
+ this.state = { value: props.defaultValue ?? "" };
29
32
  this.getValue = this.getValue.bind(this);
30
33
  this.setValue = this.setValue.bind(this);
31
34
  this.onChanged = this.onChanged.bind(this);
32
35
  }
36
+ getError(): string | null
37
+ {
38
+ return (
39
+ Validator.getError(this.props.title, this.state.value, this.props) &&
40
+ Validator.getErrorString(this.props.title, this.state.value, this.props)
41
+ );
42
+ }
33
43
  getValue(): string
34
44
  {
45
+ let error = this.getError();
46
+ if (error)
47
+ {
48
+ this.setState({ error });
49
+ throw new Error(error);
50
+ }
35
51
  return this.state.value;
36
52
  }
37
53
  setValue(value: string): void
@@ -47,24 +63,27 @@ export class NSInputPassword extends React.Component<NSInputPasswordProps, NSInp
47
63
  override render()
48
64
  {
49
65
  return (
50
- <div className={`${Styles.ns_input_parent} p-2 ${this.props.classList?.join(" ")}`} style={this.props.style}>
51
-
52
- <span className={Styles.ns_input_title}>{this.props.title}</span>
53
- <img
54
- className={Styles.ns_input_icon}
55
- src={IconInputString}
56
- alt="icon"
57
- width={24}
58
- height={24}
59
- />
60
- <input
61
- value={this.state.value}
62
- onChange={this.onChanged}
63
- type="password"
64
- className={Styles.ns_input}
65
- placeholder={this.props.placeholder}
66
- />
67
- </div>
66
+ <>
67
+ <div className={`${Styles.ns_input_parent} p-2 ${this.props.classList?.join(" ")}`} style={this.props.style}>
68
+ <span className={Styles.ns_input_title}> {this.props.required && <span style={{ color: "red" }} >*</span>} {this.props.title} </span>
69
+ <img
70
+ className={Styles.ns_input_icon}
71
+ src={IconInputString}
72
+ alt="Password Icon"
73
+ width={24}
74
+ height={24}
75
+ />
76
+ <input
77
+ id={this.props.id}
78
+ value={this.state.value}
79
+ onChange={this.onChanged}
80
+ type="password"
81
+ className={Styles.ns_input}
82
+ placeholder={this.props.placeholder}
83
+ />
84
+ </div>
85
+ <NSInputErrorNotifier error={this.state.error} />
86
+ </>
68
87
  );
69
88
  }
70
89
  }
@@ -1,21 +1,28 @@
1
1
  "use client";
2
2
 
3
3
  import React from "react";
4
- import Styles from "./NSInputPhone.module.css";
4
+ import Styles from "./NSInput.module.css";
5
5
  import IconInputPhone from '../assets/images/icon-input-phone.svg';
6
6
  import PhoneInput from 'react-phone-input-2'
7
7
  import 'react-phone-input-2/lib/style.css'
8
8
  import { BaseComponentProps } from "../props/BaseComponentProps";
9
+ import { ValidationProps } from "../props/ValidationProps";
10
+ import { ValidationStringProps } from "../props/ValidationStringProps";
11
+ import { Validator } from "../Validator";
12
+ import { NSInputErrorNotifier } from "./NSInputErrorNotifier";
9
13
 
10
- export interface NSInputPhoneProps extends BaseComponentProps
14
+ export interface NSInputPhoneProps extends BaseComponentProps, ValidationProps, ValidationStringProps
11
15
  {
12
16
  title: string;
17
+ defaultValue?: string;
18
+ onChanged?: (e: React.ChangeEvent<HTMLInputElement>) => void;
13
19
  placeholder?: string;
14
20
  }
15
21
 
16
22
  export interface NSInputPhoneState
17
23
  {
18
24
  value: string;
25
+ error?: string;
19
26
  }
20
27
 
21
28
  export class NSInputPhone extends React.Component<NSInputPhoneProps, NSInputPhoneState>
@@ -23,45 +30,54 @@ export class NSInputPhone extends React.Component<NSInputPhoneProps, NSInputPhon
23
30
  constructor(props: NSInputPhoneProps)
24
31
  {
25
32
  super(props);
26
- this.state = {
27
- value: "",
28
- };
33
+ this.state = { value: props.defaultValue ?? "" };
29
34
  this.setValue = this.setValue.bind(this);
30
35
  this.getValue = this.getValue.bind(this);
31
- this.setDefaultValue = this.setDefaultValue.bind(this);
32
36
  }
33
- setValue(value: string): void
34
- {
35
- this.setState({ value });
36
- }
37
- setDefaultValue(value: string): void
37
+ getError(): string | null
38
38
  {
39
- this.setState({ value });
39
+ return (
40
+ Validator.getError(this.props.title, this.state.value, this.props) &&
41
+ Validator.getErrorString(this.props.title, this.state.value, this.props)
42
+ );
40
43
  }
41
44
  getValue(): string
42
45
  {
46
+ let error = this.getError();
47
+ if (error)
48
+ {
49
+ this.setState({ error });
50
+ throw new Error(error);
51
+ }
43
52
  return this.state.value;
44
53
  }
54
+ setValue(value: string): void
55
+ {
56
+ this.setState({ value });
57
+ }
45
58
  override render()
46
59
  {
47
60
  return (
48
- <div className={`${Styles.ns_input_parent} p-2 ${this.props.classList?.join(" ")}`} style={this.props.style}>
49
- <span className={Styles.ns_input_title}>{this.props.title}</span>
50
- <img
51
- className={Styles.ns_input_icon}
52
- src={IconInputPhone}
53
- alt="icon"
54
- width={24}
55
- height={24}
56
- />
57
- <PhoneInput
58
- inputClass={Styles.ns_input}
59
- country={'us'}
60
- value={this.state.value}
61
- onChange={this.setValue}
62
- placeholder={this.props.placeholder}
63
- />
64
- </div>
61
+ <>
62
+ <div id={this.props.id} className={`${Styles.ns_input_parent} p-2 ${this.props.classList?.join(" ")}`} style={this.props.style}>
63
+ <span className={Styles.ns_input_title}> {this.props.required && <span style={{ color: "red" }} >*</span>} {this.props.title} </span>
64
+ <img
65
+ className={Styles.ns_input_icon}
66
+ src={IconInputPhone}
67
+ alt="Phone Icon"
68
+ width={24}
69
+ height={24}
70
+ />
71
+ <PhoneInput
72
+ value={this.state.value}
73
+ onChange={this.setValue}
74
+ country={'us'}
75
+ inputClass={Styles.ns_input}
76
+ placeholder={this.props.placeholder}
77
+ />
78
+ </div >
79
+ <NSInputErrorNotifier error={this.state.error} />
80
+ </>
65
81
  );
66
82
  }
67
83
  }
@@ -1,20 +1,26 @@
1
1
  "use client";
2
2
 
3
3
  import React from "react";
4
- import Styles from "./NSInputPrice.module.css";
4
+ import Styles from "./NSInput.module.css";
5
5
  import IconInputPrice from '../assets/images/icon-input-price.svg';
6
6
  import { BaseComponentProps } from "../props/BaseComponentProps";
7
+ import { ValidationProps } from "../props/ValidationProps";
8
+ import { ValidationNumberProps } from "../props/ValidationNumberProps";
9
+ import { Validator } from "../Validator";
10
+ import { NSInputErrorNotifier } from "./NSInputErrorNotifier";
7
11
 
8
- export interface NSInputPriceProps extends BaseComponentProps
12
+ export interface NSInputPriceProps extends BaseComponentProps, ValidationProps, ValidationNumberProps
9
13
  {
10
14
  title: string;
11
15
  defaultValue?: number;
12
16
  onChanged?: (e: React.ChangeEvent<HTMLInputElement>) => void;
17
+ placeholder?: string;
13
18
  }
14
19
 
15
20
  export interface NSInputPriceState
16
21
  {
17
- value: number | undefined;
22
+ value?: number;
23
+ error?: string;
18
24
  }
19
25
 
20
26
  export class NSInputPrice extends React.Component<NSInputPriceProps, NSInputPriceState>
@@ -22,15 +28,26 @@ export class NSInputPrice extends React.Component<NSInputPriceProps, NSInputPric
22
28
  constructor(props: NSInputPriceProps)
23
29
  {
24
30
  super(props);
25
- this.state = {
26
- value: props.defaultValue ?? undefined,
27
- };
31
+ this.state = { value: props.defaultValue };
28
32
  this.getValue = this.getValue.bind(this);
29
33
  this.setValue = this.setValue.bind(this);
30
34
  this.onChanged = this.onChanged.bind(this);
31
35
  }
36
+ getError(): string | null
37
+ {
38
+ return (
39
+ Validator.getError(this.props.title, this.state.value, this.props) &&
40
+ Validator.getErrorNumber(this.props.title, this.state.value, this.props)
41
+ );
42
+ }
32
43
  getValue(): number | undefined
33
44
  {
45
+ let error = this.getError();
46
+ if (error)
47
+ {
48
+ this.setState({ error });
49
+ throw new Error(error);
50
+ }
34
51
  return this.state.value;
35
52
  }
36
53
  setValue(value: number): void
@@ -46,23 +63,28 @@ export class NSInputPrice extends React.Component<NSInputPriceProps, NSInputPric
46
63
  override render()
47
64
  {
48
65
  return (
49
- <div className={`${Styles.ns_input_parent} p-2 ${this.props.classList?.join(" ")}`} style={this.props.style}>
50
- <img
51
- className={Styles.ns_input_icon}
52
- src={IconInputPrice}
53
- alt="icon"
54
- width={24}
55
- height={24}
56
- />
57
- <input
58
- value={this.state.value}
59
- onChange={this.onChanged}
60
- type="number"
61
- step="20"
62
- className={Styles.ns_input}
63
- placeholder="$1000"
64
- />
65
- </div>
66
+ <>
67
+ <div className={`${Styles.ns_input_parent} p-2 ${this.props.classList?.join(" ")}`} style={this.props.style}>
68
+ <span className={Styles.ns_input_title}> {this.props.required && <span style={{ color: "red" }} >*</span>} {this.props.title} </span>
69
+ <img
70
+ className={Styles.ns_input_icon}
71
+ src={IconInputPrice}
72
+ alt="Price Icon"
73
+ width={24}
74
+ height={24}
75
+ />
76
+ <input
77
+ id={this.props.id}
78
+ value={this.state.value}
79
+ onChange={this.onChanged}
80
+ type="number"
81
+ step="20"
82
+ className={Styles.ns_input}
83
+ placeholder={this.props.placeholder}
84
+ />
85
+ </div>
86
+ <NSInputErrorNotifier error={this.state.error} />
87
+ </>
66
88
  );
67
89
  }
68
90
  }
@@ -1,12 +1,17 @@
1
1
  "use client";
2
2
 
3
3
  import React from "react";
4
- import Styles from "./NSInputSearch.module.css";
4
+ import Styles from "./NSInput.module.css";
5
5
  import IconInputSearch from '../assets/images/icon-input-search.svg';
6
6
  import { BaseComponentProps } from "../props/BaseComponentProps";
7
+ import { ValidationProps } from "../props/ValidationProps";
8
+ import { ValidationStringProps } from "../props/ValidationStringProps";
9
+ import { Validator } from "../Validator";
10
+ import { NSInputErrorNotifier } from "./NSInputErrorNotifier";
7
11
 
8
- export interface NSInputSearchProps extends BaseComponentProps
12
+ export interface NSInputSearchProps extends BaseComponentProps, ValidationProps, ValidationStringProps
9
13
  {
14
+ title: string;
10
15
  defaultValue?: string;
11
16
  onChanged?: (e: React.ChangeEvent<HTMLInputElement>) => void;
12
17
  placeholder?: string;
@@ -15,6 +20,7 @@ export interface NSInputSearchProps extends BaseComponentProps
15
20
  export interface NSInputSearchState
16
21
  {
17
22
  value: string;
23
+ error?: string;
18
24
  }
19
25
 
20
26
  export class NSInputSearch extends React.Component<NSInputSearchProps, NSInputSearchState>
@@ -22,15 +28,26 @@ export class NSInputSearch extends React.Component<NSInputSearchProps, NSInputSe
22
28
  constructor(props: NSInputSearchProps)
23
29
  {
24
30
  super(props);
25
- this.state = {
26
- value: props.defaultValue ?? "",
27
- };
31
+ this.state = { value: props.defaultValue ?? "" };
28
32
  this.getValue = this.getValue.bind(this);
29
33
  this.setValue = this.setValue.bind(this);
30
34
  this.onChanged = this.onChanged.bind(this);
31
35
  }
36
+ getError(): string | null
37
+ {
38
+ return (
39
+ Validator.getError(this.props.title, this.state.value, this.props) &&
40
+ Validator.getErrorString(this.props.title, this.state.value, this.props)
41
+ );
42
+ }
32
43
  getValue(): string
33
44
  {
45
+ let error = this.getError();
46
+ if (error)
47
+ {
48
+ this.setState({ error });
49
+ throw new Error(error);
50
+ }
34
51
  return this.state.value;
35
52
  }
36
53
  setValue(value: string): void
@@ -46,22 +63,27 @@ export class NSInputSearch extends React.Component<NSInputSearchProps, NSInputSe
46
63
  override render()
47
64
  {
48
65
  return (
49
- <div className={`${Styles.ns_input_form} p-2 ${this.props.classList?.join(" ")}`} style={this.props.style}>
50
- <img
51
- className={Styles.ns_input_icon}
52
- src={IconInputSearch}
53
- alt="icon"
54
- width={22}
55
- height={22}
56
- />
57
- <input
58
- value={this.state.value}
59
- onChange={this.onChanged}
60
- type="text"
61
- className={Styles.ns_input}
62
- placeholder={this.props.placeholder}
63
- />
64
- </div>
66
+ <>
67
+ <div className={`${Styles.ns_input_parent} p-2 ${this.props.classList?.join(" ")}`} style={this.props.style}>
68
+ <span className={Styles.ns_input_title}> {this.props.required && <span style={{ color: "red" }} >*</span>} {this.props.title} </span>
69
+ <img
70
+ className={Styles.ns_input_icon}
71
+ src={IconInputSearch}
72
+ alt="Search Icon"
73
+ width={24}
74
+ height={24}
75
+ />
76
+ <input
77
+ id={this.props.id}
78
+ value={this.state.value}
79
+ onChange={this.onChanged}
80
+ type="text"
81
+ className={Styles.ns_input}
82
+ placeholder={this.props.placeholder}
83
+ />
84
+ </div>
85
+ <NSInputErrorNotifier error={this.state.error} />
86
+ </>
65
87
  );
66
88
  }
67
89
  }
@@ -1,11 +1,15 @@
1
1
  "use client";
2
2
 
3
3
  import React from "react";
4
- import Styles from "./NSInputString.module.css";
4
+ import Styles from "./NSInput.module.css";
5
5
  import IconInputString from '../assets/images/icon-input-string.svg';
6
6
  import { BaseComponentProps } from "../props/BaseComponentProps";
7
+ import { ValidationProps } from "../props/ValidationProps";
8
+ import { ValidationStringProps } from "../props/ValidationStringProps";
9
+ import { Validator } from "../Validator";
10
+ import { NSInputErrorNotifier } from "./NSInputErrorNotifier";
7
11
 
8
- export interface NSInputStringProps extends BaseComponentProps
12
+ export interface NSInputStringProps extends BaseComponentProps, ValidationProps, ValidationStringProps
9
13
  {
10
14
  title: string;
11
15
  defaultValue?: string;
@@ -16,6 +20,7 @@ export interface NSInputStringProps extends BaseComponentProps
16
20
  export interface NSInputStringState
17
21
  {
18
22
  value: string;
23
+ error?: string;
19
24
  }
20
25
 
21
26
  export class NSInputString extends React.Component<NSInputStringProps, NSInputStringState>
@@ -23,15 +28,26 @@ export class NSInputString extends React.Component<NSInputStringProps, NSInputSt
23
28
  constructor(props: NSInputStringProps)
24
29
  {
25
30
  super(props);
26
- this.state = {
27
- value: props.defaultValue ?? "",
28
- };
31
+ this.state = { value: props.defaultValue ?? "" };
29
32
  this.getValue = this.getValue.bind(this);
30
33
  this.setValue = this.setValue.bind(this);
31
34
  this.onChanged = this.onChanged.bind(this);
32
35
  }
36
+ getError(): string | null
37
+ {
38
+ return (
39
+ Validator.getError(this.props.title, this.state.value, this.props) &&
40
+ Validator.getErrorString(this.props.title, this.state.value, this.props)
41
+ );
42
+ }
33
43
  getValue(): string
34
44
  {
45
+ let error = this.getError();
46
+ if (error)
47
+ {
48
+ this.setState({ error });
49
+ throw new Error(error);
50
+ }
35
51
  return this.state.value;
36
52
  }
37
53
  setValue(value: string): void
@@ -47,24 +63,27 @@ export class NSInputString extends React.Component<NSInputStringProps, NSInputSt
47
63
  override render()
48
64
  {
49
65
  return (
50
- <div className={`${Styles.ns_input_parent} p-2 ${this.props.classList?.join(" ")}`} style={this.props.style}>
51
-
52
- <span className={Styles.ns_input_title}>{this.props.title}</span>
53
- <img
54
- className={Styles.ns_input_icon}
55
- src={IconInputString}
56
- alt="icon"
57
- width={24}
58
- height={24}
59
- />
60
- <input
61
- value={this.state.value}
62
- onChange={this.onChanged}
63
- type="text"
64
- className={Styles.ns_input}
65
- placeholder={this.props.placeholder}
66
- />
67
- </div>
66
+ <>
67
+ <div className={`${Styles.ns_input_parent} p-2 ${this.props.classList?.join(" ")}`} style={this.props.style}>
68
+ <span className={Styles.ns_input_title}> {this.props.required && <span style={{ color: "red" }} >*</span>} {this.props.title} </span>
69
+ <img
70
+ className={Styles.ns_input_icon}
71
+ src={IconInputString}
72
+ alt="String Icon"
73
+ width={24}
74
+ height={24}
75
+ />
76
+ <input
77
+ id={this.props.id}
78
+ value={this.state.value}
79
+ onChange={this.onChanged}
80
+ type="text"
81
+ className={Styles.ns_input}
82
+ placeholder={this.props.placeholder}
83
+ />
84
+ </div>
85
+ <NSInputErrorNotifier error={this.state.error} />
86
+ </>
68
87
  );
69
88
  }
70
89
  }