From 3c28fcf6e463b5f9e407952f7767333b04663c0e Mon Sep 17 00:00:00 2001 From: Bogdan Cochior <bogdan.cochior@thinslices.com> Date: Wed, 19 Sep 2018 10:09:09 +0300 Subject: [PATCH 1/2] feat(manuscriptCard): hide customId if it's missing --- .../src/ManuscriptCard.js | 2 +- scripts/wait-for-it.sh | 178 ++++++++++++++++++ 2 files changed, 179 insertions(+), 1 deletion(-) create mode 100755 scripts/wait-for-it.sh diff --git a/packages/component-faraday-ui/src/ManuscriptCard.js b/packages/component-faraday-ui/src/ManuscriptCard.js index f06c5557a..b82e966d4 100644 --- a/packages/component-faraday-ui/src/ManuscriptCard.js +++ b/packages/component-faraday-ui/src/ManuscriptCard.js @@ -52,7 +52,7 @@ const ManuscriptCard = ({ </Row> )} <Row alignItems="center" justify="flex-start" mb={1}> - <Text customId mr={1}>{`ID ${customId}`}</Text> + {customId && <Text customId mr={1}>{`ID ${customId}`}</Text>} {submitted && ( <DateParser humanizeThreshold={0} timestamp={submitted}> {timestamp => <Text mr={3}>Submitted on {timestamp}</Text>} diff --git a/scripts/wait-for-it.sh b/scripts/wait-for-it.sh new file mode 100755 index 000000000..ea896a848 --- /dev/null +++ b/scripts/wait-for-it.sh @@ -0,0 +1,178 @@ +#!/usr/bin/env bash +# Use this script to test if a given TCP host/port are available + +cmdname=$(basename $0) + +echoerr() { if [[ $QUIET -ne 1 ]]; then echo "$@" 1>&2; fi } + +usage() +{ + cat << USAGE >&2 +Usage: + $cmdname host:port [-s] [-t timeout] [-- command args] + -h HOST | --host=HOST Host or IP under test + -p PORT | --port=PORT TCP port under test + Alternatively, you specify the host and port as host:port + -s | --strict Only execute subcommand if the test succeeds + -q | --quiet Don't output any status messages + -t TIMEOUT | --timeout=TIMEOUT + Timeout in seconds, zero for no timeout + -- COMMAND ARGS Execute command with args after the test finishes +USAGE + exit 1 +} + +wait_for() +{ + if [[ $TIMEOUT -gt 0 ]]; then + echoerr "$cmdname: waiting $TIMEOUT seconds for $HOST:$PORT" + else + echoerr "$cmdname: waiting for $HOST:$PORT without a timeout" + fi + start_ts=$(date +%s) + while : + do + if [[ $ISBUSY -eq 1 ]]; then + nc -z $HOST $PORT + result=$? + else + (echo > /dev/tcp/$HOST/$PORT) >/dev/null 2>&1 + result=$? + fi + if [[ $result -eq 0 ]]; then + end_ts=$(date +%s) + echoerr "$cmdname: $HOST:$PORT is available after $((end_ts - start_ts)) seconds" + break + fi + sleep 1 + done + return $result +} + +wait_for_wrapper() +{ + # In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692 + if [[ $QUIET -eq 1 ]]; then + timeout $BUSYTIMEFLAG $TIMEOUT $0 --quiet --child --host=$HOST --port=$PORT --timeout=$TIMEOUT & + else + timeout $BUSYTIMEFLAG $TIMEOUT $0 --child --host=$HOST --port=$PORT --timeout=$TIMEOUT & + fi + PID=$! + trap "kill -INT -$PID" INT + wait $PID + RESULT=$? + if [[ $RESULT -ne 0 ]]; then + echoerr "$cmdname: timeout occurred after waiting $TIMEOUT seconds for $HOST:$PORT" + fi + return $RESULT +} + +# process arguments +while [[ $# -gt 0 ]] +do + case "$1" in + *:* ) + hostport=(${1//:/ }) + HOST=${hostport[0]} + PORT=${hostport[1]} + shift 1 + ;; + --child) + CHILD=1 + shift 1 + ;; + -q | --quiet) + QUIET=1 + shift 1 + ;; + -s | --strict) + STRICT=1 + shift 1 + ;; + -h) + HOST="$2" + if [[ $HOST == "" ]]; then break; fi + shift 2 + ;; + --host=*) + HOST="${1#*=}" + shift 1 + ;; + -p) + PORT="$2" + if [[ $PORT == "" ]]; then break; fi + shift 2 + ;; + --port=*) + PORT="${1#*=}" + shift 1 + ;; + -t) + TIMEOUT="$2" + if [[ $TIMEOUT == "" ]]; then break; fi + shift 2 + ;; + --timeout=*) + TIMEOUT="${1#*=}" + shift 1 + ;; + --) + shift + CLI=("$@") + break + ;; + --help) + usage + ;; + *) + echoerr "Unknown argument: $1" + usage + ;; + esac +done + +if [[ "$HOST" == "" || "$PORT" == "" ]]; then + echoerr "Error: you need to provide a host and port to test." + usage +fi + +TIMEOUT=${TIMEOUT:-15} +STRICT=${STRICT:-0} +CHILD=${CHILD:-0} +QUIET=${QUIET:-0} + +# check to see if timeout is from busybox? +# check to see if timeout is from busybox? +TIMEOUT_PATH=$(realpath $(which timeout)) +if [[ $TIMEOUT_PATH =~ "busybox" ]]; then + ISBUSY=1 + BUSYTIMEFLAG="-t" +else + ISBUSY=0 + BUSYTIMEFLAG="" +fi + +if [[ $CHILD -gt 0 ]]; then + wait_for + RESULT=$? + exit $RESULT +else + if [[ $TIMEOUT -gt 0 ]]; then + wait_for_wrapper + RESULT=$? + else + wait_for + RESULT=$? + fi +fi + +if [[ $CLI != "" ]]; then + if [[ $RESULT -ne 0 && $STRICT -eq 1 ]]; then + echoerr "$cmdname: strict mode, refusing to execute subprocess" + exit $RESULT + fi + exec "${CLI[@]}" +else + exit $RESULT +fi + -- GitLab From 32d62ef3155afa5225975ffa75db7f0b438502bf Mon Sep 17 00:00:00 2001 From: Bogdan Cochior <bogdan.cochior@thinslices.com> Date: Wed, 19 Sep 2018 11:24:52 +0300 Subject: [PATCH 2/2] feat(dashboard): hide customId till EQS passes --- .../component-faraday-selectors/src/index.js | 12 +++++++++ .../src/ManuscriptCard.js | 17 ++++++++----- .../src/components/Dashboard/Dashboard.js | 2 +- .../src/components/Dashboard/DashboardPage.js | 25 +++++-------------- 4 files changed, 30 insertions(+), 26 deletions(-) diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js index c90d2fec5..bc34c7a73 100644 --- a/packages/component-faraday-selectors/src/index.js +++ b/packages/component-faraday-selectors/src/index.js @@ -162,3 +162,15 @@ export const getAdminUsers = state => .map(s => s.user) .reverse() .value() + +const hideCustomIdStatuses = ['draft', 'technicalChecks'] +export const newestFirstParseCustomId = items => + chain(items) + .orderBy(['created'], ['desc']) + .map(item => ({ + ...item, + customId: + !hideCustomIdStatuses.includes(get(item, 'status', 'draft')) && + item.customId, + })) + .value() diff --git a/packages/component-faraday-ui/src/ManuscriptCard.js b/packages/component-faraday-ui/src/ManuscriptCard.js index b82e966d4..269c04018 100644 --- a/packages/component-faraday-ui/src/ManuscriptCard.js +++ b/packages/component-faraday-ui/src/ManuscriptCard.js @@ -55,15 +55,20 @@ const ManuscriptCard = ({ {customId && <Text customId mr={1}>{`ID ${customId}`}</Text>} {submitted && ( <DateParser humanizeThreshold={0} timestamp={submitted}> - {timestamp => <Text mr={3}>Submitted on {timestamp}</Text>} + {(timestamp, timeAgo) => ( + <Text + mr={3} + >{`Submitted on ${timestamp} (${timeAgo} ago)`}</Text> + )} </DateParser> )} <Text>{manuscriptType.label || type}</Text> - {journal && ( - <Text journal ml={1}> - {journal} - </Text> - )} + {journal && + (manuscriptType.label || type) && ( + <Text journal ml={1}> + {journal} + </Text> + )} </Row> <Row alignItems="center" justify="flex-start" mb={1}> <H4>Handling editor</H4> diff --git a/packages/components-faraday/src/components/Dashboard/Dashboard.js b/packages/components-faraday/src/components/Dashboard/Dashboard.js index 82137f785..0c106443f 100644 --- a/packages/components-faraday/src/components/Dashboard/Dashboard.js +++ b/packages/components-faraday/src/components/Dashboard/Dashboard.js @@ -23,6 +23,6 @@ const Dashboard = ({ export default compose( withProps(({ dashboard, filterItems }) => ({ - dashboardItems: filterItems(dashboard.all), + dashboardItems: filterItems(dashboard), })), )(Dashboard) diff --git a/packages/components-faraday/src/components/Dashboard/DashboardPage.js b/packages/components-faraday/src/components/Dashboard/DashboardPage.js index 944329379..6831dbc02 100644 --- a/packages/components-faraday/src/components/Dashboard/DashboardPage.js +++ b/packages/components-faraday/src/components/Dashboard/DashboardPage.js @@ -5,9 +5,12 @@ import { withJournal } from 'xpub-journal' import { ConnectPage } from 'xpub-connect' import { withRouter } from 'react-router-dom' import { compose, withContext } from 'recompose' -import { newestFirst, selectCurrentUser } from 'xpub-selectors' +import { selectCurrentUser } from 'xpub-selectors' -import { getUserPermissions } from 'pubsweet-component-faraday-selectors' +import { + getUserPermissions, + newestFirstParseCustomId, +} from 'pubsweet-component-faraday-selectors' import { Dashboard } from './' import { priorityFilter, orderFilter, withFiltersHOC } from '../Filters' @@ -18,24 +21,8 @@ export default compose( state => { const { collections, conversion } = state const currentUser = selectCurrentUser(state) - const sortedCollections = newestFirst(collections) + const dashboard = newestFirstParseCustomId(collections) - const dashboard = { - owner: sortedCollections.filter( - collection => - collection.owners && - collection.owners.some(owner => owner.id === currentUser.id), - ), - reviewer: sortedCollections.filter( - collection => - collection.reviewers && - collection.reviewers.some( - reviewer => reviewer && reviewer.user === currentUser.id, - ), - ), - - all: sortedCollections, - } const userPermissions = getUserPermissions(state) return { dashboard, -- GitLab