import React, { Component } from 'react'; import Img, { FluidObject } from 'gatsby-image'; import { Text, Box } from '@rebass/emotion'; import Slider from 'react-slick'; import { FluidContainer } from 'utils/styles/mixins'; import { SliderConfig } from './multi-image-module-cosmos-slider.constants'; import { MultiImageModuleProps } from '../../../multi-image-module.types'; import { HTMLService, SiteTheme } from 'lib'; import { colors, fontSizes, lineHeights, space } from 'utils/theme'; import { ShowOnLarge, ShowOnTabletDown, ShowOnSmall, ShowOnTabletOnly } from 'utils/styles/display'; import SliderControls from 'components/slider-controls'; import * as Styles from './multi-image-module-cosmos-slider.styles'; interface MultiImageModuleState { currentSlideNumber: number; controlsEnabled: boolean; } class MultiImageModuleCosmosDefault extends Component { state = { currentSlideNumber: 0, controlsEnabled: true }; slider: any = null; updateSliderNumber = (slideNumber: number): void => { this.setState({ currentSlideNumber: slideNumber, controlsEnabled: true }); } handleNext = (): void => { const { data: { images } } = this.props; this.setState(({ currentSlideNumber: previousSlideNumber }) => { return { currentSlideNumber: previousSlideNumber + 1 >= images.length ? 0 : previousSlideNumber + 1, controlsEnabled: false }; }); this.slider.slickNext(); } handlePrevious = (): void => { const { data: { images } } = this.props; this.setState(({ currentSlideNumber: previousSlideNumber }) => { return { currentSlideNumber: previousSlideNumber - 1 < 0 ? images.length - 1 : previousSlideNumber - 1, controlsEnabled: false }; }); this.slider.slickPrev(); } renderCaption = (txt: string, visible: boolean, index: number, colour: string): any => { return ( {txt} ); } renderImage = (fluid: FluidObject, index: number, alt: string | undefined, height: number): JSX.Element => { return ( {alt} ); } render(): JSX.Element { const { data: { images, iconColour, titleTextColour, title, body, layoutOption } } = this.props; const config = { ...SliderConfig, afterChange: (next: number): number => setTimeout(() => this.updateSliderNumber(next), 10) }; return ( {title} (this.slider = c)} {...config}> { images.map((img, index) => { const { alt, fluid } = img; return ( {this.renderImage(fluid, index, alt, 300)} {this.renderImage(fluid, index, alt, 500)} {this.renderImage(fluid, index, alt, 700)} ); } )} 2 of 4 {images.map(({ title: imgTitle }, index) => imgTitle ? this.renderCaption( imgTitle, index === this.state.currentSlideNumber, index, titleTextColour ? colors[titleTextColour.key] : colors.white ) : null)} ); } } export default MultiImageModuleCosmosDefault;