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,
|
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
|
||||||
|
|
|
@ -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('/')
|
||||||
|
|
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: ->
|
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
|
||||||
|
|
Loading…
Reference in a new issue