diff --git a/browser/components/TagListItem.js b/browser/components/TagListItem.js
index 4346ac21..cbac00ce 100644
--- a/browser/components/TagListItem.js
+++ b/browser/components/TagListItem.js
@@ -12,13 +12,18 @@ import CSSModules from 'browser/lib/CSSModules'
* @param {bool} isActive
*/
-const TagListItem = ({name, handleClickTagListItem, isActive, count}) => (
-
+const TagListItem = ({name, handleClickTagListItem, handleClickNarrowToTag, isActive, count}) => (
+
+
+
+
)
TagListItem.propTypes = {
diff --git a/browser/components/TagListItem.styl b/browser/components/TagListItem.styl
index 513d112a..4c5c7379 100644
--- a/browser/components/TagListItem.styl
+++ b/browser/components/TagListItem.styl
@@ -1,10 +1,10 @@
-.tagList-item
+.tagList-itemContainer
display flex
- width 100%
+
+.tagList-item, .tagList-itemNarrow
height 26px
background-color transparent
color $ui-inactive-text-color
- padding 0
margin-bottom 5px
text-align left
border none
@@ -20,12 +20,18 @@
color $ui-button-default-color
background-color $ui-button-default--active-backgroundColor
-.tagList-item-active
- background-color $ui-button-default--active-backgroundColor
+.tagList-item
display flex
+ flex 1
width 100%
- height 26px
padding 0
+
+.tagList-itemNarrow
+ padding 0 4px
+
+.tagList-item-active, .tagList-itemNarrow-active
+ background-color $ui-button-default--active-backgroundColor
+ height 26px
margin-bottom 5px
text-align left
border none
@@ -36,10 +42,19 @@
background-color alpha($ui-button-default--active-backgroundColor, 60%)
transition 0.2s
+.tagList-item-active
+ display flex
+ flex 1
+ width 100%
+ padding 0
+
+.tagList-itemNarrow-active
+ padding 0 4px
+
.tagList-item-name
display block
flex 1
- padding 0 15px
+ padding 0 8px 0 4px
height 26px
line-height 26px
border-width 0 0 0 2px
@@ -55,7 +70,7 @@
font-size 13px
body[data-theme="white"]
- .tagList-item
+ .tagList-item, .tagList-itemNarrow
color $ui-inactive-text-color
&:hover
color $ui-text-color
@@ -64,7 +79,7 @@ body[data-theme="white"]
color $ui-text-color
background-color $ui-button--active-backgroundColor
- .tagList-item-active
+ .tagList-item-active, .tagList-itemNarrow-active
background-color $ui-button--active-backgroundColor
color $ui-text-color
&:hover
@@ -73,7 +88,7 @@ body[data-theme="white"]
color $ui-text-color
body[data-theme="dark"]
- .tagList-item
+ .tagList-item, .tagList-itemNarrow
color $ui-dark-inactive-text-color
&:hover
color $ui-dark-text-color
@@ -82,7 +97,7 @@ body[data-theme="dark"]
color $ui-dark-text-color
background-color $ui-dark-button--active-backgroundColor
- .tagList-item-active
+ .tagList-item-active, .tagList-itemNarrow-active
background-color $ui-dark-button--active-backgroundColor
color $ui-dark-text-color
&:active
diff --git a/browser/main/NoteList/index.js b/browser/main/NoteList/index.js
index dedad209..867457ca 100644
--- a/browser/main/NoteList/index.js
+++ b/browser/main/NoteList/index.js
@@ -343,10 +343,11 @@ class NoteList extends React.Component {
}
if (location.pathname.match(/\/tags/)) {
+ const listOfTags = params.tagname.split('&')
return data.noteMap.map(note => {
return note
}).filter(note => {
- return note.tags.includes(params.tagname)
+ return listOfTags.every((tag) => note.tags.includes(tag))
})
}
diff --git a/browser/main/SideNav/index.js b/browser/main/SideNav/index.js
index f8a65013..a9f9f0da 100644
--- a/browser/main/SideNav/index.js
+++ b/browser/main/SideNav/index.js
@@ -91,7 +91,7 @@ class SideNav extends React.Component {
let component
// TagsMode is not selected
- if (!location.pathname.match('/tags') && !location.pathname.match('/alltags')) {
+ if (!location.pathname.match('/tags') && !location.pathname.match('/alltags') && !location.pathname.match('/narrowToTag')) {
component = (
({name, size: tag.size})),
- ['name']
- )
+ const relatedTags = this.getRelatedTags(this.getActiveTags(location.pathname), data.noteMap)
+ let tagList = _.sortBy(data.tagNoteMap.map((tag, name) => {
+ return { name, size: tag.size }
+ }), ['name']).filter(tag => {
+ return (relatedTags.size === 0) ? true : relatedTags.has(tag.name)
+ })
if (config.sortTagsBy === 'COUNTER') {
tagList = _.sortBy(tagList, item => (0 - item.size))
}
@@ -158,6 +160,7 @@ class SideNav extends React.Component {
{
+ return {key: note.key, tags: note.tags}
+ }).filter((note) => {
+ return activeTags.every((tag) => note.tags.includes(tag))
+ })
+ let relatedTags = new Set()
+ relatedNotes.forEach(note => {
+ note.tags.map(tag => {
+ relatedTags.add(tag)
+ })
+ })
+ return relatedTags
+ }
+
getTagActive (path, tag) {
+ const pathTag = this.getActiveTags(path)
+ return pathTag.includes(tag)
+ }
+
+ getActiveTags (path) {
const pathSegments = path.split('/')
- const pathTag = pathSegments[pathSegments.length - 1]
- return pathTag === tag
+ const tags = pathSegments[pathSegments.length - 1]
+ if (tags === 'alltags') {
+ return []
+ }
+ return tags.split('&')
}
handleClickTagListItem (name) {
@@ -192,6 +218,20 @@ class SideNav extends React.Component {
})
}
+ handleClickNarrowToTag (name) {
+ const { router } = this.context
+ const { location } = this.props
+ let listOfTags = this.getActiveTags(location.pathname)
+ if (listOfTags.includes(name)) {
+ listOfTags = listOfTags.filter(function (currentTag) {
+ return name !== currentTag
+ })
+ } else {
+ listOfTags.push(name)
+ }
+ router.push(`/tags/${listOfTags.join('&')}`)
+ }
+
emptyTrash (entries) {
const { dispatch } = this.props
const deletionPromises = entries.map((note) => {
diff --git a/browser/main/index.js b/browser/main/index.js
index 6e8bdcc5..02bf7125 100644
--- a/browser/main/index.js
+++ b/browser/main/index.js
@@ -112,6 +112,9 @@ ReactDOM.render((
+
+
+