Newer
Older
Markus Kalijärvi
committed
import {ComponentLabels} from '../../site-header/site-header';
export interface MenuLanguage {
langCode: string;
url: string;
abbr: string;
label: string;
isActive?: boolean;
}
import {Component, h, Prop, Host, Watch, Element, Listen, State} from '@stencil/core';
@Component({
tag: 'hy-menu-language',
styleUrl: 'menu-language.scss',
shadow: true
})
export class MenuLanguage {
@Element() el: HTMLElement;
@State() isMenuOpen: boolean = false;
@Prop() dataMenuLanguage: MenuLanguage[] | string;
Markus Kalijärvi
committed
@Prop() labels?: ComponentLabels[];
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
@Prop() isMobile: boolean = false;
private _dataMenuLanguage: MenuLanguage[];
@Watch('dataMenuLanguage') arrayDataWatcher(data: MenuLanguage[] | string) {
if (typeof data === 'string') {
this._dataMenuLanguage = JSON.parse(data);
} else {
this._dataMenuLanguage = data;
}
}
@Listen('languageMenuToggle') languageMenuToggle() {
this.isMenuOpen = !this.isMenuOpen;
}
componentWillRender() {
this.arrayDataWatcher(this.dataMenuLanguage);
}
render() {
const black = 'var(--brand-main-nearly-black)';
return this.isMobile ? (
<Host class={'menu--language'}>
{this._dataMenuLanguage.map((item) => {
return (
<hy-menu-language-item
lang-code={item.langCode}
url={item.url}
label={item.label}
abbr={item.abbr}
is-active={item.isActive}
is-mobile={this.isMobile}
/>
);
})}
</Host>
) : (
<Host class={'menu--language'}>
<button
onClick={() => this.languageMenuToggle()}
class={{
'menu--language__toggle': true,
'is-open': this.isMenuOpen
}}
Markus Kalijärvi
committed
aria-label={this.isMenuOpen ? this.labels['close'] : this.labels['open']}
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
>
<hy-icon icon={'hy-icon-globe'} size={14} fill={black} />
<span>
{this._dataMenuLanguage.map((item) => {
if (item.isActive) {
return item.langCode;
}
})}
</span>
<hy-icon class={'menu--language__toggle__caret'} icon={'hy-icon-caret-down'} size={8} fill={black} />
</button>
<div
class={{
'menu--language__dropdown': true,
'is-open': this.isMenuOpen
}}
>
{this._dataMenuLanguage.map((item) => {
return (
<hy-menu-language-item
lang-code={item.langCode}
url={item.url}
label={item.label}
abbr={item.abbr}
is-active={item.isActive}
is-mobile={this.isMobile}
/>
);
})}
</div>
</Host>
);
}
}