mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-09-22 00:06:06 +08:00
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:
parent
93455db929
commit
30bb68ddd5
|
@ -7,7 +7,8 @@ _str = require 'underscore.string'
|
|||
DestroyCategoryTask,
|
||||
CategoryStore,
|
||||
Actions,
|
||||
Utils} = require 'nylas-exports'
|
||||
Utils,
|
||||
RegExpUtils} = require 'nylas-exports'
|
||||
{OutlineViewItem} = require 'nylas-component-kit'
|
||||
|
||||
SidebarActions = require './sidebar-actions'
|
||||
|
@ -51,7 +52,19 @@ onEditItem = (item, value) ->
|
|||
return if item.deleted is true
|
||||
category = item.perspective.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
|
||||
|
|
|
@ -3,7 +3,8 @@ _ = require 'underscore'
|
|||
SyncbackCategoryTask,
|
||||
DestroyCategoryTask,
|
||||
CategoryStore,
|
||||
Category} = require 'nylas-exports'
|
||||
Category,
|
||||
RegExpUtils} = require 'nylas-exports'
|
||||
SidebarItem = require './sidebar-item'
|
||||
SidebarActions = require './sidebar-actions'
|
||||
|
||||
|
@ -119,7 +120,8 @@ class SidebarSection
|
|||
seenItems = {}
|
||||
for category in CategoryStore.userCategories(account)
|
||||
# https://regex101.com/r/jK8cC2/1
|
||||
itemKey = category.displayName.replace(/[./\\]/g, '/')
|
||||
re = RegExpUtils.subcategorySplitRegex()
|
||||
itemKey = category.displayName.replace(re, '/')
|
||||
|
||||
parent = null
|
||||
parentComponents = itemKey.split('/')
|
||||
|
|
23
internal_packages/account-sidebar/spec/sidebar-item-spec.es6
Normal file
23
internal_packages/account-sidebar/spec/sidebar-item-spec.es6
Normal 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")
|
||||
})
|
||||
})
|
|
@ -175,4 +175,8 @@ RegExpUtils =
|
|||
n1QuoteStartRegex: ->
|
||||
new RegExp(/<\w+[^>]*gmail_quote/i)
|
||||
|
||||
# https://regex101.com/r/jK8cC2/1
|
||||
subcategorySplitRegex: ->
|
||||
/[./\\]/g
|
||||
|
||||
module.exports = RegExpUtils
|
||||
|
|
Loading…
Reference in a new issue