Skip to content

Commit

Permalink
Merge pull request #1295 from osmlab/prerelease
Browse files Browse the repository at this point in the history
v3.6.5
  • Loading branch information
nrotstan authored Jul 1, 2020
2 parents 2e92ca8 + 02efb9c commit e91cb84
Show file tree
Hide file tree
Showing 149 changed files with 19,282 additions and 17,072 deletions.
3 changes: 3 additions & 0 deletions .babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"presets": ["react-app"]
}
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
12
3 changes: 2 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
language: node_js
sudo: false
node_js:
- "10"
- 10
- 12
env:
- NODE_OPTIONS="--max-old-space-size=4096"
cache:
Expand Down
26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,32 @@ The format is based on
This project adheres to
[Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## [v3.6.5] - 2020-07-01
### Added
- Updated community translations (huge thanks to all the translators!)
- Map of nearby tasks on Task Review confirmation step
- Overlay of prioritized bounds on Challenge tasks map for challenge managers
- Support for RFC 7464 compliant formatting of line-by-line GeoJSON
- Include project and task link in Following activity
- Tri-State select-all control on Inbox page
- MR-tag metrics widget for challenge managers
- Basic global activity page
- Task attachments with initial support for JOSM reference layers
- [internal] Upgrade to node v12 LTS
- [internal] Numerous upgrades to package dependencies
- [internal] Various updates required for upgraded package compatibility

### Fixed
- Inform user if logged out when trying to lock a task (#1233)
- Positioning of confirmation modal
- Unclickable controls on Teams page for some browser window sizes
- Error when using multiple location rules
- Display of Featured Challenges widget on Safari
- Various display issues on Project Details page
- Task Review table page-size reset after every task review
- Clean up any negative timestamps left by bug maproulette/maproulette2#728


## [v3.6.4] - 2020-06-09
### Added
- Updated community translations
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ not use the production server for development purposes.**

### Basic Dependencies:

* [Node 10 LTS](https://nodejs.org/)
* [Node 12 LTS](https://nodejs.org/)
* [yarn](https://yarnpkg.com/)
* [jq](https://stedolan.github.io/jq/)
* [curl](https://curl.haxx.se/)
Expand Down
102 changes: 49 additions & 53 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
{
"name": "maproulette3",
"version": "3.6.4",
"version": "3.6.5",
"private": true,
"dependencies": {
"@apollo/client": "^3.0.0-beta.44",
"@apollo/client": "3.0.0-rc.7",
"@mapbox/geo-viewport": "^0.4.0",
"@mapbox/geojsonhint": "^2.0.1",
"@nivo/bar": "^0.61.1",
"@nivo/line": "^0.61.1",
"@nivo/radar": "^0.61.1",
"@turf/bbox": "^5.1.5",
"@turf/bbox-polygon": "^5.1.5",
"@turf/boolean-disjoint": "^5.1.5",
"@turf/center": "^5.1.5",
"@mapbox/geojsonhint": "^3.0.0",
"@nivo/bar": "^0.62.0",
"@nivo/line": "^0.62.0",
"@nivo/radar": "^0.62.0",
"@rjsf/core": "^2.1.0",
"@turf/bbox": "^6.0.1",
"@turf/bbox-polygon": "^6.0.1",
"@turf/boolean-disjoint": "^6.0.2",
"@turf/center": "^6.0.1",
"@turf/centroid": "^6.0.2",
"@turf/distance": "^6.0.1",
"@turf/invariant": "^5.1.5",
"@turf/invariant": "^6.1.2",
"@turf/nearest-point-on-line": "^6.0.2",
"bulma": "0.6.0",
"bulma-badge": "^0.1.0",
Expand All @@ -25,73 +26,68 @@
"bulma-timeline": "^1.1.2",
"classnames": "^2.2.5",
"date-fns": "^1.29.0",
"downshift": "^2.0.3",
"downshift": "^5.4.3",
"file-saver": "^2.0.2",
"fuse.js": "^3.1.0",
"graphql": "^15.0.0",
"handlebars": "^4.2.0",
"leaflet": "^1.5.1",
"leaflet-lasso": "^2.0.4",
"fuse.js": "^6.2.0",
"graphql": "^15.1.0",
"handlebars": "^4.7.6",
"leaflet": "^1.6.0",
"leaflet-lasso": "^2.1.0",
"leaflet-vectoricon": "https://github.com/nrotstan/Leaflet.VectorIcon.git#with-viewbox",
"leaflet.markercluster": "^1.4.1",
"localforage": "^1.5.2",
"mapillary-js": "^2.18.0",
"mapillary-js": "^2.20.0",
"node-sass": "^4.11.0",
"normalize.css": "^7.0.0",
"normalizr": "^3.2.3",
"normalizr": "^3.6.0",
"parse-link-header": "^1.0.1",
"piwik-react-router": "^0.12.1",
"prop-types": "^15.6.0",
"query-string": "^5.1.0",
"react": "^16.8.0",
"react-animate-height": "^2.0.7",
"react-beautiful-dnd": "^12.2.0",
"query-string": "^6.13.1",
"react": "^16.13.1",
"react-beautiful-dnd": "^13.0.0",
"react-burger-menu": "^2.4.4",
"react-calendar-heatmap": "^1.6.3",
"react-clickout": "^3.0.8",
"react-copy-to-clipboard": "^5.0.1",
"react-datepicker": "^2.3.0",
"react-datepicker": "^3.0.0",
"react-delayed": "^0.2.0",
"react-dom": "^16.8.0",
"react-dom-confetti": "^0.0.10",
"react-dropzone": "^10.1.5",
"react-elastic-carousel": "^0.4.1",
"react-grid-layout": "^0.16.6",
"react-intl": "^2.9.0",
"react-intl-formatted-duration": "^3.0.0",
"react-jsonschema-form": "1.5.0",
"react-jsonschema-form-async": "^0.2.0",
"react-leaflet": "^2.4.0",
"react-leaflet-bing": "^4.1.0",
"react-leaflet-markercluster": "^2.0.0-rc3",
"react-dom": "^16.13.1",
"react-dom-confetti": "^0.1.3",
"react-dropzone": "^11.0.1",
"react-elastic-carousel": "^0.6.4",
"react-grid-layout": "^0.18.3",
"react-intl": "^4.6.9",
"react-intl-formatted-duration": "^4.0.0",
"react-leaflet": "^2.7.0",
"react-leaflet-bing-v2": "^5.0.1",
"react-leaflet-markercluster": "^2.0.0",
"react-onclickoutside": "^6.6.3",
"react-redux": "^5.0.5",
"react-responsive": "^4.1.0",
"react-router-dom": "^4.2.2",
"react-scripts": "3.3.1",
"react-share": "^1.16.0",
"react-syntax-highlighter": "^10.3.0",
"react-table": "^6.7.6",
"react-redux": "^7.2.0",
"react-responsive": "^8.1.0",
"react-router": "^5.2.0",
"react-router-dom": "^5.2.0",
"react-scripts": "3.4.1",
"react-share": "^4.2.0",
"react-syntax-highlighter": "^12.2.1",
"react-table-6": "^6.11.0",
"react-tagsinput": "^3.19.0",
"react-transition-group": "^2.2.1",
"redux": "^3.7.0",
"redux-persist": "^5.10.0",
"redux": "^4.0.5",
"redux-thunk": "^2.2.0",
"remark": "^7.0.1",
"remark-external-links": "^3.0.0",
"remark-react": "^6.0.0",
"remark": "^12.0.0",
"remark-external-links": "^6.1.0",
"remark-react": "^7.0.1",
"route-matcher": "^0.1.0",
"stale-lru-cache": "^5.1.1",
"styled-components": "^5.1.0",
"uuid": "^3.3.2",
"uuid": "^8.1.0",
"uuid-time": "^1.0.0",
"vkbeautify": "^0.99.3",
"xmltojson": "^1.3.5"
},
"devDependencies": {
"combine-react-intl-messages": "^1.0.6",
"enzyme": "^3.2.0",
"enzyme-adapter-react-16": "^1.1.1",
"extract-react-intl-messages": "^4.1.1",
"npm-run-all": "^4.1.1",
"postcss-cli": "^7.1.0",
"postcss-import": "^12.0.1",
Expand All @@ -111,7 +107,7 @@
"scripts": {
"build-postcss": "postcss src/styles/index.css -o src/index.css",
"watch-postcss": "postcss src/styles/index.css -o src/index.css -w",
"build-intl": "yarn run combine-messages -i './src/**/*.js' -o './src/lang/en-US.json'",
"build-intl": "NODE_ENV=production yarn run extract-messages -l=en-US -o src/lang/ -d en-US --flat -f json 'src/**/!(*.test).js'",
"update-layers": "node scripts/update_layers.js",
"update-layers-prod": "NODE_ENV=production node scripts/update_layers.js",
"start-js": "react-scripts start",
Expand Down
2 changes: 2 additions & 0 deletions src/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import InspectTask from './components/AdminPane/Manage/InspectTask/InspectTask'
import Review from './pages/Review/Review'
import Inbox from './pages/Inbox/Inbox'
import Teams from './pages/Teams/Teams'
import GlobalActivity from './pages/GlobalActivity/GlobalActivity'
import PageNotFound from './components/PageNotFound/PageNotFound'
import { resetCache } from './services/Server/RequestCache'
import WithCurrentUser from './components/HOCs/WithCurrentUser/WithCurrentUser'
Expand Down Expand Up @@ -111,6 +112,7 @@ export class App extends Component {
<CachedRoute path='/review' component={Review} />
<CachedRoute path='/inbox' component={Inbox} />
<CachedRoute path='/teams' component={Teams} />
<CachedRoute path='/activity' component={GlobalActivity} />
<CachedRoute path='/challenge/:challengeId/leaderboard' component={ChallengeLeaderboard} />
<CachedRoute path='/project/:projectId/leaderboard' component={ProjectLeaderboard} />
<CachedRoute path='/country/:countryCode/leaderboard' component={CountryLeaderboard} />
Expand Down
95 changes: 95 additions & 0 deletions src/components/ActivityListing/ActivityDescription.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import React from 'react'
import PropTypes from 'prop-types'
import classNames from 'classnames'
import { FormattedMessage } from 'react-intl'
import { Link } from 'react-router-dom'
import _isFinite from 'lodash/isFinite'
import _get from 'lodash/get'
import { ActivityItemType, messagesByType }
from '../../services/Activity/ActivityItemTypes/ActivityItemTypes'
import { ActivityActionType, messagesByAction }
from '../../services/Activity/ActivityActionTypes/ActivityActionTypes'
import { messagesByStatus }
from '../../services/Task/TaskStatus/TaskStatus'
import ActivityTime from './ActivityTime'
import messages from './Messages'

/**
* Displays a description of an activity entry. Primarily intended for use in
* activity timelines, but also supports a simplified rendering suitable for
* other uses via the simplified prop
*
* @author [Neil Rotstan](https://github.com/nrotstan)
*/
export const ActivityDescription = props => {
const challengeName =
props.entry.typeId === ActivityItemType.task ?
props.entry.parentName :
null

return (
<div
className={classNames(
"mr-flex mr-flex-col",
{"mr-timeline__period mr-timeline__period--vcentered": !props.simplified},
)}
>
<div className="mr-flex mr-justify-between mr-items-center">
<ActivityTime {...props} entry={props.entry} />
{props.simplified ?
<div className="mr-w-4"></div> :
<div className="mr-border-b-2 mr-border-white-10 mr-w-48 mr-mx-2 mr-flex-grow"></div>
}
<Link to={`/user/metrics/${props.entry.user.id}`} className="mr-flex-grow-0">
{props.entry.user.osmProfile.displayName}
</Link>
</div>
<div className={props.simplified ? "mr-mt-2 mr-break-words" : "mr-mt-5 mr-text-base mr-break-words"}>
<Link to={`/browse/challenges/${props.entry.parentId}`}>
{challengeName}
</Link>
</div>
{_get(props.entry, 'challenge.general.parent.id') &&
<div className="mr-break-words mr-links-grey-light mr-mb-4">
<Link
to={`/browse/projects/${props.entry.challenge.general.parent.id}`}
className={props.simplified ? "mr-text-xs" : "mr-text-sm"}
>
{props.entry.challenge.general.parent.displayName || props.entry.challenge.general.parent.name}
</Link>
</div>
}
<div>
{_isFinite(props.entry.count) &&
<span className="mr-badge mr-mr-2 mr-mt-1">{props.entry.count}</span>
}
<span>
<FormattedMessage {...messagesByAction[props.entry.action]} />
</span> <Link to={`/challenge/${props.entry.parentId}/task/${props.entry.itemId}`}>
<FormattedMessage {...messagesByType[props.entry.typeId]} />
</Link> {
props.entry.action === ActivityActionType.taskStatusSet &&
_isFinite(props.entry.status) &&
<React.Fragment>
<FormattedMessage
{...messages.statusTo}
/> <FormattedMessage
{...messagesByStatus[props.entry.status]}
/>
</React.Fragment>
}
</div>
</div>
)
}

ActivityDescription.propTypes = {
entry: PropTypes.object.isRequired,
simplified: PropTypes.bool,
}

ActivityDescription.defaultProps = {
simplified: false,
}

export default ActivityDescription
Loading

0 comments on commit e91cb84

Please sign in to comment.