namirasoft-site-react 1.4.409 → 1.4.410

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 (301) hide show
  1. package/.dockerignore +86 -86
  2. package/.env.template +10 -10
  3. package/Dockerfile +18 -18
  4. package/config-overrides.js +72 -72
  5. package/dist/App.css +34 -0
  6. package/dist/components/NSBanner.module.css +47 -47
  7. package/dist/components/NSBarAction.module.css +84 -84
  8. package/dist/components/NSBarAlert.module.css +79 -79
  9. package/dist/components/NSBarNotification.module.css +34 -34
  10. package/dist/components/NSBarTitle.module.css +9 -9
  11. package/dist/components/NSBox.module.css +54 -54
  12. package/dist/components/NSBoxBaseCombo.module.css +6 -6
  13. package/dist/components/NSBoxBoolean.module.css +73 -73
  14. package/dist/components/NSBoxDate.module.css +4 -4
  15. package/dist/components/NSBoxDateTime.module.css +4 -4
  16. package/dist/components/NSBoxDuration.module.css +4 -4
  17. package/dist/components/NSBoxFile.module.css +10 -10
  18. package/dist/components/NSBoxPhone.module.css +35 -35
  19. package/dist/components/NSBoxRadio.module.css +33 -33
  20. package/dist/components/NSBoxSchemaBase.module.css +17 -17
  21. package/dist/components/NSBoxSchemaVariable.module.css +16 -16
  22. package/dist/components/NSBoxTextArea.module.css +12 -12
  23. package/dist/components/NSBoxTime.module.css +4 -4
  24. package/dist/components/NSButton.module.css +57 -57
  25. package/dist/components/NSButtonBlue.module.css +4 -4
  26. package/dist/components/NSButtonGreen.module.css +4 -4
  27. package/dist/components/NSButtonRed.module.css +4 -4
  28. package/dist/components/NSCard.module.css +114 -114
  29. package/dist/components/NSCardScreenshot.module.css +41 -41
  30. package/dist/components/NSChartColumn.module.css +7 -7
  31. package/dist/components/NSChartTable.module.css +21 -21
  32. package/dist/components/NSColumn.module.css +16 -16
  33. package/dist/components/NSCopyBox.module.css +39 -39
  34. package/dist/components/NSDialog.module.css +108 -108
  35. package/dist/components/NSDialogPageSelection.module.css +103 -103
  36. package/dist/components/NSDownTimer.module.css +55 -55
  37. package/dist/components/NSDownload.module.css +46 -46
  38. package/dist/components/NSElectronicCard.module.css +60 -60
  39. package/dist/components/NSEntityCardBackground.module.css +27 -27
  40. package/dist/components/NSFilterBox.module.css +27 -27
  41. package/dist/components/NSFilterBoxItems.module.css +15 -15
  42. package/dist/components/NSFilterItem.module.css +24 -24
  43. package/dist/components/NSFooter.module.css +134 -134
  44. package/dist/components/NSHeader.js +4 -2
  45. package/dist/components/NSHeader.js.map +1 -1
  46. package/dist/components/NSHeader.module.css +291 -291
  47. package/dist/components/NSHeaderScreenshot.module.css +35 -35
  48. package/dist/components/NSLabel.module.css +25 -25
  49. package/dist/components/NSLabelErrorNotifier.module.css +2 -2
  50. package/dist/components/NSLayout.module.css +14 -14
  51. package/dist/components/NSLine.module.css +15 -15
  52. package/dist/components/NSLineText.module.css +38 -38
  53. package/dist/components/NSLink.module.css +36 -36
  54. package/dist/components/NSListGrouped.module.css +69 -69
  55. package/dist/components/NSLoading.module.css +38 -38
  56. package/dist/components/NSMenuAction.module.css +88 -88
  57. package/dist/components/NSMenuButton.module.css +44 -44
  58. package/dist/components/NSNoData.module.css +9 -9
  59. package/dist/components/NSPagination.module.css +85 -85
  60. package/dist/components/NSPanel.module.css +19 -19
  61. package/dist/components/NSPanelAccordion.module.css +4 -4
  62. package/dist/components/NSProductSearch.module.css +73 -73
  63. package/dist/components/NSRange.module.css +66 -66
  64. package/dist/components/NSRow.module.css +17 -17
  65. package/dist/components/NSSection.module.css +4 -4
  66. package/dist/components/NSSectionCards.module.css +38 -38
  67. package/dist/components/NSSectionTiles.module.css +10 -10
  68. package/dist/components/NSTabPage.module.css +59 -59
  69. package/dist/components/NSTable.module.css +263 -263
  70. package/dist/components/NSTile.module.css +76 -76
  71. package/dist/components/NSTimelineMonthly.module.css +71 -71
  72. package/dist/components/NSTitle.module.css +15 -15
  73. package/dist/index.css +6 -0
  74. package/dist/pages/NSNotFoundPage.module.css +18 -18
  75. package/dist/pages/NSUpdating.module.css +35 -35
  76. package/dist/props/IHeaderRightProps.d.ts +2 -0
  77. package/package.json +82 -82
  78. package/public/index.html +38 -38
  79. package/src/App.css +33 -33
  80. package/src/App.tsx +269 -269
  81. package/src/Color.tsx +10 -10
  82. package/src/CopyToClipboard.ts +6 -6
  83. package/src/NSBoxBuilder.tsx +912 -912
  84. package/src/ProductCacheService.ts +15 -15
  85. package/src/Validator.ts +166 -166
  86. package/src/components/INSBox.tsx +6 -6
  87. package/src/components/NSBanner.module.css +47 -47
  88. package/src/components/NSBanner.tsx +80 -80
  89. package/src/components/NSBarAction.module.css +84 -84
  90. package/src/components/NSBarAction.tsx +91 -91
  91. package/src/components/NSBarAlert.module.css +79 -79
  92. package/src/components/NSBarAlert.tsx +35 -35
  93. package/src/components/NSBarNotification.module.css +34 -34
  94. package/src/components/NSBarNotification.tsx +86 -86
  95. package/src/components/NSBarTitle.module.css +9 -9
  96. package/src/components/NSBarTitle.tsx +23 -23
  97. package/src/components/NSBox.module.css +54 -54
  98. package/src/components/NSBox.tsx +19 -19
  99. package/src/components/NSBoxBaseCombo.module.css +6 -6
  100. package/src/components/NSBoxBaseCombo.tsx +429 -429
  101. package/src/components/NSBoxBaseLayout.tsx +88 -88
  102. package/src/components/NSBoxBaseLayoutRecursive.tsx +54 -54
  103. package/src/components/NSBoxBoolean.module.css +73 -73
  104. package/src/components/NSBoxBoolean.tsx +128 -128
  105. package/src/components/NSBoxBooleans.tsx +178 -178
  106. package/src/components/NSBoxColor.tsx +96 -96
  107. package/src/components/NSBoxCombo.tsx +91 -91
  108. package/src/components/NSBoxDate.module.css +4 -4
  109. package/src/components/NSBoxDate.tsx +91 -91
  110. package/src/components/NSBoxDateTime.module.css +4 -4
  111. package/src/components/NSBoxDateTime.tsx +104 -104
  112. package/src/components/NSBoxDouble.tsx +95 -95
  113. package/src/components/NSBoxDuration.module.css +4 -4
  114. package/src/components/NSBoxDuration.tsx +96 -96
  115. package/src/components/NSBoxDynamic.tsx +67 -67
  116. package/src/components/NSBoxDynamics.tsx +68 -68
  117. package/src/components/NSBoxEmail.tsx +106 -106
  118. package/src/components/NSBoxEntity.tsx +174 -174
  119. package/src/components/NSBoxEnum.tsx +108 -108
  120. package/src/components/NSBoxFile.module.css +10 -10
  121. package/src/components/NSBoxFile.tsx +101 -101
  122. package/src/components/NSBoxFilePath.tsx +96 -96
  123. package/src/components/NSBoxFont.tsx +96 -96
  124. package/src/components/NSBoxIPV4.tsx +96 -96
  125. package/src/components/NSBoxIPV4Range.tsx +96 -96
  126. package/src/components/NSBoxIPV6.tsx +93 -93
  127. package/src/components/NSBoxIPV6Range.tsx +96 -96
  128. package/src/components/NSBoxInteger.tsx +92 -92
  129. package/src/components/NSBoxMoney.tsx +96 -96
  130. package/src/components/NSBoxPassword.tsx +108 -108
  131. package/src/components/NSBoxPhone.module.css +35 -35
  132. package/src/components/NSBoxPhone.tsx +108 -108
  133. package/src/components/NSBoxRadio.module.css +33 -33
  134. package/src/components/NSBoxRadio.tsx +91 -91
  135. package/src/components/NSBoxSchemaBase.module.css +17 -17
  136. package/src/components/NSBoxSchemaBase.tsx +540 -540
  137. package/src/components/NSBoxSchemaVariable.module.css +16 -16
  138. package/src/components/NSBoxSchemaVariable.tsx +247 -247
  139. package/src/components/NSBoxSearch.tsx +99 -99
  140. package/src/components/NSBoxString.tsx +95 -95
  141. package/src/components/NSBoxTextArea.module.css +12 -12
  142. package/src/components/NSBoxTextArea.tsx +105 -105
  143. package/src/components/NSBoxTime.module.css +4 -4
  144. package/src/components/NSBoxTime.tsx +94 -94
  145. package/src/components/NSBoxTimeZone.tsx +96 -96
  146. package/src/components/NSBoxURL.tsx +106 -106
  147. package/src/components/NSBoxVersion.tsx +96 -96
  148. package/src/components/NSButton.module.css +57 -57
  149. package/src/components/NSButton.tsx +75 -75
  150. package/src/components/NSButtonBlue.module.css +4 -4
  151. package/src/components/NSButtonBlue.tsx +29 -29
  152. package/src/components/NSButtonGreen.module.css +4 -4
  153. package/src/components/NSButtonGreen.tsx +29 -29
  154. package/src/components/NSButtonRed.module.css +4 -4
  155. package/src/components/NSButtonRed.tsx +29 -29
  156. package/src/components/NSCard.module.css +114 -114
  157. package/src/components/NSCard.tsx +63 -63
  158. package/src/components/NSCardScreenshot.module.css +41 -41
  159. package/src/components/NSCardScreenshot.tsx +31 -31
  160. package/src/components/NSChartColumn.module.css +7 -7
  161. package/src/components/NSChartColumn.tsx +106 -106
  162. package/src/components/NSChartDoughnut.tsx +112 -112
  163. package/src/components/NSChartPie.tsx +105 -105
  164. package/src/components/NSChartRange.tsx +14 -14
  165. package/src/components/NSChartTable.module.css +21 -21
  166. package/src/components/NSChartTable.tsx +94 -94
  167. package/src/components/NSColumn.module.css +16 -16
  168. package/src/components/NSColumn.tsx +24 -24
  169. package/src/components/NSCopy.tsx +58 -58
  170. package/src/components/NSCopyBox.module.css +39 -39
  171. package/src/components/NSCopyBox.tsx +53 -53
  172. package/src/components/NSDialog.module.css +108 -108
  173. package/src/components/NSDialog.tsx +72 -72
  174. package/src/components/NSDialogDelete.tsx +27 -27
  175. package/src/components/NSDialogInfo.tsx +49 -49
  176. package/src/components/NSDialogPageSelection.module.css +103 -103
  177. package/src/components/NSDialogPageSelection.tsx +234 -234
  178. package/src/components/NSDownTimer.module.css +55 -55
  179. package/src/components/NSDownTimer.tsx +91 -91
  180. package/src/components/NSDownload.module.css +46 -46
  181. package/src/components/NSDownload.tsx +69 -69
  182. package/src/components/NSElectronicCard.module.css +60 -60
  183. package/src/components/NSElectronicCard.tsx +46 -46
  184. package/src/components/NSEntityCardBackground.module.css +27 -27
  185. package/src/components/NSEntityCardBackground.tsx +36 -36
  186. package/src/components/NSFilterBox.module.css +27 -27
  187. package/src/components/NSFilterBox.tsx +477 -477
  188. package/src/components/NSFilterBoxItems.module.css +15 -15
  189. package/src/components/NSFilterBoxItems.tsx +52 -52
  190. package/src/components/NSFilterItem.module.css +24 -24
  191. package/src/components/NSFilterItem.tsx +27 -27
  192. package/src/components/NSFooter.module.css +134 -134
  193. package/src/components/NSFooter.tsx +321 -321
  194. package/src/components/NSHeader.module.css +291 -291
  195. package/src/components/NSHeader.tsx +322 -315
  196. package/src/components/NSHeaderScreenshot.module.css +35 -35
  197. package/src/components/NSHeaderScreenshot.tsx +39 -39
  198. package/src/components/NSID.tsx +158 -158
  199. package/src/components/NSLabel.module.css +25 -25
  200. package/src/components/NSLabel.tsx +47 -47
  201. package/src/components/NSLabelErrorNotifier.module.css +2 -2
  202. package/src/components/NSLabelErrorNotifier.tsx +35 -35
  203. package/src/components/NSLayout.module.css +14 -14
  204. package/src/components/NSLayout.tsx +138 -138
  205. package/src/components/NSLine.module.css +15 -15
  206. package/src/components/NSLine.tsx +13 -13
  207. package/src/components/NSLineText.module.css +38 -38
  208. package/src/components/NSLineText.tsx +17 -17
  209. package/src/components/NSLink.module.css +36 -36
  210. package/src/components/NSLink.tsx +25 -25
  211. package/src/components/NSLinkBlue.tsx +21 -21
  212. package/src/components/NSLinkGreen.tsx +12 -12
  213. package/src/components/NSLinkRed.tsx +12 -12
  214. package/src/components/NSListGrouped.module.css +69 -69
  215. package/src/components/NSListGrouped.tsx +106 -106
  216. package/src/components/NSListProduct.tsx +44 -44
  217. package/src/components/NSLoading.module.css +38 -38
  218. package/src/components/NSLoading.tsx +37 -37
  219. package/src/components/NSMenuAction.module.css +88 -88
  220. package/src/components/NSMenuAction.tsx +106 -106
  221. package/src/components/NSMenuButton.module.css +44 -44
  222. package/src/components/NSMenuButton.tsx +206 -206
  223. package/src/components/NSNoData.module.css +9 -9
  224. package/src/components/NSNoData.tsx +24 -24
  225. package/src/components/NSPagination.module.css +85 -85
  226. package/src/components/NSPagination.tsx +182 -182
  227. package/src/components/NSPanel.module.css +19 -19
  228. package/src/components/NSPanel.tsx +24 -24
  229. package/src/components/NSPanelAccordion.module.css +4 -4
  230. package/src/components/NSPanelAccordion.tsx +51 -51
  231. package/src/components/NSProductSearch.module.css +73 -73
  232. package/src/components/NSProductSearch.tsx +193 -193
  233. package/src/components/NSRange.module.css +66 -66
  234. package/src/components/NSRange.tsx +83 -83
  235. package/src/components/NSRepeater.tsx +254 -254
  236. package/src/components/NSRepeaterNSBoxSchemaVariable.tsx +90 -90
  237. package/src/components/NSRepeaterNSTag.tsx +82 -82
  238. package/src/components/NSRow.module.css +17 -17
  239. package/src/components/NSRow.tsx +24 -24
  240. package/src/components/NSSection.module.css +4 -4
  241. package/src/components/NSSection.tsx +26 -26
  242. package/src/components/NSSectionCards.module.css +38 -38
  243. package/src/components/NSSectionCards.tsx +51 -51
  244. package/src/components/NSSectionTiles.module.css +10 -10
  245. package/src/components/NSSectionTiles.tsx +25 -25
  246. package/src/components/NSSectionTitle.tsx +21 -21
  247. package/src/components/NSSpace.tsx +28 -28
  248. package/src/components/NSTabPage.module.css +59 -59
  249. package/src/components/NSTabPage.tsx +91 -91
  250. package/src/components/NSTable.module.css +263 -263
  251. package/src/components/NSTable.tsx +636 -636
  252. package/src/components/NSTag.tsx +74 -74
  253. package/src/components/NSTile.module.css +76 -76
  254. package/src/components/NSTile.tsx +27 -27
  255. package/src/components/NSTimelineMonthly.module.css +71 -71
  256. package/src/components/NSTimelineMonthly.tsx +44 -44
  257. package/src/components/NSTitle.module.css +15 -15
  258. package/src/components/NSTitle.tsx +19 -19
  259. package/src/formatter/BackColorFormatter.tsx +23 -23
  260. package/src/formatter/BaseColumnFormatter.ts +16 -16
  261. package/src/formatter/BaseURLImageFormatter.tsx +33 -33
  262. package/src/formatter/BooleanFormatter.ts +22 -22
  263. package/src/formatter/DateFormatter.ts +21 -21
  264. package/src/formatter/DateTimeFormatter.ts +21 -21
  265. package/src/formatter/DurationFormatter.ts +13 -13
  266. package/src/formatter/EmailFormatter.tsx +21 -21
  267. package/src/formatter/EnumFormatter.ts +13 -13
  268. package/src/formatter/FloatFormatter.ts +23 -23
  269. package/src/formatter/ForeColorFormatter.tsx +24 -24
  270. package/src/formatter/IDFormatter.tsx +30 -30
  271. package/src/formatter/IPFormatter.ts +13 -13
  272. package/src/formatter/IntegerFormatter.ts +23 -23
  273. package/src/formatter/JsonFormatter.ts +21 -21
  274. package/src/formatter/MoneyFormatter.ts +35 -35
  275. package/src/formatter/PhoneFormatter.tsx +21 -21
  276. package/src/formatter/StringFormatter.tsx +43 -43
  277. package/src/formatter/TimeFormatter.ts +21 -21
  278. package/src/formatter/URLFormatter.tsx +21 -21
  279. package/src/formatter/UnknowFormatter.ts +18 -18
  280. package/src/index.tsx +7 -7
  281. package/src/main.ts +226 -226
  282. package/src/pages/NSNotFoundPage.module.css +18 -18
  283. package/src/pages/NSNotFoundPage.tsx +11 -11
  284. package/src/pages/NSUpdating.module.css +35 -35
  285. package/src/pages/NSUpdating.tsx +32 -32
  286. package/src/props/IBackgroundProps.ts +5 -5
  287. package/src/props/IBaseComponentProps.ts +8 -8
  288. package/src/props/IHeaderIconProps.ts +10 -10
  289. package/src/props/IHeaderLeftProps.ts +6 -6
  290. package/src/props/IHeaderRightProps.ts +8 -6
  291. package/src/props/IImageProps.ts +4 -4
  292. package/src/props/ILinkProps.ts +5 -5
  293. package/src/props/IValidationNumberProps.ts +4 -4
  294. package/src/props/IValidationPrecisionProps.ts +3 -3
  295. package/src/props/IValidationProps.ts +9 -9
  296. package/src/props/IValidationRegexProps.ts +4 -4
  297. package/src/props/IValidationStringProps.ts +4 -4
  298. package/src/routing/NSNotifier.ts +114 -114
  299. package/src/routing/NSRouterMaker.tsx +20 -20
  300. package/src/routing/NSRouterMakerComponent.ts +5 -5
  301. package/src/routing/NSRouterMakerProps.ts +5 -5
@@ -1,16 +1,16 @@
1
- import { NamirasoftAPIProductServer, ProductFullRow } from "namirasoft-api-product";
2
- import { CacheService, EnvService, IStorageLocal } from "namirasoft-core";
3
-
4
- export class ProductCacheService
5
- {
6
- static get(product_id: string, onError: (error: Error | string, timout?: number) => void)
7
- {
8
- return new CacheService<ProductFullRow>("ns-product", new IStorageLocal(), 24 * 60, async () => "1.0.0", async () =>
9
- {
10
- let REACT_APP_BASE_URL_API_PRODUCT = new EnvService("REACT_APP_BASE_URL_API_PRODUCT", true).getString();
11
- let server = new NamirasoftAPIProductServer(REACT_APP_BASE_URL_API_PRODUCT, onError);
12
- let ans = await server.product.Get(product_id);
13
- return ans;
14
- });
15
- }
1
+ import { NamirasoftAPIProductServer, ProductFullRow } from "namirasoft-api-product";
2
+ import { CacheService, EnvService, IStorageLocal } from "namirasoft-core";
3
+
4
+ export class ProductCacheService
5
+ {
6
+ static get(product_id: string, onError: (error: Error | string, timout?: number) => void)
7
+ {
8
+ return new CacheService<ProductFullRow>("ns-product", new IStorageLocal(), 24 * 60, async () => "1.0.0", async () =>
9
+ {
10
+ let REACT_APP_BASE_URL_API_PRODUCT = new EnvService("REACT_APP_BASE_URL_API_PRODUCT", true).getString();
11
+ let server = new NamirasoftAPIProductServer(REACT_APP_BASE_URL_API_PRODUCT, onError);
12
+ let ans = await server.product.Get(product_id);
13
+ return ans;
14
+ });
15
+ }
16
16
  }
package/src/Validator.ts CHANGED
@@ -1,167 +1,167 @@
1
- import { PhoneOperation } from "namirasoft-core";
2
- import { IValidationNumberProps } from "./props/IValidationNumberProps";
3
- import { IValidationProps } from "./props/IValidationProps";
4
- import { IValidationStringProps } from "./props/IValidationStringProps";
5
- import { DateSchema, DurationSchema, EmailSchema, IPV4Schema, IPV6Schema, TimeSchema } from "namirasoft-schema";
6
-
7
- export class Validator
8
- {
9
- static getError(name: string, value: string | number | boolean | null | undefined, validator: IValidationProps): string | null
10
- {
11
- if (validator.required)
12
- if (value == null || value === "")
13
- return `${name} is required.`;
14
- if (value != null)
15
- if (validator.regex)
16
- {
17
- if (!new RegExp(validator.regex.regex).test(value + ""))
18
- return `${name} does not match regex ${validator.regex.regex}.`;
19
- }
20
- if (value != null)
21
- if (validator.validator)
22
- {
23
- let error = validator.validator(name, value);
24
- if (error)
25
- return error;
26
- }
27
-
28
- if (value != null)
29
- {
30
- if (validator.valids)
31
- if (validator.valids.length > 0)
32
- if (!validator.valids.includes(value + ""))
33
- return `${value} is not a valid value for ${name}. Valid values are ${validator.valids.join(", ")}.`;
34
- if (validator.invalids)
35
- if (validator.invalids.length > 0)
36
- if (validator.invalids.includes(value + ""))
37
- return `${value} is an invalid value for ${name}. Invalid values are ${validator.invalids.join(", ")}.`;
38
- }
39
- return null;
40
- }
41
- static getErrorString(name: string, value: string | null | undefined, validator: IValidationStringProps): string | null
42
- {
43
- if (value != null)
44
- {
45
- if (validator.min_length != null)
46
- if (value.length < validator.min_length)
47
- return `Min length of ${name} should be ${validator.min_length} characters.`;
48
- if (validator.max_length != null)
49
- if (validator.max_length < value.length)
50
- return `Max length of ${name} should be ${validator.max_length} characters.`;
51
- }
52
- return null;
53
- }
54
- static getErrorNumber(name: string, value: number | null | undefined, validator: IValidationNumberProps): string | null
55
- {
56
- if (value != null)
57
- {
58
- if (isNaN(value))
59
- return `${name} is not a number.`;
60
- // eslint-disable-next-line
61
- if (validator.min != null)
62
- if (value < validator.min)
63
- return `Min value of ${name} should be ${validator.min} characters.`;
64
- // eslint-disable-next-line
65
- if (validator.max != null)
66
- if (validator.max < value)
67
- return `Max value of ${name} should be ${validator.max} characters.`;
68
- }
69
- return null;
70
- }
71
- static getErrorArray<T>(name: string, value: T[], required: boolean, min?: number, max?: number): string | null
72
- {
73
- if (required)
74
- // eslint-disable-next-line
75
- if (value == null || value.length == 0)
76
- return `${name} is required.`;
77
- if (value != null)
78
- {
79
- if (min != null)
80
- if (value.length < min)
81
- return `Min length of ${name} should be ${min} characters.`;
82
- if (max != null)
83
- if (max < value.length)
84
- return `Max length of ${name} should be ${max} characters.`;
85
- }
86
- return null;
87
- }
88
- static getErrorEmail(name: string, value: string | null | undefined, validator: IValidationProps): string | null
89
- {
90
- if (!validator.required)
91
- if (!value)
92
- return null;
93
- return Validator.getError(name, value, {
94
- required: true, regex: {
95
- name: "Email",
96
- regex: EmailSchema.REGEX
97
- }
98
- });
99
- }
100
- static getErrorDate(name: string, value: string | null | undefined): string | null
101
- {
102
- return Validator.getError(name, value, {
103
- required: true, regex: {
104
- name: "Date",
105
- regex: DateSchema.REGEX
106
- }
107
- });
108
- }
109
- static getErrorTime(name: string, value: string | null | undefined): string | null
110
- {
111
- return Validator.getError(name, value, {
112
- required: true, regex: {
113
- name: "Time",
114
- regex: TimeSchema.REGEX
115
- }
116
- });
117
- }
118
- static getErrorDateTime(name: string, value: Date | null | undefined): string | null
119
- {
120
- if (value != null)
121
- {
122
- const dateTime = new Date(value);
123
- if (isNaN(dateTime.getTime()))
124
- return `${value} is not a valid DateTime for ${name}.`;
125
- }
126
- return null;
127
- }
128
- static getErrorDuration(name: string, value: string | null | undefined): string | null
129
- {
130
- return Validator.getError(name, value, {
131
- required: true, regex: {
132
- name: "Duration",
133
- regex: DurationSchema.REGEX
134
- }
135
- });
136
- }
137
- static getErrorIPV4(name: string, value: string | null | undefined): string | null
138
- {
139
- return Validator.getError(name, value, {
140
- required: true, regex: {
141
- name: "IP",
142
- regex: IPV4Schema.REGEX
143
- }
144
- });
145
- }
146
- static getErrorIPV6(name: string, value: string | null | undefined): string | null
147
- {
148
- return Validator.getError(name, value, {
149
- required: true, regex: {
150
- name: "IP",
151
- regex: IPV6Schema.REGEX
152
- }
153
- });
154
- }
155
- static getErrorPhone(name: string, value: string | null | undefined): string | null
156
- {
157
- return Validator.getError(name, value, {
158
- required: true, validator: () =>
159
- {
160
- if (value)
161
- if (!PhoneOperation.isValid(value))
162
- return `${name} is not a valid phone number`;
163
- return null;
164
- }
165
- });
166
- }
1
+ import { PhoneOperation } from "namirasoft-core";
2
+ import { IValidationNumberProps } from "./props/IValidationNumberProps";
3
+ import { IValidationProps } from "./props/IValidationProps";
4
+ import { IValidationStringProps } from "./props/IValidationStringProps";
5
+ import { DateSchema, DurationSchema, EmailSchema, IPV4Schema, IPV6Schema, TimeSchema } from "namirasoft-schema";
6
+
7
+ export class Validator
8
+ {
9
+ static getError(name: string, value: string | number | boolean | null | undefined, validator: IValidationProps): string | null
10
+ {
11
+ if (validator.required)
12
+ if (value == null || value === "")
13
+ return `${name} is required.`;
14
+ if (value != null)
15
+ if (validator.regex)
16
+ {
17
+ if (!new RegExp(validator.regex.regex).test(value + ""))
18
+ return `${name} does not match regex ${validator.regex.regex}.`;
19
+ }
20
+ if (value != null)
21
+ if (validator.validator)
22
+ {
23
+ let error = validator.validator(name, value);
24
+ if (error)
25
+ return error;
26
+ }
27
+
28
+ if (value != null)
29
+ {
30
+ if (validator.valids)
31
+ if (validator.valids.length > 0)
32
+ if (!validator.valids.includes(value + ""))
33
+ return `${value} is not a valid value for ${name}. Valid values are ${validator.valids.join(", ")}.`;
34
+ if (validator.invalids)
35
+ if (validator.invalids.length > 0)
36
+ if (validator.invalids.includes(value + ""))
37
+ return `${value} is an invalid value for ${name}. Invalid values are ${validator.invalids.join(", ")}.`;
38
+ }
39
+ return null;
40
+ }
41
+ static getErrorString(name: string, value: string | null | undefined, validator: IValidationStringProps): string | null
42
+ {
43
+ if (value != null)
44
+ {
45
+ if (validator.min_length != null)
46
+ if (value.length < validator.min_length)
47
+ return `Min length of ${name} should be ${validator.min_length} characters.`;
48
+ if (validator.max_length != null)
49
+ if (validator.max_length < value.length)
50
+ return `Max length of ${name} should be ${validator.max_length} characters.`;
51
+ }
52
+ return null;
53
+ }
54
+ static getErrorNumber(name: string, value: number | null | undefined, validator: IValidationNumberProps): string | null
55
+ {
56
+ if (value != null)
57
+ {
58
+ if (isNaN(value))
59
+ return `${name} is not a number.`;
60
+ // eslint-disable-next-line
61
+ if (validator.min != null)
62
+ if (value < validator.min)
63
+ return `Min value of ${name} should be ${validator.min} characters.`;
64
+ // eslint-disable-next-line
65
+ if (validator.max != null)
66
+ if (validator.max < value)
67
+ return `Max value of ${name} should be ${validator.max} characters.`;
68
+ }
69
+ return null;
70
+ }
71
+ static getErrorArray<T>(name: string, value: T[], required: boolean, min?: number, max?: number): string | null
72
+ {
73
+ if (required)
74
+ // eslint-disable-next-line
75
+ if (value == null || value.length == 0)
76
+ return `${name} is required.`;
77
+ if (value != null)
78
+ {
79
+ if (min != null)
80
+ if (value.length < min)
81
+ return `Min length of ${name} should be ${min} characters.`;
82
+ if (max != null)
83
+ if (max < value.length)
84
+ return `Max length of ${name} should be ${max} characters.`;
85
+ }
86
+ return null;
87
+ }
88
+ static getErrorEmail(name: string, value: string | null | undefined, validator: IValidationProps): string | null
89
+ {
90
+ if (!validator.required)
91
+ if (!value)
92
+ return null;
93
+ return Validator.getError(name, value, {
94
+ required: true, regex: {
95
+ name: "Email",
96
+ regex: EmailSchema.REGEX
97
+ }
98
+ });
99
+ }
100
+ static getErrorDate(name: string, value: string | null | undefined): string | null
101
+ {
102
+ return Validator.getError(name, value, {
103
+ required: true, regex: {
104
+ name: "Date",
105
+ regex: DateSchema.REGEX
106
+ }
107
+ });
108
+ }
109
+ static getErrorTime(name: string, value: string | null | undefined): string | null
110
+ {
111
+ return Validator.getError(name, value, {
112
+ required: true, regex: {
113
+ name: "Time",
114
+ regex: TimeSchema.REGEX
115
+ }
116
+ });
117
+ }
118
+ static getErrorDateTime(name: string, value: Date | null | undefined): string | null
119
+ {
120
+ if (value != null)
121
+ {
122
+ const dateTime = new Date(value);
123
+ if (isNaN(dateTime.getTime()))
124
+ return `${value} is not a valid DateTime for ${name}.`;
125
+ }
126
+ return null;
127
+ }
128
+ static getErrorDuration(name: string, value: string | null | undefined): string | null
129
+ {
130
+ return Validator.getError(name, value, {
131
+ required: true, regex: {
132
+ name: "Duration",
133
+ regex: DurationSchema.REGEX
134
+ }
135
+ });
136
+ }
137
+ static getErrorIPV4(name: string, value: string | null | undefined): string | null
138
+ {
139
+ return Validator.getError(name, value, {
140
+ required: true, regex: {
141
+ name: "IP",
142
+ regex: IPV4Schema.REGEX
143
+ }
144
+ });
145
+ }
146
+ static getErrorIPV6(name: string, value: string | null | undefined): string | null
147
+ {
148
+ return Validator.getError(name, value, {
149
+ required: true, regex: {
150
+ name: "IP",
151
+ regex: IPV6Schema.REGEX
152
+ }
153
+ });
154
+ }
155
+ static getErrorPhone(name: string, value: string | null | undefined): string | null
156
+ {
157
+ return Validator.getError(name, value, {
158
+ required: true, validator: () =>
159
+ {
160
+ if (value)
161
+ if (!PhoneOperation.isValid(value))
162
+ return `${name} is not a valid phone number`;
163
+ return null;
164
+ }
165
+ });
166
+ }
167
167
  }
@@ -1,7 +1,7 @@
1
- export interface INSBox
2
- {
3
- getError(): string | null;
4
- getValue(checkError: boolean): any;
5
- setValue(value: any, callback?: () => void): void;
6
- isEmpty(value: any): boolean;
1
+ export interface INSBox
2
+ {
3
+ getError(): string | null;
4
+ getValue(checkError: boolean): any;
5
+ setValue(value: any, callback?: () => void): void;
6
+ isEmpty(value: any): boolean;
7
7
  }
@@ -1,48 +1,48 @@
1
- .ns_banner_container {
2
- display: flex;
3
- flex-direction: column;
4
- justify-content: center;
5
- align-items: center;
6
- gap: 48px;
7
- }
8
-
9
- .ns_banner_image_right {
10
- justify-content: center;
11
- align-self: center;
12
- }
13
-
14
- .ns_banner_image_left {
15
- justify-content: center;
16
- align-self: center;
17
- }
18
-
19
- .ns_banner_text_container {
20
- display: flex;
21
- flex-direction: column;
22
- }
23
-
24
- .ns_banner_headline {
25
- font-size: 24px;
26
- color: rgba(20, 27, 92, 1);
27
- }
28
-
29
- .ns_banner_title {
30
- font-size: 48px;
31
- color: rgba(20, 27, 92, 1);
32
- text-align: start;
33
- }
34
-
35
- .ns_banner_description {
36
- font-size: 16px;
37
- color: rgba(20, 27, 92, 1);
38
- }
39
-
40
- @media only screen and (min-width:992px) {
41
- .ns_banner_container {
42
- flex-direction: row;
43
- }
44
-
45
- .ns_banner_text_container {
46
- width: 624px;
47
- }
1
+ .ns_banner_container {
2
+ display: flex;
3
+ flex-direction: column;
4
+ justify-content: center;
5
+ align-items: center;
6
+ gap: 48px;
7
+ }
8
+
9
+ .ns_banner_image_right {
10
+ justify-content: center;
11
+ align-self: center;
12
+ }
13
+
14
+ .ns_banner_image_left {
15
+ justify-content: center;
16
+ align-self: center;
17
+ }
18
+
19
+ .ns_banner_text_container {
20
+ display: flex;
21
+ flex-direction: column;
22
+ }
23
+
24
+ .ns_banner_headline {
25
+ font-size: 24px;
26
+ color: rgba(20, 27, 92, 1);
27
+ }
28
+
29
+ .ns_banner_title {
30
+ font-size: 48px;
31
+ color: rgba(20, 27, 92, 1);
32
+ text-align: start;
33
+ }
34
+
35
+ .ns_banner_description {
36
+ font-size: 16px;
37
+ color: rgba(20, 27, 92, 1);
38
+ }
39
+
40
+ @media only screen and (min-width:992px) {
41
+ .ns_banner_container {
42
+ flex-direction: row;
43
+ }
44
+
45
+ .ns_banner_text_container {
46
+ width: 624px;
47
+ }
48
48
  }
@@ -1,81 +1,81 @@
1
- // todo move to its own probject: I guess this is Timify
2
- import { IImageProps } from "../main";
3
- import { IBaseComponentProps } from "../props/IBaseComponentProps";
4
- import Styles from "./NSBanner.module.css"
5
-
6
- export interface NSBannerProps extends IBaseComponentProps
7
- {
8
- imageRight: (IImageProps & IBaseComponentProps) | null;
9
- imageLeft: (IImageProps & IBaseComponentProps) | null;
10
- headline?: (IBaseComponentProps & { text: string }) | null;
11
- title: (IBaseComponentProps & { text: string }) | null;
12
- desciption?: (IBaseComponentProps & { text: string }) | null;
13
- }
14
-
15
- export function NSBanner(props: NSBannerProps)
16
- {
17
- return (
18
- <div
19
- id={props.id}
20
- className={`${Styles.ns_banner_container} ${props.classList?.join(" ") ?? ""}`}
21
- style={props.style}
22
- >
23
- {
24
- props.imageLeft &&
25
- <img
26
- id={props.imageLeft.id}
27
- className={`${Styles.ns_banner_image_right} ${props.imageLeft.classList?.join(" ") ?? ""}`}
28
- src={props.imageLeft.src}
29
- alt={props.imageLeft.alt}
30
- width={192}
31
- height={192}
32
- style={props.imageLeft.style}
33
- />
34
- }
35
- <div className={Styles.ns_banner_text_container}>
36
- {
37
- props.headline &&
38
- <h6
39
- id={props.headline.id}
40
- className={`${Styles.ns_banner_headline} ${props.headline.classList?.join(" ") ?? ""}`}
41
- style={props.headline.style}
42
- >
43
- {props.headline.text}
44
- </h6>
45
- }
46
- {
47
- props.title &&
48
- <h1
49
- id={props.title.id}
50
- className={`${Styles.ns_banner_title} ${props.title.classList?.join(" ") ?? ""}`}
51
- style={props.title.style}
52
- >
53
- {props.title.text}
54
- </h1>
55
- }
56
- {
57
- props.desciption &&
58
- <p
59
- id={props.desciption.id}
60
- className={`${Styles.ns_banner_description} ${props.desciption.classList?.join(" ") ?? ""}`}
61
- style={props.desciption.style}
62
- >
63
- {props.desciption.text}
64
- </p>
65
- }
66
- </div>
67
- {
68
- props.imageRight &&
69
- <img
70
- id={props.imageRight.id}
71
- className={`${Styles.ns_banner_image_right} ${props.imageRight.classList?.join(" ") ?? ""}`}
72
- src={props.imageRight.src}
73
- alt={props.imageRight.alt}
74
- width={192}
75
- height={192}
76
- style={props.imageRight.style}
77
- />
78
- }
79
- </div>
80
- );
1
+ // todo move to its own probject: I guess this is Timify
2
+ import { IImageProps } from "../main";
3
+ import { IBaseComponentProps } from "../props/IBaseComponentProps";
4
+ import Styles from "./NSBanner.module.css"
5
+
6
+ export interface NSBannerProps extends IBaseComponentProps
7
+ {
8
+ imageRight: (IImageProps & IBaseComponentProps) | null;
9
+ imageLeft: (IImageProps & IBaseComponentProps) | null;
10
+ headline?: (IBaseComponentProps & { text: string }) | null;
11
+ title: (IBaseComponentProps & { text: string }) | null;
12
+ desciption?: (IBaseComponentProps & { text: string }) | null;
13
+ }
14
+
15
+ export function NSBanner(props: NSBannerProps)
16
+ {
17
+ return (
18
+ <div
19
+ id={props.id}
20
+ className={`${Styles.ns_banner_container} ${props.classList?.join(" ") ?? ""}`}
21
+ style={props.style}
22
+ >
23
+ {
24
+ props.imageLeft &&
25
+ <img
26
+ id={props.imageLeft.id}
27
+ className={`${Styles.ns_banner_image_right} ${props.imageLeft.classList?.join(" ") ?? ""}`}
28
+ src={props.imageLeft.src}
29
+ alt={props.imageLeft.alt}
30
+ width={192}
31
+ height={192}
32
+ style={props.imageLeft.style}
33
+ />
34
+ }
35
+ <div className={Styles.ns_banner_text_container}>
36
+ {
37
+ props.headline &&
38
+ <h6
39
+ id={props.headline.id}
40
+ className={`${Styles.ns_banner_headline} ${props.headline.classList?.join(" ") ?? ""}`}
41
+ style={props.headline.style}
42
+ >
43
+ {props.headline.text}
44
+ </h6>
45
+ }
46
+ {
47
+ props.title &&
48
+ <h1
49
+ id={props.title.id}
50
+ className={`${Styles.ns_banner_title} ${props.title.classList?.join(" ") ?? ""}`}
51
+ style={props.title.style}
52
+ >
53
+ {props.title.text}
54
+ </h1>
55
+ }
56
+ {
57
+ props.desciption &&
58
+ <p
59
+ id={props.desciption.id}
60
+ className={`${Styles.ns_banner_description} ${props.desciption.classList?.join(" ") ?? ""}`}
61
+ style={props.desciption.style}
62
+ >
63
+ {props.desciption.text}
64
+ </p>
65
+ }
66
+ </div>
67
+ {
68
+ props.imageRight &&
69
+ <img
70
+ id={props.imageRight.id}
71
+ className={`${Styles.ns_banner_image_right} ${props.imageRight.classList?.join(" ") ?? ""}`}
72
+ src={props.imageRight.src}
73
+ alt={props.imageRight.alt}
74
+ width={192}
75
+ height={192}
76
+ style={props.imageRight.style}
77
+ />
78
+ }
79
+ </div>
80
+ );
81
81
  };