@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.
- package/assets/css/components/calendar.component.css +1 -1
- package/assets/css/components/calendar.component.css.map +1 -1
- package/assets/css/components/card.component.css +1 -1
- package/assets/css/components/card.component.css.map +1 -1
- package/assets/css/components/card.module.css +1 -1
- package/assets/css/components/card.module.css.map +1 -1
- package/assets/css/components/carousel.component.css +1 -1
- package/assets/css/components/carousel.component.css.map +1 -1
- package/assets/css/components/carousel.config.css +1 -1
- package/assets/css/components/carousel.config.css.map +1 -1
- package/assets/css/components/collapsible-side.css +1 -1
- package/assets/css/components/collapsible-side.css.map +1 -1
- package/assets/css/components/config.component.css +1 -1
- package/assets/css/components/config.component.css.map +1 -1
- package/assets/css/components/filter-card.component.css +1 -1
- package/assets/css/components/filter-card.component.css.map +1 -1
- package/assets/css/components/nav.component.css +1 -1
- package/assets/css/components/nav.component.css.map +1 -1
- package/assets/css/components/nav.global.css +1 -1
- package/assets/css/components/nav.global.css.map +1 -1
- package/assets/css/components/rank.component.css +1 -1
- package/assets/css/components/rank.component.css.map +1 -1
- package/assets/css/components/rankings.component.css +1 -1
- package/assets/css/components/rankings.component.css.map +1 -1
- package/assets/css/components/rankings.global.css +1 -1
- package/assets/css/components/rankings.global.css.map +1 -1
- package/assets/css/components/record-card.component.css +1 -1
- package/assets/css/components/record-card.component.css.map +1 -1
- package/assets/css/components/std-nav-standalone.component.css +1 -1
- package/assets/css/components/std-nav-standalone.component.css.map +1 -1
- package/assets/css/components/video-card.component.css +1 -1
- package/assets/css/components/video-card.component.css.map +1 -1
- package/assets/css/components/video-modal.component.css +1 -1
- package/assets/css/components/video-modal.component.css.map +1 -1
- package/assets/css/components/video.component.css +1 -1
- package/assets/css/components/video.component.css.map +1 -1
- package/assets/css/core.min.css +1 -1
- package/assets/css/core.min.css.map +1 -1
- package/assets/css/elements/type.css +1 -1
- package/assets/css/elements/type.css.map +1 -1
- package/assets/css/style.min.css +1 -1
- package/assets/css/style.min.css.map +1 -1
- package/assets/js/components/accordion/accordion.component.min.js +1 -1
- package/assets/js/components/actionbar/actionbar.component.min.js +1 -1
- package/assets/js/components/address-lookup/address-lookup.component.min.js +1 -1
- package/assets/js/components/advanced-select/advanced-select.component.min.js +1 -1
- package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
- package/assets/js/components/barchart/barchart.component.min.js +1 -1
- package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
- package/assets/js/components/button/button.component.min.js +1 -1
- package/assets/js/components/calendar/calendar.component.min.js +2 -2
- package/assets/js/components/card/card.component.js +1 -0
- package/assets/js/components/card/card.component.min.js +6 -5
- package/assets/js/components/card/card.component.min.js.map +1 -1
- package/assets/js/components/carousel/carousel.component.min.js +4 -4
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js +2 -2
- package/assets/js/components/config/config.component.min.js +2 -2
- package/assets/js/components/content/content.component.js +29 -2
- package/assets/js/components/content/content.component.min.js +3 -3
- package/assets/js/components/content/content.component.min.js.map +1 -1
- package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
- package/assets/js/components/doughnutchart/doughnutchart.component.min.js +1 -1
- package/assets/js/components/fileupload/fileupload.component.min.js +1 -1
- package/assets/js/components/filter-card/filter-card.component.min.js +2 -2
- package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
- package/assets/js/components/form/form.component.min.js +1 -1
- package/assets/js/components/header/header.component.min.js +1 -1
- package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
- package/assets/js/components/input/input.component.min.js +1 -1
- package/assets/js/components/input-range/input-range.component.min.js +1 -1
- package/assets/js/components/marketing/marketing.component.min.js +1 -1
- package/assets/js/components/menu/menu.component.min.js +1 -1
- package/assets/js/components/milestone/milestone.component.min.js +1 -1
- package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
- package/assets/js/components/modal/modal.component.js +3 -3
- package/assets/js/components/modal/modal.component.min.js +2 -2
- package/assets/js/components/modal/modal.component.min.js.map +1 -1
- package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
- package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +1 -1
- package/assets/js/components/multiselect/multiselect.component.min.js +1 -1
- package/assets/js/components/nav/nav.component.js +0 -1
- package/assets/js/components/nav/nav.component.min.js +3 -4
- package/assets/js/components/nav/nav.component.min.js.map +1 -1
- package/assets/js/components/notification/notification.component.min.js +1 -1
- package/assets/js/components/pagination/pagination.component.min.js +1 -1
- package/assets/js/components/password/password.component.min.js +1 -1
- package/assets/js/components/popover/popover.component.min.js +1 -1
- package/assets/js/components/rank/rank.component.min.js +1 -1
- package/assets/js/components/rankings/rankings.component.min.js +6 -6
- package/assets/js/components/rating/rating.component.min.js +1 -1
- package/assets/js/components/record-card/record-card.component.min.js +2 -2
- package/assets/js/components/search/search.component.min.js +1 -1
- package/assets/js/components/slider/slider.component.min.js +1 -1
- package/assets/js/components/split-button/split-button.component.min.js +1 -1
- package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +1 -1
- package/assets/js/components/std-nav/std-nav.component.js +24 -118
- package/assets/js/components/std-nav/std-nav.component.min.js +15 -21
- package/assets/js/components/std-nav/std-nav.component.min.js.map +1 -1
- package/assets/js/components/std-nav-standalone/std-nav-standalone.component.js +6 -1
- package/assets/js/components/std-nav-standalone/std-nav-standalone.component.min.js +8 -8
- package/assets/js/components/std-nav-standalone/std-nav-standalone.component.min.js.map +1 -1
- package/assets/js/components/table/table.component.min.js +1 -1
- package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
- package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
- package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
- package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
- package/assets/js/components/tabs/tabs.component.min.js +1 -1
- package/assets/js/components/tag/tag.component.min.js +1 -1
- package/assets/js/components/tooltip/tooltip.component.min.js +1 -1
- package/assets/js/components/video/video.component.min.js +5 -5
- package/assets/js/components/video-card/video-card.component.min.js +2 -2
- package/assets/js/components/video-modal/video-modal.component.min.js +2 -2
- package/assets/js/components/word-count/word-count.component.min.js +1 -1
- package/assets/js/modules/nav.js +56 -21
- package/assets/js/scripts.bundle.js +1 -1
- package/assets/js/scripts.bundle.min.js +1 -1
- package/assets/sass/components/card.component.scss +27 -0
- package/assets/sass/components/card.module.scss +3 -2
- package/assets/sass/components/carousel.component.scss +14 -0
- package/assets/sass/components/carousel.config.scss +1 -1
- package/assets/sass/components/nav.component.scss +2 -2
- package/assets/sass/components/nav.global.scss +51 -4
- package/assets/sass/elements/type.css +31 -1
- package/assets/sass/utilities/colours.scss +4 -1
- package/assets/ts/components/card/card.component.ts +1 -0
- package/assets/ts/components/content/content.component.ts +45 -4
- package/assets/ts/components/modal/modal.component.ts +3 -3
- package/assets/ts/components/nav/nav.component.ts +0 -1
- package/assets/ts/components/std-nav/std-nav.component.ts +33 -149
- package/assets/ts/components/std-nav-standalone/std-nav-standalone.component.ts +10 -1
- package/assets/ts/modules/nav.ts +65 -21
- package/dist/components.es.js +24 -24
- package/dist/components.umd.js +145 -151
- package/package.json +1 -1
|
@@ -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
|
-
|
|
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
|
|
|
@@ -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
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
19
|
+
const defaultContent = this.innerHTML;
|
|
20
|
+
this.innerHTML = `<iam-nav>
|
|
21
|
+
${defaultContent}
|
|
22
|
+
</iam-nav>`;
|
|
23
|
+
}
|
|
30
24
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
30
|
+
if(!element.hasAttribute('slot'))
|
|
31
|
+
element.remove();
|
|
32
|
+
});
|
|
49
33
|
|
|
34
|
+
const defaultContent = this.querySelector('iam-nav').innerHTML;
|
|
50
35
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
225
|
-
|
|
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
|
|
package/assets/ts/modules/nav.ts
CHANGED
|
@@ -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
|
|
53
|
-
|
|
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
|
-
|
|
67
|
-
|
|
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
|
-
|
|
90
|
-
signal
|
|
91
|
-
method: '
|
|
92
|
-
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|