diff --git a/lib/state/domain/notes.js b/lib/state/domain/notes.js index 7f369f0f4..ff4624689 100644 --- a/lib/state/domain/notes.js +++ b/lib/state/domain/notes.js @@ -3,33 +3,25 @@ import appState from '../../flux/app-state'; import isEmailTag from '../../utils/is-email-tag'; import { createTag } from './tags'; -const { selectNote } = appState.actionCreators; - export const updateNoteTags = ({ note, tags }) => { return (dispatch, getState) => { - if (note) { - let state = getState().appState; - - note.data.tags = tags; - note.data.modificationDate = Math.floor(Date.now() / 1000); - noteBucket().update(note.id, note.data); - - dispatch(selectNote({ note })); - - let currentTagNames = state.tags.map(tag => tag.data.name); - for (let i = 0; i < tags.length; i++) { - let tag = tags[i]; + if (!note) { + return; + } - if (currentTagNames.indexOf(tag) !== -1) { - continue; - } + noteBucket().update(note.id, { + ...note.data, + tags, + modificationDate: Math.floor(Date.now() / 1000), + }); - if (isEmailTag(tag)) { - continue; - } + const existingTagNames = new Set( + getState().appState.tags.map(tag => tag.data.name) + ); - createTag({ name: tag }); - } - } + tags + .filter(name => !existingTagNames.has(name)) + .filter(name => !isEmailTag(name)) + .forEach(name => createTag({ name })); }; };