namirasoft-site-react 1.2.39 → 1.2.40

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 (178) hide show
  1. package/.gitlab-ci.yml +14 -14
  2. package/config-overrides.js +65 -65
  3. package/dist/App.css +0 -0
  4. package/dist/App.js +1 -1
  5. package/dist/App.js.map +1 -1
  6. package/dist/assets/images/arrow.svg +3 -3
  7. package/dist/assets/images/background.svg +9 -0
  8. package/dist/assets/images/danger.svg +3 -3
  9. package/dist/assets/images/exit.svg +3 -3
  10. package/dist/assets/images/icon-input-date.svg +9 -9
  11. package/dist/assets/images/icon-input-duration.svg +9 -9
  12. package/dist/assets/images/icon-input-email.svg +9 -9
  13. package/dist/assets/images/icon-input-float.svg +9 -9
  14. package/dist/assets/images/icon-input-id.svg +9 -9
  15. package/dist/assets/images/icon-input-integer.svg +9 -9
  16. package/dist/assets/images/icon-input-phone.svg +9 -9
  17. package/dist/assets/images/icon-input-price.svg +9 -9
  18. package/dist/assets/images/icon-input-search.svg +4 -4
  19. package/dist/assets/images/icon-input-string.svg +9 -9
  20. package/dist/assets/images/icon-input-text.svg +9 -9
  21. package/dist/assets/images/icon-input-time.svg +9 -9
  22. package/dist/assets/images/left-vector.png +0 -0
  23. package/dist/assets/images/left_vector.png +0 -0
  24. package/dist/assets/images/logo.svg +9 -9
  25. package/dist/assets/images/menu.svg +3 -3
  26. package/dist/assets/images/namira.svg +9 -9
  27. package/dist/assets/images/rectangle.svg +3 -3
  28. package/dist/assets/images/right-vector.png +0 -0
  29. package/dist/assets/images/right_vector.png +0 -0
  30. package/dist/components/NSButtonGreen.js +1 -1
  31. package/dist/components/NSButtonGreen.js.map +1 -1
  32. package/dist/components/NSButtonRed.js +1 -1
  33. package/dist/components/NSButtonRed.js.map +1 -1
  34. package/dist/components/NSCard.js +2 -2
  35. package/dist/components/NSCard.js.map +1 -1
  36. package/dist/components/NSFooter.js +4 -4
  37. package/dist/components/NSFooter.js.map +1 -1
  38. package/dist/components/NSHeader.d.ts +1 -1
  39. package/dist/components/NSHeader.js +48 -43
  40. package/dist/components/NSHeader.js.map +1 -1
  41. package/dist/components/NSInputDate.js +1 -1
  42. package/dist/components/NSInputDate.js.map +1 -1
  43. package/dist/components/NSInputDuration.js +1 -1
  44. package/dist/components/NSInputDuration.js.map +1 -1
  45. package/dist/components/NSInputEmail.js +1 -1
  46. package/dist/components/NSInputEmail.js.map +1 -1
  47. package/dist/components/NSInputEmail.module.css +37 -37
  48. package/dist/components/NSInputFloat.js +1 -1
  49. package/dist/components/NSInputFloat.js.map +1 -1
  50. package/dist/components/NSInputFloat.module.css +25 -25
  51. package/dist/components/NSInputIP.js +1 -1
  52. package/dist/components/NSInputIP.js.map +1 -1
  53. package/dist/components/NSInputIP.module.css +25 -25
  54. package/dist/components/NSInputInteger.js +1 -1
  55. package/dist/components/NSInputInteger.js.map +1 -1
  56. package/dist/components/NSInputInteger.module.css +25 -25
  57. package/dist/components/NSInputPhone.js +1 -1
  58. package/dist/components/NSInputPhone.js.map +1 -1
  59. package/dist/components/NSInputPhone.module.css +32 -32
  60. package/dist/components/NSInputPrice.js +1 -1
  61. package/dist/components/NSInputPrice.js.map +1 -1
  62. package/dist/components/NSInputPrice.module.css +26 -26
  63. package/dist/components/NSInputSearch.js +1 -1
  64. package/dist/components/NSInputSearch.js.map +1 -1
  65. package/dist/components/NSInputSearch.module.css +25 -25
  66. package/dist/components/NSInputString.js +1 -1
  67. package/dist/components/NSInputString.js.map +1 -1
  68. package/dist/components/NSInputString.module.css +26 -26
  69. package/dist/components/NSInputText.js +1 -1
  70. package/dist/components/NSInputText.js.map +1 -1
  71. package/dist/components/NSInputText.module.css +27 -27
  72. package/dist/components/NSInputTime.js +1 -1
  73. package/dist/components/NSInputTime.js.map +1 -1
  74. package/dist/components/NSInputTime.module.css +26 -26
  75. package/dist/components/NSLayout.js +1 -1
  76. package/dist/components/NSLayout.js.map +1 -1
  77. package/dist/components/NSLayout.module.css +16 -16
  78. package/dist/components/NSLayoutHeroBanner.js +1 -1
  79. package/dist/components/NSLayoutHeroBanner.js.map +1 -1
  80. package/dist/components/NSLayoutHeroBanner.module.css +43 -43
  81. package/dist/components/NSLayoutTitle.js +1 -1
  82. package/dist/components/NSLayoutTitle.js.map +1 -1
  83. package/dist/components/NSLinkGreen.js +1 -1
  84. package/dist/components/NSLinkGreen.js.map +1 -1
  85. package/dist/components/NSLinkGreen.module.css +15 -15
  86. package/dist/components/NSLinkRed.js +1 -1
  87. package/dist/components/NSLinkRed.js.map +1 -1
  88. package/dist/components/NSLinkRed.module.css +15 -15
  89. package/dist/components/NSPagination.js +7 -7
  90. package/dist/components/NSPagination.js.map +1 -1
  91. package/dist/components/NSPagination.module.css +24 -24
  92. package/dist/components/NSParentCard.d.ts +0 -0
  93. package/dist/components/NSParentCard.js +2 -0
  94. package/dist/components/NSParentCard.js.map +1 -0
  95. package/dist/components/NSParentCard.module.css +34 -34
  96. package/dist/components/NSSelectBox.js +1 -1
  97. package/dist/components/NSSelectBox.js.map +1 -1
  98. package/dist/components/NSSelectBox.module.css +28 -28
  99. package/dist/components/NSTable.js +1 -1
  100. package/dist/components/NSTable.js.map +1 -1
  101. package/dist/components/NSTable.modules.css +76 -76
  102. package/dist/index.css +6 -0
  103. package/dist/main.js.map +1 -1
  104. package/dist/pages/NSLoginPage.js +1 -1
  105. package/dist/pages/NSLoginPage.js.map +1 -1
  106. package/package.json +52 -52
  107. package/public/index.html +42 -42
  108. package/public/manifest.json +25 -25
  109. package/public/robots.txt +3 -3
  110. package/src/App.tsx +70 -70
  111. package/src/assets/images/arrow.svg +3 -3
  112. package/src/assets/images/danger.svg +3 -3
  113. package/src/assets/images/exit.svg +3 -3
  114. package/src/assets/images/icon-input-date.svg +9 -9
  115. package/src/assets/images/icon-input-duration.svg +9 -9
  116. package/src/assets/images/icon-input-email.svg +9 -9
  117. package/src/assets/images/icon-input-float.svg +9 -9
  118. package/src/assets/images/icon-input-id.svg +9 -9
  119. package/src/assets/images/icon-input-integer.svg +9 -9
  120. package/src/assets/images/icon-input-phone.svg +9 -9
  121. package/src/assets/images/icon-input-price.svg +9 -9
  122. package/src/assets/images/icon-input-search.svg +4 -4
  123. package/src/assets/images/icon-input-string.svg +9 -9
  124. package/src/assets/images/icon-input-text.svg +9 -9
  125. package/src/assets/images/icon-input-time.svg +9 -9
  126. package/src/assets/images/logo.svg +9 -9
  127. package/src/assets/images/menu.svg +3 -3
  128. package/src/assets/images/namira.svg +9 -9
  129. package/src/assets/images/rectangle.svg +3 -3
  130. package/src/components/NSButtonGreen.tsx +33 -33
  131. package/src/components/NSButtonRed.tsx +33 -33
  132. package/src/components/NSCard.tsx +54 -54
  133. package/src/components/NSFooter.tsx +123 -123
  134. package/src/components/NSHeader.tsx +122 -130
  135. package/src/components/NSInputDate.tsx +57 -57
  136. package/src/components/NSInputDuration.tsx +65 -65
  137. package/src/components/NSInputEmail.module.css +37 -37
  138. package/src/components/NSInputEmail.tsx +92 -92
  139. package/src/components/NSInputFloat.module.css +25 -25
  140. package/src/components/NSInputFloat.tsx +61 -61
  141. package/src/components/NSInputIP.module.css +25 -25
  142. package/src/components/NSInputIP.tsx +65 -65
  143. package/src/components/NSInputInteger.module.css +25 -25
  144. package/src/components/NSInputInteger.tsx +65 -65
  145. package/src/components/NSInputPhone.module.css +32 -32
  146. package/src/components/NSInputPhone.tsx +65 -65
  147. package/src/components/NSInputPrice.module.css +26 -26
  148. package/src/components/NSInputPrice.tsx +68 -68
  149. package/src/components/NSInputSearch.module.css +25 -25
  150. package/src/components/NSInputSearch.tsx +78 -78
  151. package/src/components/NSInputString.module.css +26 -26
  152. package/src/components/NSInputString.tsx +66 -66
  153. package/src/components/NSInputText.module.css +27 -27
  154. package/src/components/NSInputText.tsx +69 -69
  155. package/src/components/NSInputTime.module.css +26 -26
  156. package/src/components/NSInputTime.tsx +65 -65
  157. package/src/components/NSLayout.module.css +16 -16
  158. package/src/components/NSLayout.tsx +31 -29
  159. package/src/components/NSLayoutHeroBanner.module.css +43 -43
  160. package/src/components/NSLayoutHeroBanner.tsx +85 -85
  161. package/src/components/NSLayoutTitle.tsx +25 -25
  162. package/src/components/NSLinkGreen.module.css +15 -15
  163. package/src/components/NSLinkGreen.tsx +43 -43
  164. package/src/components/NSLinkRed.module.css +15 -15
  165. package/src/components/NSLinkRed.tsx +43 -43
  166. package/src/components/NSPagination.module.css +24 -24
  167. package/src/components/NSPagination.tsx +54 -54
  168. package/src/components/NSParentCard.module.css +34 -34
  169. package/src/components/NSParentCard.tsx.temp +58 -58
  170. package/src/components/NSSelectBox.module.css +28 -28
  171. package/src/components/NSSelectBox.tsx +62 -62
  172. package/src/components/NSTable.modules.css +76 -76
  173. package/src/components/NSTable.tsx +64 -64
  174. package/src/index.tsx +7 -7
  175. package/src/main.ts +25 -26
  176. package/src/pages/NSLoginPage.tsx +39 -39
  177. package/src/react-app-env.d.ts +1 -1
  178. package/tsconfig.json +37 -37
@@ -1,3 +1,3 @@
1
- <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <rect x="1" y="1" width="18" height="18" rx="3" fill="white" stroke="#848484" stroke-width="2"/>
3
- </svg>
1
+ <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="1" y="1" width="18" height="18" rx="3" fill="white" stroke="#848484" stroke-width="2"/>
3
+ </svg>
@@ -1,34 +1,34 @@
1
- "use client";
2
-
3
- import React from "react";
4
- import Style from "./NSButtonGreen.module.css";
5
-
6
- interface IProps
7
- {
8
- title: string;
9
- onClick: (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
10
- }
11
-
12
- interface IState
13
- {
14
- title: string;
15
- }
16
-
17
- interface IState { }
18
-
19
- export class NSButtonGreen extends React.Component<IProps, IState>
20
- {
21
- constructor(props: IProps)
22
- {
23
- super(props);
24
- this.state = { title: props.title };
25
- }
26
- setTitle(title: string)
27
- {
28
- this.setState({ title });
29
- }
30
- override render()
31
- {
32
- return <button onClick={e => this.props.onClick(e)} className={Style.ns_button_green}>{this.state.title}</button>;
33
- }
1
+ "use client";
2
+
3
+ import React from "react";
4
+ import Style from "./NSButtonGreen.module.css";
5
+
6
+ interface IProps
7
+ {
8
+ title: string;
9
+ onClick: (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
10
+ }
11
+
12
+ interface IState
13
+ {
14
+ title: string;
15
+ }
16
+
17
+ interface IState { }
18
+
19
+ export class NSButtonGreen extends React.Component<IProps, IState>
20
+ {
21
+ constructor(props: IProps)
22
+ {
23
+ super(props);
24
+ this.state = { title: props.title };
25
+ }
26
+ setTitle(title: string)
27
+ {
28
+ this.setState({ title });
29
+ }
30
+ override render()
31
+ {
32
+ return <button onClick={e => this.props.onClick(e)} className={Style.ns_button_green}>{this.state.title}</button>;
33
+ }
34
34
  }
@@ -1,34 +1,34 @@
1
- "use client";
2
-
3
- import React from "react";
4
- import Style from "./NSButtonRed.module.css";
5
-
6
- interface IProps
7
- {
8
- title: string;
9
- onClick: (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
10
- }
11
-
12
- interface IState
13
- {
14
- title: string;
15
- }
16
-
17
- interface IState { }
18
-
19
- export class NSButtonRed extends React.Component<IProps, IState>
20
- {
21
- constructor(props: IProps)
22
- {
23
- super(props);
24
- this.state = { title: props.title };
25
- }
26
- setTitle(title: string)
27
- {
28
- this.setState({ title });
29
- }
30
- override render()
31
- {
32
- return <button onClick={e => this.props.onClick(e)} className={Style.ns_button_red}>{this.state.title}</button>;
33
- }
1
+ "use client";
2
+
3
+ import React from "react";
4
+ import Style from "./NSButtonRed.module.css";
5
+
6
+ interface IProps
7
+ {
8
+ title: string;
9
+ onClick: (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
10
+ }
11
+
12
+ interface IState
13
+ {
14
+ title: string;
15
+ }
16
+
17
+ interface IState { }
18
+
19
+ export class NSButtonRed extends React.Component<IProps, IState>
20
+ {
21
+ constructor(props: IProps)
22
+ {
23
+ super(props);
24
+ this.state = { title: props.title };
25
+ }
26
+ setTitle(title: string)
27
+ {
28
+ this.setState({ title });
29
+ }
30
+ override render()
31
+ {
32
+ return <button onClick={e => this.props.onClick(e)} className={Style.ns_button_red}>{this.state.title}</button>;
33
+ }
34
34
  }
@@ -1,55 +1,55 @@
1
- "use client";
2
-
3
- import { Component } from 'react';
4
-
5
- import Styles from './NSCard.module.css'
6
-
7
- interface IProps
8
- {
9
- title: string;
10
- description?: string;
11
- image: {
12
- src: string;
13
- alt: string;
14
- };
15
- link?:
16
- {
17
- text: string;
18
- href: string;
19
- target?: string;
20
- }
21
- }
22
-
23
- interface IStart
24
- { }
25
-
26
- export class NSCard extends Component<IProps, IStart> {
27
- override render()
28
- {
29
- const { title, image, description, link } = this.props;
30
- return (
31
- <>
32
- <article className={Styles.ns_card}>
33
- <div className={Styles.ns_card_detail_container}>
34
- <div className={Styles.ns_card_title_img}>
35
- <h3 className={Styles.card_title}>
36
- {title}
37
- </h3>
38
- <img className={Styles.card_img} src={image.src} alt={image.alt} />
39
- </div>
40
- <p className={Styles.card_description}>
41
- {description}
42
- </p>
43
- </div>
44
- {link &&
45
- <div >
46
- <a className={Styles.ns_card_link} href={link.href} target={link.target ?? "_self"} >
47
- {link.text}
48
- </a>
49
- </div>
50
- }
51
- </article >
52
- </>
53
- );
54
- }
1
+ "use client";
2
+
3
+ import { Component } from 'react';
4
+
5
+ import Styles from './NSCard.module.css'
6
+
7
+ interface IProps
8
+ {
9
+ title: string;
10
+ description?: string;
11
+ image: {
12
+ src: string;
13
+ alt: string;
14
+ };
15
+ link?:
16
+ {
17
+ text: string;
18
+ href: string;
19
+ target?: string;
20
+ }
21
+ }
22
+
23
+ interface IStart
24
+ { }
25
+
26
+ export class NSCard extends Component<IProps, IStart> {
27
+ override render()
28
+ {
29
+ const { title, image, description, link } = this.props;
30
+ return (
31
+ <>
32
+ <article className={Styles.ns_card}>
33
+ <div className={Styles.ns_card_detail_container}>
34
+ <div className={Styles.ns_card_title_img}>
35
+ <h3 className={Styles.card_title}>
36
+ {title}
37
+ </h3>
38
+ <img className={Styles.card_img} src={image.src} alt={image.alt} />
39
+ </div>
40
+ <p className={Styles.card_description}>
41
+ {description}
42
+ </p>
43
+ </div>
44
+ {link &&
45
+ <div >
46
+ <a className={Styles.ns_card_link} href={link.href} target={link.target ?? "_self"} >
47
+ {link.text}
48
+ </a>
49
+ </div>
50
+ }
51
+ </article >
52
+ </>
53
+ );
54
+ }
55
55
  }
@@ -1,124 +1,124 @@
1
- "use client";
2
-
3
- import React from "react";
4
- import Styles from "./NSFooter.module.css";
5
- import { NamirasoftAPILinkServer, FilterLinkRow } from 'namirasoft-api-link';
6
-
7
- interface IProps
8
- {
9
- scope: string;
10
- name: string;
11
- logo: string;
12
- }
13
-
14
- interface IState
15
- {
16
- filters: FilterLinkRow[];
17
- selected: FilterLinkRow | null;
18
- }
19
-
20
- export class NSFooter extends React.Component<IProps, IState>
21
- {
22
- constructor(props: IProps)
23
- {
24
- super(props);
25
- this.state = {
26
- filters: [],
27
- selected: null
28
- };
29
- this.hasChild = this.hasChild.bind(this);
30
- this.render_menu = this.render_menu.bind(this);
31
- this.render_menuItem = this.render_menuItem.bind(this);
32
- }
33
- override componentDidMount(): void
34
- {
35
- let server = new NamirasoftAPILinkServer(console.error);
36
- server.filter.GetFilters(this.props.scope, this.props.name).then(filters =>
37
- {
38
- this.setState({ filters });
39
- });
40
- }
41
- private hasChild(id: number): boolean
42
- {
43
- return this.state.filters.filter(f => f.parent_id === id).length > 0;
44
- }
45
- override render()
46
- {
47
- return (
48
- <div className={Styles.ns_footer}>
49
- <div className={`container ${Styles.ns_package_footer}`}>
50
- <div className={`${Styles.ns_footer_parent_items}`}>
51
- <div className={`${Styles.ns_footer_project_logo_tablet}`}>
52
- <a href="/">
53
- <img src={this.props.logo} alt='Logo' width={80} height={80} />
54
- </a>
55
- </div>
56
- <div className={`${Styles.ns_footer_menu_container}`}>
57
- {this.render_menu(0, null)}
58
- </div>
59
- <div className={`${Styles.ns_footer_namira_logo_tablet}`}>
60
- <a href="/">
61
- <img src="https://static.namirasoft.com/logo/namirasoft/name.png" alt='Namira Software Corporation Logo' width={80} height={80} />
62
- </a>
63
- </div>
64
- </div>
65
- <div className={`${Styles.ns_footer_logos_mobile}`}>
66
- <div>
67
- <a href="/">
68
- <img src={this.props.logo} alt='Logo' width={80} height={80} />
69
- </a>
70
- </div>
71
- <div>
72
- <a href="/">
73
- <img src="https://static.namirasoft.com/logo/namirasoft/name.png" alt='Namira Software Corporation Logo' width={80} height={80} />
74
- </a>
75
- </div>
76
- </div>
77
- <div className={`${Styles.ns_footer_copyright}`}>
78
- <span> ©Copyright 2010 - {new Date().getFullYear()} </span>
79
- <a href="https://namirasoft.com/" target="_blank" rel="noopener noreferrer"> Namira Software Corporation</a>. All rights reserved.
80
- </div>
81
- </div>
82
- </div>
83
- );
84
- }
85
- private render_menu(level: number, parent_id: number | null)
86
- {
87
- let fs: FilterLinkRow[] = this.state.filters?.filter(f => f.parent_id === parent_id);
88
- return (
89
- <>
90
- {(fs?.map(f => this.render_menuItem(level, f)))}
91
- </>
92
- );
93
- }
94
- private render_menuItem(level: number, filter: FilterLinkRow)
95
- {
96
- if (this.hasChild(filter.id))
97
- {
98
- return (<>
99
- <ul
100
- id={`dropdown_parent${filter.id}`}>
101
- {filter.name}
102
- {this.render_menu(1, filter.id)}
103
- </ul>
104
- </>
105
- );
106
- }
107
- else if (level === 0)
108
- {
109
- return (<>
110
- <ul
111
- id={`dropdown_parent${filter.id}`}>
112
- {filter.name}
113
- </ul>
114
- </>
115
- );
116
- }
117
- else
118
- {
119
- return (
120
- <a href={filter.link?.url}><li className="mb-2">{filter.name}</li></a>
121
- );
122
- }
123
- }
1
+ "use client";
2
+
3
+ import React from "react";
4
+ import Styles from "./NSFooter.module.css";
5
+ import { NamirasoftAPILinkServer, FilterLinkRow } from 'namirasoft-api-link';
6
+
7
+ interface IProps
8
+ {
9
+ scope: string;
10
+ name: string;
11
+ logo: string;
12
+ }
13
+
14
+ interface IState
15
+ {
16
+ filters: FilterLinkRow[];
17
+ selected: FilterLinkRow | null;
18
+ }
19
+
20
+ export class NSFooter extends React.Component<IProps, IState>
21
+ {
22
+ constructor(props: IProps)
23
+ {
24
+ super(props);
25
+ this.state = {
26
+ filters: [],
27
+ selected: null
28
+ };
29
+ this.hasChild = this.hasChild.bind(this);
30
+ this.render_menu = this.render_menu.bind(this);
31
+ this.render_menuItem = this.render_menuItem.bind(this);
32
+ }
33
+ override componentDidMount(): void
34
+ {
35
+ let server = new NamirasoftAPILinkServer(console.error);
36
+ server.filter.GetFilters(this.props.scope, this.props.name).then(filters =>
37
+ {
38
+ this.setState({ filters });
39
+ });
40
+ }
41
+ private hasChild(id: number): boolean
42
+ {
43
+ return this.state.filters.filter(f => f.parent_id === id).length > 0;
44
+ }
45
+ override render()
46
+ {
47
+ return (
48
+ <div className={Styles.ns_footer}>
49
+ <div className={`container ${Styles.ns_package_footer}`}>
50
+ <div className={`${Styles.ns_footer_parent_items}`}>
51
+ <div className={`${Styles.ns_footer_project_logo_tablet}`}>
52
+ <a href="/">
53
+ <img src={this.props.logo} alt='Logo' width={80} height={80} />
54
+ </a>
55
+ </div>
56
+ <div className={`${Styles.ns_footer_menu_container}`}>
57
+ {this.render_menu(0, null)}
58
+ </div>
59
+ <div className={`${Styles.ns_footer_namira_logo_tablet}`}>
60
+ <a href="/">
61
+ <img src="https://static.namirasoft.com/logo/namirasoft/name.png" alt='Namira Software Corporation Logo' width={80} height={80} />
62
+ </a>
63
+ </div>
64
+ </div>
65
+ <div className={`${Styles.ns_footer_logos_mobile}`}>
66
+ <div>
67
+ <a href="/">
68
+ <img src={this.props.logo} alt='Logo' width={80} height={80} />
69
+ </a>
70
+ </div>
71
+ <div>
72
+ <a href="/">
73
+ <img src="https://static.namirasoft.com/logo/namirasoft/name.png" alt='Namira Software Corporation Logo' width={80} height={80} />
74
+ </a>
75
+ </div>
76
+ </div>
77
+ <div className={`${Styles.ns_footer_copyright}`}>
78
+ <span> ©Copyright 2010 - {new Date().getFullYear()} </span>
79
+ <a href="https://namirasoft.com/" target="_blank" rel="noopener noreferrer"> Namira Software Corporation</a>. All rights reserved.
80
+ </div>
81
+ </div>
82
+ </div>
83
+ );
84
+ }
85
+ private render_menu(level: number, parent_id: number | null)
86
+ {
87
+ let fs: FilterLinkRow[] = this.state.filters?.filter(f => f.parent_id === parent_id);
88
+ return (
89
+ <>
90
+ {(fs?.map(f => this.render_menuItem(level, f)))}
91
+ </>
92
+ );
93
+ }
94
+ private render_menuItem(level: number, filter: FilterLinkRow)
95
+ {
96
+ if (this.hasChild(filter.id))
97
+ {
98
+ return (<>
99
+ <ul
100
+ id={`dropdown_parent${filter.id}`}>
101
+ {filter.name}
102
+ {this.render_menu(1, filter.id)}
103
+ </ul>
104
+ </>
105
+ );
106
+ }
107
+ else if (level === 0)
108
+ {
109
+ return (<>
110
+ <ul
111
+ id={`dropdown_parent${filter.id}`}>
112
+ {filter.name}
113
+ </ul>
114
+ </>
115
+ );
116
+ }
117
+ else
118
+ {
119
+ return (
120
+ <a href={filter.link?.url}><li className="mb-2">{filter.name}</li></a>
121
+ );
122
+ }
123
+ }
124
124
  }