1
0
mirror of https://github.com/BoostIo/Boostnote synced 2025-12-13 17:56:25 +00:00

Merge pull request #109 from BoostIO/data-api-refactor

use new api for finder
This commit is contained in:
Dick Choi
2016-09-08 19:12:55 +09:00
committed by GitHub
7 changed files with 76 additions and 52 deletions

View File

@@ -115,6 +115,7 @@ class NoteDetail extends React.Component {
</button> </button>
</div> </div>
}) })
let viewList = note.snippets.map((snippet, index) => { let viewList = note.snippets.map((snippet, index) => {
let isActive = this.state.snippetIndex === index let isActive = this.state.snippetIndex === index
let mode = snippet.mode === 'text' let mode = snippet.mode === 'text'
@@ -133,7 +134,7 @@ class NoteDetail extends React.Component {
/> />
<button styleName='tabView-top-mode' <button styleName='tabView-top-mode'
> >
{mode == null ? null : mode} {mode == null ? null : mode.mode}
</button> </button>
</div> </div>
{snippet.mode === 'markdown' {snippet.mode === 'markdown'

View File

@@ -54,12 +54,12 @@ class NoteList extends React.Component {
} }
render () { render () {
let { storages, notes, index } = this.props let { storageMap, notes, index } = this.props
let notesList = notes let notesList = notes
.slice(0, 10 + 10 * this.state.range) .slice(0, 10 + 10 * this.state.range)
.map((note, _index) => { .map((note, _index) => {
let storage = _.find(storages, {key: note.storage}) let storage = storageMap[note.storage]
let folder = _.find(storage.folders, {key: note.folder}) let folder = _.find(storage.folders, {key: note.folder})
return ( return (
<NoteItem <NoteItem

View File

@@ -217,33 +217,51 @@ class FinderMain extends React.Component {
} }
render () { render () {
let { storages, notes, config } = this.props let { data, config } = this.props
let { filter, search } = this.state let { filter, search } = this.state
let storageList = storages let storageList = []
.map((storage) => <StorageSection for (let key in data.storageMap) {
filter={filter} let storage = data.storageMap[key]
storage={storage} let item = (
key={storage.key} <StorageSection
handleStorageButtonClick={(e, storage) => this.handleStorageButtonClick(e, storage)} filter={filter}
handleFolderButtonClick={(e, storage, folder) => this.handleFolderButtonClick(e, storage, folder)} storage={storage}
/>) key={storage.key}
handleStorageButtonClick={(e, storage) => this.handleStorageButtonClick(e, storage)}
handleFolderButtonClick={(e, storage, folder) => this.handleFolderButtonClick(e, storage, folder)}
/>
)
storageList.push(item)
}
let notes = []
let noteIds
switch (filter.type) {
case 'STORAGE':
noteIds = data.storageNoteMap[filter.storage]
break
case 'FOLDER':
noteIds = data.folderNoteMap[filter.storage + '-' + filter.folder]
break
case 'STARRED':
noteIds = data.starredSet
}
if (noteIds != null) {
noteIds.forEach((id) => {
notes.push(data.noteMap[id])
})
} else {
for (let key in data.noteMap) {
notes.push(data.noteMap[key])
}
}
if (!filter.includeSnippet && filter.includeMarkdown) { if (!filter.includeSnippet && filter.includeMarkdown) {
notes = notes.filter((note) => note.type === 'MARKDOWN_NOTE') notes = notes.filter((note) => note.type === 'MARKDOWN_NOTE')
} else if (filter.includeSnippet && !filter.includeMarkdown) { } else if (filter.includeSnippet && !filter.includeMarkdown) {
notes = notes.filter((note) => note.type === 'SNIPPET_NOTE') notes = notes.filter((note) => note.type === 'SNIPPET_NOTE')
} }
switch (filter.type) {
case 'STORAGE':
notes = notes.filter((note) => note.storage === filter.storage)
break
case 'FOLDER':
notes = notes.filter((note) => note.storage === filter.storage && note.folder === filter.folder)
break
case 'STARRED':
notes = notes.filter((note) => note.isStarred)
}
if (search.trim().length > 0) { if (search.trim().length > 0) {
let needle = new RegExp(_.escapeRegExp(search.trim()), 'i') let needle = new RegExp(_.escapeRegExp(search.trim()), 'i')
notes = notes.filter((note) => note.title.match(needle)) notes = notes.filter((note) => note.title.match(needle))
@@ -302,7 +320,7 @@ class FinderMain extends React.Component {
</div> </div>
</div> </div>
<NoteList styleName='result-list' <NoteList styleName='result-list'
storages={storages} storageMap={data.storageMap}
notes={notes} notes={notes}
ref='list' ref='list'
search={search} search={search}
@@ -323,14 +341,6 @@ class FinderMain extends React.Component {
} }
FinderMain.propTypes = { FinderMain.propTypes = {
articles: PropTypes.array,
activeArticle: PropTypes.shape({
key: PropTypes.string,
tags: PropTypes.array,
title: PropTypes.string,
content: PropTypes.string
}),
status: PropTypes.shape(),
dispatch: PropTypes.func dispatch: PropTypes.func
} }

View File

@@ -75,8 +75,7 @@ nodeIpc.connectTo(
console.log('Received data from Main renderer') console.log('Received data from Main renderer')
store.default.dispatch({ store.default.dispatch({
type: 'THROTTLE_DATA', type: 'THROTTLE_DATA',
storages: payload.storages, data: payload
notes: payload.notes
}) })
}) })

View File

@@ -30,17 +30,20 @@ const defaultConfig = {
} }
} }
function storages (state = [], action) { let defaultData = {
switch (action.type) { storageMap: {},
case 'THROTTLE_DATA': noteMap: {},
state = action.storages starredSet: [],
} storageNoteMap: {},
return state folderNoteMap: {},
tagNoteMap: {}
} }
function notes (state = [], action) {
function data (state = defaultData, action) {
switch (action.type) { switch (action.type) {
case 'THROTTLE_DATA': case 'THROTTLE_DATA':
state = action.notes console.log(action)
state = action.data
} }
return state return state
} }
@@ -66,8 +69,7 @@ function config (state = defaultConfig, action) {
} }
let reducer = combineReducers({ let reducer = combineReducers({
storages, data,
notes,
config, config,
routing: routerReducer routing: routerReducer
}) })

View File

@@ -38,15 +38,22 @@ class MutableMap {
} }
return result return result
} }
toJS () {
let result = {}
for (let [key, value] of this._map) {
if (value instanceof MutableSet || value instanceof MutableMap) {
value = value.toJS()
}
result[key] = value
}
return result
}
} }
class MutableSet { class MutableSet {
constructor (iterable) { constructor (iterable) {
if (iterable instanceof MutableSet) { this._set = new Set(iterable)
this._set = new Set(iterable._set)
} else {
this._set = new Set(iterable)
}
} }
add (...args) { add (...args) {

View File

@@ -27,10 +27,15 @@ nodeIpc.connectTo(
nodeIpc.of.node.on('request-data-from-finder', function () { nodeIpc.of.node.on('request-data-from-finder', function () {
console.log('throttle') console.log('throttle')
var data = store.getState() var { data } = store.getState()
console.log(data.starredSet.toJS())
nodeIpc.of.node.emit('throttle-data', { nodeIpc.of.node.emit('throttle-data', {
storages: data.storages, storageMap: data.storageMap.toJS(),
notes: data.notes noteMap: data.noteMap.toJS(),
starredSet: data.starredSet.toJS(),
storageNoteMap: data.storageNoteMap.toJS(),
folderNoteMap: data.folderNoteMap.toJS(),
tagNoteMap: data.tagNoteMap.toJS()
}) })
}) })
} }