fix(label-nesting): maintain nested labels when renaming a label

Summary:
when renaming nested labels, maintain nested path
fixes #2402

Test Plan: created nested labels and successfully tested in dev

Reviewers: juan

Reviewed By: juan

Subscribers: evan

Differential Revision: https://phab.nylas.com/D3028
This commit is contained in:
Annie 2016-06-15 16:46:34 -07:00
parent 93455db929
commit 30bb68ddd5
4 changed files with 46 additions and 4 deletions

View file

@ -7,7 +7,8 @@ _str = require 'underscore.string'
DestroyCategoryTask, DestroyCategoryTask,
CategoryStore, CategoryStore,
Actions, Actions,
Utils} = require 'nylas-exports' Utils,
RegExpUtils} = require 'nylas-exports'
{OutlineViewItem} = require 'nylas-component-kit' {OutlineViewItem} = require 'nylas-component-kit'
SidebarActions = require './sidebar-actions' SidebarActions = require './sidebar-actions'
@ -51,7 +52,19 @@ onEditItem = (item, value) ->
return if item.deleted is true return if item.deleted is true
category = item.perspective.category() category = item.perspective.category()
return unless category return unless category
Actions.queueTask(new SyncbackCategoryTask({category, displayName: value})) re = RegExpUtils.subcategorySplitRegex()
match = re.exec(category.displayName)
lastMatch = match
while match
lastMatch = match
match = re.exec(category.displayName)
if lastMatch
newDisplayName = category.displayName.slice(0, lastMatch.index + 1) + value
else
newDisplayName = value
if newDisplayName is category.displayName
return
Actions.queueTask(new SyncbackCategoryTask({category, displayName: newDisplayName}))
class SidebarItem class SidebarItem

View file

@ -3,7 +3,8 @@ _ = require 'underscore'
SyncbackCategoryTask, SyncbackCategoryTask,
DestroyCategoryTask, DestroyCategoryTask,
CategoryStore, CategoryStore,
Category} = require 'nylas-exports' Category,
RegExpUtils} = require 'nylas-exports'
SidebarItem = require './sidebar-item' SidebarItem = require './sidebar-item'
SidebarActions = require './sidebar-actions' SidebarActions = require './sidebar-actions'
@ -119,7 +120,8 @@ class SidebarSection
seenItems = {} seenItems = {}
for category in CategoryStore.userCategories(account) for category in CategoryStore.userCategories(account)
# https://regex101.com/r/jK8cC2/1 # https://regex101.com/r/jK8cC2/1
itemKey = category.displayName.replace(/[./\\]/g, '/') re = RegExpUtils.subcategorySplitRegex()
itemKey = category.displayName.replace(re, '/')
parent = null parent = null
parentComponents = itemKey.split('/') parentComponents = itemKey.split('/')

View file

@ -0,0 +1,23 @@
import {Category, Actions} from "nylas-exports"
import SidebarItem from "../lib/sidebar-item"
describe("sidebar-item", function sidebarItemSpec() {
it("preserves nested labels on rename", () => {
spyOn(Actions, "queueTask")
const categories = [new Category({displayName: 'a.b/c', accountId: window.TEST_ACCOUNT_ID})]
NylasEnv.savedState.sidebarKeysCollapsed = {}
const item = SidebarItem.forCategories(categories)
item.onEdited(item, 'd')
const task = Actions.queueTask.calls[0].args[0]
expect(task.displayName).toBe("a.b/d")
})
it("preserves labels on rename", () => {
spyOn(Actions, "queueTask")
const categories = [new Category({displayName: 'a', accountId: window.TEST_ACCOUNT_ID})]
NylasEnv.savedState.sidebarKeysCollapsed = {}
const item = SidebarItem.forCategories(categories)
item.onEdited(item, 'b')
const task = Actions.queueTask.calls[0].args[0]
expect(task.displayName).toBe("b")
})
})

View file

@ -175,4 +175,8 @@ RegExpUtils =
n1QuoteStartRegex: -> n1QuoteStartRegex: ->
new RegExp(/<\w+[^>]*gmail_quote/i) new RegExp(/<\w+[^>]*gmail_quote/i)
# https://regex101.com/r/jK8cC2/1
subcategorySplitRegex: ->
/[./\\]/g
module.exports = RegExpUtils module.exports = RegExpUtils