Newer
Older
Ekaterina Kondareva
committed
import {Component, ComponentInterface, Element, Prop, h} from '@stencil/core';

Ekaterina Kondareva
committed
import {LinkBoxVariants} from '../../utils/utils';
@Component({
tag: 'hy-link-box',
styleUrl: 'link-box.scss',
Ekaterina Kondareva
committed
shadow: true,
})
export class LinkBox implements ComponentInterface {

Ekaterina Kondareva
committed
@Prop() variant: LinkBoxVariants = LinkBoxVariants.default;
@Prop() imageUrl: string = null;
@Prop() imageAlt: string = null;
@Prop() textTitle?: string;
@Prop() textDescription: string = null;
@Prop() url?: string;
@Prop() isExternal: boolean = false;
Ekaterina Kondareva
committed
@Prop() headerstyle: string = 'common';
@Element() el: HTMLElement;
componentDidLoad() {
let hyMainDiv = this.el.closest('.hy-main');
if (hyMainDiv) {
if (!hyMainDiv.classList.contains('with-sidebar')) {
this.headerstyle = 'large';
}
}
}
Ekaterina Kondareva
committed
render() {
Ekaterina Kondareva
committed
const classAttributes = [
'hy-link-box',
this.variant,
this.headerstyle,
this.imageUrl ? 'hy-link-box--with-image' : null,
].join(' ');
const classLinkAttributes = ['hy-link-box__link', this.headerstyle].join(' ');

Ekaterina Kondareva
committed
const classTextContainer = ['hy-link-box__text-container', this.imageUrl ? 'hy-link-box--with-image' : null].join(
' '
);
Ekaterina Kondareva
committed
const target = this.isExternal ? '_blank' : '_self';
Ekaterina Kondareva
committed
const aspectRatioWidth = 16;
const aspectRatioHeight = 10;

Ekaterina Kondareva
committed
const aspect = (aspectRatioHeight / aspectRatioWidth) * 100;
const aspectRatio = {
Ekaterina Kondareva
committed
'--aspectRatio': `${aspect}%` as 'aspectRatio',

Ekaterina Kondareva
committed
};

Ekaterina Kondareva
committed
<article>
<a class={classAttributes} href={this.url} target={target}>
Ekaterina Kondareva
committed
{this.imageUrl && (
<div class="hy-link-box__image-container" style={aspectRatio}>
<img aria-hidden="true" src={this.imageUrl} alt={this.imageAlt} />
</div>
)}

Ekaterina Kondareva
committed
<div class={classTextContainer}>
<h3 class="hy-link-box__text-container__title">{this.textTitle}</h3>
{this.textDescription && <div class="hy-link-box__text-container__description">{this.textDescription}</div>}

Ekaterina Kondareva
committed
</a>
Ekaterina Kondareva
committed
<div class={classLinkAttributes} aria-hidden="true">
<hy-icon icon={'hy-icon-arrow-right'} size={48} />
Ekaterina Kondareva
committed
</div>,
Ekaterina Kondareva
committed
/*
<div class="hy-link-box__image-container" style={aspectRatio}>
{this.imageUrl && <img aria-hidden="true" src={this.imageUrl} alt={this.imageAlt} />}
</div>
* */