import React from 'react';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import * as breadcrumbsActions from 'state/breadcrumbs/BreadcrumbsActions';
import * as recordActions from 'state/records/RecordsActions';
import * as campaignActions from 'state/campaign/CampaignActions';
import SilverStripeComponent from 'lib/SilverStripeComponent';
import Accordion from 'components/Accordion/Accordion';
import AccordionBlock from 'components/Accordion/AccordionBlock';
import ListGroupItem from 'components/ListGroup/ListGroupItem';
import Toolbar from 'components/Toolbar/Toolbar';
import FormAction from 'components/FormAction/FormAction';
import CampaignAdminItem from './CampaignAdminItem';
import BreadcrumbComponent from 'components/Breadcrumb/Breadcrumb';
import Preview from 'components/Preview/Preview';
import i18n from 'i18n';
/**
* Represents a campaign list view
*/
class CampaignAdminList extends SilverStripeComponent {
constructor(props) {
super(props);
this.handlePublish = this.handlePublish.bind(this);
this.handleItemSelected = this.handleItemSelected.bind(this);
this.setBreadcrumbs = this.setBreadcrumbs.bind(this);
}
componentDidMount() {
const fetchURL = this.props.itemListViewEndpoint.replace(/:id/, this.props.campaignId);
super.componentDidMount();
this.setBreadcrumbs();
this.props.recordActions.fetchRecord('ChangeSet', 'get', fetchURL).then(this.setBreadcrumbs);
}
/**
* Update breadcrumbs for this view
*/
setBreadcrumbs() {
// Setup breadcrumbs if record is loaded
if (!this.props.record) {
return;
}
// Check that we haven't navigated away from this page once the callback has returned
const thisLink = this.props.sectionConfig.campaignViewRoute
.replace(/:type\?/, 'set')
.replace(/:id\?/, this.props.campaignId)
.replace(/:view\?/, 'show');
const applies = window.ss.router.routeAppliesToCurrentLocation(
window.ss.router.resolveURLToBase(thisLink)
);
if (!applies) {
return;
}
// Push breadcrumb
const breadcrumbs = this.props.baseBreadcrumbs.slice(0);
breadcrumbs.push({
text: this.props.record.Name,
href: thisLink,
});
this.props.breadcrumbsActions.setBreadcrumbs(breadcrumbs);
}
/**
* Renders a list of items in a Campaign.
*
* @return object
*/
render() {
let itemId = this.props.campaign.changeSetItemId;
let itemLinks = null;
const campaignId = this.props.campaignId;
const campaign = this.props.record;
// Trigger different layout when preview is enabled
const itemGroups = this.groupItemsForSet();
// Get items in this set
let accordionBlocks = [];
Object.keys(itemGroups).forEach(className => {
const group = itemGroups[className];
const groupCount = group.items.length;
let listGroupItems = [];
let title = `${groupCount} ${groupCount === 1 ? group.singular : group.plural}`;
let groupid = `Set_${campaignId}_Group_${className}`;
// Create items for this group
group.items.forEach(item => {
// Auto-select first item
if (!itemId) {
itemId = item.ID;
}
const selected = (itemId === item.ID);
// Check links
if (selected && item._links) {
itemLinks = item._links;
}
// Add extra css class for published items
const itemClassNames = [];
if (item.ChangeType === 'none' || campaign.State === 'published') {
itemClassNames.push('list-group-item--inactive');
}
if (selected) {
itemClassNames.push('active');
}
listGroupItems.push(