@iamproperty/components 7.7.1--beta16 → 7.7.1--beta17

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 (134) hide show
  1. package/assets/css/components/calendar.component.css +1 -1
  2. package/assets/css/components/calendar.component.css.map +1 -1
  3. package/assets/css/components/card.component.css +1 -1
  4. package/assets/css/components/card.component.css.map +1 -1
  5. package/assets/css/components/card.module.css +1 -1
  6. package/assets/css/components/card.module.css.map +1 -1
  7. package/assets/css/components/carousel.component.css +1 -1
  8. package/assets/css/components/carousel.component.css.map +1 -1
  9. package/assets/css/components/carousel.config.css +1 -1
  10. package/assets/css/components/carousel.config.css.map +1 -1
  11. package/assets/css/components/collapsible-side.css +1 -1
  12. package/assets/css/components/collapsible-side.css.map +1 -1
  13. package/assets/css/components/config.component.css +1 -1
  14. package/assets/css/components/config.component.css.map +1 -1
  15. package/assets/css/components/filter-card.component.css +1 -1
  16. package/assets/css/components/filter-card.component.css.map +1 -1
  17. package/assets/css/components/nav.component.css +1 -1
  18. package/assets/css/components/nav.component.css.map +1 -1
  19. package/assets/css/components/nav.global.css +1 -1
  20. package/assets/css/components/nav.global.css.map +1 -1
  21. package/assets/css/components/rank.component.css +1 -1
  22. package/assets/css/components/rank.component.css.map +1 -1
  23. package/assets/css/components/rankings.component.css +1 -1
  24. package/assets/css/components/rankings.component.css.map +1 -1
  25. package/assets/css/components/rankings.global.css +1 -1
  26. package/assets/css/components/rankings.global.css.map +1 -1
  27. package/assets/css/components/record-card.component.css +1 -1
  28. package/assets/css/components/record-card.component.css.map +1 -1
  29. package/assets/css/components/std-nav-standalone.component.css +1 -1
  30. package/assets/css/components/std-nav-standalone.component.css.map +1 -1
  31. package/assets/css/components/video-card.component.css +1 -1
  32. package/assets/css/components/video-card.component.css.map +1 -1
  33. package/assets/css/components/video-modal.component.css +1 -1
  34. package/assets/css/components/video-modal.component.css.map +1 -1
  35. package/assets/css/components/video.component.css +1 -1
  36. package/assets/css/components/video.component.css.map +1 -1
  37. package/assets/css/core.min.css +1 -1
  38. package/assets/css/core.min.css.map +1 -1
  39. package/assets/css/elements/type.css +1 -1
  40. package/assets/css/elements/type.css.map +1 -1
  41. package/assets/css/style.min.css +1 -1
  42. package/assets/css/style.min.css.map +1 -1
  43. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  44. package/assets/js/components/actionbar/actionbar.component.min.js +1 -1
  45. package/assets/js/components/address-lookup/address-lookup.component.min.js +1 -1
  46. package/assets/js/components/advanced-select/advanced-select.component.min.js +1 -1
  47. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  48. package/assets/js/components/barchart/barchart.component.min.js +1 -1
  49. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  50. package/assets/js/components/button/button.component.min.js +1 -1
  51. package/assets/js/components/calendar/calendar.component.min.js +2 -2
  52. package/assets/js/components/card/card.component.js +1 -0
  53. package/assets/js/components/card/card.component.min.js +6 -5
  54. package/assets/js/components/card/card.component.min.js.map +1 -1
  55. package/assets/js/components/carousel/carousel.component.min.js +4 -4
  56. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +2 -2
  57. package/assets/js/components/config/config.component.min.js +2 -2
  58. package/assets/js/components/content/content.component.js +29 -2
  59. package/assets/js/components/content/content.component.min.js +3 -3
  60. package/assets/js/components/content/content.component.min.js.map +1 -1
  61. package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
  62. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +1 -1
  63. package/assets/js/components/fileupload/fileupload.component.min.js +1 -1
  64. package/assets/js/components/filter-card/filter-card.component.min.js +2 -2
  65. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  66. package/assets/js/components/form/form.component.min.js +1 -1
  67. package/assets/js/components/header/header.component.min.js +1 -1
  68. package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
  69. package/assets/js/components/input/input.component.min.js +1 -1
  70. package/assets/js/components/input-range/input-range.component.min.js +1 -1
  71. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  72. package/assets/js/components/menu/menu.component.min.js +1 -1
  73. package/assets/js/components/milestone/milestone.component.min.js +1 -1
  74. package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
  75. package/assets/js/components/modal/modal.component.js +3 -3
  76. package/assets/js/components/modal/modal.component.min.js +2 -2
  77. package/assets/js/components/modal/modal.component.min.js.map +1 -1
  78. package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
  79. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +1 -1
  80. package/assets/js/components/multiselect/multiselect.component.min.js +1 -1
  81. package/assets/js/components/nav/nav.component.js +0 -1
  82. package/assets/js/components/nav/nav.component.min.js +3 -4
  83. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  84. package/assets/js/components/notification/notification.component.min.js +1 -1
  85. package/assets/js/components/pagination/pagination.component.min.js +1 -1
  86. package/assets/js/components/password/password.component.min.js +1 -1
  87. package/assets/js/components/popover/popover.component.min.js +1 -1
  88. package/assets/js/components/rank/rank.component.min.js +1 -1
  89. package/assets/js/components/rankings/rankings.component.min.js +6 -6
  90. package/assets/js/components/rating/rating.component.min.js +1 -1
  91. package/assets/js/components/record-card/record-card.component.min.js +2 -2
  92. package/assets/js/components/search/search.component.min.js +1 -1
  93. package/assets/js/components/slider/slider.component.min.js +1 -1
  94. package/assets/js/components/split-button/split-button.component.min.js +1 -1
  95. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +1 -1
  96. package/assets/js/components/std-nav/std-nav.component.js +24 -118
  97. package/assets/js/components/std-nav/std-nav.component.min.js +15 -21
  98. package/assets/js/components/std-nav/std-nav.component.min.js.map +1 -1
  99. package/assets/js/components/std-nav-standalone/std-nav-standalone.component.js +6 -1
  100. package/assets/js/components/std-nav-standalone/std-nav-standalone.component.min.js +8 -8
  101. package/assets/js/components/std-nav-standalone/std-nav-standalone.component.min.js.map +1 -1
  102. package/assets/js/components/table/table.component.min.js +1 -1
  103. package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
  104. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  105. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
  106. package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
  107. package/assets/js/components/tabs/tabs.component.min.js +1 -1
  108. package/assets/js/components/tag/tag.component.min.js +1 -1
  109. package/assets/js/components/tooltip/tooltip.component.min.js +1 -1
  110. package/assets/js/components/video/video.component.min.js +5 -5
  111. package/assets/js/components/video-card/video-card.component.min.js +2 -2
  112. package/assets/js/components/video-modal/video-modal.component.min.js +2 -2
  113. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  114. package/assets/js/modules/nav.js +56 -21
  115. package/assets/js/scripts.bundle.js +1 -1
  116. package/assets/js/scripts.bundle.min.js +1 -1
  117. package/assets/sass/components/card.component.scss +27 -0
  118. package/assets/sass/components/card.module.scss +3 -2
  119. package/assets/sass/components/carousel.component.scss +14 -0
  120. package/assets/sass/components/carousel.config.scss +1 -1
  121. package/assets/sass/components/nav.component.scss +2 -2
  122. package/assets/sass/components/nav.global.scss +51 -4
  123. package/assets/sass/elements/type.css +31 -1
  124. package/assets/sass/utilities/colours.scss +4 -1
  125. package/assets/ts/components/card/card.component.ts +1 -0
  126. package/assets/ts/components/content/content.component.ts +45 -4
  127. package/assets/ts/components/modal/modal.component.ts +3 -3
  128. package/assets/ts/components/nav/nav.component.ts +0 -1
  129. package/assets/ts/components/std-nav/std-nav.component.ts +33 -149
  130. package/assets/ts/components/std-nav-standalone/std-nav-standalone.component.ts +10 -1
  131. package/assets/ts/modules/nav.ts +65 -21
  132. package/dist/components.es.js +24 -24
  133. package/dist/components.umd.js +145 -151
  134. package/package.json +1 -1
@@ -22,6 +22,7 @@ class iamCard extends HTMLElement {
22
22
  ${loadCSS}
23
23
  </style>
24
24
  ${cardHTML}
25
+ <slot name="link"></slot>
25
26
  <slot name="primary-action"></slot>
26
27
  `;
27
28
 
@@ -20,7 +20,7 @@ class iamContent extends HTMLElement {
20
20
  this.shadowRoot.appendChild(template.content.cloneNode(true));
21
21
  }
22
22
 
23
- addTitle = (title) => {
23
+ addTitle = (title):void => {
24
24
 
25
25
  if(this.hasAttribute('data-title-tag')){
26
26
 
@@ -30,6 +30,37 @@ class iamContent extends HTMLElement {
30
30
  return '';
31
31
  }
32
32
 
33
+ fixContent = (component):void => {
34
+
35
+ const transform = component.getAttribute('data-transform');
36
+ let wrapper = component;
37
+
38
+ if(transform){
39
+
40
+ component.querySelectorAll(`${transform} > *:empty`).forEach((element) => {
41
+ element.remove();
42
+ });
43
+
44
+ wrapper = component.querySelector(`${transform}`);
45
+ }
46
+ else {
47
+
48
+ component.querySelectorAll(`:scope > *:empty`).forEach((element) => {
49
+ element.remove();
50
+ });
51
+ }
52
+
53
+ const itemClass = component.getAttribute('data-items-class');
54
+
55
+ if(itemClass){
56
+
57
+ wrapper.querySelectorAll(`:scope > *`).forEach((element) => {
58
+ element.classList.add(itemClass);
59
+ });
60
+ }
61
+
62
+ }
63
+
33
64
  connectedCallback(): void {
34
65
  // eslint-disable-next-line @typescript-eslint/no-this-alias
35
66
  const component = this;
@@ -37,6 +68,8 @@ class iamContent extends HTMLElement {
37
68
 
38
69
  const transform = this.getAttribute('data-transform');
39
70
 
71
+ const fixContent = this.fixContent;
72
+
40
73
  let elementAttributes = '';
41
74
 
42
75
 
@@ -82,18 +115,26 @@ class iamContent extends HTMLElement {
82
115
 
83
116
  newXHRRequest.onload = function (): void {
84
117
  if (this.status === 200) {
85
- const response = JSON.parse(this.responseText);
118
+ let response = JSON.parse(this.responseText);
119
+
120
+ if(Array.isArray(response))
121
+ response = response[0];
86
122
 
87
123
  component.insertAdjacentHTML('beforebegin',addTitle(response.title.rendered));
88
124
 
125
+
89
126
  if(transform){
90
127
 
91
128
  component.innerHTML = `<${transform} ${elementAttributes}>${response.content.rendered}</${transform}>`;
92
129
  component.removeAttribute('class');
93
130
  }
94
- else
131
+ else {
132
+
95
133
  component.innerHTML = `${response.content.rendered}`;
96
-
134
+ console.log(response.content);
135
+ }
136
+
137
+ fixContent(component);
97
138
  registerComponents(component);
98
139
  }
99
140
  };
@@ -49,14 +49,14 @@ class iamModal extends HTMLElement {
49
49
  const agreedButton = this.querySelector('button[slot="agreed-button"]') ? this.querySelector('button[slot="agreed-button"]') : this.shadowRoot?.querySelector('[data-agreed]');
50
50
  const modalType = this.hasAttribute('data-type') ? this.getAttribute('data-type') : 'passive';
51
51
 
52
- const agreed = () => {
52
+ const agreed = (close = true) => {
53
53
  const agreedEvent = new CustomEvent('agreed', {
54
54
  detail: { modalId: id },
55
55
  });
56
56
 
57
57
  this.dispatchEvent(agreedEvent);
58
58
 
59
- if(!this.querySelector(':invalid'))
59
+ if(!this.querySelector(':invalid') && close)
60
60
  closeModal(this);
61
61
  }
62
62
 
@@ -131,7 +131,7 @@ class iamModal extends HTMLElement {
131
131
  closeModal(this);
132
132
  }
133
133
  else {
134
- agreed();
134
+ agreed(false);
135
135
  }
136
136
  });
137
137
 
@@ -20,7 +20,6 @@ class iamNav extends HTMLElement {
20
20
  template.innerHTML = `
21
21
  <style class="styles">
22
22
 
23
-
24
23
  ${loadCSS}
25
24
  </style>
26
25
  <style class="doc-styles">
@@ -1,4 +1,5 @@
1
1
  import Cookies from '../../../../node_modules/js-cookie/dist/js.cookie.mjs';
2
+ import {populateNav,loadNavData,loadUserData,setEnabledLinks} from '../../modules/nav';
2
3
  import iamNav from '../nav/nav.component';
3
4
 
4
5
  // Data layer Web component created
@@ -8,55 +9,34 @@ declare global {
8
9
  }
9
10
  }
10
11
 
11
-
12
12
  class iamSTDNav extends HTMLElement {
13
13
  constructor() {
14
14
  super();
15
15
  }
16
16
 
17
- loadNavData = async(): any => {
18
-
19
- const ajaxURL = '/nav.json';
20
-
21
- // Setup controller vars if not already set
22
- if (!window.controller) window.controller = [];
23
-
24
- // Abort if controller already present for this url
25
- if (window.controller[ajaxURL]) window.controller[ajaxURL].abort();
17
+ defaultToNav = ():void => {
26
18
 
27
- // Create a new controller so it can be aborted if new fetch made
28
- window.controller[ajaxURL] = new AbortController();
29
- const { signal } = window.controller[ajaxURL];
19
+ const defaultContent = this.innerHTML;
20
+ this.innerHTML = `<iam-nav>
21
+ ${defaultContent}
22
+ </iam-nav>`;
23
+ }
30
24
 
31
- try {
32
- return await fetch(ajaxURL, {
33
- signal: signal,
34
- method: 'get',
35
- credentials: 'same-origin',
36
- headers: new Headers({
37
- 'Content-Type': 'application/json',
38
- Accept: 'application/json',
39
- 'X-Requested-With': 'XMLHttpRequest',
40
- 'X-XSRF-TOKEN': Cookies.get('XSRF-TOKEN'),
41
- }),
42
- })
43
- .then((response) => response.json())
44
- .then((response) => {
45
- // populate datalist
46
- let listString = '';
25
+ transformToNav = (data):void => {
26
+
27
+ // Remove current links
28
+ this.querySelector('iam-nav').querySelectorAll(`:scope > *`).forEach((element) => {
47
29
 
48
- const data = response['data'] ? response['data'] : response;
30
+ if(!element.hasAttribute('slot'))
31
+ element.remove();
32
+ });
49
33
 
34
+ const defaultContent = this.querySelector('iam-nav').innerHTML;
50
35
 
51
- return data;
52
- });
53
- } catch (error) {
54
- if (error?.name === 'AbortError') {
55
- return true;
56
- }
57
- console.log(error);
58
- return 'There has been a problem. Please try again in a few moments.';
59
- }
36
+ this.innerHTML = `<iam-nav ${(this.hasAttribute('class') ? `class="${this.getAttribute('class')}"`:'')}>
37
+ ${defaultContent}
38
+ ${populateNav(data)}
39
+ </iam-nav>`;
60
40
  }
61
41
 
62
42
  defaultToSecondary = (): void => {
@@ -71,71 +51,11 @@ class iamSTDNav extends HTMLElement {
71
51
  this.outerHTML = `${defaultContent}`;
72
52
  }
73
53
 
74
- defaultToNav = ():void => {
75
54
 
76
- const defaultContent = this.innerHTML;
77
- this.innerHTML = `<iam-nav>
78
- ${defaultContent}
79
- </iam-nav>`;
80
- }
81
-
82
- defaultToStandalone = ():void => {
83
- const defaultContent = this.innerHTML;
84
- this.wrapper.innerHTML = `<div class="container">${defaultContent}</div>`;
85
- }
86
-
87
- populateLinks = (data):void => {
88
-
89
- let html = ``;
90
-
91
- data.forEach((link) => {
92
-
93
- html += `
94
- <a href="${link.url}">${link.title}</a>`;
95
-
96
- });
97
-
98
- return html;
99
- }
100
-
101
- populateSections = (data):void => {
102
-
103
- let html = ``;
104
-
105
- data.forEach((section) => {
106
-
107
- html += `<span class="section ${section.class}">
108
- <span class="lead text-heading d-block">${section.enabled == "false" && section.marketing ? section.marketing : section.title}</span>
109
- ${this.populateLinks(section.links)}
110
- </span>`;
111
- });
112
-
113
-
114
-
115
-
116
- return html;
117
- }
118
-
119
- populateNav = (data):void => {
120
-
121
- let html = ``;
122
-
123
- data.forEach((feature) => {
124
-
125
- if(feature.attributes.sections)
126
- html += `<details name="megamenu"><summary>${feature.attributes.title}</summary><div data-title="${feature.attributes.title}">${this.populateSections(feature.attributes.sections)}</div></details>`;
127
- else if(feature.attributes.links)
128
- html += `<details name="megamenu"><summary>${feature.attributes.title}</summary><div data-title="${feature.attributes.title}">${this.populateLinks(feature.attributes.links)}</div></details>`;
129
- else
130
- html += `<a href="/">${feature.attributes.title}</a>`;
131
- });
132
-
133
- return html;
134
- }
135
55
 
136
56
  transformToSecondary = (data):void => {
137
57
 
138
- this.innerHTML = this.populateNav(data);
58
+ this.innerHTML = populateNav(data);
139
59
 
140
60
  // Set links and details to secondary slot
141
61
  Array.from(this.querySelectorAll(':scope > a, :scope > details')).forEach((element) => {
@@ -147,50 +67,26 @@ class iamSTDNav extends HTMLElement {
147
67
  this.outerHTML = `${defaultContent}`;
148
68
  }
149
69
 
150
- transformToStandalone = (data):void => {
151
-
152
- this.wrapper.innerHTML = `<div class="container"><details><summary>Products</summary><div class="iam-nav">${this.populateNav(data)}</div></details></div>`;
153
-
154
- // Set links and details to secondary slot
155
- Array.from(this.wrapper.querySelectorAll('.iam-nav > a, .iam-nav > details')).forEach((element) => {
156
-
157
- element.setAttribute('slot','secondary');
158
- });
159
-
160
- }
161
-
162
- transformToNav = (data):void => {
163
- this.innerHTML = `<iam-nav>
164
- <a href="/" class="brand brand--property" slot="logo">
165
- <svg>
166
- <title>iam key</title>
167
- <use xlink:href="/svg/logo.svg#logo-property"></use>
168
- </svg>
169
- </a>
170
- ${this.populateNav(data)}
171
- </iam-nav>`;
172
- }
173
-
174
70
  async connectedCallback(): void {
175
71
 
72
+ const component = this;
176
73
  this.wrapper = this.shadowRoot?.querySelector('.wrapper');
177
74
 
178
75
  if (!window.customElements.get(`iam-nav`))
179
76
  window.customElements.define(`iam-nav`, iamNav);
180
-
181
-
77
+
182
78
  if(this.hasAttribute('data-hub')){
183
79
  this.defaultToNav();
184
80
  }
185
- else if (!this.closest('iam-nav')){
186
- this.defaultToStandalone();
187
- }
188
81
  else {
189
82
  //this.defaultToSecondary(); TODO: change this to show default content but still be able to update
190
83
  }
191
84
 
192
- const data = await this.loadNavData().then(
85
+
86
+ const data = await loadNavData(Cookies).then(
193
87
  (data) => {
88
+
89
+
194
90
  if(typeof data == 'string'){
195
91
 
196
92
  return data;
@@ -200,36 +96,24 @@ class iamSTDNav extends HTMLElement {
200
96
  if(this.hasAttribute('data-hub')){
201
97
  this.transformToNav(data);
202
98
  }
203
- else if(!this.closest('iam-nav')){
204
- this.transformToStandalone(data);
205
- }
206
99
  else {
207
100
  this.transformToSecondary(data);
208
- //this.transformToNav(data);
209
101
  }
210
102
 
211
103
  return true;
212
104
  }
213
105
  );
214
106
 
215
- }
216
-
217
- static get observedAttributes(): any {
218
- return [];
219
- }
220
-
221
- attributeChangedCallback(attrName, oldVal, newVal): void {
222
- const addressComponent = this.querySelector('iam-address-lookup');
107
+ const userData = await loadUserData(Cookies).then(
108
+ (data) => {
223
109
 
224
- switch (attrName) {
225
- case 'data-url': {
226
- if (oldVal != newVal && addressComponent) {
227
- addressComponent.setAttribute('data-url', newVal + '?search_string=');
228
- }
229
- break;
110
+ setEnabledLinks(component,data);
111
+ return true;
230
112
  }
231
- }
113
+ );
114
+
232
115
  }
116
+
233
117
  }
234
118
 
235
119
  export default iamSTDNav;
@@ -1,4 +1,4 @@
1
- import {populateNav,loadNavData} from '../../modules/nav';
1
+ import {populateNav,loadNavData,loadUserData,setEnabledLinks} from '../../modules/nav';
2
2
  import Cookies from '../../../../node_modules/js-cookie/dist/js.cookie.mjs';
3
3
 
4
4
  // Data layer Web component created
@@ -55,6 +55,7 @@ class iamSTDNavStandalone extends HTMLElement {
55
55
 
56
56
  async connectedCallback(): void {
57
57
 
58
+ const component = this;
58
59
  this.wrapper = this.shadowRoot?.querySelector('.wrapper');
59
60
  this.defaultToStandalone();
60
61
 
@@ -70,6 +71,14 @@ class iamSTDNavStandalone extends HTMLElement {
70
71
  return true;
71
72
  }
72
73
  );
74
+
75
+ const userData = await loadUserData(Cookies).then(
76
+ (data) => {
77
+
78
+ setEnabledLinks(component,data);
79
+ return true;
80
+ }
81
+ );
73
82
  }
74
83
  }
75
84
 
@@ -32,7 +32,7 @@ export const populateNav = (data):void => {
32
32
 
33
33
  data.forEach((feature) => {
34
34
 
35
- if(feature.attributes.sections)
35
+ if(feature.attributes.sections.length)
36
36
  html += `<details name="megamenu"><summary>${feature.attributes.title}</summary><div data-title="${feature.attributes.title}">${populateSections(feature.attributes.sections)}</div></details>`;
37
37
  else if(feature.attributes.links)
38
38
  html += `<details name="megamenu"><summary>${feature.attributes.title}</summary><div data-title="${feature.attributes.title}">${populateLinks(feature.attributes.links)}</div></details>`;
@@ -49,8 +49,9 @@ export const populateSections = (data):void => {
49
49
 
50
50
  data.forEach((section) => {
51
51
 
52
- html += `<span class="section ${section.class}">
53
- <span class="lead text-heading d-block">${section.enabled == "false" && section.marketing ? section.marketing : section.title}</span>
52
+ html += `<span class="section section--${section.layout}">
53
+ ${section.title ? `<span class="lead text-heading section-title" data-product="${section.id}" data-title>${section.title}</span>` : ''}
54
+ ${section.description ? `<span class="lead section-desc" data-product="${section.id}">! ${section.description}</span>` : ''}
54
55
  ${populateLinks(section.links)}
55
56
  </span>`;
56
57
  });
@@ -63,8 +64,8 @@ export const populateLinks = (data):void => {
63
64
 
64
65
  data.forEach((link) => {
65
66
 
66
- html += `
67
- <a href="${link.url}">${link.title}</a>`;
67
+
68
+ html += `<a href="${link.destinations.unlinked}" target="_blank" data-product="${link.productKey}" data-feature="${link.featureKey}" data-enabled="${link.destinations.linkedEnabled}" data-disabled="${link.destinations.linkedDisabled}">${link.title}</a>`;
68
69
 
69
70
  });
70
71
 
@@ -73,6 +74,7 @@ export const populateLinks = (data):void => {
73
74
 
74
75
  export const loadNavData = async(Cookies): any => {
75
76
 
77
+ //const ajaxURL = 'https://dev.hub.iamproperty.group/data/ecosystem-switcher.json';
76
78
  const ajaxURL = '/nav.json';
77
79
 
78
80
  // Setup controller vars if not already set
@@ -86,27 +88,52 @@ export const loadNavData = async(Cookies): any => {
86
88
  const { signal } = window.controller[ajaxURL];
87
89
 
88
90
  try {
89
- return await fetch(ajaxURL, {
90
- signal: signal,
91
- method: 'get',
92
- credentials: 'same-origin',
93
- headers: new Headers({
94
- 'Content-Type': 'application/json',
91
+ const response = await fetch(ajaxURL, {
92
+ signal,
93
+ method: 'GET',
94
+ headers: {
95
95
  Accept: 'application/json',
96
- 'X-Requested-With': 'XMLHttpRequest',
97
- 'X-XSRF-TOKEN': Cookies.get('XSRF-TOKEN'),
98
- }),
99
- })
100
- .then((response) => response.json())
101
- .then((response) => {
102
- // populate datalist
103
- let listString = '';
96
+ },
97
+ });
98
+
99
+ const json = await response.json();
100
+ const data = json.data ? json.data : json;
101
+ return data;
102
+ } catch (error) {
103
+ if (error?.name === 'AbortError') {
104
+ return true;
105
+ }
106
+ console.log(error);
107
+ return 'There has been a problem. Please try again in a few moments.';
108
+ }
109
+ }
110
+
111
+ export const loadUserData = async(Cookies): any => {
112
+
113
+ const ajaxURL = '/user.json';
114
+
115
+ // Setup controller vars if not already set
116
+ if (!window.controller) window.controller = [];
104
117
 
105
- const data = response['data'] ? response['data'] : response;
118
+ // Abort if controller already present for this url
119
+ if (window.controller[ajaxURL]) window.controller[ajaxURL].abort();
106
120
 
121
+ // Create a new controller so it can be aborted if new fetch made
122
+ window.controller[ajaxURL] = new AbortController();
123
+ const { signal } = window.controller[ajaxURL];
107
124
 
108
- return data;
125
+ try {
126
+ const response = await fetch(ajaxURL, {
127
+ signal,
128
+ method: 'GET',
129
+ headers: {
130
+ Accept: 'application/json',
131
+ },
109
132
  });
133
+
134
+ const json = await response.json();
135
+ const data = json.data ? json.data : json;
136
+ return data;
110
137
  } catch (error) {
111
138
  if (error?.name === 'AbortError') {
112
139
  return true;
@@ -116,5 +143,22 @@ export const loadNavData = async(Cookies): any => {
116
143
  }
117
144
  }
118
145
 
146
+ export const setEnabledLinks = (component,data):void => {
147
+
148
+ console.log(data);
149
+
150
+
151
+
152
+
153
+ component.querySelectorAll(`[data-product][data-feature]`).forEach((element) => {
154
+ const isEnabled = data.attributes.products[element.getAttribute('data-product')].features[element.getAttribute('data-feature')];
155
+ element.setAttribute('data-is-enabled',isEnabled);
156
+ if(isEnabled && element.getAttribute('data-enabled')){
157
+ element.setAttribute('href',element.getAttribute('data-enabled'));
158
+ element.removeAttribute('target');
159
+ }
160
+ });
161
+
162
+ }
119
163
 
120
164
  export default navbar;