Fix Misc Bugs (#106)

* consider all proposals to be staked

* allow proposal titles to wrap

* rejected -> changes requested

* allow empty strings as tip addresses
This commit is contained in:
Danny Skubak 2019-12-09 17:00:01 -05:00 committed by Daniel Ternyak
parent 7e7650eeae
commit 96d0b9e30e
5 changed files with 14 additions and 17 deletions

View File

@ -717,12 +717,7 @@ class Proposal(db.Model):
@hybrid_property @hybrid_property
def is_staked(self): def is_staked(self):
# Don't use self.contributed since that ignores stake contributions return True
contributions = ProposalContribution.query \
.filter_by(proposal_id=self.id, status=ContributionStatus.CONFIRMED) \
.all()
funded = reduce(lambda prev, c: prev + Decimal(c.amount), contributions, 0)
return Decimal(funded) >= PROPOSAL_STAKING_AMOUNT
@hybrid_property @hybrid_property
def is_funded(self): def is_funded(self):

View File

@ -264,12 +264,14 @@ def update_proposal(milestones, proposal_id, rfp_opt_in, **kwargs):
@blueprint.route("/<proposal_id>/tips", methods=["PUT"]) @blueprint.route("/<proposal_id>/tips", methods=["PUT"])
@requires_team_member_auth @requires_team_member_auth
@body({ @body({
"address": fields.Str(required=False, missing=None, "address": fields.Str(required=False, missing=None),
validate=lambda r: validate_blockchain_get('/validate/address', {'address': r})),
"viewKey": fields.Str(required=False, missing=None) "viewKey": fields.Str(required=False, missing=None)
}) })
def update_proposal_tip_jar(proposal_id, address, view_key): def update_proposal_tip_jar(proposal_id, address, view_key):
if address is not None: if address is not None:
if address is not '':
validate_blockchain_get('/validate/address', {'address': address})
g.current_proposal.tip_jar_address = address g.current_proposal.tip_jar_address = address
if view_key is not None: if view_key is not None:
g.current_proposal.tip_jar_view_key = view_key g.current_proposal.tip_jar_view_key = view_key

View File

@ -365,8 +365,7 @@ def get_user_settings(user_id):
"emailSubscriptions": fields.Dict(required=False, missing=None), "emailSubscriptions": fields.Dict(required=False, missing=None),
"refundAddress": fields.Str(required=False, missing=None, "refundAddress": fields.Str(required=False, missing=None,
validate=lambda r: validate_blockchain_get('/validate/address', {'address': r})), validate=lambda r: validate_blockchain_get('/validate/address', {'address': r})),
"tipJarAddress": fields.Str(required=False, missing=None, "tipJarAddress": fields.Str(required=False, missing=None),
validate=lambda r: validate_blockchain_get('/validate/address', {'address': r})),
"tipJarViewKey": fields.Str(required=False, missing=None) # TODO: add viewkey validation here "tipJarViewKey": fields.Str(required=False, missing=None) # TODO: add viewkey validation here
}) })
def set_user_settings(user_id, email_subscriptions, refund_address, tip_jar_address, tip_jar_view_key): def set_user_settings(user_id, email_subscriptions, refund_address, tip_jar_address, tip_jar_view_key):
@ -382,8 +381,10 @@ def set_user_settings(user_id, email_subscriptions, refund_address, tip_jar_addr
if refund_address: if refund_address:
g.current_user.settings.refund_address = refund_address g.current_user.settings.refund_address = refund_address
# TODO: is additional validation needed similar to refund_address?
if tip_jar_address is not None: if tip_jar_address is not None:
if tip_jar_address is not '':
validate_blockchain_get('/validate/address', {'address': tip_jar_address})
g.current_user.settings.tip_jar_address = tip_jar_address g.current_user.settings.tip_jar_address = tip_jar_address
if tip_jar_view_key is not None: if tip_jar_view_key is not None:
g.current_user.settings.tip_jar_view_key = tip_jar_view_key g.current_user.settings.tip_jar_view_key = tip_jar_view_key

View File

@ -39,10 +39,10 @@ class ProfilePendingCCR extends React.Component<Props, State> {
const st = { const st = {
[STATUS.REJECTED]: { [STATUS.REJECTED]: {
color: 'red', color: 'red',
tag: 'Rejected', tag: 'Changes Requested',
blurb: ( blurb: (
<> <>
<div>This request was rejected for the following reason:</div> <div>This request has changes requested for the following reason:</div>
<q>{rejectReason}</q> <q>{rejectReason}</q>
<div>You may edit this request and re-submit it for approval.</div> <div>You may edit this request and re-submit it for approval.</div>
</> </>
@ -50,7 +50,7 @@ class ProfilePendingCCR extends React.Component<Props, State> {
}, },
[STATUS.PENDING]: { [STATUS.PENDING]: {
color: 'purple', color: 'purple',
tag: 'Pending', tag: 'Pending Request',
blurb: ( blurb: (
<div> <div>
You will receive an email when this request has completed the review process. You will receive an email when this request has completed the review process.
@ -63,7 +63,7 @@ class ProfilePendingCCR extends React.Component<Props, State> {
<div className="ProfilePending"> <div className="ProfilePending">
<div className="ProfilePending-block"> <div className="ProfilePending-block">
<Link to={`/ccrs/${ccrId}`} className="ProfilePending-title"> <Link to={`/ccrs/${ccrId}`} className="ProfilePending-title">
{title} <Tag color={st[status].color}>{st[status].tag} Request</Tag> {title} <Tag color={st[status].color}>{st[status].tag}</Tag>
</Link> </Link>
<div className={`ProfilePending-status is-${status.toLowerCase()}`}> <div className={`ProfilePending-status is-${status.toLowerCase()}`}>
{st[status].blurb} {st[status].blurb}

View File

@ -81,8 +81,7 @@
@media (min-width: @collapse-width) { @media (min-width: @collapse-width) {
overflow: hidden; overflow: hidden;
white-space: nowrap; text-overflow: unset;
text-overflow: ellipsis;
} }
@media (max-width: @collapse-width) { @media (max-width: @collapse-width) {