Skip to content

Commit

Permalink
Merge branch 'develop' into refresh-button-rows
Browse files Browse the repository at this point in the history
  • Loading branch information
dzonidoo committed Dec 23, 2024
2 parents de5888b + e464aad commit 2af89fd
Show file tree
Hide file tree
Showing 51 changed files with 920 additions and 579 deletions.
16 changes: 6 additions & 10 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,13 @@ updates:
directory: "/" # Location of package manifests
schedule:
interval: "weekly"

- package-ecosystem: "npm" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
ignore:
- dependency-name: "webpack"
versions: [">=5.0.0"]
- dependency-name: "webpack-dev-server"
versions: [">=5.0.0"]
- dependency-name: "css-loader"
versions: [">=6.0.0"]
- dependency-name: "style-loader"
versions: [">=2.0.0"]

- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
28 changes: 24 additions & 4 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,37 @@ on: [push, pull_request]
jobs:
e2e:
runs-on: ubuntu-latest

strategy:
fail-fast: false
matrix:
python-version: ['3.8']
python-version: ['3.10']
node-version: ['14']

services:
redis:
image: redis:alpine
ports:
- "6379:6379"

mongo:
image: mongo:6
ports:
- "27017:27017"

elastic:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.25
ports:
- "9200:9200"
env:
discovery.type: single-node

steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- uses: actions/setup-python@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
Expand Down
24 changes: 20 additions & 4 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,25 @@ jobs:

strategy:
matrix:
python-version: ['3.8', '3.10']
python-version: ['3.10']

services:
redis:
image: redis:alpine
ports:
- "6379:6379"

mongo:
image: mongo:6
ports:
- "27017:27017"

elastic:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.25
ports:
- "9200:9200"
env:
discovery.type: single-node

steps:
- uses: actions/checkout@v4
Expand All @@ -19,9 +37,7 @@ jobs:
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: docker compose
run: docker compose -f .actions-docker-compose.yml up -d
cache: 'pip'

- run: |
sudo apt-get update
Expand Down
4 changes: 2 additions & 2 deletions assets/agenda/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ function setListGroupsAndLoadHiddenItems(items: Array<IAgendaItem>, next?: boole

// If there are groups shown, then load the hidden items for those groups
const state = getState();
const {activeGrouping, featuredOnly} = state.agenda;
const {activeGrouping, featuredOnly, itemType} = state.agenda;
const {fromDate, toDate, searchParams} = getAgendaSearchParamsFromState(state);

let minDate: moment.Moment | undefined;
Expand Down Expand Up @@ -376,7 +376,7 @@ function setListGroupsAndLoadHiddenItems(items: Array<IAgendaItem>, next?: boole
}

const groups: Array<IAgendaListGroup> = (searchParams.sortQuery ?? '') === '' ?
groupItems(items, minDate, maxDate, activeGrouping, featuredOnly) :
groupItems(items, minDate, maxDate, activeGrouping, featuredOnly, itemType) :
[{
date: '',
items: items.map((item) => item._id),
Expand Down
74 changes: 38 additions & 36 deletions assets/agenda/components/AgendaCoverages.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -55,44 +55,46 @@ export default function AgendaCoverages({
))}
</div>
)}
{coveragesWithState.map((coverage: ICoverage) => {
return (
<div
className={classNames(
'coverage-item',
{'coverage-item--clickable': onClick}
)}
key={coverage.coverage_id}
onClick={onClick}
title={onClick ? gettext('Open {{agenda}} in a new tab', window.sectionNames) : ''}
>
{coverageFieldsToRender.map((field) => {
const FieldComponent = coverageFieldToComponentMap[field];
<div className='coverage-item__list'>
{coveragesWithState.map((coverage: ICoverage) => {
return (
<div
className={classNames(
'coverage-item',
{'coverage-item--clickable': onClick}
)}
key={coverage.coverage_id}
onClick={onClick}
title={onClick ? gettext('Open {{agenda}} in a new tab', window.sectionNames) : ''}
>
{coverageFieldsToRender.map((field) => {
const FieldComponent = coverageFieldToComponentMap[field];

if (FieldComponent == null) {
console.warn(`Component not registered for field ${field}`);
return null;
}
if (FieldComponent == null) {
console.warn(`Component not registered for field ${field}`);
return null;
}

return (
<FieldComponent
key={field}
agenda={item}
coverage={coverage}
wireItems={wireItems}
actions={actions}
user={user}
hideViewContentItems={hideViewContentItems}
fullCoverage={
(item.planning_items || [])
.find((planningItem) => planningItem._id === coverage.planning_id)
?.coverages?.find((coverageItem) => coverageItem.coverage_id === coverage.coverage_id)
}
/>
);
})}
</div>
);})}
return (
<FieldComponent
key={field}
agenda={item}
coverage={coverage}
wireItems={wireItems}
actions={actions}
user={user}
hideViewContentItems={hideViewContentItems}
fullCoverage={
(item.planning_items || [])
.find((planningItem) => planningItem._id === coverage.planning_id)
?.coverages?.find((coverageItem) => coverageItem.coverage_id === coverage.coverage_id)
}
/>
);
})}
</div>
);})}
</div>
</React.Fragment>
);
}
6 changes: 4 additions & 2 deletions assets/agenda/components/AgendaList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ interface IStateProps {
userType: IUserType;
hiddenGroupsShown: {[dateString: string]: boolean};
itemTypeFilter: IAgendaState['agenda']['itemType'];
activeSortQuery: string;
}

interface IDispatchProps {
Expand Down Expand Up @@ -356,7 +357,7 @@ class AgendaList extends React.Component<IProps, IState> {
const isRead = version == null
? this.props.readItems[itemId] != null // event
: version === this.props.readItems[itemId]; // planning item

return plans.length > 0 ? (
<React.Fragment key={`${itemId}--${group.date}`}>
{plans.map((plan) => (
Expand Down Expand Up @@ -435,7 +436,7 @@ class AgendaList extends React.Component<IProps, IState> {
}}
onScroll={this.props.onScroll}
>
{groupedItems.length === 1 ?
{groupedItems.length === 1 && this.props.activeSortQuery !== '' ?
this.renderGroupItems(groupedItems[0], false) :
groupedItems.map((group) => (
<React.Fragment key={group.date}>
Expand Down Expand Up @@ -495,6 +496,7 @@ const mapStateToProps = (state: IAgendaState): IStateProps => ({
userType: state.userType,
hiddenGroupsShown: hiddenGroupsShownSelector(state),
itemTypeFilter: state.agenda?.itemType,
activeSortQuery: state.search.activeSortQuery || '',
});

const mapDispatchToProps: IDispatchProps = {
Expand Down
4 changes: 2 additions & 2 deletions assets/agenda/components/AgendaPreviewCoverages.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class AgendaPreviewCoverages extends React.Component<IProps, IState> {
return (item.item_type === 'planning' || restrictCoverageInfo) ? (
<React.Fragment>
{displayCoverages.current.length > 0 && (
<PreviewBox label={gettext('Coverages:')}>
<PreviewBox label={gettext('Coverages')}>
<AgendaCoverages
item={item}
coverages={displayCoverages.current}
Expand All @@ -66,7 +66,7 @@ class AgendaPreviewCoverages extends React.Component<IProps, IState> {
)}

{displayCoverages.previous.length > 0 && (
<PreviewBox label={gettext('Previous Coverages:')}>
<PreviewBox label={gettext('Previous Coverages')}>
<AgendaCoverages
item={item}
coverages={displayCoverages.previous}
Expand Down
94 changes: 48 additions & 46 deletions assets/agenda/components/AgendaPreviewEvent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -61,54 +61,56 @@ class AgendaPreviewEventComponent extends React.Component<any, any> {
}

return (
<div className="agenda-planning__container info-box">
<div className="info-box__content">
<span className="info-box__label">
<div className="agenda-planning__container">
<div className="preview__content-block">
<div className="preview__content-block-title">
{gettext('Associated Event')}
</span>
<div className={classNames(
'agenda-planning__preview',
{'agenda-planning__preview--expanded': this.state.expanded}
)}>
{this.state.loading ? (
<div className="spinner-border text-success" />
) : (
<React.Fragment>
<div className="agenda-planning__preview-header">
<a href='#' onClick={this.toggleExpanded}>
<i className={classNames('icon-small--arrow-down me-1', {
'rotate-90-ccw': !this.state.expanded,
})} />
</a>
<h3 onClick={this.toggleExpanded}>{getName(this.props.event)}</h3>
</div>
<div className="agenda-planning__preview-date">
<AgendaTime item={this.props.event}>
<AgendaListItemLabels item={this.props.event} />
</AgendaTime>
</div>
{!this.state.expanded ? null : (
<div className="agenda-planning__preview-metadata">
<AgendaMeta item={this.props.event} />
<AgendaLongDescription item={this.props.event} />
<AgendaPreviewAttachments item={this.props.event} />
<AgendaTags
item={this.props.event}
isItemDetail={false}
/>
<AgendaEdNote
item={this.props.event}
plan={{}}
secondaryNoteField="state_reason"
/>
<AgendaInternalNote
internalNote={getInternalNote(this.props.event, {})}
mt2={!!(this.props.event.ednote || this.props.event.state_reason)}
/>
</div>
<div className='agenda-planning__preview-list'>
<div className={classNames(
'agenda-planning__preview',
{'agenda-planning__preview--expanded': this.state.expanded}
)}>
{this.state.loading ? (
<div className="spinner-border text-success" />
) : (
<React.Fragment>
<div className="agenda-planning__preview-header">
<a href='#' onClick={this.toggleExpanded}>
<i className={classNames('icon-small--arrow-down me-1', {
'rotate-90-ccw': !this.state.expanded,
})} />
</a>
<h3 onClick={this.toggleExpanded}>{getName(this.props.event)}</h3>
</div>
<div className="agenda-planning__preview-date">
<AgendaTime item={this.props.event}>
<AgendaListItemLabels item={this.props.event} />
</AgendaTime>
</div>
)}
</React.Fragment>
)}
{!this.state.expanded ? null : (
<div className="agenda-planning__preview-metadata">
<AgendaMeta item={this.props.event} />
<AgendaLongDescription item={this.props.event} />
<AgendaPreviewAttachments item={this.props.event} />
<AgendaTags
item={this.props.event}
isItemDetail={false}
/>
<AgendaEdNote
item={this.props.event}
plan={{}}
secondaryNoteField="state_reason"
/>
<AgendaInternalNote
internalNote={getInternalNote(this.props.event, {})}
mt2={!!(this.props.event.ednote || this.props.event.state_reason)}
/>
</div>
)}
</React.Fragment>
)}
</div>
</div>
</div>
</div>
Expand Down
4 changes: 2 additions & 2 deletions assets/agenda/components/AgendaPreviewPlanning.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ function AgendaPreviewPlanningComponent({
return (
<React.Fragment>
{!plan ? null : (
<div className="agenda-planning__container info-box">
<div className="agenda-planning__container">
<div className="info-box__content">
<span className="info-box__label">
{gettext('Planning Item')}
Expand All @@ -74,7 +74,7 @@ function AgendaPreviewPlanningComponent({
</div>
)}
{!otherPlanningItems.length ? null : (
<div className="agenda-planning__container info-box">
<div className="agenda-planning__container">
<div className="info-box__content">
<span className="info-box__label">
{plan == null ? gettext('Planning Items') : gettext('Other Planning Items')}
Expand Down
Loading

0 comments on commit 2af89fd

Please sign in to comment.