diff --git a/command/command.go b/command/command.go index 22f3158..b1b0697 100644 --- a/command/command.go +++ b/command/command.go @@ -36,7 +36,7 @@ const ( MaxRoleAdditionalContentLength = 1000 * 1000 // 1M of chars MinMemberUserNameLength = 3 - MaxMemberUserNameLength = 30 + MaxMemberUserNameLength = 40 MinMemberFullNameLength = 3 MaxMemberFullNameLength = 100 MaxMemberEmailLength = 100 @@ -52,7 +52,7 @@ const ( MaxRoleAssignmentFocusLength = 30 ) -var UserNameRegexp = regexp.MustCompile(`^[a-zA-Z][a-zA-Z0-9]*([-]?[a-zA-Z0-9]+)+$`) +var UserNameRegexp = regexp.MustCompile(`^[a-zA-Z][a-zA-Z0-9]*([-||.||_]?[a-zA-Z0-9]+)+$`) var ( ErrValidation = errors.New("validation error") diff --git a/command/command_test.go b/command/command_test.go index 252b679..23dffee 100644 --- a/command/command_test.go +++ b/command/command_test.go @@ -10,6 +10,10 @@ var ( "foo1", "foo-1", "foo-1-bar", + "foo.bar", + "foo_bar", + "foo.bar_hey", + "foo_bar.hello", "f12oo-bar33", } badUserNames = []string{ @@ -18,10 +22,11 @@ var ( "-foo-bar", "foo-bar-", "foo--bar", - "foo.bar", - "foo_bar", "foo#bar", "1foobar", + "1foobar", + "_foobar", + ".foobar", } ) diff --git a/saga/memberrequestsaga.go b/saga/memberrequestsaga.go index 4e2cef1..ea49bf4 100644 --- a/saga/memberrequestsaga.go +++ b/saga/memberrequestsaga.go @@ -275,7 +275,7 @@ func (s *MemberRequestSaga) HandleEvent(event *eventstore.StoredEvent) ([]ep.Eve } - if err := s.completeMemberChange(correlationID, causationID, memberChangeID, fmt.Sprintf("error updating member: %v, err")); err != nil { + if err := s.completeMemberChange(correlationID, causationID, memberChangeID, fmt.Sprintf("error updating member: %v", err)); err != nil { return nil, err } return nil, err diff --git a/vendor/github.com/blevesearch/bleve/search.go b/vendor/github.com/blevesearch/bleve/search.go index c2ebafb..5f48f93 100644 --- a/vendor/github.com/blevesearch/bleve/search.go +++ b/vendor/github.com/blevesearch/bleve/search.go @@ -354,7 +354,7 @@ func (r *SearchRequest) UnmarshalJSON(input []byte) error { // for the Query, using default values for all // other search parameters. func NewSearchRequest(q query.Query) *SearchRequest { - return NewSearchRequestOptions(q, 10, 0, false) + return NewSearchRequestOptions(q, 100, 0, false) } // NewSearchRequestOptions creates a new SearchRequest diff --git a/web/src/app/containers/Base.js b/web/src/app/containers/Base.js index 9b24dcf..ae6217f 100644 --- a/web/src/app/containers/Base.js +++ b/web/src/app/containers/Base.js @@ -1,7 +1,7 @@ import React, { PropTypes } from 'react' import { graphql, compose } from 'react-apollo' import { Route, Link, Switch } from 'react-router-dom' -import { Container, Menu, Dropdown, Message, Form, Input, Button } from 'semantic-ui-react' +import { Container, Menu, Dropdown, Message, Form, Input, Button, Image } from 'semantic-ui-react' import config from 'config' import Auth from '../modules/Auth' @@ -23,6 +23,8 @@ import EditTension from './EditTension' import SearchPage from './SearchPage' import Settings from './Settings' +import sirclesLogo from '../../www/img/sircles.png' + class Base extends React.Component { getChildContext () { return {appError: this.props.appError} @@ -120,8 +122,11 @@ class Base extends React.Component { return (
- - Sircles + + + + + {viewer && ( diff --git a/web/src/app/containers/Circle.js b/web/src/app/containers/Circle.js index 6f8f6ac..5b20717 100644 --- a/web/src/app/containers/Circle.js +++ b/web/src/app/containers/Circle.js @@ -2,7 +2,7 @@ import React, { PropTypes } from 'react' import { graphql, compose } from 'react-apollo' import gql from 'graphql-tag' import { Link } from 'react-router-dom' -import { Container, Header, Segment, Form, Button, Grid, Menu, Card, List, Table, Popup, Icon, Dropdown, Label, TextArea } from 'semantic-ui-react' +import { Container, Header, Segment, Form, Button, Grid, Menu, Card, List, Table, Popup, Icon, Dropdown, Label, TextArea, Accordion } from 'semantic-ui-react' import moment from 'moment' import marked from 'marked' @@ -310,6 +310,7 @@ class Circle extends React.Component { const roleType = r.roleType let fillers = [] + let extras = [] if (roleType === 'normal') { for (let i = 0, len = r.roleMembers.length; i < len; i++) { // Only display max 3 fillers @@ -322,7 +323,7 @@ class Circle extends React.Component { focusString = ` (${focus})` } const memberLink = Util.memberUrl(member.uid, timeLine) - fillers.push( + extras.push( @@ -331,13 +332,40 @@ class Circle extends React.Component { {focusString} ) } + fillers.push({extras}) if (fillers.length === 0) { - /* TODO(sgotti) limit showed fillers when exceeding a choosed number and show a "more" button */ fillers.push(
no members assigned to role
) } - if (r.roleMembers.length > 3) { + if (r.roleMembers.length > 3) { // Other members accordion + extras = [] const moreFillersCount = r.roleMembers.length - 3 - fillers.push(
... {moreFillersCount} other {moreFillersCount > 1 ? 'members' : 'member' }
) + for (let i = 3, len = r.roleMembers.length; i < len; i++) { + let focus = r.roleMembers[i].focus + let focusString = '' + if (focus) { + focusString = ` (${focus})` + } + let extramember = r.roleMembers[i].member + const extramemberLink = Util.memberUrl(extramember.uid, timeLine) + extras.push( + + + + {extramember.userName} + + {focusString} + ) + } + fillers.push( + + {moreFillersCount} other {moreFillersCount > 1 ? 'members' : 'member' } + + + {extras} + + + + ) } } @@ -357,13 +385,16 @@ class Circle extends React.Component { const memberLink = Util.memberUrl(leadlinkMember.uid, timeLine) fillers.push( - - - - {leadlinkMember.userName} - - (Lead Link) - ) + + + + + {leadlinkMember.userName} + + (Lead Link) + + + ) } else { fillers.push(
no leadlink assigned
) } @@ -400,9 +431,7 @@ class Circle extends React.Component { - - {fillers} - + {fillers} diff --git a/web/src/app/containers/RoleSetMembers.js b/web/src/app/containers/RoleSetMembers.js index 83a566e..abec931 100644 --- a/web/src/app/containers/RoleSetMembers.js +++ b/web/src/app/containers/RoleSetMembers.js @@ -116,7 +116,7 @@ class RoleSetMembers extends React.Component { {role.roleType === 'normal' && } - +