Skip to content

Commit

Permalink
[STTNHUB-336] Agenda: Show all wire item versions in Coverage preview (
Browse files Browse the repository at this point in the history
…#897)

* [STTNHUB-336] Agenda: Show all wire item versions in Coverage preview

* Use CollapseBox in CoverageActions component
  • Loading branch information
MarkLark86 authored and petrjasek committed May 21, 2024
1 parent 97be267 commit e6822f3
Show file tree
Hide file tree
Showing 12 changed files with 375 additions and 239 deletions.
16 changes: 9 additions & 7 deletions assets/agenda/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,14 +83,16 @@ export function previewItem(item?: any, group?: any, plan?: any) {
};
}

export function fetchWireItemsForAgenda(item: any) {
export function fetchWireItemsForAgenda(item?: IAgendaItem) {
return (dispatch: any) => {
const wireIds: Array<any> = [];
(get(item, 'coverages') || []).forEach((c: any) => {
if (c.coverage_type === 'text' && c.delivery_id) {
wireIds.push(c.delivery_id);
}
});
const wireIds = (item?.coverages || [])
.filter((coverage) => coverage.coverage_type === 'text')
.map((coverage) => (
(coverage.deliveries || [])
.map((delivery) => delivery.delivery_id || '')
.filter((wireId) => wireId.length > 0)
))
.flat();

if (wireIds.length > 0){
return server.get(`/wire/items/${wireIds.join(',')}`)
Expand Down
4 changes: 0 additions & 4 deletions assets/agenda/components/AgendaApp.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,6 @@ class AgendaApp extends SearchBase<any> {
group={this.props.previewGroup}
planningId={this.props.previewPlan}
eventsOnly={eventsOnly}
wireItems={this.props.wireItems}
coverageActions={this.props.coverageActions}
detailsConfig={this.props.detailsConfig}
restrictCoverageInfo={this.props.restrictCoverageInfo}
Expand Down Expand Up @@ -303,7 +302,6 @@ class AgendaApp extends SearchBase<any> {
previewGroup={this.props.previewGroup}
previewPlan={this.props.previewPlan}
eventsOnly={eventsOnly}
wireItems={this.props.wireItems}
previewConfig={this.props.previewConfig}
restrictCoverageInfo={this.props.restrictCoverageInfo}
/>
Expand Down Expand Up @@ -368,7 +366,6 @@ AgendaApp.propTypes = {
restrictCoverageInfo: PropTypes.bool,
itemTypeFilter: PropTypes.string,
locators: PropTypes.array,
wireItems: PropTypes.array,
searchParams: PropTypes.object,
showSaveTopic: PropTypes.bool,
previewConfig: PropTypes.object,
Expand Down Expand Up @@ -410,7 +407,6 @@ const mapStateToProps = (state: any) => ({
featuredOnly: get(state, 'agenda.featuredOnly'),
context: state.context,
locators: get(state, 'locators.items', []),
wireItems: get(state, 'agenda.agendaWireItems'),
setQuery: PropTypes.func.isRequired,
searchParams: searchParamsSelector(state),
showSaveTopic: showSaveTopicSelector(state),
Expand Down
5 changes: 1 addition & 4 deletions assets/agenda/components/AgendaItemDetails.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React from 'react';
import {isEmpty, get} from 'lodash';

import {IAgendaItem, IArticle, ICoverageItemAction, IItemAction, IPreviewConfig, IUser} from 'interfaces';
import {IAgendaItem, ICoverageItemAction, IItemAction, IPreviewConfig, IUser} from 'interfaces';
import {gettext} from 'utils';

import {getLocations, mapsKey} from 'maps/utils';
Expand Down Expand Up @@ -37,7 +37,6 @@ interface IProps {
actions?: Array<IItemAction>;
group?: string;
eventsOnly?: boolean;
wireItems?: Array<IArticle>;
coverageActions?: Array<ICoverageItemAction>;
detailsConfig: IPreviewConfig;
restrictCoverageInfo?: boolean;
Expand All @@ -55,7 +54,6 @@ function AgendaItemDetails(
group,
planningId,
eventsOnly,
wireItems,
coverageActions,
detailsConfig,
restrictCoverageInfo,
Expand Down Expand Up @@ -102,7 +100,6 @@ function AgendaItemDetails(
user={user}
item={item}
planningId={planningId}
wireItems={wireItems}
coverageActions={coverageActions}
restrictCoverageInfo={restrictCoverageInfo}
previewConfig={detailsConfig}
Expand Down
5 changes: 1 addition & 4 deletions assets/agenda/components/AgendaPreview.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React from 'react';
import classNames from 'classnames';

import {IAgendaItem, IArticle, ICoverageItemAction, IItemAction, IPreviewConfig, IUser} from 'interfaces';
import {IAgendaItem, ICoverageItemAction, IItemAction, IPreviewConfig, IUser} from 'interfaces';

import {isEqualItem} from 'wire/utils';
import {hasCoverages, isPostponed, isRescheduled, getInternalNote, planHasEvent} from '../utils';
Expand Down Expand Up @@ -36,7 +36,6 @@ interface IProps {
previewGroup?: string;
previewPlan?: IAgendaItem['_id'];
eventsOnly?: boolean;
wireItems?: Array<IArticle>;
coverageActions?: Array<ICoverageItemAction>;
previewConfig: IPreviewConfig;
restrictCoverageInfo?: boolean;
Expand Down Expand Up @@ -70,7 +69,6 @@ class AgendaPreview extends React.PureComponent<IProps, {}> {
previewGroup,
previewPlan,
eventsOnly,
wireItems,
coverageActions,
restrictCoverageInfo,
previewConfig,
Expand Down Expand Up @@ -126,7 +124,6 @@ class AgendaPreview extends React.PureComponent<IProps, {}> {
user={user}
item={item}
planningId={previewPlan}
wireItems={wireItems}
coverageActions={coverageActions}
previewGroup={previewGroup}
restrictCoverageInfo={restrictCoverageInfo}
Expand Down
151 changes: 82 additions & 69 deletions assets/agenda/components/AgendaPreviewPlanning.tsx
Original file line number Diff line number Diff line change
@@ -1,97 +1,110 @@
import * as React from 'react';
import {connect} from 'react-redux';

import {gettext} from 'utils';
import {isPlanningItem} from '../utils';
import AgendaPreviewCoverages from './AgendaPreviewCoverages';
import {IAgendaItem, ICoverageItemAction, IUser, IAgendaPreviewConfig, IArticle} from 'interfaces';
import {IAgendaItem, ICoverageItemAction, IUser, IAgendaPreviewConfig, IArticle, IAgendaState} from 'interfaces';

interface IProps {
interface IOwnProps {
item: IAgendaItem;
planningId?: IAgendaItem['_id'];
user?: IUser['_id'];
wireItems?: Array<IArticle>;
coverageActions?: Array<ICoverageItemAction>;
previewGroup?: string;
restrictCoverageInfo?: boolean;
previewConfig: IAgendaPreviewConfig;
}

export class AgendaPreviewPlanning extends React.Component<IProps, any> {
static propTypes: any;
render() {
const {
item,
planningId,
wireItems,
coverageActions,
user,
previewGroup,
restrictCoverageInfo,
} = this.props;
interface IReduxStateProps {
wireItems?: Array<IArticle>;
}

const planningItems = item.planning_items || [];
const plan = planningItems.find((p) => p.guid === planningId);
const otherPlanningItems = planningItems.filter((p) => p.guid !== planningId);
type IProps = IOwnProps & IReduxStateProps;

if (isPlanningItem(item) || restrictCoverageInfo) {
return (
<AgendaPreviewCoverages
key={item.guid}
item={item}
plan={plan}
wireItems={wireItems}
actions={coverageActions}
user={user}
previewGroup={previewGroup}
restrictCoverageInfo={restrictCoverageInfo}
previewConfig={this.props.previewConfig}
/>
);
}
function AgendaPreviewPlanningComponent({
item,
planningId,
wireItems,
coverageActions,
user,
previewGroup,
restrictCoverageInfo,
previewConfig,
}: IProps) {
const planningItems = item.planning_items || [];
const plan = planningItems.find((p) => p.guid === planningId);
const otherPlanningItems = planningItems.filter((p) => p.guid !== planningId);

if (isPlanningItem(item) || restrictCoverageInfo) {
return (
<React.Fragment>
{!plan ? null : (
<div className="agenda-planning__container info-box">
<div className="info-box__content">
<span className="info-box__label">
{gettext('Planning Item')}
</span>
<AgendaPreviewCoverages
key={item.guid}
item={item}
plan={plan}
wireItems={wireItems}
actions={coverageActions}
user={user}
previewGroup={previewGroup}
restrictCoverageInfo={restrictCoverageInfo}
previewConfig={previewConfig}
/>
);
}

return (
<React.Fragment>
{!plan ? null : (
<div className="agenda-planning__container info-box">
<div className="info-box__content">
<span className="info-box__label">
{gettext('Planning Item')}
</span>
<AgendaPreviewCoverages
key={plan.guid}
item={item}
plan={plan}
wireItems={wireItems}
actions={coverageActions}
user={user}
previewGroup={previewGroup}
previewConfig={previewConfig}
/>
</div>
</div>
)}
{!otherPlanningItems.length ? null : (
<div className="agenda-planning__container info-box">
<div className="info-box__content">
<span className="info-box__label">
{plan == null ? gettext('Planning Items') : gettext('Other Planning Items')}
</span>
{otherPlanningItems.map((planningItem) => (
<AgendaPreviewCoverages
key={plan.guid}
key={planningItem.guid}
item={item}
plan={plan}
plan={planningItem}
wireItems={wireItems}
actions={coverageActions}
user={user}
previewGroup={previewGroup}
previewConfig={this.props.previewConfig}
previewConfig={previewConfig}
/>
</div>
</div>
)}
{!otherPlanningItems.length ? null : (
<div className="agenda-planning__container info-box">
<div className="info-box__content">
<span className="info-box__label">
{plan == null ? gettext('Planning Items') : gettext('Other Planning Items')}
</span>
{otherPlanningItems.map((planningItem: any) => (
<AgendaPreviewCoverages
key={planningItem.guid}
item={item}
plan={planningItem}
wireItems={wireItems}
actions={coverageActions}
user={user}
previewGroup={previewGroup}
previewConfig={this.props.previewConfig}
/>
))}
</div>
))}
</div>
)}
</React.Fragment>
);
}
</div>
)}
</React.Fragment>
);
}

const mapStateToProps = (state: IAgendaState): IReduxStateProps => ({
wireItems: state.agenda.agendaWireItems || [],
});

export const AgendaPreviewPlanning = connect<
IReduxStateProps,
{},
IOwnProps,
IAgendaState
>(mapStateToProps)(AgendaPreviewPlanningComponent);
Loading

0 comments on commit e6822f3

Please sign in to comment.