apisearch-events-ui
Version:
Javascript User Interface to visualize all events data.
110 lines (98 loc) • 2.55 kB
JavaScript
/**
* @jsx h
*/
import { h, Component } from 'preact';
import Template from "../Template";
import {defaultItemsListTemplate} from "./defaultTemplates";
/**
* Actions
*/
import {changeItemsPerResultPageSetup} from "./rawEventsActions";
import {formatEvents} from "./helpers";
/**
* RawEvents Component
*/
class RawEventsComponent extends Component {
componentWillMount() {
/**
* Define initial Setup on component mounting
* that refers to the store configuration
* and affects other components
*/
const {
itemsPerPage,
highlightsEnabled,
currentQuery,
client
} = this.props;
/**
* Dispatch action
*/
changeItemsPerResultPageSetup(
{
itemsPerPage,
highlightsEnabled
},
{
currentQuery,
client
}
)
}
render() {
const {
classNames: {
container: containerClassName,
eventsList: eventsListClassName,
},
template: {
eventsList: eventsListTemplate,
},
formatData,
data
} = this.props;
/**
* Data accessible to the template
*/
let reducedTemplateData = {
query: data ? data.query.q : '',
events: data
? formatEvents(data.events)
: []
};
/**
* Format each item data
*/
let formattedTemplateData = {
...reducedTemplateData,
events: (reducedTemplateData.events)
? reducedTemplateData
.events
.map(event => formatData(event))
: []
};
return (
<div className={`as-rawEvents ${containerClassName}`}>
<Template
template={eventsListTemplate}
data={formattedTemplateData}
className={`as-rawEvents__eventsList ${eventsListClassName}`}
/>
</div>
)
}
}
RawEventsComponent.defaultProps = {
itemsPerPage: 10,
highlightsEnabled: false,
classNames: {
container: '',
eventsList: '',
placeholder: ''
},
template: {
eventsList: defaultItemsListTemplate
},
formatData: data => data
};
export default RawEventsComponent;