|
|
@@ -1,8 +1,6 @@
|
|
|
import {
|
|
|
INIT_BY_STATE,
|
|
|
INIT_BY_DEFAULT,
|
|
|
- ADD_PAGE_AFTER,
|
|
|
- DELETE_PAGE,
|
|
|
ADD_ITEM_AFTER,
|
|
|
MODIFY_ITEM,
|
|
|
DELETE_ITEM,
|
|
|
@@ -16,7 +14,7 @@ import uuid from 'uuid'
|
|
|
|
|
|
export default {
|
|
|
state: {
|
|
|
- pages: [],
|
|
|
+ items: [],
|
|
|
focus: null
|
|
|
},
|
|
|
|
|
|
@@ -24,159 +22,97 @@ export default {
|
|
|
[INIT_BY_STATE](state, payload) {},
|
|
|
[INIT_BY_DEFAULT](state, payload) {
|
|
|
const newItemId = uuid.v4()
|
|
|
- const newPageId = uuid.v4()
|
|
|
- state.pages = [{
|
|
|
- id: newPageId,
|
|
|
- items: [{
|
|
|
- id: newItemId,
|
|
|
- type: 'h1',
|
|
|
- placeholder: '未编辑文档标题',
|
|
|
- content: '# '
|
|
|
- }]
|
|
|
+ state.items = [{
|
|
|
+ id: newItemId,
|
|
|
+ placeholder: '未编辑文档标题',
|
|
|
+ content: '# '
|
|
|
}]
|
|
|
state.focus = {
|
|
|
- focusPageId: newPageId,
|
|
|
- focusItemId: newItemId,
|
|
|
- focusItemOffset: 0
|
|
|
+ focusId: newItemId,
|
|
|
+ offset: 0
|
|
|
}
|
|
|
},
|
|
|
- [ADD_PAGE_AFTER](state, payload) {
|
|
|
- const index = state.pages.indexOf(state.pages.filter(page => page.id === payload.pageId)[0])
|
|
|
+ [ADD_ITEM_AFTER](state, payload) {
|
|
|
+ const index = state.items.indexOf(state.items.filter(item => item.id === payload.id)[0])
|
|
|
|
|
|
- state.pages = [
|
|
|
- ...state.pages.slice(0, index + 1), {
|
|
|
+ state.items = [
|
|
|
+ ...state.items.slice(0, index + 1), {
|
|
|
id: uuid.v4(),
|
|
|
- items: [{
|
|
|
- id: uuid.v4(),
|
|
|
- type: 'h3',
|
|
|
- placeholder: '未编辑小标题',
|
|
|
- content: ''
|
|
|
- }, ...state.pages.slice(index + 1)]
|
|
|
- }
|
|
|
- ]
|
|
|
- },
|
|
|
- [DELETE_PAGE](state, payload) {
|
|
|
- state.pages = [...state.pages.filter(page => page.id !== payload.id)]
|
|
|
- },
|
|
|
- [ADD_ITEM_AFTER](state, payload) {
|
|
|
- state.pages = [
|
|
|
- ...state.pages.map(page => {
|
|
|
- if (page.id === payload.pageId) {
|
|
|
- const index = page.items.indexOf(page.items.filter(item => item.id === payload.itemId)[0])
|
|
|
- return {
|
|
|
- ...page,
|
|
|
- items: [
|
|
|
- ...page.items.slice(0, index + 1), {
|
|
|
- id: uuid.v4(),
|
|
|
- type: 'div',
|
|
|
- content: '',
|
|
|
- placeholder: '未编辑正文项'
|
|
|
- },
|
|
|
- ...page.items.slice(index + 1)
|
|
|
- ]
|
|
|
- }
|
|
|
- }
|
|
|
- return page
|
|
|
- })
|
|
|
+ content: '',
|
|
|
+ placeholder: '正文'
|
|
|
+ },
|
|
|
+ ...state.items.slice(index + 1)
|
|
|
]
|
|
|
},
|
|
|
[MODIFY_ITEM](state, payload) {
|
|
|
- state.pages = [
|
|
|
- ...state.pages.map(page => {
|
|
|
- if (page.id === payload.pageId) {
|
|
|
- return {
|
|
|
- ...page,
|
|
|
- items: page.items.map(item => {
|
|
|
- if (item.id === payload.itemId) {
|
|
|
- return {
|
|
|
- ...item,
|
|
|
- ...payload.diff
|
|
|
- }
|
|
|
- }
|
|
|
- return item
|
|
|
- })
|
|
|
- }
|
|
|
+ state.items = [...state.items.map(item => {
|
|
|
+ if (item.id === payload.id) {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ ...payload.diff
|
|
|
}
|
|
|
- return page
|
|
|
- })
|
|
|
- ]
|
|
|
+ } else {
|
|
|
+ return item
|
|
|
+ }
|
|
|
+ })]
|
|
|
},
|
|
|
[DELETE_ITEM](state, payload) {
|
|
|
- state.pages = [
|
|
|
- ...state.pages.map(page => {
|
|
|
- if (page.id === payload.pageId) {
|
|
|
- return {
|
|
|
- ...page,
|
|
|
- items: page.items.filter((item, index) => index === 0 || item.id !== payload.itemId)
|
|
|
- }
|
|
|
- } else {
|
|
|
- return page
|
|
|
- }
|
|
|
- })
|
|
|
- ]
|
|
|
+ state.items = [...state.items.filter((item, index) => index === 0 || item.id !== payload.id)]
|
|
|
},
|
|
|
[SET_FOCUS](state, payload) {
|
|
|
state.focus = {
|
|
|
...state.focus,
|
|
|
- ...payload
|
|
|
+ ...payload.diff
|
|
|
}
|
|
|
},
|
|
|
[SET_FOCUS_AFTER](state, payload) {
|
|
|
let focusId = ''
|
|
|
- let targetedFlag = false
|
|
|
- const isHit = state.pages.some(page => {
|
|
|
- page.items.some(item => {
|
|
|
- if (targetedFlag) {
|
|
|
- focusId = item.id
|
|
|
- return true
|
|
|
- }
|
|
|
- if (item.id === payload.itemId) {
|
|
|
- targetedFlag = true
|
|
|
- }
|
|
|
- return false
|
|
|
- })
|
|
|
- return targetedFlag
|
|
|
+ let tagetedFlag = false
|
|
|
+ const isHit = state.items.some(item => {
|
|
|
+ if (tagetedFlag) {
|
|
|
+ focusId = item.id
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ if (item.id === payload.focusId) {
|
|
|
+ tagetedFlag = true
|
|
|
+ }
|
|
|
+ return false
|
|
|
})
|
|
|
|
|
|
if (isHit) {
|
|
|
state.focus = {
|
|
|
- focusItemId: focusId,
|
|
|
- focusItemOffset: payload.offset
|
|
|
+ focusId: focusId,
|
|
|
+ offset: payload.offset ? payload.offset : 0
|
|
|
}
|
|
|
} else {
|
|
|
- // todo log
|
|
|
+ // todo warn
|
|
|
}
|
|
|
},
|
|
|
[SET_FOCUS_BEFORE](state, payload) {
|
|
|
let focusId = ''
|
|
|
- let targetedFlag = false
|
|
|
- const isHit = state.pages.some(page => {
|
|
|
- [...page.items].reverse().some(item => {
|
|
|
- if (targetedFlag) {
|
|
|
- focusId = item.id
|
|
|
- return true
|
|
|
- }
|
|
|
- if (item.id === payload.itemId) {
|
|
|
- targetedFlag = true
|
|
|
- }
|
|
|
- return false
|
|
|
- })
|
|
|
- return targetedFlag
|
|
|
+ let tagetedFlag = false
|
|
|
+ const isHit = [...state.items].reverse().some(item => {
|
|
|
+ if (tagetedFlag) {
|
|
|
+ focusId = item.id
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ if (item.id === payload.focusId) {
|
|
|
+ tagetedFlag = true
|
|
|
+ }
|
|
|
+ return false
|
|
|
})
|
|
|
|
|
|
- if (isHit && targetedFlag) {
|
|
|
+ if (isHit) {
|
|
|
state.focus = {
|
|
|
- focusItemId: focusId,
|
|
|
- focusItemOffset: payload.offset ? payload.offset : 9999
|
|
|
+ focusId: focusId,
|
|
|
+ offset: payload.offset ? payload.offset : 99999
|
|
|
}
|
|
|
} else {
|
|
|
- // todo log
|
|
|
+ // todo warn
|
|
|
}
|
|
|
},
|
|
|
[USE_FOCUS](state, payload) {
|
|
|
state.focus = null
|
|
|
}
|
|
|
- },
|
|
|
- actions: {},
|
|
|
- getters: {}
|
|
|
+ }
|
|
|
}
|