Skip to content

Commit 8abdedc

Browse files
committed
beta
- add error alert(folder editing) - debug clear button of search input
1 parent cc0f2c7 commit 8abdedc

10 files changed

Lines changed: 126 additions & 77 deletions

File tree

browser/main/HomePage.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ class HomePage extends React.Component {
2727
}
2828

2929
handleKeyDown (e) {
30-
if (isModalOpen() && e.keyCode === 27) {
31-
closeModal()
30+
if (isModalOpen()) {
31+
if (e.keyCode === 27) closeModal()
3232
return
3333
}
3434

browser/main/HomePage/ArticleTopBar.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,7 @@ export default class ArticleTopBar extends React.Component {
6161
}
6262

6363
handleSearchClearButton (e) {
64-
let { dispatch } = this.props
65-
66-
dispatch(setSearchFilter(''))
64+
this.searchInput.value = ''
6765
this.focusInput()
6866
}
6967

browser/main/index.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import HomePage from './HomePage'
77
// import auth from 'boost/auth'
88
import store from 'boost/store'
99
import ReactDOM from 'react-dom'
10-
import { isModalOpen, closeModal } from 'boost/modal'
11-
import { IDLE_MODE, CREATE_MODE, EDIT_MODE } from 'boost/actions'
1210
require('../styles/main/index.styl')
11+
import { openModal } from 'boost/modal'
12+
import Tutorial from 'boost/components/modal/Tutorial'
1313

1414
let routes = (
1515
<Route path='/' component={MainPage}>
@@ -27,4 +27,11 @@ ReactDOM.render((
2727
), el, function () {
2828
let loadingCover = document.getElementById('loadingCover')
2929
loadingCover.parentNode.removeChild(loadingCover)
30+
let status = JSON.parse(localStorage.getItem('status'))
31+
if (status == null) status = {}
32+
if (!status.introWatched) {
33+
openModal(Tutorial)
34+
status.introWatched = true
35+
localStorage.setItem('status', JSON.stringify(status))
36+
}
3037
})

browser/styles/main/HomeContainer/lib/CreateNewFolder.styl

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,17 @@ iptFocusBorderColor = #369DCD
3737
margin 100px auto 25px
3838
&:focus
3939
border-color iptFocusBorderColor
40-
.public
40+
.alert
41+
color infoTextColor
42+
background-color infoBackgroundColor
43+
font-size 14px
44+
padding 15px 15px
45+
width 330px
46+
border-radius 5px
4147
margin 0 auto
42-
text-align center
43-
button
44-
border none
45-
background-color transparent
46-
font-size 18px
47-
color inactiveTextColor
48-
transition 0.1s
49-
button:hover
50-
font-size 22px
51-
button.active
52-
color brandColor
53-
font-size 22px
54-
.divider
55-
margin 0 5px
48+
&.error
49+
color errorTextColor
50+
background-color errorBackgroundColor
5651
.confirmBtn
5752
display block
5853
position absolute

browser/styles/main/HomeContainer/lib/Preferences.styl

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -103,23 +103,17 @@ iptFocusBorderColor = #369DCD
103103
font-size 14px
104104
&:hover
105105
background-color lighten(brandColor, 10%)
106-
.alert
107-
float right
108-
height 33px
109-
padding 0 15px
110-
border-radius 5px
111-
margin-right 5px
112-
line-height 33px
113-
font-size 14px
114-
&.info
115-
background-color infoBackgroundColor
116-
color infoTextColor
117-
&.error
118-
background-color errorBackgroundColor
119-
color errorTextColor
120-
&.success
121-
background-color successBackgroundColor
122-
color successTextColor
106+
.alert
107+
color infoTextColor
108+
background-color infoBackgroundColor
109+
font-size 14px
110+
padding 15px 15px
111+
width 330px
112+
border-radius 5px
113+
margin 10px auto
114+
&.error
115+
color errorTextColor
116+
background-color errorBackgroundColor
123117
&.AppSettingTab
124118
.description
125119
marked()
@@ -390,6 +384,18 @@ iptFocusBorderColor = #369DCD
390384
width 145px
391385
text-align center
392386
&.newFolder
387+
.alert
388+
display block
389+
color infoTextColor
390+
background-color infoBackgroundColor
391+
font-size 14px
392+
padding 15px 15px
393+
width 330px
394+
border-radius 5px
395+
margin 0 auto
396+
&.error
397+
color errorTextColor
398+
background-color errorBackgroundColor
393399
.folderName input
394400
height 33px
395401
border 1px solid transparent

lib/components/modal/CreateNewFolder.js

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,24 @@ export default class CreateNewFolder extends React.Component {
1818
}
1919

2020
handleConfirmButton (e) {
21-
let { close } = this.props
22-
let name = this.state.name
23-
let input = {
24-
name
25-
}
21+
this.setState({alert: null}, () => {
22+
let { close } = this.props
23+
let name = this.state.name
24+
let input = {
25+
name
26+
}
2627

27-
store.dispatch(createFolder(input))
28-
try {
29-
} catch (e) {
30-
this.setState({alert: {
31-
type: 'error',
32-
message: e.message
33-
}})
34-
return
35-
}
36-
close()
28+
try {
29+
store.dispatch(createFolder(input))
30+
} catch (e) {
31+
this.setState({alert: {
32+
type: 'error',
33+
message: e.message
34+
}})
35+
return
36+
}
37+
close()
38+
})
3739
}
3840

3941
render () {

lib/components/modal/Preference/FolderRow.js

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,27 @@ export default class FolderRow extends React.Component {
3434
this.setState({mode: DELETE})
3535
}
3636

37-
handleFolderPublicChange (e) {
38-
this.setState({public: e.target.value})
39-
}
40-
4137
handleSaveButtonClick (e) {
42-
let { folder } = this.props
43-
let input = {
44-
name: this.state.name
45-
}
46-
Object.assign(folder, input)
38+
let { folder, setAlert } = this.props
4739

48-
store.dispatch(updateFolder(folder))
49-
this.setState({
50-
mode: IDLE
40+
setAlert(null, () => {
41+
let input = {
42+
name: this.state.name
43+
}
44+
folder = Object.assign({}, folder, input)
45+
46+
try {
47+
store.dispatch(updateFolder(folder))
48+
this.setState({
49+
mode: IDLE
50+
})
51+
} catch (e) {
52+
console.error(e)
53+
setAlert({
54+
type: 'error',
55+
message: e.message
56+
})
57+
}
5158
})
5259
}
5360

@@ -98,7 +105,8 @@ export default class FolderRow extends React.Component {
98105
}
99106

100107
FolderRow.propTypes = {
101-
folder: PropTypes.shape()
108+
folder: PropTypes.shape(),
109+
setAlert: PropTypes.func
102110
}
103111

104112
FolderRow.prototype.linkState = linkState

lib/components/modal/Preference/FolderSettingTab.js

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,46 @@ export default class FolderSettingTab extends React.Component {
1313
}
1414

1515
handleSaveButtonClick (e) {
16-
if (this.state.name.trim().length === 0) return false
16+
this.setState({alert: null}, () => {
17+
if (this.state.name.trim().length === 0) return false
1718

18-
let { dispatch } = this.props
19+
let { dispatch } = this.props
1920

20-
dispatch(createFolder({
21-
name: this.state.name
22-
}))
21+
try {
22+
dispatch(createFolder({
23+
name: this.state.name
24+
}))
25+
} catch (e) {
26+
this.setState({alert: {
27+
type: 'error',
28+
message: e.message
29+
}})
30+
return
31+
}
2332

24-
this.setState({name: ''})
33+
this.setState({name: ''})
34+
})
35+
}
36+
37+
setAlert (alert, cb) {
38+
this.setState({alert: alert}, cb)
2539
}
2640

2741
render () {
2842
let { folders } = this.props
2943
let folderElements = folders.map(folder => {
3044
return (
31-
<FolderRow key={'folder-' + folder.key} folder={folder}/>
45+
<FolderRow key={'folder-' + folder.key} folder={folder} setAlert={(alert, cb) => this.setAlert(alert, cb)}/>
3246
)
3347
})
3448

49+
let alert = this.state.alert
50+
let alertElement = alert != null ? (
51+
<p className={`alert ${alert.type}`}>
52+
{alert.message}
53+
</p>
54+
) : null
55+
3556
return (
3657
<div className='FolderSettingTab content'>
3758
<div className='section'>
@@ -50,6 +71,7 @@ export default class FolderSettingTab extends React.Component {
5071
<button onClick={e => this.handleSaveButtonClick(e)} className='primary'>Add</button>
5172
</div>
5273
</div>
74+
{alertElement}
5375
</div>
5476
</div>
5577
</div>

lib/reducer.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ function folders (state = initialFolders, action) {
1919
case FOLDER_CREATE:
2020
{
2121
let newFolder = action.data.folder
22+
if (!_.isString(newFolder.name)) throw new Error('Folder name must be a string')
23+
newFolder.name = newFolder.name.trim().replace(/\s/, '_')
2224
Object.assign(newFolder, {
2325
key: keygen(),
2426
createAt: new Date(),
@@ -27,8 +29,10 @@ function folders (state = initialFolders, action) {
2729
color: Math.round(Math.random() * 7)
2830
})
2931

32+
if (newFolder.length === 0) throw new Error('Folder name is required')
33+
3034
let conflictFolder = _.findWhere(state, {name: newFolder.name})
31-
if (conflictFolder != null) throw new Error('name conflicted!')
35+
if (conflictFolder != null) throw new Error(`${newFolder.name} already exists!`)
3236
state.push(newFolder)
3337

3438
dataStore.setFolders(null, state)
@@ -39,11 +43,18 @@ function folders (state = initialFolders, action) {
3943
let folder = action.data.folder
4044
let targetFolder = _.findWhere(state, {key: folder.key})
4145

46+
if (!_.isString(folder.name)) throw new Error('Folder name must be a string')
47+
folder.name = folder.name.trim().replace(/\s/, '_')
48+
if (folder.length === 0) throw new Error('Folder name is required')
49+
4250
// Folder existence check
4351
if (targetFolder == null) throw new Error('Folder doesnt exist')
4452
// Name conflict check
4553
if (targetFolder.name !== folder.name) {
46-
let conflictFolder = _.findWhere(state, {name: folder.name})
54+
let conflictFolder = _.find(state, _folder => {
55+
return folder.name === _folder.name && folder.key !== _folder.key
56+
})
57+
console.log(conflictFolder)
4758
if (conflictFolder != null) throw new Error('Name conflicted')
4859
}
4960
Object.assign(targetFolder, folder, {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "boost",
3-
"version": "0.4.0-alpha.7",
3+
"version": "0.4.0-beta",
44
"description": "Boost App",
55
"main": "main.js",
66
"scripts": {

0 commit comments

Comments
 (0)