Many small overall UI improvements

- proxy are now aware of their respective features;
- updated account status info and added also proxy info (especially to show when using an offline copy)
- conditionally enabled different features across the UI, based on user account / proxy available features
This commit is contained in:
Giulio Cesare Solaroli
2015-03-10 22:59:24 +01:00
parent 3d809a71db
commit 187959fd1e
19 changed files with 270 additions and 132 deletions

View File

@@ -31,6 +31,15 @@ Clipperz.PM.UI.Components.Cards.CommandToolbar = React.createClass({
propTypes: {
// 'label': React.PropTypes.string.isRequired,
// 'loading': React.PropTypes.bool,
'features': React.PropTypes.array.isRequired,
},
features: function () {
return this.props['features'];
},
isFeatureEnabled: function (aValue) {
return (this.features().indexOf(aValue) > -1);
},
//----------------------------------------------------------------------------
@@ -40,29 +49,17 @@ Clipperz.PM.UI.Components.Cards.CommandToolbar = React.createClass({
},
//----------------------------------------------------------------------------
// EDIT_CARD -> archive, edit
// DELETE_CARD -> delete
// ADD_CARD -> clone
commands: function () {
var archiveLabel = this.props['_isArchived'] ? "restore" : "archive";
return {
'delete': {
'label': "delete",
'broadcastEvent': 'deleteCard'
},
'archive': {
'label': this.props['_isArchived'] ? "restore" : "archive",
'broadcastEvent': 'toggleArchiveCard'
},
// 'share': {
// 'label': "share",
// 'broadcastEvent': 'shareCard'
// },
'clone': {
'label': "clone",
'broadcastEvent': 'cloneCard'
},
'edit': {
'label': "edit",
'broadcastEvent': 'editCard'
}
'delete': { 'label': "delete", 'broadcastEvent': 'deleteCard', 'enabled': this.isFeatureEnabled('DELETE_CARD')},
'archive': { 'label': archiveLabel, 'broadcastEvent': 'toggleArchiveCard', 'enabled': this.isFeatureEnabled('EDIT_CARD')},
// 'share': { 'label': "share", 'broadcastEvent': 'shareCard' },
'clone': { 'label': "clone", 'broadcastEvent': 'cloneCard', 'enabled': this.isFeatureEnabled('ADD_CARD')},
'edit': { 'label': "edit", 'broadcastEvent': 'editCard', 'enabled': this.isFeatureEnabled('EDIT_CARD')}
};
},
@@ -92,7 +89,12 @@ Clipperz.PM.UI.Components.Cards.CommandToolbar = React.createClass({
}
return React.DOM.ul({}, MochiKit.Base.map(function (aCommand) {
return React.DOM.li({'className':aCommand['broadcastEvent'], 'onClick':commandHandler, 'data-broadcast-event':aCommand['broadcastEvent']}, [React.DOM.span({}, aCommand['label'])]);
var classes = {};
classes[aCommand['broadcastEvent']] = true;
classes['enabled'] = aCommand['enabled'];
classes['disabled'] = !aCommand['enabled'];
return React.DOM.li({'className':React.addons.classSet(classes), 'onClick':aCommand['enabled'] ? commandHandler : null, 'data-broadcast-event':aCommand['broadcastEvent']}, [React.DOM.span({}, aCommand['label'])]);
}, commandValues));
},

View File

@@ -34,6 +34,7 @@ Clipperz.PM.UI.Components.Cards.Detail = React.createClass({
result = this.props['selectedCard'];
if (result) {
result['features'] = this.props['features'];
result['style'] = this.props['style'];
result['ask'] = (this.props['style'] == 'narrow') ? this.props['ask'] : null;
result['showGlobalMask'] = this.props['showGlobalMask'];

View File

@@ -30,12 +30,23 @@ Clipperz.PM.UI.Components.Cards.List = React.createClass({
propTypes: {
'cards': React.PropTypes.array,
'featureSet': React.PropTypes.oneOf(['FULL', 'EXPIRED', 'TRIAL', 'OFFLINE']).isRequired,
'featureSet': React.PropTypes.oneOf(['FULL', 'EXPIRED', 'TRIAL']).isRequired,
'features': React.PropTypes.array.isRequired,
'selectedCard': React.PropTypes.object
},
features: function () {
return this.props['features'];
},
isFeatureEnabled: function (aValue) {
return (this.features().indexOf(aValue) > -1);
},
handleClick: function (anEvent) {
MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'selectCard', {'reference':anEvent.currentTarget.dataset.reference, 'label':anEvent.currentTarget.dataset.label}, true);
if (this.isFeatureEnabled('CARD_DETAILS')) {
MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'selectCard', {'reference':anEvent.currentTarget.dataset.reference, 'label':anEvent.currentTarget.dataset.label}, true);
}
},
renderItem: function (anItem) {
@@ -70,7 +81,7 @@ Clipperz.PM.UI.Components.Cards.List = React.createClass({
classes[this.props['style']] = true;
return React.DOM.div({'key':'cardList', 'className':React.addons.classSet(classes)}, [
React.DOM.ul({}, MochiKit.Base.map(this.renderItem, cards))
this.isFeatureEnabled('LIST_CARDS') ? React.DOM.ul({}, MochiKit.Base.map(this.renderItem, cards)) : null
]);
},

View File

@@ -62,7 +62,6 @@ Clipperz.PM.UI.Components.Cards.View = React.createClass({
newState[aField['_reference']] = !this.state[aField['_reference']];
return function () {
console.log("SHOW PASSWORD", aField, self);
self.setState(newState);
};
},