namirasoft-site-react 1.3.354 → 1.3.356

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 (365) hide show
  1. package/.dockerignore +86 -86
  2. package/Dockerfile +18 -18
  3. package/config-overrides.js +70 -70
  4. package/dist/App.css +17 -0
  5. package/dist/App.js +8 -5
  6. package/dist/App.js.map +1 -1
  7. package/dist/assets/images/1.png +0 -0
  8. package/dist/assets/images/2.png +0 -0
  9. package/dist/assets/images/3.png +0 -0
  10. package/dist/assets/images/4.png +0 -0
  11. package/dist/assets/images/404 image.svg +9 -9
  12. package/dist/assets/images/404 image_mobile.svg +9 -9
  13. package/dist/assets/images/5.jpg +0 -0
  14. package/dist/assets/images/arrow.svg +3 -3
  15. package/dist/assets/images/danger.svg +3 -3
  16. package/dist/assets/images/exit.svg +3 -3
  17. package/dist/assets/images/icon-export.svg +3 -0
  18. package/dist/assets/images/icon-input-copy.svg +3 -3
  19. package/dist/assets/images/icon-input-date.svg +9 -9
  20. package/dist/assets/images/icon-input-duration.svg +9 -9
  21. package/dist/assets/images/icon-input-email.svg +9 -9
  22. package/dist/assets/images/icon-input-float.svg +9 -9
  23. package/dist/assets/images/icon-input-id.svg +9 -0
  24. package/dist/assets/images/icon-input-integer.svg +9 -9
  25. package/dist/assets/images/icon-input-ip.svg +9 -9
  26. package/dist/assets/images/icon-input-phone.svg +9 -9
  27. package/dist/assets/images/icon-input-price.svg +9 -9
  28. package/dist/assets/images/icon-input-search.svg +3 -3
  29. package/dist/assets/images/icon-input-string.svg +9 -9
  30. package/dist/assets/images/icon-input-text.svg +9 -9
  31. package/dist/assets/images/icon-input-time.svg +9 -9
  32. package/dist/assets/images/icon-refresh.svg +3 -0
  33. package/dist/assets/images/icon-select-box.svg +3 -3
  34. package/dist/assets/images/logo.svg +9 -9
  35. package/dist/assets/images/menu.svg +3 -3
  36. package/dist/assets/images/namira.svg +9 -9
  37. package/dist/assets/images/rectangle.svg +3 -3
  38. package/dist/components/NSAccess.d.ts +2 -0
  39. package/dist/components/NSAccess.js +8 -0
  40. package/dist/components/NSAccess.js.map +1 -0
  41. package/dist/components/NSAccess.module.css +39 -0
  42. package/dist/components/NSActionMenu.js +2 -2
  43. package/dist/components/NSActionMenu.module.css +75 -75
  44. package/dist/components/NSAssistantButton.module.css +133 -133
  45. package/dist/components/NSBarAction.module.css +87 -87
  46. package/dist/components/NSBarHeroBanner.module.css +42 -42
  47. package/dist/components/NSBarNotification.d.ts +0 -1
  48. package/dist/components/NSBarNotification.js +10 -10
  49. package/dist/components/NSBarNotification.js.map +1 -1
  50. package/dist/components/NSBarNotification.module.css +34 -34
  51. package/dist/components/NSBarTitle.module.css +9 -9
  52. package/dist/components/NSBox.module.css +123 -123
  53. package/dist/components/NSBoxBoolean.module.css +53 -53
  54. package/dist/components/NSBoxCombo.module.css +17 -17
  55. package/dist/components/NSBoxDate.module.css +39 -39
  56. package/dist/components/NSBoxEntity.module.css +25 -25
  57. package/dist/components/NSBoxErrorNotifier.module.css +2 -2
  58. package/dist/components/NSBoxLabel.module.css +12 -12
  59. package/dist/components/NSBoxOTP.module.css +10 -10
  60. package/dist/components/NSBoxText.d.ts +25 -0
  61. package/dist/components/NSBoxText.js +56 -0
  62. package/dist/components/NSBoxText.js.map +1 -0
  63. package/dist/components/NSBoxTextArea.module.css +76 -76
  64. package/dist/components/NSButton.module.css +27 -27
  65. package/dist/components/NSButtonBlue.module.css +4 -4
  66. package/dist/components/NSButtonGreen.module.css +4 -4
  67. package/dist/components/NSButtonRed.module.css +4 -4
  68. package/dist/components/NSCard.module.css +108 -108
  69. package/dist/components/NSCopyToClipboard.module.css +39 -39
  70. package/dist/components/NSDialog.d.ts +8 -0
  71. package/dist/components/NSDialog.js +8 -0
  72. package/dist/components/NSDialog.js.map +1 -0
  73. package/dist/components/NSDialog.module.css +40 -0
  74. package/dist/components/NSElectronicCard.module.css +60 -60
  75. package/dist/components/NSEntityBar.module.css +77 -77
  76. package/dist/components/NSEntityCardBackground.module.css +27 -27
  77. package/dist/components/NSFilterBox.module.css +47 -47
  78. package/dist/components/NSFilterBoxDialog.module.css +36 -36
  79. package/dist/components/NSFilterItem.module.css +23 -23
  80. package/dist/components/NSFooter.module.css +123 -123
  81. package/dist/components/NSGroupedList.module.css +72 -72
  82. package/dist/components/NSHeader.module.css +271 -271
  83. package/dist/components/NSInput.module.css +74 -0
  84. package/dist/components/NSInputDate.d.ts +21 -0
  85. package/dist/components/NSInputDate.js +41 -0
  86. package/dist/components/NSInputDate.js.map +1 -0
  87. package/dist/components/NSInputDate.module.css +42 -0
  88. package/dist/components/NSInputDuration.d.ts +23 -0
  89. package/dist/components/NSInputDuration.js +42 -0
  90. package/dist/components/NSInputDuration.js.map +1 -0
  91. package/dist/components/NSInputEmail.d.ts +22 -0
  92. package/dist/components/NSInputEmail.js +43 -0
  93. package/dist/components/NSInputEmail.js.map +1 -0
  94. package/dist/components/NSInputErrorNotifier.d.ts +5 -0
  95. package/dist/components/NSInputErrorNotifier.js +7 -0
  96. package/dist/components/NSInputErrorNotifier.js.map +1 -0
  97. package/dist/components/NSInputErrorNotifier.module.css +3 -0
  98. package/dist/components/NSInputFloat.d.ts +22 -0
  99. package/dist/components/NSInputFloat.js +41 -0
  100. package/dist/components/NSInputFloat.js.map +1 -0
  101. package/dist/components/NSInputIP.d.ts +22 -0
  102. package/dist/components/NSInputIP.js +43 -0
  103. package/dist/components/NSInputIP.js.map +1 -0
  104. package/dist/components/NSInputInteger.d.ts +22 -0
  105. package/dist/components/NSInputInteger.js +41 -0
  106. package/dist/components/NSInputInteger.js.map +1 -0
  107. package/dist/components/NSInputPassword.d.ts +22 -0
  108. package/dist/components/NSInputPassword.js +42 -0
  109. package/dist/components/NSInputPassword.js.map +1 -0
  110. package/dist/components/NSInputPhone.d.ts +22 -0
  111. package/dist/components/NSInputPhone.js +38 -0
  112. package/dist/components/NSInputPhone.js.map +1 -0
  113. package/dist/components/NSInputPrice.d.ts +22 -0
  114. package/dist/components/NSInputPrice.js +41 -0
  115. package/dist/components/NSInputPrice.js.map +1 -0
  116. package/dist/components/NSInputSearch.d.ts +22 -0
  117. package/dist/components/NSInputSearch.js +41 -0
  118. package/dist/components/NSInputSearch.js.map +1 -0
  119. package/dist/components/NSInputString.d.ts +22 -0
  120. package/dist/components/NSInputString.js +42 -0
  121. package/dist/components/NSInputString.js.map +1 -0
  122. package/dist/components/NSInputText.d.ts +22 -0
  123. package/dist/components/NSInputText.js +42 -0
  124. package/dist/components/NSInputText.js.map +1 -0
  125. package/dist/components/NSInputTime.d.ts +22 -0
  126. package/dist/components/NSInputTime.js +43 -0
  127. package/dist/components/NSInputTime.js.map +1 -0
  128. package/dist/components/NSLayout.module.css +13 -13
  129. package/dist/components/NSLayoutAction.d.ts +5 -0
  130. package/dist/components/NSLayoutAction.js +20 -0
  131. package/dist/components/NSLayoutAction.js.map +1 -0
  132. package/dist/components/NSLayoutAction.module.css +88 -0
  133. package/dist/components/NSLayoutHeroBanner.d.ts +2 -0
  134. package/dist/components/NSLayoutHeroBanner.js +8 -0
  135. package/dist/components/NSLayoutHeroBanner.js.map +1 -0
  136. package/dist/components/NSLayoutHeroBanner.module.css +43 -0
  137. package/dist/components/NSLayoutTitle.d.ts +2 -0
  138. package/dist/components/NSLayoutTitle.js +11 -0
  139. package/dist/components/NSLayoutTitle.js.map +1 -0
  140. package/dist/components/NSLayoutTitle.module.css +10 -0
  141. package/dist/components/NSLink.module.css +36 -36
  142. package/dist/components/NSLoading.module.css +29 -29
  143. package/dist/components/NSModal.js +2 -2
  144. package/dist/components/NSModal.module.css +70 -70
  145. package/dist/components/NSNoData.module.css +8 -8
  146. package/dist/components/NSNotification.d.ts +21 -0
  147. package/dist/components/NSNotification.js +37 -0
  148. package/dist/components/NSNotification.js.map +1 -0
  149. package/dist/components/NSNotification.module.css +32 -0
  150. package/dist/components/NSPageSelectionModal.module.css +102 -102
  151. package/dist/components/NSPagination.module.css +101 -101
  152. package/dist/components/NSPanel.module.css +46 -46
  153. package/dist/components/NSPrintModal.d.ts +15 -0
  154. package/dist/components/NSPrintModal.js +35 -0
  155. package/dist/components/NSPrintModal.js.map +1 -0
  156. package/dist/components/NSPrintModal.module.css +82 -0
  157. package/dist/components/NSRadioButton.module.css +61 -61
  158. package/dist/components/NSSection.module.css +10 -10
  159. package/dist/components/NSSectionBars.module.css +10 -10
  160. package/dist/components/NSSectionCards.module.css +38 -38
  161. package/dist/components/NSSelectBox.d.ts +24 -0
  162. package/dist/components/NSSelectBox.js +61 -0
  163. package/dist/components/NSSelectBox.js.map +1 -0
  164. package/dist/components/NSSelectBox.module.css +42 -0
  165. package/dist/components/NSTabPage.module.css +57 -57
  166. package/dist/components/NSTable.module.css +253 -253
  167. package/dist/components/NSTag.module.css +44 -44
  168. package/dist/components/NSTitle.module.css +15 -15
  169. package/dist/components/NSVerification.module.css +22 -22
  170. package/dist/index.css +6 -0
  171. package/dist/main.d.ts +1 -0
  172. package/dist/main.js +1 -0
  173. package/dist/main.js.map +1 -1
  174. package/dist/pages/NSLoginPage.d.ts +6 -0
  175. package/dist/pages/NSLoginPage.js +8 -0
  176. package/dist/pages/NSLoginPage.js.map +1 -0
  177. package/dist/pages/NSLoginPage.module.css +20 -0
  178. package/dist/pages/NSNotFoundPage.module.css +18 -18
  179. package/dist/props/BaseComponentProps.d.ts +6 -0
  180. package/dist/props/BaseComponentProps.js +2 -0
  181. package/dist/props/BaseComponentProps.js.map +10 -0
  182. package/dist/props/INamirasoftProps.d.ts +4 -0
  183. package/dist/props/INamirasoftProps.js +2 -0
  184. package/dist/props/INamirasoftProps.js.map +1 -0
  185. package/dist/props/ImageProps.d.ts +4 -0
  186. package/dist/props/ImageProps.js +2 -0
  187. package/dist/props/ImageProps.js.map +10 -0
  188. package/dist/props/LinkProps.d.ts +5 -0
  189. package/dist/props/LinkProps.js +2 -0
  190. package/dist/props/LinkProps.js.map +10 -0
  191. package/dist/props/ValidationNumberProps.d.ts +4 -0
  192. package/dist/props/ValidationNumberProps.js +2 -0
  193. package/dist/props/ValidationNumberProps.js.map +10 -0
  194. package/dist/props/ValidationProps.d.ts +6 -0
  195. package/dist/props/ValidationProps.js +2 -0
  196. package/dist/props/ValidationProps.js.map +10 -0
  197. package/dist/props/ValidationRegexProps.d.ts +4 -0
  198. package/dist/props/ValidationRegexProps.js +2 -0
  199. package/dist/props/ValidationRegexProps.js.map +1 -0
  200. package/dist/props/ValidationStringProps.d.ts +4 -0
  201. package/dist/props/ValidationStringProps.js +2 -0
  202. package/dist/props/ValidationStringProps.js.map +10 -0
  203. package/package.json +67 -67
  204. package/public/index.html +38 -38
  205. package/src/App.css +16 -16
  206. package/src/App.tsx +178 -166
  207. package/src/CopyToClipboard.ts +6 -6
  208. package/src/Validator.ts +110 -110
  209. package/src/assets/images/404 image.svg +9 -9
  210. package/src/assets/images/404 image_mobile.svg +9 -9
  211. package/src/assets/images/arrow.svg +3 -3
  212. package/src/assets/images/danger.svg +3 -3
  213. package/src/assets/images/exit.svg +3 -3
  214. package/src/assets/images/icon-input-copy.svg +3 -3
  215. package/src/assets/images/icon-input-date.svg +9 -9
  216. package/src/assets/images/icon-input-duration.svg +9 -9
  217. package/src/assets/images/icon-input-email.svg +9 -9
  218. package/src/assets/images/icon-input-float.svg +9 -9
  219. package/src/assets/images/icon-input-integer.svg +9 -9
  220. package/src/assets/images/icon-input-ip.svg +9 -9
  221. package/src/assets/images/icon-input-phone.svg +9 -9
  222. package/src/assets/images/icon-input-price.svg +9 -9
  223. package/src/assets/images/icon-input-search.svg +3 -3
  224. package/src/assets/images/icon-input-string.svg +9 -9
  225. package/src/assets/images/icon-input-text.svg +9 -9
  226. package/src/assets/images/icon-input-time.svg +9 -9
  227. package/src/assets/images/icon-select-box.svg +3 -3
  228. package/src/assets/images/logo.svg +9 -9
  229. package/src/assets/images/menu.svg +3 -3
  230. package/src/assets/images/namira.svg +9 -9
  231. package/src/assets/images/rectangle.svg +3 -3
  232. package/src/components/NSActionMenu.module.css +75 -75
  233. package/src/components/NSActionMenu.tsx +88 -88
  234. package/src/components/NSAssistantButton.module.css +133 -133
  235. package/src/components/NSAssistantButton.tsx +74 -74
  236. package/src/components/NSBarAction.module.css +87 -87
  237. package/src/components/NSBarAction.tsx +86 -86
  238. package/src/components/NSBarHeroBanner.module.css +42 -42
  239. package/src/components/NSBarHeroBanner.tsx +61 -61
  240. package/src/components/NSBarNotification.module.css +34 -34
  241. package/src/components/NSBarNotification.tsx +76 -78
  242. package/src/components/NSBarTitle.module.css +9 -9
  243. package/src/components/NSBarTitle.tsx +28 -28
  244. package/src/components/NSBox.module.css +123 -123
  245. package/src/components/NSBoxBoolean.module.css +53 -53
  246. package/src/components/NSBoxBoolean.tsx +84 -84
  247. package/src/components/NSBoxCombo.module.css +17 -17
  248. package/src/components/NSBoxCombo.tsx +132 -132
  249. package/src/components/NSBoxDate.module.css +39 -39
  250. package/src/components/NSBoxDate.tsx +83 -83
  251. package/src/components/NSBoxDateTime.tsx +83 -83
  252. package/src/components/NSBoxDouble.tsx +88 -88
  253. package/src/components/NSBoxDuration.tsx +88 -88
  254. package/src/components/NSBoxEmail.tsx +104 -104
  255. package/src/components/NSBoxEntity.module.css +25 -25
  256. package/src/components/NSBoxEntity.tsx +178 -178
  257. package/src/components/NSBoxEnum.tsx +56 -56
  258. package/src/components/NSBoxErrorNotifier.module.css +2 -2
  259. package/src/components/NSBoxErrorNotifier.tsx +33 -33
  260. package/src/components/NSBoxIPV4.tsx +93 -93
  261. package/src/components/NSBoxIPV6.tsx +90 -90
  262. package/src/components/NSBoxInteger.tsx +86 -86
  263. package/src/components/NSBoxLabel.module.css +12 -12
  264. package/src/components/NSBoxLabel.tsx +29 -29
  265. package/src/components/NSBoxOTP.module.css +10 -10
  266. package/src/components/NSBoxOTP.tsx +65 -65
  267. package/src/components/NSBoxPassword.tsx +86 -86
  268. package/src/components/NSBoxPhone.tsx +88 -88
  269. package/src/components/NSBoxPrice.tsx +88 -88
  270. package/src/components/NSBoxSearch.tsx +103 -103
  271. package/src/components/NSBoxString.tsx +103 -103
  272. package/src/components/NSBoxTextArea.module.css +76 -76
  273. package/src/components/NSBoxTextArea.tsx +106 -106
  274. package/src/components/NSBoxTime.tsx +88 -88
  275. package/src/components/NSButton.module.css +27 -27
  276. package/src/components/NSButton.tsx +23 -23
  277. package/src/components/NSButtonBlue.module.css +4 -4
  278. package/src/components/NSButtonBlue.tsx +12 -12
  279. package/src/components/NSButtonGreen.module.css +4 -4
  280. package/src/components/NSButtonGreen.tsx +11 -11
  281. package/src/components/NSButtonRed.module.css +4 -4
  282. package/src/components/NSButtonRed.tsx +11 -11
  283. package/src/components/NSCard.module.css +108 -108
  284. package/src/components/NSCard.tsx +70 -70
  285. package/src/components/NSCopyToClipboard.module.css +39 -39
  286. package/src/components/NSCopyToClipboard.tsx +35 -35
  287. package/src/components/NSDialog.module.css +40 -0
  288. package/src/components/NSDialog.tsx +34 -0
  289. package/src/components/NSElectronicCard.module.css +60 -60
  290. package/src/components/NSElectronicCard.tsx +47 -47
  291. package/src/components/NSEntityBar.module.css +77 -77
  292. package/src/components/NSEntityBar.tsx +27 -27
  293. package/src/components/NSEntityCardBackground.module.css +27 -27
  294. package/src/components/NSEntityCardBackground.tsx +34 -34
  295. package/src/components/NSFilterBox.module.css +47 -47
  296. package/src/components/NSFilterBox.tsx +373 -373
  297. package/src/components/NSFilterBoxDialog.module.css +36 -36
  298. package/src/components/NSFilterBoxDialog.tsx +74 -74
  299. package/src/components/NSFilterItem.module.css +23 -23
  300. package/src/components/NSFilterItem.tsx +72 -72
  301. package/src/components/NSFooter.module.css +123 -123
  302. package/src/components/NSFooter.tsx +194 -194
  303. package/src/components/NSGroupedList.module.css +72 -72
  304. package/src/components/NSGroupedList.tsx +107 -107
  305. package/src/components/NSHeader.module.css +271 -271
  306. package/src/components/NSHeader.tsx +234 -234
  307. package/src/components/NSLayout.module.css +13 -13
  308. package/src/components/NSLayout.tsx +82 -82
  309. package/src/components/NSLine.tsx +18 -18
  310. package/src/components/NSLink.module.css +36 -36
  311. package/src/components/NSLink.tsx +25 -25
  312. package/src/components/NSLinkBlue.tsx +20 -20
  313. package/src/components/NSLinkGreen.tsx +5 -5
  314. package/src/components/NSLinkRed.tsx +5 -5
  315. package/src/components/NSLoading.module.css +29 -29
  316. package/src/components/NSLoading.tsx +19 -19
  317. package/src/components/NSModal.module.css +70 -70
  318. package/src/components/NSModal.tsx +49 -49
  319. package/src/components/NSNoData.module.css +8 -8
  320. package/src/components/NSNoData.tsx +24 -24
  321. package/src/components/NSPageSelectionModal.module.css +102 -102
  322. package/src/components/NSPageSelectionModal.tsx +228 -228
  323. package/src/components/NSPagination.module.css +101 -101
  324. package/src/components/NSPagination.tsx +190 -190
  325. package/src/components/NSPanel.module.css +46 -46
  326. package/src/components/NSPanel.tsx +19 -19
  327. package/src/components/NSRadioButton.module.css +61 -61
  328. package/src/components/NSRadioButton.tsx +100 -100
  329. package/src/components/NSSection.module.css +10 -10
  330. package/src/components/NSSection.tsx +23 -23
  331. package/src/components/NSSectionBars.module.css +10 -10
  332. package/src/components/NSSectionBars.tsx +25 -25
  333. package/src/components/NSSectionCards.module.css +38 -38
  334. package/src/components/NSSectionCards.tsx +51 -51
  335. package/src/components/NSSectionTitle.tsx +21 -21
  336. package/src/components/NSSpace.tsx +28 -28
  337. package/src/components/NSTabPage.module.css +57 -57
  338. package/src/components/NSTabPage.tsx +53 -53
  339. package/src/components/NSTable.module.css +253 -253
  340. package/src/components/NSTable.tsx +361 -361
  341. package/src/components/NSTag.module.css +44 -44
  342. package/src/components/NSTag.tsx +49 -49
  343. package/src/components/NSTitle.module.css +15 -15
  344. package/src/components/NSTitle.tsx +19 -19
  345. package/src/components/NSVerification.module.css +22 -22
  346. package/src/components/NSVerification.tsx +41 -41
  347. package/src/index.tsx +7 -7
  348. package/src/main.ts +79 -78
  349. package/src/pages/NSNotFoundPage.module.css +18 -18
  350. package/src/pages/NSNotFoundPage.tsx +11 -11
  351. package/src/props/IBaseComponentProps.ts +8 -8
  352. package/src/props/IHeaderIconProps.ts +10 -10
  353. package/src/props/IHeaderProps.ts +6 -6
  354. package/src/props/IImageProps.ts +4 -4
  355. package/src/props/ILinkProps.ts +5 -5
  356. package/src/props/IValidationNumberProps.ts +4 -4
  357. package/src/props/IValidationProps.ts +7 -7
  358. package/src/props/IValidationRegexProps.ts +4 -4
  359. package/src/props/IValidationStringProps.ts +4 -4
  360. package/src/routing/INSRouterMaker.ts +6 -6
  361. package/src/routing/INSRouterProps.ts +5 -5
  362. package/src/routing/INSRouterState.ts +5 -5
  363. package/src/routing/NSRouterMaker.tsx +33 -33
  364. package/src/routing/Notifier.ts +79 -79
  365. package/tsconfig.json +43 -43
@@ -1,195 +1,195 @@
1
- "use client";
2
-
3
- import React from "react";
4
- import Styles from "./NSFooter.module.css";
5
- import { NamirasoftAPILinkServer, FilterLinkFullRow } from 'namirasoft-api-link';
6
- import { IBaseComponentProps } from "../props/IBaseComponentProps";
7
- import { IStorageLocal, CacheService } from "namirasoft-core";
8
-
9
- export interface INSFooterProps extends IBaseComponentProps
10
- {
11
- scope: string;
12
- name: string;
13
- logo: string;
14
- isLoggedIn: () => boolean;
15
- }
16
-
17
- export interface NSFooterState
18
- {
19
- filters: FilterLinkFullRow[];
20
- selected: FilterLinkFullRow | null;
21
- }
22
-
23
- export class NSFooter extends React.Component<INSFooterProps, NSFooterState>
24
- {
25
- private cache: CacheService<{
26
- rows: FilterLinkFullRow[];
27
- count: number;
28
- }>;
29
- constructor(props: INSFooterProps)
30
- {
31
- super(props);
32
- this.state = {
33
- filters: [],
34
- selected: null
35
- };
36
- this.hasChild = this.hasChild.bind(this);
37
- this.render_menu = this.render_menu.bind(this);
38
- this.render_menuItem = this.render_menuItem.bind(this);
39
- this.cache = new CacheService<{
40
- rows: FilterLinkFullRow[];
41
- count: number;
42
- }>("ns-footer", 720, new IStorageLocal(), async () =>
43
- {
44
- let server = new NamirasoftAPILinkServer(console.error);
45
- return server.filter.ListFilterLinks(this.props.scope, this.props.name, null, null, null);
46
- }, () => { });
47
- }
48
- override componentDidMount(): void
49
- {
50
- this.cache.get().then(filters =>
51
- {
52
- this.setState({ filters: filters.rows });
53
- }).catch(() => { });
54
- }
55
- private getFilters(): FilterLinkFullRow[]
56
- {
57
- let loggedin = this.props.isLoggedIn();
58
- let ans = this.state.filters?.filter(f =>
59
- {
60
- if (f.link)
61
- {
62
- if (loggedin)
63
- return f.link.private;
64
- return f.link.public;
65
- }
66
- return true;
67
- }) ?? [];
68
-
69
- while (true)
70
- {
71
- let old_length = ans.length;
72
- ans = ans.filter(f =>
73
- {
74
- if (f.link?.url)
75
- return true;
76
- return ans.filter(x => x.parent_id == f.id).length > 0;
77
- });
78
- let new_length = ans.length;
79
- if (old_length == new_length)
80
- break;
81
- }
82
-
83
- return ans;
84
- }
85
- private hasChild(id: number): boolean
86
- {
87
- return this.getFilters().filter(f => f.parent_id === id).length > 0;
88
- }
89
- override render()
90
- {
91
- return (
92
- <footer id={this.props.id}
93
- className={`${Styles.ns_footer} ${this.props.classList?.join(" ")}`}
94
- style={this.props.style}
95
- >
96
- <div className={`container ${Styles.ns_package_footer}`}>
97
- <div className={`${Styles.ns_footer_parent_items}`}>
98
- <div className={`${Styles.ns_footer_project_logo_tablet}`}>
99
- <a href="/">
100
- <img src={this.props.logo} alt='Logo' width={80} height={80} />
101
- </a>
102
- </div>
103
- <div className={`${Styles.ns_footer_menu_container}`}>
104
- {this.render_menu(0, null)}
105
- </div>
106
- <div className={`${Styles.ns_footer_namira_logo_tablet}`}>
107
- <div className="d-flex flex-row gap-3">
108
- <a href="/"><img src="https://static.namirasoft.com/image/namirasoft/site/logo/circle.png" alt='Namira Software Corporation Logo' width={48} height={48} /></a>
109
- <a href="/"><img src="https://static.namirasoft.com/image/namirasoft/account/logo/circle.png" alt='Namira Software Corporation Logo' width={48} height={48} /></a>
110
- </div>
111
- <div className="d-flex flex-row gap-1 w-100 justify-content-center align-items-center">
112
- <a style={{ cursor: "pointer" }} href="https://ca.linkedin.com/company/namira-software-corporation" target="_blank"><img src="https://static.namirasoft.com/image/concept/social/linkedin/white.svg" alt="Communicate with Namirasoft Via LinkedIn" width={24} height={24} /></a>
113
- <a href="https://instagram.com/namira.software.corporation?igshid=MzRlODBiNWFlZA==" target="_blank"><img src="https://static.namirasoft.com/image/concept/social/instagram/white.svg" alt="Communicate with Namirasoft Via Instagram" width={24} height={24} /></a>
114
- <a href="support@namirasoft.com" target="_blank"><img src="https://static.namirasoft.com/image/concept/social/email/white.svg" alt="Communicate with Namirasoft Via Email" width={24} height={24} /></a>
115
- <a href="https://www.google.com/maps/place//@49.2781041,-123.1354814,14z/data=!4m2!3m1!1s0x0:0x18f70365c7a2f0fa?entry=s&sa=X" target="_blank"><img src="https://static.namirasoft.com/image/concept/social/location/white.svg" alt="Communicate with Namirasoft in Person" width={24} height={24} /></a>
116
- </div>
117
- </div>
118
- </div>
119
- <div className={`${Styles.ns_footer_logos_mobile}`}>
120
- <div className="d-flex flex-column gap-4">
121
- <div className="d-flex flex-row gap-3">
122
- <a href="/"><img src="https://static.namirasoft.com/image/namirasoft/site/logo/circle.png" alt='Namira Software Corporation Logo' width={48} height={48} /></a>
123
- <a href="/"><img src="https://static.namirasoft.com/image/namirasoft/account/logo/circle.png" alt='Namira Software Corporation Logo' width={48} height={48} /></a>
124
- </div>
125
- <div className="d-flex flex-row gap-1 w-100 justify-content-center align-items-center">
126
- <a href="https://ca.linkedin.com/company/namira-software-corporation" target="_blank" ><img src="https://static.namirasoft.com/image/concept/social/linkedin/white.svg" alt="Communicate with Namirasoft Via LinkedIn" width={24} height={24} /></a>
127
- <a href="https://instagram.com/namira.software.corporation?igshid=MzRlODBiNWFlZA==" target="_blank"><img src="https://static.namirasoft.com/image/concept/social/instagram/white.svg" alt="Communicate with Namirasoft Via Instagram" width={24} height={24} /></a>
128
- <a href="support@namirasoft.com" target="_blank"><img src="https://static.namirasoft.com/image/concept/social/email/white.svg" alt="Communicate with Namirasoft Via Email" width={24} height={24} /></a>
129
- <a href="https://www.google.com/maps/place//@49.2781041,-123.1354814,14z/data=!4m2!3m1!1s0x0:0x18f70365c7a2f0fa?entry=s&sa=X" target="_blank"><img src="https://static.namirasoft.com/image/concept/social/location/white.svg" alt="Communicate with Namirasoft in Person" width={24} height={24} /></a>
130
- </div>
131
- </div>
132
- </div>
133
- <div className={`${Styles.ns_footer_copyright}`}>
134
- <span> ©Copyright 2010 - {new Date().getFullYear()} </span>{" "}
135
- <a href="https://namirasoft.com/" target="_blank" rel="noopener noreferrer"> Namira Software Corporation</a>. {" "}
136
- <span > All rights reserved. </span>
137
- </div>
138
- </div>
139
- </footer >
140
- );
141
- }
142
- private render_menu(level: number, parent_id: number | null)
143
- {
144
- let fs: FilterLinkFullRow[] = this.getFilters().filter(f => f.parent_id === parent_id);
145
- return (
146
- <>
147
- {
148
- (fs?.map(f => this.render_menuItem(level, f)))
149
- }
150
- </>
151
- );
152
- }
153
- private render_menuItem(level: number, filter: FilterLinkFullRow)
154
- {
155
- if (this.hasChild(filter.id))
156
- {
157
- return (
158
- <ul key={filter.id}
159
- id={`dropdown_parent${filter.id}`}>
160
- <span className={Styles.ns_footer_list_title}> {filter.name} </span>
161
- {this.render_menu(1, filter.id)}
162
- </ul>
163
- );
164
- }
165
- else if (level === 0)
166
- {
167
- return (
168
- <ul
169
- key={filter.id}
170
- id={`dropdown_parent${filter.id}`}>
171
- {filter.name}
172
- </ul>
173
- );
174
- }
175
- else
176
- {
177
- let href = filter.link?.url;
178
- if (process.env.REACT_APP_STANDALONE)
179
- if (href)
180
- {
181
- let url = new URL(href);
182
- url.host = window.location.host;
183
- url.protocol = window.location.protocol;
184
- href = url.toString();
185
- }
186
- return (
187
- <li key={filter.id} className="mb-2">
188
- <a href={href}>
189
- {filter.name}
190
- </a>
191
- </li>
192
- );
193
- }
194
- }
1
+ "use client";
2
+
3
+ import React from "react";
4
+ import Styles from "./NSFooter.module.css";
5
+ import { NamirasoftAPILinkServer, FilterLinkFullRow } from 'namirasoft-api-link';
6
+ import { IBaseComponentProps } from "../props/IBaseComponentProps";
7
+ import { IStorageLocal, CacheService } from "namirasoft-core";
8
+
9
+ export interface INSFooterProps extends IBaseComponentProps
10
+ {
11
+ scope: string;
12
+ name: string;
13
+ logo: string;
14
+ isLoggedIn: () => boolean;
15
+ }
16
+
17
+ export interface NSFooterState
18
+ {
19
+ filters: FilterLinkFullRow[];
20
+ selected: FilterLinkFullRow | null;
21
+ }
22
+
23
+ export class NSFooter extends React.Component<INSFooterProps, NSFooterState>
24
+ {
25
+ private cache: CacheService<{
26
+ rows: FilterLinkFullRow[];
27
+ count: number;
28
+ }>;
29
+ constructor(props: INSFooterProps)
30
+ {
31
+ super(props);
32
+ this.state = {
33
+ filters: [],
34
+ selected: null
35
+ };
36
+ this.hasChild = this.hasChild.bind(this);
37
+ this.render_menu = this.render_menu.bind(this);
38
+ this.render_menuItem = this.render_menuItem.bind(this);
39
+ this.cache = new CacheService<{
40
+ rows: FilterLinkFullRow[];
41
+ count: number;
42
+ }>("ns-footer", 720, new IStorageLocal(), async () =>
43
+ {
44
+ let server = new NamirasoftAPILinkServer(console.error);
45
+ return server.filter.ListFilterLinks(this.props.scope, this.props.name, null, null, null);
46
+ }, () => { });
47
+ }
48
+ override componentDidMount(): void
49
+ {
50
+ this.cache.get().then(filters =>
51
+ {
52
+ this.setState({ filters: filters.rows });
53
+ }).catch(() => { });
54
+ }
55
+ private getFilters(): FilterLinkFullRow[]
56
+ {
57
+ let loggedin = this.props.isLoggedIn();
58
+ let ans = this.state.filters?.filter(f =>
59
+ {
60
+ if (f.link)
61
+ {
62
+ if (loggedin)
63
+ return f.link.private;
64
+ return f.link.public;
65
+ }
66
+ return true;
67
+ }) ?? [];
68
+
69
+ while (true)
70
+ {
71
+ let old_length = ans.length;
72
+ ans = ans.filter(f =>
73
+ {
74
+ if (f.link?.url)
75
+ return true;
76
+ return ans.filter(x => x.parent_id == f.id).length > 0;
77
+ });
78
+ let new_length = ans.length;
79
+ if (old_length == new_length)
80
+ break;
81
+ }
82
+
83
+ return ans;
84
+ }
85
+ private hasChild(id: number): boolean
86
+ {
87
+ return this.getFilters().filter(f => f.parent_id === id).length > 0;
88
+ }
89
+ override render()
90
+ {
91
+ return (
92
+ <footer id={this.props.id}
93
+ className={`${Styles.ns_footer} ${this.props.classList?.join(" ")}`}
94
+ style={this.props.style}
95
+ >
96
+ <div className={`container ${Styles.ns_package_footer}`}>
97
+ <div className={`${Styles.ns_footer_parent_items}`}>
98
+ <div className={`${Styles.ns_footer_project_logo_tablet}`}>
99
+ <a href="/">
100
+ <img src={this.props.logo} alt='Logo' width={80} height={80} />
101
+ </a>
102
+ </div>
103
+ <div className={`${Styles.ns_footer_menu_container}`}>
104
+ {this.render_menu(0, null)}
105
+ </div>
106
+ <div className={`${Styles.ns_footer_namira_logo_tablet}`}>
107
+ <div className="d-flex flex-row gap-3">
108
+ <a href="/"><img src="https://static.namirasoft.com/image/namirasoft/site/logo/circle.png" alt='Namira Software Corporation Logo' width={48} height={48} /></a>
109
+ <a href="/"><img src="https://static.namirasoft.com/image/namirasoft/account/logo/circle.png" alt='Namira Software Corporation Logo' width={48} height={48} /></a>
110
+ </div>
111
+ <div className="d-flex flex-row gap-1 w-100 justify-content-center align-items-center">
112
+ <a style={{ cursor: "pointer" }} href="https://ca.linkedin.com/company/namira-software-corporation" target="_blank"><img src="https://static.namirasoft.com/image/concept/social/linkedin/white.svg" alt="Communicate with Namirasoft Via LinkedIn" width={24} height={24} /></a>
113
+ <a href="https://instagram.com/namira.software.corporation?igshid=MzRlODBiNWFlZA==" target="_blank"><img src="https://static.namirasoft.com/image/concept/social/instagram/white.svg" alt="Communicate with Namirasoft Via Instagram" width={24} height={24} /></a>
114
+ <a href="support@namirasoft.com" target="_blank"><img src="https://static.namirasoft.com/image/concept/social/email/white.svg" alt="Communicate with Namirasoft Via Email" width={24} height={24} /></a>
115
+ <a href="https://www.google.com/maps/place//@49.2781041,-123.1354814,14z/data=!4m2!3m1!1s0x0:0x18f70365c7a2f0fa?entry=s&sa=X" target="_blank"><img src="https://static.namirasoft.com/image/concept/social/location/white.svg" alt="Communicate with Namirasoft in Person" width={24} height={24} /></a>
116
+ </div>
117
+ </div>
118
+ </div>
119
+ <div className={`${Styles.ns_footer_logos_mobile}`}>
120
+ <div className="d-flex flex-column gap-4">
121
+ <div className="d-flex flex-row gap-3">
122
+ <a href="/"><img src="https://static.namirasoft.com/image/namirasoft/site/logo/circle.png" alt='Namira Software Corporation Logo' width={48} height={48} /></a>
123
+ <a href="/"><img src="https://static.namirasoft.com/image/namirasoft/account/logo/circle.png" alt='Namira Software Corporation Logo' width={48} height={48} /></a>
124
+ </div>
125
+ <div className="d-flex flex-row gap-1 w-100 justify-content-center align-items-center">
126
+ <a href="https://ca.linkedin.com/company/namira-software-corporation" target="_blank" ><img src="https://static.namirasoft.com/image/concept/social/linkedin/white.svg" alt="Communicate with Namirasoft Via LinkedIn" width={24} height={24} /></a>
127
+ <a href="https://instagram.com/namira.software.corporation?igshid=MzRlODBiNWFlZA==" target="_blank"><img src="https://static.namirasoft.com/image/concept/social/instagram/white.svg" alt="Communicate with Namirasoft Via Instagram" width={24} height={24} /></a>
128
+ <a href="support@namirasoft.com" target="_blank"><img src="https://static.namirasoft.com/image/concept/social/email/white.svg" alt="Communicate with Namirasoft Via Email" width={24} height={24} /></a>
129
+ <a href="https://www.google.com/maps/place//@49.2781041,-123.1354814,14z/data=!4m2!3m1!1s0x0:0x18f70365c7a2f0fa?entry=s&sa=X" target="_blank"><img src="https://static.namirasoft.com/image/concept/social/location/white.svg" alt="Communicate with Namirasoft in Person" width={24} height={24} /></a>
130
+ </div>
131
+ </div>
132
+ </div>
133
+ <div className={`${Styles.ns_footer_copyright}`}>
134
+ <span> ©Copyright 2010 - {new Date().getFullYear()} </span>{" "}
135
+ <a href="https://namirasoft.com/" target="_blank" rel="noopener noreferrer"> Namira Software Corporation</a>. {" "}
136
+ <span > All rights reserved. </span>
137
+ </div>
138
+ </div>
139
+ </footer >
140
+ );
141
+ }
142
+ private render_menu(level: number, parent_id: number | null)
143
+ {
144
+ let fs: FilterLinkFullRow[] = this.getFilters().filter(f => f.parent_id === parent_id);
145
+ return (
146
+ <>
147
+ {
148
+ (fs?.map(f => this.render_menuItem(level, f)))
149
+ }
150
+ </>
151
+ );
152
+ }
153
+ private render_menuItem(level: number, filter: FilterLinkFullRow)
154
+ {
155
+ if (this.hasChild(filter.id))
156
+ {
157
+ return (
158
+ <ul key={filter.id}
159
+ id={`dropdown_parent${filter.id}`}>
160
+ <span className={Styles.ns_footer_list_title}> {filter.name} </span>
161
+ {this.render_menu(1, filter.id)}
162
+ </ul>
163
+ );
164
+ }
165
+ else if (level === 0)
166
+ {
167
+ return (
168
+ <ul
169
+ key={filter.id}
170
+ id={`dropdown_parent${filter.id}`}>
171
+ {filter.name}
172
+ </ul>
173
+ );
174
+ }
175
+ else
176
+ {
177
+ let href = filter.link?.url;
178
+ if (process.env.REACT_APP_STANDALONE)
179
+ if (href)
180
+ {
181
+ let url = new URL(href);
182
+ url.host = window.location.host;
183
+ url.protocol = window.location.protocol;
184
+ href = url.toString();
185
+ }
186
+ return (
187
+ <li key={filter.id} className="mb-2">
188
+ <a href={href}>
189
+ {filter.name}
190
+ </a>
191
+ </li>
192
+ );
193
+ }
194
+ }
195
195
  }
@@ -1,73 +1,73 @@
1
- .ns_group_list_parent {
2
- width: 100%;
3
- max-width: 560px;
4
- border-radius: 8px;
5
- border: solid 1px #B2BBD9;
6
- background-color: #fff;
7
- padding-bottom: 16px;
8
- height: 360px;
9
- overflow: auto;
10
- position: absolute;
11
- z-index: 10;
12
- margin-top: 50px;
13
- }
14
-
15
- .ns_group_list_parent::-webkit-scrollbar {
16
- width: 1rem;
17
- }
18
-
19
- .ns_group_list_parent::-webkit-scrollbar-track {
20
- box-shadow: inset 0 0 6px #E8EBF6;
21
- }
22
-
23
- .ns_group_list_parent::-webkit-scrollbar-thumb {
24
- background-color: #A1A4B0;
25
- border-radius: 8px;
26
- }
27
-
28
- .ns_group_list {
29
- list-style-type: none;
30
- color: #141B5C;
31
- padding: 0;
32
- margin: 0;
33
- display: flex;
34
- flex-direction: column;
35
- align-items: flex-start;
36
- justify-content: flex-start;
37
- font-size: 16px;
38
- font-weight: 700;
39
- width: 100%;
40
- }
41
-
42
- .ns_group_category {
43
- border-bottom: solid 1px currentColor;
44
- width: 100%;
45
- display: flex;
46
- justify-content: space-between;
47
- padding: 10px 8px;
48
- }
49
-
50
- .ns_group_list li {
51
- width: 100%;
52
- }
53
-
54
- .ns_group_item {
55
- cursor: pointer;
56
- padding: 6px 0 6px 24px;
57
- font-size: 16px;
58
- font-weight: 300;
59
- color: #141B5C;
60
- border-bottom: solid 1px currentColor;
61
- width: 100%;
62
- display: inline-block;
63
- transition: all 0.1s;
64
- }
65
-
66
- .ns_group_item:hover {
67
- background-color: #B2BBD9;
68
- font-weight: 700;
69
- }
70
-
71
- .ns_block {
72
- display: block;
1
+ .ns_group_list_parent {
2
+ width: 100%;
3
+ max-width: 560px;
4
+ border-radius: 8px;
5
+ border: solid 1px #B2BBD9;
6
+ background-color: #fff;
7
+ padding-bottom: 16px;
8
+ height: 360px;
9
+ overflow: auto;
10
+ position: absolute;
11
+ z-index: 10;
12
+ margin-top: 50px;
13
+ }
14
+
15
+ .ns_group_list_parent::-webkit-scrollbar {
16
+ width: 1rem;
17
+ }
18
+
19
+ .ns_group_list_parent::-webkit-scrollbar-track {
20
+ box-shadow: inset 0 0 6px #E8EBF6;
21
+ }
22
+
23
+ .ns_group_list_parent::-webkit-scrollbar-thumb {
24
+ background-color: #A1A4B0;
25
+ border-radius: 8px;
26
+ }
27
+
28
+ .ns_group_list {
29
+ list-style-type: none;
30
+ color: #141B5C;
31
+ padding: 0;
32
+ margin: 0;
33
+ display: flex;
34
+ flex-direction: column;
35
+ align-items: flex-start;
36
+ justify-content: flex-start;
37
+ font-size: 16px;
38
+ font-weight: 700;
39
+ width: 100%;
40
+ }
41
+
42
+ .ns_group_category {
43
+ border-bottom: solid 1px currentColor;
44
+ width: 100%;
45
+ display: flex;
46
+ justify-content: space-between;
47
+ padding: 10px 8px;
48
+ }
49
+
50
+ .ns_group_list li {
51
+ width: 100%;
52
+ }
53
+
54
+ .ns_group_item {
55
+ cursor: pointer;
56
+ padding: 6px 0 6px 24px;
57
+ font-size: 16px;
58
+ font-weight: 300;
59
+ color: #141B5C;
60
+ border-bottom: solid 1px currentColor;
61
+ width: 100%;
62
+ display: inline-block;
63
+ transition: all 0.1s;
64
+ }
65
+
66
+ .ns_group_item:hover {
67
+ background-color: #B2BBD9;
68
+ font-weight: 700;
69
+ }
70
+
71
+ .ns_block {
72
+ display: block;
73
73
  }