Skip to content

Commit

Permalink
Merge branch 'master' into feature/animated-vote-on-card
Browse files Browse the repository at this point in the history
  • Loading branch information
bpierre committed Nov 8, 2019
2 parents f928c93 + 51260c1 commit 0300a57
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 16 deletions.
4 changes: 2 additions & 2 deletions apps/voting/app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
"private": true,
"license": "AGPL-3.0-or-later",
"dependencies": {
"@aragon/api": "^2.0.0-beta.6",
"@aragon/api-react": "^2.0.0-beta.6",
"@aragon/api": "^2.0.0-beta.8",
"@aragon/api-react": "^2.0.0-beta.8",
"@aragon/ui": "^1.0.0-alpha.23",
"bn.js": "^4.11.8",
"date-fns": "2.0.0-alpha.22",
Expand Down
2 changes: 2 additions & 0 deletions apps/voting/app/src/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,11 @@ const App = React.memo(function App() {
selectVote,
votes,
} = useAppLogic()

const { layoutName } = useLayout()
const compactMode = layoutName === 'small'
const handleBack = useCallback(() => selectVote(-1), [selectVote])

const {
filteredVotes,
voteStatusFilter,
Expand Down
42 changes: 28 additions & 14 deletions apps/voting/app/src/app-logic.js
Original file line number Diff line number Diff line change
@@ -1,35 +1,49 @@
import React, { useCallback, useMemo, useState } from 'react'
import { AragonApi, useApi, useAppState } from '@aragon/api-react'
import { AragonApi, useApi, useAppState, usePath } from '@aragon/api-react'
import appStateReducer from './app-state-reducer'
import { EMPTY_CALLSCRIPT } from './evmscript-utils'
import usePanelState from './hooks/usePanelState'
import useVotes from './hooks/useVotes'
import { noop } from './utils'
import { VOTE_YEA } from './vote-types'

const VOTE_ID_PATH_RE = /^\/vote\/([0-9]+)\/?$/
const NO_VOTE_ID = '-1'

function voteIdFromPath(path) {
if (!path) {
return NO_VOTE_ID
}
const matches = path.match(VOTE_ID_PATH_RE)
return matches ? matches[1] : NO_VOTE_ID
}

// Get the vote currently selected, or null otherwise.
export function useSelectedVote(votes) {
const [selectedVoteId, setSelectedVoteId] = useState('-1')
const [path, requestPath] = usePath()
const { ready } = useAppState()

// The memoized vote currently selected.
const selectedVote = useMemo(() => {
// The `ready` check prevents a vote to be selected
// until the app state is fully ready.
if (!ready || selectedVoteId === '-1') {
const voteId = voteIdFromPath(path)

// The `ready` check prevents a vote to be
// selected until the app state is fully ready.
if (!ready || voteId === NO_VOTE_ID) {
return null
}
return votes.find(vote => vote.voteId === selectedVoteId) || null
}, [selectedVoteId, votes, ready])

return [
selectedVote,
return votes.find(vote => vote.voteId === voteId) || null
}, [path, ready, votes])

const selectVote = useCallback(
voteId => {
requestPath(String(voteId) === NO_VOTE_ID ? '' : `/vote/${voteId}/`)
},
[requestPath]
)

// setSelectedVoteId() is exported directly: since `selectedVoteId` is
// set in the `selectedVote` dependencies, it means that the useMemo()
// will be updated every time `selectedVoteId` changes.
setSelectedVoteId,
]
return [selectedVote, selectVote]
}

// Create a new vote
Expand Down

0 comments on commit 0300a57

Please sign in to comment.