namirasoft-site-react 1.4.248 → 1.4.249

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 (289) 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/NSBarAction.module.css +82 -82
  7. package/dist/components/NSBarAlert.module.css +79 -79
  8. package/dist/components/NSBarNotification.module.css +34 -34
  9. package/dist/components/NSBarTitle.module.css +9 -9
  10. package/dist/components/NSBox.module.css +50 -50
  11. package/dist/components/NSBoxBaseCombo.module.css +6 -6
  12. package/dist/components/NSBoxBoolean.module.css +67 -67
  13. package/dist/components/NSBoxDate.module.css +4 -4
  14. package/dist/components/NSBoxDateTime.module.css +4 -4
  15. package/dist/components/NSBoxDuration.module.css +4 -4
  16. package/dist/components/NSBoxDynamic.d.ts +1 -1
  17. package/dist/components/NSBoxDynamic.js +1 -1
  18. package/dist/components/NSBoxDynamic.js.map +1 -1
  19. package/dist/components/NSBoxFile.module.css +10 -10
  20. package/dist/components/NSBoxPhone.module.css +35 -35
  21. package/dist/components/NSBoxRadio.module.css +33 -33
  22. package/dist/components/NSBoxSchemaBase.module.css +17 -17
  23. package/dist/components/NSBoxSchemaVariable.module.css +16 -16
  24. package/dist/components/NSBoxTextArea.module.css +12 -12
  25. package/dist/components/NSBoxTime.module.css +4 -4
  26. package/dist/components/NSButton.module.css +57 -57
  27. package/dist/components/NSButtonBlue.module.css +4 -4
  28. package/dist/components/NSButtonGreen.module.css +4 -4
  29. package/dist/components/NSButtonRed.module.css +4 -4
  30. package/dist/components/NSCard.module.css +114 -114
  31. package/dist/components/NSCardScreenshot.module.css +41 -41
  32. package/dist/components/NSChartColumn.module.css +7 -7
  33. package/dist/components/NSChartTable.module.css +21 -21
  34. package/dist/components/NSColumn.module.css +16 -16
  35. package/dist/components/NSCopyBox.module.css +39 -39
  36. package/dist/components/NSDialog.module.css +112 -112
  37. package/dist/components/NSDialogPageSelection.module.css +103 -103
  38. package/dist/components/NSDownTimer.module.css +55 -55
  39. package/dist/components/NSDownload.module.css +46 -46
  40. package/dist/components/NSElectronicCard.module.css +60 -60
  41. package/dist/components/NSEntityCardBackground.module.css +27 -27
  42. package/dist/components/NSFilterBox.module.css +56 -56
  43. package/dist/components/NSFilterItem.module.css +24 -24
  44. package/dist/components/NSFooter.module.css +123 -123
  45. package/dist/components/NSHeader.module.css +291 -291
  46. package/dist/components/NSHeaderScreenshot.module.css +35 -35
  47. package/dist/components/NSLabel.module.css +25 -25
  48. package/dist/components/NSLabelErrorNotifier.module.css +2 -2
  49. package/dist/components/NSLayout.module.css +14 -14
  50. package/dist/components/NSLine.module.css +15 -15
  51. package/dist/components/NSLink.module.css +36 -36
  52. package/dist/components/NSListGrouped.module.css +69 -69
  53. package/dist/components/NSLoading.module.css +30 -30
  54. package/dist/components/NSMenuAction.js +2 -2
  55. package/dist/components/NSMenuAction.module.css +88 -88
  56. package/dist/components/NSMenuButton.module.css +44 -44
  57. package/dist/components/NSNoData.module.css +9 -9
  58. package/dist/components/NSPagination.module.css +85 -85
  59. package/dist/components/NSPanel.module.css +19 -19
  60. package/dist/components/NSPanelAccordion.module.css +4 -4
  61. package/dist/components/NSRange.module.css +66 -66
  62. package/dist/components/NSRow.module.css +17 -17
  63. package/dist/components/NSSection.module.css +4 -4
  64. package/dist/components/NSSectionCards.module.css +38 -38
  65. package/dist/components/NSSectionTiles.module.css +10 -10
  66. package/dist/components/NSTabPage.module.css +59 -59
  67. package/dist/components/NSTable.module.css +263 -263
  68. package/dist/components/NSTile.module.css +76 -76
  69. package/dist/components/NSTimelineMonthly.module.css +71 -71
  70. package/dist/components/NSTitle.module.css +15 -15
  71. package/dist/index.css +6 -0
  72. package/dist/pages/NSNotFoundPage.module.css +18 -18
  73. package/dist/pages/NSUpdating.module.css +35 -35
  74. package/package.json +76 -76
  75. package/public/index.html +38 -38
  76. package/src/App.css +33 -33
  77. package/src/App.tsx +130 -130
  78. package/src/Color.tsx +10 -10
  79. package/src/CopyToClipboard.ts +6 -6
  80. package/src/NSBoxBuilder.tsx +912 -912
  81. package/src/Validator.ts +147 -147
  82. package/src/components/INSBox.tsx +6 -6
  83. package/src/components/NSBarAction.module.css +82 -82
  84. package/src/components/NSBarAction.tsx +90 -90
  85. package/src/components/NSBarAlert.module.css +79 -79
  86. package/src/components/NSBarAlert.tsx +35 -35
  87. package/src/components/NSBarNotification.module.css +34 -34
  88. package/src/components/NSBarNotification.tsx +89 -89
  89. package/src/components/NSBarTitle.module.css +9 -9
  90. package/src/components/NSBarTitle.tsx +23 -23
  91. package/src/components/NSBox.module.css +50 -50
  92. package/src/components/NSBox.tsx +19 -19
  93. package/src/components/NSBoxBaseCombo.module.css +6 -6
  94. package/src/components/NSBoxBaseCombo.tsx +314 -314
  95. package/src/components/NSBoxBaseLayout.tsx +88 -88
  96. package/src/components/NSBoxBaseLayoutRecursive.tsx +54 -54
  97. package/src/components/NSBoxBoolean.module.css +67 -67
  98. package/src/components/NSBoxBoolean.tsx +119 -119
  99. package/src/components/NSBoxBooleans.tsx +161 -161
  100. package/src/components/NSBoxColor.tsx +95 -95
  101. package/src/components/NSBoxCombo.tsx +91 -91
  102. package/src/components/NSBoxDate.module.css +4 -4
  103. package/src/components/NSBoxDate.tsx +90 -90
  104. package/src/components/NSBoxDateTime.module.css +4 -4
  105. package/src/components/NSBoxDateTime.tsx +105 -105
  106. package/src/components/NSBoxDouble.tsx +94 -94
  107. package/src/components/NSBoxDuration.module.css +4 -4
  108. package/src/components/NSBoxDuration.tsx +95 -95
  109. package/src/components/NSBoxDynamic.tsx +67 -67
  110. package/src/components/NSBoxDynamics.tsx +68 -68
  111. package/src/components/NSBoxEmail.tsx +98 -98
  112. package/src/components/NSBoxEntity.tsx +101 -101
  113. package/src/components/NSBoxEnum.tsx +108 -108
  114. package/src/components/NSBoxFile.module.css +10 -10
  115. package/src/components/NSBoxFile.tsx +101 -101
  116. package/src/components/NSBoxFilePath.tsx +95 -95
  117. package/src/components/NSBoxFont.tsx +95 -95
  118. package/src/components/NSBoxIPV4.tsx +95 -95
  119. package/src/components/NSBoxIPV4Range.tsx +95 -95
  120. package/src/components/NSBoxIPV6.tsx +92 -92
  121. package/src/components/NSBoxIPV6Range.tsx +95 -95
  122. package/src/components/NSBoxInteger.tsx +91 -91
  123. package/src/components/NSBoxMoney.tsx +95 -95
  124. package/src/components/NSBoxPassword.tsx +106 -106
  125. package/src/components/NSBoxPhone.module.css +35 -35
  126. package/src/components/NSBoxPhone.tsx +107 -107
  127. package/src/components/NSBoxRadio.module.css +33 -33
  128. package/src/components/NSBoxRadio.tsx +91 -91
  129. package/src/components/NSBoxSchemaBase.module.css +17 -17
  130. package/src/components/NSBoxSchemaBase.tsx +539 -539
  131. package/src/components/NSBoxSchemaVariable.module.css +16 -16
  132. package/src/components/NSBoxSchemaVariable.tsx +251 -251
  133. package/src/components/NSBoxSearch.tsx +97 -97
  134. package/src/components/NSBoxString.tsx +91 -91
  135. package/src/components/NSBoxTextArea.module.css +12 -12
  136. package/src/components/NSBoxTextArea.tsx +98 -98
  137. package/src/components/NSBoxTime.module.css +4 -4
  138. package/src/components/NSBoxTime.tsx +93 -93
  139. package/src/components/NSBoxTimeZone.tsx +95 -95
  140. package/src/components/NSBoxURL.tsx +96 -96
  141. package/src/components/NSBoxVersion.tsx +95 -95
  142. package/src/components/NSButton.module.css +57 -57
  143. package/src/components/NSButton.tsx +25 -25
  144. package/src/components/NSButtonBlue.module.css +4 -4
  145. package/src/components/NSButtonBlue.tsx +19 -19
  146. package/src/components/NSButtonGreen.module.css +4 -4
  147. package/src/components/NSButtonGreen.tsx +19 -19
  148. package/src/components/NSButtonRed.module.css +4 -4
  149. package/src/components/NSButtonRed.tsx +19 -19
  150. package/src/components/NSCard.module.css +114 -114
  151. package/src/components/NSCard.tsx +63 -63
  152. package/src/components/NSCardScreenshot.module.css +41 -41
  153. package/src/components/NSCardScreenshot.tsx +31 -31
  154. package/src/components/NSChartColumn.module.css +7 -7
  155. package/src/components/NSChartColumn.tsx +106 -106
  156. package/src/components/NSChartDoughnut.tsx +112 -112
  157. package/src/components/NSChartPie.tsx +105 -105
  158. package/src/components/NSChartRange.tsx +14 -14
  159. package/src/components/NSChartTable.module.css +21 -21
  160. package/src/components/NSChartTable.tsx +94 -94
  161. package/src/components/NSColumn.module.css +16 -16
  162. package/src/components/NSColumn.tsx +24 -24
  163. package/src/components/NSCopy.tsx +56 -56
  164. package/src/components/NSCopyBox.module.css +39 -39
  165. package/src/components/NSCopyBox.tsx +53 -53
  166. package/src/components/NSDialog.module.css +112 -112
  167. package/src/components/NSDialog.tsx +61 -61
  168. package/src/components/NSDialogDelete.tsx +26 -26
  169. package/src/components/NSDialogInfo.tsx +32 -32
  170. package/src/components/NSDialogPageSelection.module.css +103 -103
  171. package/src/components/NSDialogPageSelection.tsx +227 -227
  172. package/src/components/NSDownTimer.module.css +55 -55
  173. package/src/components/NSDownTimer.tsx +77 -77
  174. package/src/components/NSDownload.module.css +46 -46
  175. package/src/components/NSDownload.tsx +66 -66
  176. package/src/components/NSElectronicCard.module.css +60 -60
  177. package/src/components/NSElectronicCard.tsx +46 -46
  178. package/src/components/NSEntityCardBackground.module.css +27 -27
  179. package/src/components/NSEntityCardBackground.tsx +36 -36
  180. package/src/components/NSFilterBox.module.css +56 -56
  181. package/src/components/NSFilterBox.tsx +494 -494
  182. package/src/components/NSFilterItem.module.css +24 -24
  183. package/src/components/NSFilterItem.tsx +27 -27
  184. package/src/components/NSFooter.module.css +123 -123
  185. package/src/components/NSFooter.tsx +316 -316
  186. package/src/components/NSHeader.module.css +291 -291
  187. package/src/components/NSHeader.tsx +261 -261
  188. package/src/components/NSHeaderScreenshot.module.css +35 -35
  189. package/src/components/NSHeaderScreenshot.tsx +39 -39
  190. package/src/components/NSLabel.module.css +25 -25
  191. package/src/components/NSLabel.tsx +46 -46
  192. package/src/components/NSLabelErrorNotifier.module.css +2 -2
  193. package/src/components/NSLabelErrorNotifier.tsx +35 -35
  194. package/src/components/NSLayout.module.css +14 -14
  195. package/src/components/NSLayout.tsx +130 -130
  196. package/src/components/NSLine.module.css +15 -15
  197. package/src/components/NSLine.tsx +13 -13
  198. package/src/components/NSLink.module.css +36 -36
  199. package/src/components/NSLink.tsx +25 -25
  200. package/src/components/NSLinkBlue.tsx +21 -21
  201. package/src/components/NSLinkGreen.tsx +12 -12
  202. package/src/components/NSLinkRed.tsx +12 -12
  203. package/src/components/NSListGrouped.module.css +69 -69
  204. package/src/components/NSListGrouped.tsx +106 -106
  205. package/src/components/NSListProduct.tsx +44 -44
  206. package/src/components/NSLoading.module.css +30 -30
  207. package/src/components/NSLoading.tsx +21 -21
  208. package/src/components/NSMenuAction.module.css +88 -88
  209. package/src/components/NSMenuAction.tsx +90 -90
  210. package/src/components/NSMenuButton.module.css +44 -44
  211. package/src/components/NSMenuButton.tsx +206 -206
  212. package/src/components/NSNoData.module.css +9 -9
  213. package/src/components/NSNoData.tsx +24 -24
  214. package/src/components/NSPagination.module.css +85 -85
  215. package/src/components/NSPagination.tsx +182 -182
  216. package/src/components/NSPanel.module.css +19 -19
  217. package/src/components/NSPanel.tsx +24 -24
  218. package/src/components/NSPanelAccordion.module.css +4 -4
  219. package/src/components/NSPanelAccordion.tsx +51 -51
  220. package/src/components/NSRange.module.css +66 -66
  221. package/src/components/NSRange.tsx +83 -83
  222. package/src/components/NSRepeater.tsx +240 -240
  223. package/src/components/NSRepeaterNSBoxSchemaVariable.tsx +84 -84
  224. package/src/components/NSRepeaterNSTag.tsx +79 -79
  225. package/src/components/NSRow.module.css +17 -17
  226. package/src/components/NSRow.tsx +24 -24
  227. package/src/components/NSSection.module.css +4 -4
  228. package/src/components/NSSection.tsx +26 -26
  229. package/src/components/NSSectionCards.module.css +38 -38
  230. package/src/components/NSSectionCards.tsx +51 -51
  231. package/src/components/NSSectionTiles.module.css +10 -10
  232. package/src/components/NSSectionTiles.tsx +25 -25
  233. package/src/components/NSSectionTitle.tsx +21 -21
  234. package/src/components/NSSpace.tsx +28 -28
  235. package/src/components/NSTabPage.module.css +59 -59
  236. package/src/components/NSTabPage.tsx +91 -91
  237. package/src/components/NSTable.module.css +263 -263
  238. package/src/components/NSTable.tsx +471 -471
  239. package/src/components/NSTag.tsx +74 -74
  240. package/src/components/NSTile.module.css +76 -76
  241. package/src/components/NSTile.tsx +27 -27
  242. package/src/components/NSTimelineMonthly.module.css +71 -71
  243. package/src/components/NSTimelineMonthly.tsx +44 -44
  244. package/src/components/NSTitle.module.css +15 -15
  245. package/src/components/NSTitle.tsx +19 -19
  246. package/src/formatter/BackColorFormatter.tsx +23 -23
  247. package/src/formatter/BaseColumnFormatter.ts +16 -16
  248. package/src/formatter/BaseURLImageFormatter.tsx +28 -28
  249. package/src/formatter/BooleanFormatter.ts +22 -22
  250. package/src/formatter/DateFormatter.ts +20 -20
  251. package/src/formatter/DateTimeFormatter.ts +20 -20
  252. package/src/formatter/DurationFormatter.ts +13 -13
  253. package/src/formatter/EmailFormatter.tsx +21 -21
  254. package/src/formatter/EnumFormatter.ts +13 -13
  255. package/src/formatter/FloatFormatter.ts +23 -23
  256. package/src/formatter/ForeColorFormatter.tsx +24 -24
  257. package/src/formatter/IDFormatter.tsx +37 -37
  258. package/src/formatter/IPFormatter.ts +13 -13
  259. package/src/formatter/IntegerFormatter.ts +23 -23
  260. package/src/formatter/JsonFormatter.ts +21 -21
  261. package/src/formatter/MoneyFormatter.ts +23 -23
  262. package/src/formatter/PhoneFormatter.tsx +21 -21
  263. package/src/formatter/StringFormatter.tsx +43 -43
  264. package/src/formatter/TimeFormatter.ts +20 -20
  265. package/src/formatter/URLFormatter.tsx +21 -21
  266. package/src/formatter/UnknowFormatter.ts +18 -18
  267. package/src/index.tsx +7 -7
  268. package/src/main.ts +207 -207
  269. package/src/pages/NSNotFoundPage.module.css +18 -18
  270. package/src/pages/NSNotFoundPage.tsx +11 -11
  271. package/src/pages/NSUpdating.module.css +35 -35
  272. package/src/pages/NSUpdating.tsx +32 -32
  273. package/src/props/IBackgroundPropps.ts +5 -5
  274. package/src/props/IBaseComponentProps.ts +8 -8
  275. package/src/props/IHeaderIconProps.ts +10 -10
  276. package/src/props/IHeaderProps.ts +7 -7
  277. package/src/props/IImageProps.ts +4 -4
  278. package/src/props/ILinkProps.ts +5 -5
  279. package/src/props/IValidationNumberProps.ts +4 -4
  280. package/src/props/IValidationPrecisionProps.ts +3 -3
  281. package/src/props/IValidationProps.ts +9 -9
  282. package/src/props/IValidationRegexProps.ts +4 -4
  283. package/src/props/IValidationStringProps.ts +4 -4
  284. package/src/routing/INSRouterMaker.ts +6 -6
  285. package/src/routing/INSRouterProps.ts +5 -5
  286. package/src/routing/INSRouterState.ts +5 -5
  287. package/src/routing/NSRouterMaker.tsx +33 -33
  288. package/src/routing/Notifier.ts +79 -79
  289. package/tsconfig.json +43 -43
@@ -1,228 +1,228 @@
1
- import React, { Component, createRef } from 'react';
2
- import { NSButtonBlue } from './NSButtonBlue';
3
- import { NSBoxString } from './NSBoxString';
4
- import { NSSpace, NSSpaceSizeType } from './NSSpace';
5
- import Styles from './NSDialogPageSelection.module.css';
6
- import { NSBoxRadio } from './NSBoxRadio';
7
-
8
- export interface NSDialogPageSelectionProps<RowType>
9
- {
10
- current_page: number;
11
- max_page: number;
12
- onClose: () => void;
13
- getItems: (page: number, selected: boolean) => Promise<RowType[]>;
14
- onFinish: (items: RowType[]) => void;
15
- icon?: string;
16
- }
17
-
18
- interface NSDialogPageSelectionState
19
- {
20
- selectedRadio: string;
21
- }
22
-
23
- export class NSDialogPageSelection<RowType> extends Component<NSDialogPageSelectionProps<RowType>, NSDialogPageSelectionState>
24
- {
25
- private toastRef: React.RefObject<HTMLDivElement> = createRef();
26
- private NSBoxBoolean_CurrentPage: React.RefObject<NSBoxRadio> = createRef();
27
- private NSBoxBoolean_SelectedItems: React.RefObject<NSBoxRadio> = createRef();
28
- private NSBoxBoolean_CustomPage: React.RefObject<NSBoxRadio> = createRef();
29
- private NSBoxBoolean_AllPage: React.RefObject<NSBoxRadio> = createRef();
30
- private NSBoxString_Pages: React.RefObject<NSBoxString> = createRef();
31
-
32
- constructor(props: NSDialogPageSelectionProps<RowType>)
33
- {
34
- super(props);
35
- this.state = {
36
- selectedRadio: 'current_page'
37
- };
38
- this.onClickOutside = this.onClickOutside.bind(this);
39
- this.handleRadioChange = this.handleRadioChange.bind(this);
40
- }
41
- override componentDidMount(): void
42
- {
43
- document.addEventListener('mousedown', this.onClickOutside);
44
- }
45
- override componentWillUnmount(): void
46
- {
47
- document.removeEventListener('mousedown', this.onClickOutside);
48
- }
49
- parseCustomPage(pages_value: string): number[]
50
- {
51
- let ans: number[] = [];
52
- let pages = pages_value.split(',').map(p => p.trim()).filter(p => p);
53
- for (let i = 0; i < pages.length; i++)
54
- {
55
- const element = pages[i];
56
- if (element.includes("-"))
57
- {
58
- let ps = element.split('-').map(p => p.trim());
59
- if (ps.length === 2)
60
- {
61
- let from = parseInt(ps[0]);
62
- let to = parseInt(ps[1]);
63
- for (let p = from; p <= to; p++)
64
- ans.push(p);
65
- }
66
- else
67
- throw new Error("Parse Error for : " + element);
68
- }
69
- else
70
- {
71
- let p = parseInt(element);
72
- ans.push(p);
73
- }
74
- }
75
- ans.forEach(p =>
76
- {
77
- if (p < 1)
78
- throw new Error("Page number must be more than equal to 1");
79
- if (p > this.props.max_page)
80
- throw new Error("Page number must be less than equal to " + this.props.max_page);
81
- })
82
- return ans;
83
- }
84
- private onClickOutside(event: MouseEvent)
85
- {
86
- if (this.toastRef.current && !this.toastRef.current.contains(event.target as Node))
87
- {
88
- this.props.onClose();
89
- }
90
- }
91
- private handleRadioChange(selectedRadio: string)
92
- {
93
- this.setState({ selectedRadio });
94
- }
95
- override render()
96
- {
97
- return (
98
- <>
99
- {
100
- <>
101
- <div className={Styles.ns_print_container} ref={this.toastRef}>
102
- <div className={Styles.ns_header_print}>
103
- <img
104
- src="https://static.namirasoft.com/image/concept/close/blue.svg"
105
- alt="Close"
106
- width={24}
107
- height={24}
108
- onClick={(e) =>
109
- {
110
- e.stopPropagation();
111
- this.props.onClose();
112
- }}
113
- className={Styles.ns_close_icon}
114
- />
115
- <div className={Styles.ns_print_title}>
116
- <img
117
- src={this.props.icon && this.props.icon}
118
- alt="Print"
119
- width={24}
120
- height={24}
121
- />
122
- <h2 className='m-0'>Page Selection</h2>
123
- </div>
124
- <NSSpace size={NSSpaceSizeType.SMALL} />
125
- <p className={Styles.ns_print_description}>Please select which pages you want to continue with</p>
126
- <NSSpace size={NSSpaceSizeType.SMALL} />
127
- <div className={Styles.ns_parent_checkboxs}>
128
- {/* todo: input id for check when click on labels */}
129
- <NSBoxRadio
130
- ref={this.NSBoxBoolean_CurrentPage}
131
- required={false}
132
- defaultValue={true}
133
- title={"Current page"}
134
- hideHeader
135
- checked={this.state.selectedRadio === 'current_page'}
136
- onClicked={() => this.handleRadioChange('current_page')}
137
- />
138
- <NSBoxRadio
139
- ref={this.NSBoxBoolean_SelectedItems}
140
- required={false}
141
- title={"Only Selected Items"}
142
- hideHeader
143
- checked={this.state.selectedRadio === 'selected_items'}
144
- onClicked={() => this.handleRadioChange('selected_items')}
145
- />
146
- <NSBoxRadio
147
- ref={this.NSBoxBoolean_CustomPage}
148
- title={"Custom Pages"}
149
- required={false}
150
- hideHeader
151
- checked={this.state.selectedRadio === 'custom_page'}
152
- onClicked={() => this.handleRadioChange('custom_page')}
153
- />
154
- <NSBoxRadio
155
- ref={this.NSBoxBoolean_AllPage}
156
- title={"All Pages"}
157
- required={false}
158
- hideHeader
159
- checked={this.state.selectedRadio === 'all_page'}
160
- onClicked={() => this.handleRadioChange('all_page')}
161
- />
162
- </div>
163
- <NSSpace size={NSSpaceSizeType.MICRO} />
164
- {this.state.selectedRadio === 'custom_page' && (
165
- <NSBoxString ref={this.NSBoxString_Pages} classList={[Styles.ns_w_box_string]} required={false} title="Custom Pages"
166
- validator={(_, value) =>
167
- {
168
- try
169
- {
170
- this.parseCustomPage(value);
171
- return null;
172
- } catch (error: any)
173
- {
174
- return error.message;
175
- }
176
- }} />
177
- )}
178
- <NSSpace size={NSSpaceSizeType.SMALL} />
179
- <NSButtonBlue style={{ width: "100%" }} title='Apply' onClick={async () =>
180
- {
181
- try
182
- {
183
- let items: RowType[] = [];
184
- if (this.NSBoxBoolean_CurrentPage.current?.getValue())
185
- {
186
- let is = await this.props.getItems(this.props.current_page, false);
187
- items.push(...is);
188
- }
189
- else if (this.NSBoxBoolean_SelectedItems.current?.getValue())
190
- {
191
- let is = await this.props.getItems(this.props.current_page, true);
192
- items.push(...is);
193
- }
194
- else if (this.NSBoxBoolean_CustomPage.current?.getValue())
195
- {
196
- let pages_value = this.NSBoxString_Pages.current?.getValue() ?? "";
197
- let pages = this.parseCustomPage(pages_value);
198
-
199
- for (let p = 0; p < pages.length; p++)
200
- {
201
- let is = await this.props.getItems(pages[p], false);
202
- items.push(...is);
203
- }
204
- }
205
- else if (this.NSBoxBoolean_AllPage.current?.getValue())
206
- {
207
- for (let p = 1; p <= this.props.max_page; p++)
208
- {
209
- let is = await this.props.getItems(p, false);
210
- items.push(...is);
211
- }
212
- }
213
- else
214
- { }
215
- this.props.onFinish(items);
216
- } catch (error)
217
- {
218
- }
219
- }} />
220
- </div>
221
- </div>
222
- <div className={Styles.ns_toast_background}></div>
223
- </>
224
- }
225
- </>
226
- );
227
- }
1
+ import React, { Component, createRef } from 'react';
2
+ import { NSButtonBlue } from './NSButtonBlue';
3
+ import { NSBoxString } from './NSBoxString';
4
+ import { NSSpace, NSSpaceSizeType } from './NSSpace';
5
+ import Styles from './NSDialogPageSelection.module.css';
6
+ import { NSBoxRadio } from './NSBoxRadio';
7
+
8
+ export interface NSDialogPageSelectionProps<RowType>
9
+ {
10
+ current_page: number;
11
+ max_page: number;
12
+ onClose: () => void;
13
+ getItems: (page: number, selected: boolean) => Promise<RowType[]>;
14
+ onFinish: (items: RowType[]) => void;
15
+ icon?: string;
16
+ }
17
+
18
+ interface NSDialogPageSelectionState
19
+ {
20
+ selectedRadio: string;
21
+ }
22
+
23
+ export class NSDialogPageSelection<RowType> extends Component<NSDialogPageSelectionProps<RowType>, NSDialogPageSelectionState>
24
+ {
25
+ private toastRef: React.RefObject<HTMLDivElement> = createRef();
26
+ private NSBoxBoolean_CurrentPage: React.RefObject<NSBoxRadio> = createRef();
27
+ private NSBoxBoolean_SelectedItems: React.RefObject<NSBoxRadio> = createRef();
28
+ private NSBoxBoolean_CustomPage: React.RefObject<NSBoxRadio> = createRef();
29
+ private NSBoxBoolean_AllPage: React.RefObject<NSBoxRadio> = createRef();
30
+ private NSBoxString_Pages: React.RefObject<NSBoxString> = createRef();
31
+
32
+ constructor(props: NSDialogPageSelectionProps<RowType>)
33
+ {
34
+ super(props);
35
+ this.state = {
36
+ selectedRadio: 'current_page'
37
+ };
38
+ this.onClickOutside = this.onClickOutside.bind(this);
39
+ this.handleRadioChange = this.handleRadioChange.bind(this);
40
+ }
41
+ override componentDidMount(): void
42
+ {
43
+ document.addEventListener('mousedown', this.onClickOutside);
44
+ }
45
+ override componentWillUnmount(): void
46
+ {
47
+ document.removeEventListener('mousedown', this.onClickOutside);
48
+ }
49
+ parseCustomPage(pages_value: string): number[]
50
+ {
51
+ let ans: number[] = [];
52
+ let pages = pages_value.split(',').map(p => p.trim()).filter(p => p);
53
+ for (let i = 0; i < pages.length; i++)
54
+ {
55
+ const element = pages[i];
56
+ if (element.includes("-"))
57
+ {
58
+ let ps = element.split('-').map(p => p.trim());
59
+ if (ps.length === 2)
60
+ {
61
+ let from = parseInt(ps[0]);
62
+ let to = parseInt(ps[1]);
63
+ for (let p = from; p <= to; p++)
64
+ ans.push(p);
65
+ }
66
+ else
67
+ throw new Error("Parse Error for : " + element);
68
+ }
69
+ else
70
+ {
71
+ let p = parseInt(element);
72
+ ans.push(p);
73
+ }
74
+ }
75
+ ans.forEach(p =>
76
+ {
77
+ if (p < 1)
78
+ throw new Error("Page number must be more than equal to 1");
79
+ if (p > this.props.max_page)
80
+ throw new Error("Page number must be less than equal to " + this.props.max_page);
81
+ })
82
+ return ans;
83
+ }
84
+ private onClickOutside(event: MouseEvent)
85
+ {
86
+ if (this.toastRef.current && !this.toastRef.current.contains(event.target as Node))
87
+ {
88
+ this.props.onClose();
89
+ }
90
+ }
91
+ private handleRadioChange(selectedRadio: string)
92
+ {
93
+ this.setState({ selectedRadio });
94
+ }
95
+ override render()
96
+ {
97
+ return (
98
+ <>
99
+ {
100
+ <>
101
+ <div className={Styles.ns_print_container} ref={this.toastRef}>
102
+ <div className={Styles.ns_header_print}>
103
+ <img
104
+ src="https://static.namirasoft.com/image/concept/close/blue.svg"
105
+ alt="Close"
106
+ width={24}
107
+ height={24}
108
+ onClick={(e) =>
109
+ {
110
+ e.stopPropagation();
111
+ this.props.onClose();
112
+ }}
113
+ className={Styles.ns_close_icon}
114
+ />
115
+ <div className={Styles.ns_print_title}>
116
+ <img
117
+ src={this.props.icon && this.props.icon}
118
+ alt="Print"
119
+ width={24}
120
+ height={24}
121
+ />
122
+ <h2 className='m-0'>Page Selection</h2>
123
+ </div>
124
+ <NSSpace size={NSSpaceSizeType.SMALL} />
125
+ <p className={Styles.ns_print_description}>Please select which pages you want to continue with</p>
126
+ <NSSpace size={NSSpaceSizeType.SMALL} />
127
+ <div className={Styles.ns_parent_checkboxs}>
128
+ {/* todo: input id for check when click on labels */}
129
+ <NSBoxRadio
130
+ ref={this.NSBoxBoolean_CurrentPage}
131
+ required={false}
132
+ defaultValue={true}
133
+ title={"Current page"}
134
+ hideHeader
135
+ checked={this.state.selectedRadio === 'current_page'}
136
+ onClicked={() => this.handleRadioChange('current_page')}
137
+ />
138
+ <NSBoxRadio
139
+ ref={this.NSBoxBoolean_SelectedItems}
140
+ required={false}
141
+ title={"Only Selected Items"}
142
+ hideHeader
143
+ checked={this.state.selectedRadio === 'selected_items'}
144
+ onClicked={() => this.handleRadioChange('selected_items')}
145
+ />
146
+ <NSBoxRadio
147
+ ref={this.NSBoxBoolean_CustomPage}
148
+ title={"Custom Pages"}
149
+ required={false}
150
+ hideHeader
151
+ checked={this.state.selectedRadio === 'custom_page'}
152
+ onClicked={() => this.handleRadioChange('custom_page')}
153
+ />
154
+ <NSBoxRadio
155
+ ref={this.NSBoxBoolean_AllPage}
156
+ title={"All Pages"}
157
+ required={false}
158
+ hideHeader
159
+ checked={this.state.selectedRadio === 'all_page'}
160
+ onClicked={() => this.handleRadioChange('all_page')}
161
+ />
162
+ </div>
163
+ <NSSpace size={NSSpaceSizeType.MICRO} />
164
+ {this.state.selectedRadio === 'custom_page' && (
165
+ <NSBoxString ref={this.NSBoxString_Pages} classList={[Styles.ns_w_box_string]} required={false} title="Custom Pages"
166
+ validator={(_, value) =>
167
+ {
168
+ try
169
+ {
170
+ this.parseCustomPage(value);
171
+ return null;
172
+ } catch (error: any)
173
+ {
174
+ return error.message;
175
+ }
176
+ }} />
177
+ )}
178
+ <NSSpace size={NSSpaceSizeType.SMALL} />
179
+ <NSButtonBlue style={{ width: "100%" }} title='Apply' onClick={async () =>
180
+ {
181
+ try
182
+ {
183
+ let items: RowType[] = [];
184
+ if (this.NSBoxBoolean_CurrentPage.current?.getValue())
185
+ {
186
+ let is = await this.props.getItems(this.props.current_page, false);
187
+ items.push(...is);
188
+ }
189
+ else if (this.NSBoxBoolean_SelectedItems.current?.getValue())
190
+ {
191
+ let is = await this.props.getItems(this.props.current_page, true);
192
+ items.push(...is);
193
+ }
194
+ else if (this.NSBoxBoolean_CustomPage.current?.getValue())
195
+ {
196
+ let pages_value = this.NSBoxString_Pages.current?.getValue() ?? "";
197
+ let pages = this.parseCustomPage(pages_value);
198
+
199
+ for (let p = 0; p < pages.length; p++)
200
+ {
201
+ let is = await this.props.getItems(pages[p], false);
202
+ items.push(...is);
203
+ }
204
+ }
205
+ else if (this.NSBoxBoolean_AllPage.current?.getValue())
206
+ {
207
+ for (let p = 1; p <= this.props.max_page; p++)
208
+ {
209
+ let is = await this.props.getItems(p, false);
210
+ items.push(...is);
211
+ }
212
+ }
213
+ else
214
+ { }
215
+ this.props.onFinish(items);
216
+ } catch (error)
217
+ {
218
+ }
219
+ }} />
220
+ </div>
221
+ </div>
222
+ <div className={Styles.ns_toast_background}></div>
223
+ </>
224
+ }
225
+ </>
226
+ );
227
+ }
228
228
  }
@@ -1,56 +1,56 @@
1
- .ns_down_timer_container {
2
- display: flex;
3
- flex-direction: row;
4
- align-items: center;
5
- justify-content: left;
6
- }
7
-
8
- .ns_figure {
9
- display: flex;
10
- flex-direction: row;
11
- align-items: center;
12
- justify-content: center;
13
- margin: 0;
14
- }
15
-
16
- .ns_figure figcaption {
17
- font-size: 14px;
18
- font-weight: 500;
19
- margin: 0 0 0 8px;
20
- color: #141B5C;
21
- padding: 2px 0;
22
- max-width: 100px;
23
- }
24
-
25
- .ns_down_timer_time_container {
26
- display: flex;
27
- flex-direction: row;
28
- justify-content: center;
29
- gap: 4px;
30
- align-items: flex-start;
31
- padding: 0 8px;
32
- }
33
-
34
- .ns_down_timer_time_left {
35
- font-size: 16px;
36
- font-weight: 600;
37
- color: #141B5C;
38
- margin: 0;
39
- padding-left: 2px;
40
- }
41
-
42
- .ns_down_timer_time_left_unit {
43
- font-size: 12px;
44
- font-weight: 400;
45
- color: #141B5C;
46
- margin: 0;
47
- padding-left: 2px;
48
- }
49
-
50
- .ns_semi_colon {
51
- display: flex;
52
- flex-direction: row;
53
- padding: 0;
54
- color: #141B5C;
55
- margin: 0;
1
+ .ns_down_timer_container {
2
+ display: flex;
3
+ flex-direction: row;
4
+ align-items: center;
5
+ justify-content: left;
6
+ }
7
+
8
+ .ns_figure {
9
+ display: flex;
10
+ flex-direction: row;
11
+ align-items: center;
12
+ justify-content: center;
13
+ margin: 0;
14
+ }
15
+
16
+ .ns_figure figcaption {
17
+ font-size: 14px;
18
+ font-weight: 500;
19
+ margin: 0 0 0 8px;
20
+ color: #141B5C;
21
+ padding: 2px 0;
22
+ max-width: 100px;
23
+ }
24
+
25
+ .ns_down_timer_time_container {
26
+ display: flex;
27
+ flex-direction: row;
28
+ justify-content: center;
29
+ gap: 4px;
30
+ align-items: flex-start;
31
+ padding: 0 8px;
32
+ }
33
+
34
+ .ns_down_timer_time_left {
35
+ font-size: 16px;
36
+ font-weight: 600;
37
+ color: #141B5C;
38
+ margin: 0;
39
+ padding-left: 2px;
40
+ }
41
+
42
+ .ns_down_timer_time_left_unit {
43
+ font-size: 12px;
44
+ font-weight: 400;
45
+ color: #141B5C;
46
+ margin: 0;
47
+ padding-left: 2px;
48
+ }
49
+
50
+ .ns_semi_colon {
51
+ display: flex;
52
+ flex-direction: row;
53
+ padding: 0;
54
+ color: #141B5C;
55
+ margin: 0;
56
56
  }