@visns-studio/visns-components 1.5.2 → 1.5.4

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.
@@ -65,7 +65,15 @@ const VisnsAutocomplete = (props) => {
65
65
  });
66
66
 
67
67
  const handleItemClicked = (place) => {
68
- setSearch(place.address + " " + place.text);
68
+ const address =
69
+ place.address !== undefined && place.address !== null
70
+ ? place.address
71
+ : "";
72
+ const text =
73
+ place.text !== undefined && place.text !== null ? place.text : "";
74
+
75
+ const search = address && text ? `${address} ${text}` : text;
76
+ setSearch(search);
69
77
  setResults([]);
70
78
  onSelect(place, field);
71
79
  };
@@ -269,22 +269,18 @@ function Form(props) {
269
269
 
270
270
  const autocompleteSelect = (place, id) => {
271
271
  const { address, text, context } = place;
272
- const address1 =
273
- address !== undefined && address ? address + " " + text : text;
274
- let address2 = "";
275
- let suburb = "";
276
- let postcode = "";
277
- let state = "";
278
- let country = "";
279
-
280
- if (context[1]) {
281
- suburb = context[1].text;
282
- }
283
272
 
284
- if (context[0]) {
285
- postcode = context[0].text;
286
- }
273
+ const address1 = address
274
+ ? text
275
+ ? `${address} ${text}`
276
+ : address
277
+ : text;
278
+ const address2 = "";
279
+ const suburb = context[1]?.text || "";
280
+ const postcode = context[0]?.text || "";
287
281
 
282
+ let state = "";
283
+ let country = "";
288
284
  if (context.length === 5) {
289
285
  [state, country] = [context[3]?.text, context[4]?.text];
290
286
  } else {
@@ -300,34 +296,19 @@ function Form(props) {
300
296
  country,
301
297
  };
302
298
 
303
- if (formData.same_address === true) {
304
- setFormData((prevState) => ({
305
- ...prevState,
306
- ...formDataUpdate,
307
- postal_address1: address1,
308
- postal_address2: address2,
309
- postal_suburb: suburb,
310
- postal_postcode: postcode,
311
- postal_state: state,
312
- postal_country: country,
313
- }));
314
- } else if (id === "address1") {
315
- setFormData((prevState) => ({
316
- ...prevState,
317
- ...formDataUpdate,
318
- }));
319
- } else {
320
- setFormData((prevState) => ({
321
- ...prevState,
322
- ...formDataUpdate,
323
- postal_address1: address1,
324
- postal_address2: address2,
325
- postal_suburb: suburb,
326
- postal_postcode: postcode,
327
- postal_state: state,
328
- postal_country: country,
329
- }));
299
+ if (formData.same_address === true || id !== "address1") {
300
+ formDataUpdate.postal_address1 = address1;
301
+ formDataUpdate.postal_address2 = address2;
302
+ formDataUpdate.postal_suburb = suburb;
303
+ formDataUpdate.postal_postcode = postcode;
304
+ formDataUpdate.postal_state = state;
305
+ formDataUpdate.postal_country = country;
330
306
  }
307
+
308
+ setFormData((prevState) => ({
309
+ ...prevState,
310
+ ...formDataUpdate,
311
+ }));
331
312
  };
332
313
 
333
314
  const handleSubmit = (e) => {
@@ -1,218 +1,231 @@
1
1
  import React, { useEffect, useState } from "react";
2
- import { Link, useLocation } from "react-router-dom";
2
+ import { Link, useLocation, useNavigate } from "react-router-dom";
3
3
  import {
4
- Bug,
5
- DoubleSword,
6
- Draft,
7
- Grid,
8
- PeopleGroup,
9
- Person,
10
- SettingsVertical,
11
- SignOut,
12
- Shield,
13
- Ticket,
4
+ ArrowCycle,
5
+ BookClose,
6
+ Bug,
7
+ Calendar,
8
+ Clipboard,
9
+ DoubleSword,
10
+ Draft,
11
+ Grid,
12
+ LightBulb,
13
+ PeopleGroup,
14
+ Person,
15
+ SettingsVertical,
16
+ SignOut,
17
+ Shield,
18
+ Ticket,
14
19
  } from "akar-icons";
15
20
 
16
21
  import CustomFetch from "./visns-fetch";
17
22
  import Notification from "./visns-notification";
18
23
 
19
24
  function Navigation({ logo, logout, navConfig, setSystemAuth, userProfile }) {
20
- const location = useLocation();
21
- const currentPage = location.pathname.substr(1) || "dashboard";
22
- const [navData, setNavData] = useState(navConfig);
23
- const [isScrolled, setIsScrolled] = useState(false);
24
- const appNavClasses = `app-nav ${isScrolled ? "navscrolled" : ""}`;
25
-
26
- const handleLogout = () => {
27
- CustomFetch("/logout", "GET", {}, () => {
28
- setSystemAuth(false);
29
- navigate("/login");
30
- });
31
- };
32
-
33
- const renderSetting = (n) => {
34
- const iconComponents = {
35
- bug: Bug,
36
- person: Person,
37
- shield: Shield,
38
- signOut: SignOut,
39
- };
40
-
41
- if (n.id === "notifications") {
42
- return (
43
- <li>
44
- <Notification setSystemAuth={setSystemAuth} />
45
- </li>
46
- );
47
- } else if (n.id === "logout") {
48
- const IconComponent = iconComponents[n.icon];
49
- return (
50
- <li>
51
- <button
52
- title={n.label}
53
- data-tooltip-id="system-tooltip"
54
- data-tooltip-content={n.label}
55
- onClick={handleLogout}
56
- >
57
- <IconComponent size={19} strokeWidth={2} />
58
- </button>
59
- </li>
60
- );
61
- } else {
62
- const IconComponent = iconComponents[n.icon];
63
-
64
- return (
65
- <li>
66
- <Link
67
- to={n.url}
68
- data-tooltip-id="system-tooltip"
69
- data-tooltip-content={n.label}
70
- className="tooltip"
71
- >
72
- <IconComponent size={19} strokeWidth={2} />
73
- </Link>
74
- </li>
75
- );
76
- }
77
- };
78
-
79
- const renderNav = (n) => {
80
- const iconComponents = {
81
- doubleSword: DoubleSword,
82
- draft: Draft,
83
- grid: Grid,
84
- peopleGroup: PeopleGroup,
85
- settingsVertical: SettingsVertical,
86
- ticket: Ticket,
87
- };
88
-
89
- const IconComponent = iconComponents[n.icon];
90
-
91
- const renderChildren = () => {
92
- if (n.children && n.children.length > 0) {
93
- return (
94
- <ul>
95
- {n.children.map((child, childKey) => (
96
- <li
97
- className="sub-nav-item"
98
- key={`nav-child-${childKey}`}
99
- >
100
- <Link to={child.url} title={child.label}>
101
- {child.label}
102
- </Link>
103
- </li>
104
- ))}
105
- </ul>
106
- );
107
- }
108
- return null;
109
- };
110
-
111
- return (
112
- <li className={n.class}>
113
- {n.url ? (
114
- <Link to={n.url}>
115
- <IconComponent strokeWidth={2} size={18} />
116
- {n.label}
117
- </Link>
118
- ) : (
119
- <span title={n.label}>
120
- <IconComponent strokeWidth={2} size={18} />
121
- {n.label}
122
- </span>
123
- )}
124
- {renderChildren()}
125
- </li>
126
- );
127
- };
128
-
129
- useEffect(() => {
130
- const permissions = userProfile.roles[0].permissions;
131
-
132
- setNavData((prevNavData) => {
133
- const updatePermissions = (nav) => {
134
- const matchingPermission = permissions.find(
135
- (permission) => permission.name === nav.permissionKey
136
- );
137
-
138
- if (matchingPermission) {
139
- return {
140
- ...nav,
141
- permission: true,
142
- };
143
- }
144
-
145
- return nav;
146
- };
147
-
148
- const updatedNavigations =
149
- prevNavData.navigations.map(updatePermissions);
150
- const updatedSettings = prevNavData.settings.map(updatePermissions);
151
-
152
- return {
153
- ...prevNavData,
154
- navigations: updatedNavigations,
155
- settings: updatedSettings,
156
- };
157
- });
158
- }, [userProfile]);
159
-
160
- useEffect(() => {
161
- setNavData((prevNavData) => ({
162
- ...prevNavData,
163
- navigations: prevNavData.navigations.map((nav) =>
164
- nav.id === currentPage
165
- ? { ...nav, class: "nav-item active" }
166
- : { ...nav, class: "nav-item" }
167
- ),
168
- }));
169
- }, [currentPage]);
170
-
171
- useEffect(() => {
172
- function handleScroll() {
173
- setIsScrolled(window.scrollY > 0);
174
- }
175
-
176
- window.addEventListener("scroll", handleScroll);
177
- return () => {
178
- window.removeEventListener("scroll", handleScroll);
179
- };
180
- }, []);
181
-
182
- return (
183
- <header className="header">
184
- <div className="hwrap">
185
- <div className="logo">
186
- <Link to="/">
187
- <img src={logo} alt="Visns Studio CRM" />
188
- </Link>
189
- </div>
190
- <div className="navwrap">
191
- <ul className={appNavClasses}>
192
- {navData.navigations.map((nav, navKey) =>
193
- nav.permission === true ||
194
- nav.permissionKey === "" ? (
195
- <React.Fragment key={`nav-item-${navKey}`}>
196
- {renderNav(nav)}
197
- </React.Fragment>
198
- ) : null
199
- )}
200
- </ul>
201
- </div>
202
- <div className="hactions">
203
- <ul>
204
- {navData.settings.map((setting, settingKey) =>
205
- setting.permission === true ? (
206
- <React.Fragment key={`setting-${settingKey}`}>
207
- {renderSetting(setting)}
208
- </React.Fragment>
209
- ) : null
210
- )}
211
- </ul>
212
- </div>
213
- </div>
214
- </header>
215
- );
25
+ const location = useLocation();
26
+ const navigate = useNavigate();
27
+ const currentPage = location.pathname.substr(1) || "dashboard";
28
+ const [navData, setNavData] = useState(navConfig);
29
+ const [isScrolled, setIsScrolled] = useState(false);
30
+ const appNavClasses = `app-nav ${isScrolled ? "navscrolled" : ""}`;
31
+
32
+ const handleLogout = () => {
33
+ CustomFetch("/logout", "GET", {}, () => {
34
+ setSystemAuth(false);
35
+ navigate("/login");
36
+ });
37
+ };
38
+
39
+ const renderSetting = (n) => {
40
+ const iconComponents = {
41
+ bug: Bug,
42
+ calendar: Calendar,
43
+ person: Person,
44
+ shield: Shield,
45
+ signOut: SignOut,
46
+ };
47
+
48
+ if (n.id === "notifications") {
49
+ return (
50
+ <li>
51
+ <Notification setSystemAuth={setSystemAuth} />
52
+ </li>
53
+ );
54
+ } else if (n.id === "logout") {
55
+ const IconComponent = iconComponents[n.icon];
56
+ return (
57
+ <li>
58
+ <button
59
+ title={n.label}
60
+ data-tooltip-id="system-tooltip"
61
+ data-tooltip-content={n.label}
62
+ onClick={handleLogout}
63
+ >
64
+ <IconComponent size={19} strokeWidth={2} />
65
+ </button>
66
+ </li>
67
+ );
68
+ } else {
69
+ const IconComponent = iconComponents[n.icon];
70
+
71
+ return (
72
+ <li>
73
+ <Link
74
+ to={n.url}
75
+ data-tooltip-id="system-tooltip"
76
+ data-tooltip-content={n.label}
77
+ className="tooltip"
78
+ target={n.target ? n.target : "_self"}
79
+ >
80
+ <IconComponent size={19} strokeWidth={2} />
81
+ </Link>
82
+ </li>
83
+ );
84
+ }
85
+ };
86
+
87
+ const renderNav = (n) => {
88
+ const iconComponents = {
89
+ arrowCycle: ArrowCycle,
90
+ bookClose: BookClose,
91
+ calendar: Calendar,
92
+ clipboard: Clipboard,
93
+ doubleSword: DoubleSword,
94
+ draft: Draft,
95
+ grid: Grid,
96
+ lightBulb: LightBulb,
97
+ peopleGroup: PeopleGroup,
98
+ settingsVertical: SettingsVertical,
99
+ ticket: Ticket,
100
+ };
101
+
102
+ const IconComponent = iconComponents[n.icon];
103
+
104
+ const renderChildren = () => {
105
+ if (n.children && n.children.length > 0) {
106
+ return (
107
+ <ul>
108
+ {n.children.map((child, childKey) => (
109
+ <li
110
+ className="sub-nav-item"
111
+ key={`nav-child-${childKey}`}
112
+ >
113
+ <Link to={child.url} title={child.label}>
114
+ {child.label}
115
+ </Link>
116
+ </li>
117
+ ))}
118
+ </ul>
119
+ );
120
+ }
121
+ return null;
122
+ };
123
+
124
+ return (
125
+ <li className={n.class}>
126
+ {n.url ? (
127
+ <Link to={n.url}>
128
+ <IconComponent strokeWidth={2} size={18} />
129
+ {n.label}
130
+ </Link>
131
+ ) : (
132
+ <span title={n.label}>
133
+ <IconComponent strokeWidth={2} size={18} />
134
+ {n.label}
135
+ </span>
136
+ )}
137
+ {renderChildren()}
138
+ </li>
139
+ );
140
+ };
141
+
142
+ useEffect(() => {
143
+ const permissions = userProfile.roles[0].permissions;
144
+
145
+ setNavData((prevNavData) => {
146
+ const updatePermissions = (nav) => {
147
+ const matchingPermission = permissions.find(
148
+ (permission) => permission.name === nav.permissionKey
149
+ );
150
+
151
+ if (matchingPermission) {
152
+ return {
153
+ ...nav,
154
+ permission: true,
155
+ };
156
+ }
157
+
158
+ return nav;
159
+ };
160
+
161
+ const updatedNavigations =
162
+ prevNavData.navigations.map(updatePermissions);
163
+ const updatedSettings = prevNavData.settings.map(updatePermissions);
164
+
165
+ return {
166
+ ...prevNavData,
167
+ navigations: updatedNavigations,
168
+ settings: updatedSettings,
169
+ };
170
+ });
171
+ }, [userProfile]);
172
+
173
+ useEffect(() => {
174
+ setNavData((prevNavData) => ({
175
+ ...prevNavData,
176
+ navigations: prevNavData.navigations.map((nav) =>
177
+ nav.id === currentPage
178
+ ? { ...nav, class: "nav-item active" }
179
+ : { ...nav, class: "nav-item" }
180
+ ),
181
+ }));
182
+ }, [currentPage]);
183
+
184
+ useEffect(() => {
185
+ function handleScroll() {
186
+ setIsScrolled(window.scrollY > 0);
187
+ }
188
+
189
+ window.addEventListener("scroll", handleScroll);
190
+ return () => {
191
+ window.removeEventListener("scroll", handleScroll);
192
+ };
193
+ }, []);
194
+
195
+ return (
196
+ <header className="header">
197
+ <div className="hwrap">
198
+ <div className="logo">
199
+ <Link to="/">
200
+ <img src={logo} alt="Visns Studio CRM" />
201
+ </Link>
202
+ </div>
203
+ <div className="navwrap">
204
+ <ul className={appNavClasses}>
205
+ {navData.navigations.map((nav, navKey) =>
206
+ nav.permission === true ||
207
+ nav.permissionKey === "" ? (
208
+ <React.Fragment key={`nav-item-${navKey}`}>
209
+ {renderNav(nav)}
210
+ </React.Fragment>
211
+ ) : null
212
+ )}
213
+ </ul>
214
+ </div>
215
+ <div className="hactions">
216
+ <ul>
217
+ {navData.settings.map((setting, settingKey) =>
218
+ setting.permission === true ? (
219
+ <React.Fragment key={`setting-${settingKey}`}>
220
+ {renderSetting(setting)}
221
+ </React.Fragment>
222
+ ) : null
223
+ )}
224
+ </ul>
225
+ </div>
226
+ </div>
227
+ </header>
228
+ );
216
229
  }
217
230
 
218
231
  export default Navigation;
package/package.json CHANGED
@@ -35,7 +35,7 @@
35
35
  "react-dom": "^17.0.1"
36
36
  },
37
37
  "name": "@visns-studio/visns-components",
38
- "version": "1.5.2",
38
+ "version": "1.5.4",
39
39
  "description": "Various packages to assist in the development of our Custom Applications.",
40
40
  "main": "index.js",
41
41
  "devDependencies": {},