mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-13 17:56:25 +00:00
fix path of module & contactform
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import modes from 'boost/vars/modes'
|
import modes from '../lib/modes'
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
var ace = window.ace
|
var ace = window.ace
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
var React = require('react')
|
var React = require('react')
|
||||||
var { PropTypes } = React
|
var { PropTypes } = React
|
||||||
import markdown from 'boost/markdown'
|
import markdown from '../lib/markdown'
|
||||||
var ReactDOM = require('react-dom')
|
var ReactDOM = require('react-dom')
|
||||||
|
|
||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import ModeIcon from 'boost/components/ModeIcon'
|
import ModeIcon from './ModeIcon'
|
||||||
import modes from 'boost/vars/modes'
|
import modes from '../lib/modes'
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
|
|
||||||
const IDLE_MODE = 'IDLE_MODE'
|
const IDLE_MODE = 'IDLE_MODE'
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
import linkState from 'boost/linkState'
|
import linkState from '../lib/linkState'
|
||||||
|
|
||||||
function isNotEmptyString (str) {
|
function isNotEmptyString (str) {
|
||||||
return _.isString(str) && str.length > 0
|
return _.isString(str) && str.length > 0
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import CodeEditor from 'boost/components/CodeEditor'
|
import CodeEditor from 'browser/components/CodeEditor'
|
||||||
import MarkdownPreview from 'boost/components/MarkdownPreview'
|
import MarkdownPreview from 'browser/components/MarkdownPreview'
|
||||||
import ModeIcon from 'boost/components/ModeIcon'
|
import ModeIcon from 'browser/components/ModeIcon'
|
||||||
|
|
||||||
export default class FinderDetail extends React.Component {
|
export default class FinderDetail extends React.Component {
|
||||||
render () {
|
render () {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import ModeIcon from 'boost/components/ModeIcon'
|
import ModeIcon from 'browser/components/ModeIcon'
|
||||||
import { selectArticle } from './actions'
|
import { selectArticle } from './actions'
|
||||||
|
|
||||||
export default class FinderList extends React.Component {
|
export default class FinderList extends React.Component {
|
||||||
|
|||||||
@@ -8,10 +8,10 @@ import FinderList from './FinderList'
|
|||||||
import FinderDetail from './FinderDetail'
|
import FinderDetail from './FinderDetail'
|
||||||
import actions, { selectArticle, searchArticle } from './actions'
|
import actions, { selectArticle, searchArticle } from './actions'
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
import dataStore from 'boost/dataStore'
|
import dataStore from 'browser/lib/dataStore'
|
||||||
|
|
||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
const { remote, clipboard, ipcRenderer } = electron
|
const { clipboard, ipcRenderer } = electron
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
|
||||||
function hideFinder () {
|
function hideFinder () {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
import moment from 'moment'
|
import moment from 'moment'
|
||||||
import dataStore from 'boost/dataStore'
|
import dataStore from './dataStore'
|
||||||
import { request, SERVER_URL } from 'boost/api'
|
import { request, SERVER_URL } from './api'
|
||||||
import clientKey from 'boost/clientKey'
|
import clientKey from './clientKey'
|
||||||
|
|
||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
const version = electron.remote.app.getVersion()
|
const version = electron.remote.app.getVersion()
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
import keygen from 'boost/keygen'
|
import keygen from './keygen'
|
||||||
|
|
||||||
function getClientKey () {
|
function getClientKey () {
|
||||||
let clientKey = localStorage.getItem('clientKey')
|
let clientKey = localStorage.getItem('clientKey')
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import keygen from 'boost/keygen'
|
import keygen from './keygen'
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
|
|
||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
|
|||||||
@@ -1,15 +1,12 @@
|
|||||||
import React, { PropTypes} from 'react'
|
import React, { PropTypes} from 'react'
|
||||||
import { connect } from 'react-redux'
|
import { connect } from 'react-redux'
|
||||||
import { EDIT_MODE, IDLE_MODE, toggleTutorial } from 'boost/actions'
|
import { EDIT_MODE, IDLE_MODE, toggleTutorial } from './actions'
|
||||||
import ArticleNavigator from './HomePage/ArticleNavigator'
|
import ArticleNavigator from './HomePage/ArticleNavigator'
|
||||||
import ArticleTopBar from './HomePage/ArticleTopBar'
|
import ArticleTopBar from './HomePage/ArticleTopBar'
|
||||||
import ArticleList from './HomePage/ArticleList'
|
import ArticleList from './HomePage/ArticleList'
|
||||||
import ArticleDetail from './HomePage/ArticleDetail'
|
import ArticleDetail from './HomePage/ArticleDetail'
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
import { isModalOpen, closeModal } from 'boost/modal'
|
import { isModalOpen, closeModal } from 'browser/lib/modal'
|
||||||
|
|
||||||
const electron = require('electron')
|
|
||||||
const remote = electron.remote
|
|
||||||
|
|
||||||
const TEXT_FILTER = 'TEXT_FILTER'
|
const TEXT_FILTER = 'TEXT_FILTER'
|
||||||
const FOLDER_FILTER = 'FOLDER_FILTER'
|
const FOLDER_FILTER = 'FOLDER_FILTER'
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import api from 'boost/api'
|
import api from 'browser/lib/api'
|
||||||
import clientKey from 'boost/clientKey'
|
import clientKey from 'browser/lib/clientKey'
|
||||||
import activityRecord from 'boost/activityRecord'
|
import activityRecord from 'browser/lib/activityRecord'
|
||||||
const clipboard = require('electron').clipboard
|
const clipboard = require('electron').clipboard
|
||||||
|
|
||||||
function getDefault () {
|
function getDefault () {
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ import React, { PropTypes } from 'react'
|
|||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import moment from 'moment'
|
import moment from 'moment'
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
import ModeIcon from 'boost/components/ModeIcon'
|
import ModeIcon from 'browser/components/ModeIcon'
|
||||||
import MarkdownPreview from 'boost/components/MarkdownPreview'
|
import MarkdownPreview from 'browser/components/MarkdownPreview'
|
||||||
import CodeEditor from 'boost/components/CodeEditor'
|
import CodeEditor from 'browser/components/CodeEditor'
|
||||||
import {
|
import {
|
||||||
IDLE_MODE,
|
IDLE_MODE,
|
||||||
EDIT_MODE,
|
EDIT_MODE,
|
||||||
@@ -17,13 +17,13 @@ import {
|
|||||||
updateArticle,
|
updateArticle,
|
||||||
destroyArticle,
|
destroyArticle,
|
||||||
NEW
|
NEW
|
||||||
} from 'boost/actions'
|
} from '../../actions'
|
||||||
import linkState from 'boost/linkState'
|
import linkState from 'browser/lib/linkState'
|
||||||
import FolderMark from 'boost/components/FolderMark'
|
import FolderMark from 'browser/components/FolderMark'
|
||||||
import TagLink from 'boost/components/TagLink'
|
import TagLink from '../TagLink'
|
||||||
import TagSelect from 'boost/components/TagSelect'
|
import TagSelect from 'browser/components/TagSelect'
|
||||||
import ModeSelect from 'boost/components/ModeSelect'
|
import ModeSelect from 'browser/components/ModeSelect'
|
||||||
import activityRecord from 'boost/activityRecord'
|
import activityRecord from 'browser/lib/activityRecord'
|
||||||
import ShareButton from './ShareButton'
|
import ShareButton from './ShareButton'
|
||||||
|
|
||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import ModeIcon from 'boost/components/ModeIcon'
|
import ModeIcon from 'browser/components/ModeIcon'
|
||||||
import moment from 'moment'
|
import moment from 'moment'
|
||||||
import { switchArticle, NEW } from 'boost/actions'
|
import { switchArticle, NEW } from '../actions'
|
||||||
import FolderMark from 'boost/components/FolderMark'
|
import FolderMark from 'browser/components/FolderMark'
|
||||||
import TagLink from 'boost/components/TagLink'
|
import TagLink from './TagLink'
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
|
|
||||||
export default class ArticleList extends React.Component {
|
export default class ArticleList extends React.Component {
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import { findWhere } from 'lodash'
|
import { findWhere } from 'lodash'
|
||||||
import { setSearchFilter, switchFolder, switchMode, switchArticle, updateArticle, clearNewArticle, EDIT_MODE } from 'boost/actions'
|
import { setSearchFilter, switchFolder, switchMode, switchArticle, updateArticle, clearNewArticle, EDIT_MODE } from '../actions'
|
||||||
import { openModal } from 'boost/modal'
|
import { openModal } from 'browser/lib/modal'
|
||||||
import FolderMark from 'boost/components/FolderMark'
|
import FolderMark from 'browser/components/FolderMark'
|
||||||
import Preferences from 'boost/components/modal/Preferences'
|
import Preferences from '../modal/Preferences'
|
||||||
import CreateNewFolder from 'boost/components/modal/CreateNewFolder'
|
import CreateNewFolder from '../modal/CreateNewFolder'
|
||||||
import keygen from 'boost/keygen'
|
import keygen from 'browser/lib/keygen'
|
||||||
|
|
||||||
const BRAND_COLOR = '#18AF90'
|
const BRAND_COLOR = '#18AF90'
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import ExternalLink from 'boost/components/ExternalLink'
|
import ExternalLink from 'browser/components/ExternalLink'
|
||||||
import { setSearchFilter, clearSearch, toggleTutorial } from 'boost/actions'
|
import { setSearchFilter, clearSearch, toggleTutorial } from '../actions'
|
||||||
|
|
||||||
const BRAND_COLOR = '#18AF90'
|
const BRAND_COLOR = '#18AF90'
|
||||||
|
|
||||||
@@ -148,7 +148,7 @@ export default class ArticleTopBar extends React.Component {
|
|||||||
<button onClick={e => this.handleTutorialButtonClick(e)}>?<span className='tooltip'>How to use</span>
|
<button onClick={e => this.handleTutorialButtonClick(e)}>?<span className='tooltip'>How to use</span>
|
||||||
</button>
|
</button>
|
||||||
<a ref='links' className='linksBtn' href>
|
<a ref='links' className='linksBtn' href>
|
||||||
<img src='../../resources/app.png' width='44' height='44'/>
|
<img src='../resources/app.png' width='44' height='44'/>
|
||||||
</a>
|
</a>
|
||||||
{
|
{
|
||||||
this.state.isLinksDropdownOpen
|
this.state.isLinksDropdownOpen
|
||||||
|
|||||||
@@ -1,19 +1,8 @@
|
|||||||
import React, { Component, PropTypes } from 'react'
|
import React, { Component, PropTypes } from 'react'
|
||||||
import { Link } from 'react-router'
|
import { Link } from 'react-router'
|
||||||
import ProfileImage from 'boost/components/ProfileImage'
|
import ProfileImage from 'browser/components/ProfileImage'
|
||||||
import { openModal } from 'boost/modal'
|
|
||||||
import CreateNewTeam from 'boost/components/modal/CreateNewTeam'
|
|
||||||
|
|
||||||
export default class UserNavigator extends Component {
|
export default class UserNavigator extends Component {
|
||||||
handleClick (e) {
|
|
||||||
openModal(CreateNewTeam)
|
|
||||||
}
|
|
||||||
|
|
||||||
// for dev
|
|
||||||
componentDidMount () {
|
|
||||||
// openModal(CreateNewTeam)
|
|
||||||
}
|
|
||||||
|
|
||||||
renderUserList () {
|
renderUserList () {
|
||||||
if (this.props.users == null) return null
|
if (this.props.users == null) return null
|
||||||
|
|
||||||
@@ -38,7 +27,7 @@ export default class UserNavigator extends Component {
|
|||||||
return (
|
return (
|
||||||
<div className='UserNavigator'>
|
<div className='UserNavigator'>
|
||||||
{this.renderUserList()}
|
{this.renderUserList()}
|
||||||
<button className='createTeamBtn' onClick={e => this.handleClick(e)}>
|
<button className='createTeamBtn'>
|
||||||
+
|
+
|
||||||
<div className='tooltip'>Create a new team</div>
|
<div className='tooltip'>Create a new team</div>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -1,16 +1,14 @@
|
|||||||
import { Provider } from 'react-redux'
|
import { Provider } from 'react-redux'
|
||||||
// import { updateUser } from 'boost/actions'
|
|
||||||
import { Router, Route, IndexRoute } from 'react-router'
|
import { Router, Route, IndexRoute } from 'react-router'
|
||||||
import MainPage from './MainPage'
|
import MainPage from './MainPage'
|
||||||
import HomePage from './HomePage'
|
import HomePage from './HomePage'
|
||||||
// import auth from 'boost/auth'
|
import store from './store'
|
||||||
import store from 'boost/store'
|
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
require('../styles/main/index.styl')
|
require('../styles/main/index.styl')
|
||||||
import { openModal } from 'boost/modal'
|
import { openModal } from 'browser/lib/modal'
|
||||||
import Tutorial from 'boost/components/modal/Tutorial'
|
import Tutorial from './modal/Tutorial'
|
||||||
import activityRecord from 'boost/activityRecord'
|
import activityRecord from 'browser/lib/activityRecord'
|
||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
const ipc = electron.ipcRenderer
|
const ipc = electron.ipcRenderer
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import linkState from 'boost/linkState'
|
import linkState from 'browser/lib/linkState'
|
||||||
import { createFolder } from 'boost/actions'
|
import { createFolder } from '../actions'
|
||||||
import store from 'boost/store'
|
import store from '../store'
|
||||||
import FolderMark from 'boost/components/FolderMark'
|
import FolderMark from 'browser/components/FolderMark'
|
||||||
|
|
||||||
export default class CreateNewFolder extends React.Component {
|
export default class CreateNewFolder extends React.Component {
|
||||||
constructor (props) {
|
constructor (props) {
|
||||||
|
|||||||
@@ -1,255 +0,0 @@
|
|||||||
import React, { PropTypes } from 'react'
|
|
||||||
import ProfileImage from 'boost/components/ProfileImage'
|
|
||||||
import { searchUser, createTeam, setMember, deleteMember } from 'boost/api'
|
|
||||||
import linkState from 'boost/linkState'
|
|
||||||
import Select from 'react-select'
|
|
||||||
|
|
||||||
function getUsers (input, cb) {
|
|
||||||
searchUser(input)
|
|
||||||
.then(function (res) {
|
|
||||||
let users = res.body
|
|
||||||
|
|
||||||
cb(null, {
|
|
||||||
options: users.map(user => {
|
|
||||||
return { value: user.name, label: user.name }
|
|
||||||
}),
|
|
||||||
complete: false
|
|
||||||
})
|
|
||||||
})
|
|
||||||
.catch(function (err) {
|
|
||||||
console.error(err)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class CreateNewTeam extends React.Component {
|
|
||||||
constructor (props) {
|
|
||||||
super(props)
|
|
||||||
|
|
||||||
this.state = {
|
|
||||||
create: {
|
|
||||||
name: '',
|
|
||||||
alert: null
|
|
||||||
},
|
|
||||||
select: {
|
|
||||||
team: null,
|
|
||||||
newMember: null,
|
|
||||||
alert: null
|
|
||||||
},
|
|
||||||
currentTab: 'create',
|
|
||||||
currentUser: JSON.parse(localStorage.getItem('currentUser'))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
handleCloseClick (e) {
|
|
||||||
this.props.close()
|
|
||||||
}
|
|
||||||
|
|
||||||
handleContinueClick (e) {
|
|
||||||
let createState = this.state.create
|
|
||||||
createState.isSending = true
|
|
||||||
createState.alert = {
|
|
||||||
type: 'info',
|
|
||||||
message: 'sending...'
|
|
||||||
}
|
|
||||||
this.setState({create: createState})
|
|
||||||
|
|
||||||
function onTeamCreate (res) {
|
|
||||||
let createState = this.state.create
|
|
||||||
createState.isSending = false
|
|
||||||
createState.alert = null
|
|
||||||
|
|
||||||
let selectState = this.state.select
|
|
||||||
selectState.team = res.body
|
|
||||||
|
|
||||||
this.setState({
|
|
||||||
currentTab: 'select',
|
|
||||||
create: createState,
|
|
||||||
select: {
|
|
||||||
team: res.body
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function onError (err) {
|
|
||||||
let errorMessage = err.response != null ? err.response.body.message : 'Can\'t connect to API server.'
|
|
||||||
|
|
||||||
let createState = this.state.create
|
|
||||||
createState.isSending = false
|
|
||||||
createState.alert = {
|
|
||||||
type: 'error',
|
|
||||||
message: errorMessage
|
|
||||||
}
|
|
||||||
|
|
||||||
this.setState({
|
|
||||||
create: createState
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
createTeam({name: this.state.create.name})
|
|
||||||
.then(onTeamCreate.bind(this))
|
|
||||||
.catch(onError.bind(this))
|
|
||||||
}
|
|
||||||
|
|
||||||
renderCreateTab () {
|
|
||||||
let createState = this.state.create
|
|
||||||
let alertEl = createState.alert != null ? (
|
|
||||||
<p className={['alert'].concat([createState.alert.type]).join(' ')}>{createState.alert.message}</p>
|
|
||||||
) : null
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className='createTab'>
|
|
||||||
<div className='title'>Create new team</div>
|
|
||||||
|
|
||||||
<input valueLink={this.linkState('create.name')} className='ipt' type='text' placeholder='Enter your team name'/>
|
|
||||||
{alertEl}
|
|
||||||
<button onClick={e => this.handleContinueClick(e)} disabled={createState.isSending} className='confirmBtn'>Continue <i className='fa fa-arrow-right fa-fw'/></button>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
handleNewMemberChange (value) {
|
|
||||||
let selectState = this.state.select
|
|
||||||
selectState.newMember = value
|
|
||||||
this.setState({select: selectState})
|
|
||||||
}
|
|
||||||
|
|
||||||
handleClickAddMemberButton (e) {
|
|
||||||
let selectState = this.state.select
|
|
||||||
let input = {
|
|
||||||
name: selectState.newMember,
|
|
||||||
role: 'member'
|
|
||||||
}
|
|
||||||
|
|
||||||
setMember(selectState.team.id, input)
|
|
||||||
.then(res => {
|
|
||||||
let selectState = this.state.select
|
|
||||||
let team = res.body
|
|
||||||
team.Members = team.Members.sort((a, b) => {
|
|
||||||
return new Date(a._pivot_createdAt) - new Date(b._pivot_createdAt)
|
|
||||||
})
|
|
||||||
selectState.team = team
|
|
||||||
selectState.newMember = ''
|
|
||||||
|
|
||||||
this.setState({select: selectState})
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
if (err.status != null) throw err
|
|
||||||
else console.error(err)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
handleMemberDeleteButtonClick (name) {
|
|
||||||
let selectState = this.state.select
|
|
||||||
let input = {
|
|
||||||
name: name
|
|
||||||
}
|
|
||||||
|
|
||||||
return e => {
|
|
||||||
deleteMember(selectState.team.id, input)
|
|
||||||
.then(res => {
|
|
||||||
let selectState = this.state.select
|
|
||||||
let team = res.body
|
|
||||||
team.Members = team.Members.sort((a, b) => {
|
|
||||||
return new Date(a._pivot_createdAt) - new Date(b._pivot_createdAt)
|
|
||||||
})
|
|
||||||
selectState.team = team
|
|
||||||
selectState.newMember = ''
|
|
||||||
|
|
||||||
this.setState({select: selectState})
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
console.log(err, err.response)
|
|
||||||
if (err.status != null) throw err
|
|
||||||
else console.error(err)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
handleMemberRoleChange (name) {
|
|
||||||
return function (e) {
|
|
||||||
let selectState = this.state.select
|
|
||||||
let input = {
|
|
||||||
name: name,
|
|
||||||
role: e.target.value
|
|
||||||
}
|
|
||||||
|
|
||||||
setMember(selectState.team.id, input)
|
|
||||||
.then(res => {
|
|
||||||
console.log(res.body)
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
if (err.status != null) throw err
|
|
||||||
else console.error(err)
|
|
||||||
})
|
|
||||||
}.bind(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
renderSelectTab () {
|
|
||||||
let selectState = this.state.select
|
|
||||||
|
|
||||||
let membersEl = selectState.team.Members.map(member => {
|
|
||||||
let isCurrentUser = this.state.currentUser.id === member.id
|
|
||||||
|
|
||||||
return (
|
|
||||||
<li key={'user-' + member.id}>
|
|
||||||
<ProfileImage className='userPhoto' email={member.email} size='30'/>
|
|
||||||
<div className='userInfo'>
|
|
||||||
<div className='userName'>{`${member.profileName} (${member.name})`}</div>
|
|
||||||
<div className='userEmail'>{member.email}</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className='userControl'>
|
|
||||||
<select onChange={e => this.handleMemberRoleChange(member.name)(e)} disabled={isCurrentUser} value={member._pivot_role} className='userRole'>
|
|
||||||
<option value='owner'>Owner</option>
|
|
||||||
<option value='member'>Member</option>
|
|
||||||
</select>
|
|
||||||
<button onClick={e => this.handleMemberDeleteButtonClick(member.name)(e)} disabled={isCurrentUser}><i className='fa fa-times fa-fw'/></button>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className='selectTab'>
|
|
||||||
<div className='title'>Select member</div>
|
|
||||||
<div className='memberForm'>
|
|
||||||
<Select
|
|
||||||
className='memberName'
|
|
||||||
autoload={false}
|
|
||||||
asyncOptions={getUsers}
|
|
||||||
onChange={val => this.handleNewMemberChange(val)}
|
|
||||||
value={selectState.newMember}
|
|
||||||
/>
|
|
||||||
<button onClick={e => this.handleClickAddMemberButton(e)} className='addMemberBtn'>add</button>
|
|
||||||
</div>
|
|
||||||
<ul className='memberList'>
|
|
||||||
{membersEl}
|
|
||||||
</ul>
|
|
||||||
<button onClick={e => this.props.close(e)}className='confirmBtn'>Done</button>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
render () {
|
|
||||||
let currentTab = this.state.currentTab === 'create'
|
|
||||||
? this.renderCreateTab()
|
|
||||||
: this.renderSelectTab()
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className='CreateNewTeam modal'>
|
|
||||||
<button onClick={e => this.handleCloseClick(e)} className='closeBtn'><i className='fa fa-fw fa-times'/></button>
|
|
||||||
|
|
||||||
{currentTab}
|
|
||||||
|
|
||||||
<div className='tabNav'>
|
|
||||||
<i className={'fa fa-circle fa-fw' + (this.state.currentTab === 'create' ? ' active' : '')}/>
|
|
||||||
<i className={'fa fa-circle fa-fw' + (this.state.currentTab === 'select' ? ' active' : '')}/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CreateNewTeam.propTypes = {
|
|
||||||
close: PropTypes.func
|
|
||||||
}
|
|
||||||
CreateNewTeam.prototype.linkState = linkState
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import store from 'boost/store'
|
import store from '../store'
|
||||||
import { unlockStatus, clearNewArticle } from 'boost/actions'
|
import { unlockStatus, clearNewArticle } from '../actions'
|
||||||
|
|
||||||
export default class EditedAlert extends React.Component {
|
export default class EditedAlert extends React.Component {
|
||||||
componentDidMount () {
|
componentDidMount () {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import linkState from 'boost/linkState'
|
import linkState from 'browser/lib/linkState'
|
||||||
import { updateUser } from 'boost/actions'
|
import { updateUser } from '../../actions'
|
||||||
|
|
||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
const ipc = electron.ipcRenderer
|
const ipc = electron.ipcRenderer
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import { getClientKey } from 'boost/activityRecord'
|
import clientKey from 'browser/lib/clientKey'
|
||||||
import linkState from 'boost/linkState'
|
import linkState from 'browser/lib/linkState'
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
import { request, WEB_URL } from 'boost/api'
|
import { request, SERVER_URL } from 'browser/lib/api'
|
||||||
|
|
||||||
const FORM_MODE = 'FORM_MODE'
|
const FORM_MODE = 'FORM_MODE'
|
||||||
const DONE_MODE = 'DONE_MODE'
|
const DONE_MODE = 'DONE_MODE'
|
||||||
@@ -34,7 +34,7 @@ export default class ContactTab extends React.Component {
|
|||||||
|
|
||||||
handleSendButtonClick (e) {
|
handleSendButtonClick (e) {
|
||||||
let input = _.pick(this.state, ['title', 'content', 'email'])
|
let input = _.pick(this.state, ['title', 'content', 'email'])
|
||||||
input.clientKey = getClientKey()
|
input.clientKey = clientKey.get()
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
alert: {
|
alert: {
|
||||||
@@ -42,7 +42,7 @@ export default class ContactTab extends React.Component {
|
|||||||
message: 'Sending...'
|
message: 'Sending...'
|
||||||
}
|
}
|
||||||
}, () => {
|
}, () => {
|
||||||
request.post(WEB_URL + 'apis/inquiry')
|
request.post(SERVER_URL + 'apis/inquiry')
|
||||||
.send(input)
|
.send(input)
|
||||||
.then(res => {
|
.then(res => {
|
||||||
console.log('sent')
|
console.log('sent')
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import linkState from 'boost/linkState'
|
import linkState from 'browser/lib/linkState'
|
||||||
import FolderMark from 'boost/components/FolderMark'
|
import FolderMark from 'browser/components/FolderMark'
|
||||||
import store from 'boost/store'
|
import store from '../../store'
|
||||||
import { updateFolder, destroyFolder, replaceFolder } from 'boost/actions'
|
import { updateFolder, destroyFolder, replaceFolder } from '../../actions'
|
||||||
|
|
||||||
const IDLE = 'IDLE'
|
const IDLE = 'IDLE'
|
||||||
const EDIT = 'EDIT'
|
const EDIT = 'EDIT'
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import FolderRow from './FolderRow'
|
import FolderRow from './FolderRow'
|
||||||
import linkState from 'boost/linkState'
|
import linkState from 'browser/lib/linkState'
|
||||||
import { createFolder } from 'boost/actions'
|
import { createFolder } from '../../actions'
|
||||||
|
|
||||||
export default class FolderSettingTab extends React.Component {
|
export default class FolderSettingTab extends React.Component {
|
||||||
constructor (props) {
|
constructor (props) {
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
import React, { PropTypes } from 'react'
|
|
||||||
|
|
||||||
export default class HelpTab extends React.Component {
|
|
||||||
render () {
|
|
||||||
return (
|
|
||||||
<div className='content help'>
|
|
||||||
Comming soon
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
import React, { PropTypes } from 'react'
|
|
||||||
import ProfileImage from 'boost/components/ProfileImage'
|
|
||||||
import api from 'boost/api'
|
|
||||||
|
|
||||||
const IDLE = 'IDLE'
|
|
||||||
const DELETE = 'DELETE'
|
|
||||||
|
|
||||||
export default class MemberRow extends React.Component {
|
|
||||||
constructor (props) {
|
|
||||||
super(props)
|
|
||||||
|
|
||||||
this.state = {
|
|
||||||
mode: IDLE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
handleMemberRoleChange (e) {
|
|
||||||
let input = {
|
|
||||||
name: this.props.member.name,
|
|
||||||
role: e.target.value
|
|
||||||
}
|
|
||||||
|
|
||||||
api.setMember(this.props.team.id, input)
|
|
||||||
.then(res => {
|
|
||||||
console.log(res.body)
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
if (err.status != null) throw err
|
|
||||||
else console.error(err)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
handleDeleteButtonClick (e) {
|
|
||||||
this.setState({mode: DELETE})
|
|
||||||
}
|
|
||||||
|
|
||||||
handleCancelButtonClick (e) {
|
|
||||||
this.setState({mode: IDLE})
|
|
||||||
}
|
|
||||||
|
|
||||||
handleDeleteConfirmButtonClick (e) {
|
|
||||||
let input = {
|
|
||||||
name: this.props.member.name
|
|
||||||
}
|
|
||||||
|
|
||||||
api.deleteMember(this.props.team.id, input)
|
|
||||||
.then(res => {
|
|
||||||
console.log(res.body)
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
if (err.status != null) throw err
|
|
||||||
else console.error(err)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
render () {
|
|
||||||
let member = this.props.member
|
|
||||||
let currentUser = this.props.currentUser
|
|
||||||
let isDisabled = (currentUser.id === member.id)
|
|
||||||
|
|
||||||
switch (this.state.mode) {
|
|
||||||
case DELETE:
|
|
||||||
return (
|
|
||||||
<li className='MemberRow edit'>
|
|
||||||
<div className='colDescription'>
|
|
||||||
Are you sure to remove <strong>{member.profileName}</strong> ?
|
|
||||||
</div>
|
|
||||||
<div className='colDeleteConfirm'>
|
|
||||||
<button className='deleteButton primary' onClick={e => this.handleDeleteConfirmButtonClick(e)}>Sure</button>
|
|
||||||
<button className='deleteButton' onClick={e => this.handleCancelButtonClick(e)}>Cancel</button>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
)
|
|
||||||
case IDLE:
|
|
||||||
default:
|
|
||||||
return (
|
|
||||||
<li className='MemberRow'>
|
|
||||||
<div className='colUserName'>
|
|
||||||
<ProfileImage className='userPhoto' email={member.email} size='30'/>
|
|
||||||
<div className='userInfo'>
|
|
||||||
<div className='userName'>{`${member.profileName} (${member.name})`}</div>
|
|
||||||
<div className='userEmail'>{member.email}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className='colRole'>
|
|
||||||
<select onChange={e => this.handleMemberRoleChange(e)} disabled={isDisabled} value={member._pivot_role} className='userRole'>
|
|
||||||
<option value='owner'>Owner</option>
|
|
||||||
<option value='member'>Member</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div className='colDelete'>
|
|
||||||
<button className='deleteButton' onClick={e => this.handleDeleteButtonClick(e)} disabled={isDisabled}><i className='fa fa-times fa-fw'/></button>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MemberRow.propTypes = {
|
|
||||||
member: PropTypes.shape(),
|
|
||||||
currentUser: PropTypes.shape(),
|
|
||||||
team: PropTypes.shape({
|
|
||||||
id: PropTypes.number
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@@ -1,149 +0,0 @@
|
|||||||
import React, { PropTypes } from 'react'
|
|
||||||
import ProfileImage from 'boost/components/ProfileImage'
|
|
||||||
import Select from 'react-select'
|
|
||||||
import api from 'boost/api'
|
|
||||||
import _ from 'lodash'
|
|
||||||
import MemberRow from './MemberRow'
|
|
||||||
|
|
||||||
function getUsers (input, cb) {
|
|
||||||
api.searchUser(input)
|
|
||||||
.then(function (res) {
|
|
||||||
let users = res.body
|
|
||||||
|
|
||||||
cb(null, {
|
|
||||||
options: users.map(user => {
|
|
||||||
return { value: user.name, label: user.name }
|
|
||||||
}),
|
|
||||||
complete: false
|
|
||||||
})
|
|
||||||
})
|
|
||||||
.catch(function (err) {
|
|
||||||
console.error(err)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class MemberSettingTab extends React.Component {
|
|
||||||
constructor (props) {
|
|
||||||
super(props)
|
|
||||||
|
|
||||||
this.state = {
|
|
||||||
newMember: ''
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getCurrentTeam (props) {
|
|
||||||
if (props == null) props = this.props
|
|
||||||
return _.findWhere(props.teams, {id: props.currentTeamId})
|
|
||||||
}
|
|
||||||
|
|
||||||
handleTeamSelectChange (e) {
|
|
||||||
this.props.switchTeam(e.target.value)
|
|
||||||
}
|
|
||||||
|
|
||||||
handleNewMemberChange (value) {
|
|
||||||
this.setState({newMember: value})
|
|
||||||
}
|
|
||||||
|
|
||||||
handleClickAddMemberButton (e) {
|
|
||||||
let team = this.getCurrentTeam()
|
|
||||||
if (team == null || team.userType !== 'team') return null
|
|
||||||
|
|
||||||
let input = {
|
|
||||||
name: this.state.newMember,
|
|
||||||
role: 'member'
|
|
||||||
}
|
|
||||||
api.setMember(team.id, input)
|
|
||||||
.then(res => {
|
|
||||||
console.log(res.body)
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
if (err.status != null) throw err
|
|
||||||
else console.error(err)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
renderTeamOptions () {
|
|
||||||
return this.props.teams.map(team => {
|
|
||||||
return (
|
|
||||||
<option key={'team-' + team.id} value={team.id}>{team.name}</option>)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
render () {
|
|
||||||
console.log(this.props.teams)
|
|
||||||
|
|
||||||
let team = this.getCurrentTeam()
|
|
||||||
|
|
||||||
if (team == null || team.userType === 'person') {
|
|
||||||
return this.renderNoTeam()
|
|
||||||
}
|
|
||||||
|
|
||||||
let membersEl = team.Members.map(member => (
|
|
||||||
<MemberRow key={'user-' + member.id} member={member} team={team} currentUser={this.props.currentUser}/>
|
|
||||||
))
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className='MemberSettingTab content'>
|
|
||||||
<div className='header'>
|
|
||||||
<span>Setting of</span>
|
|
||||||
<select
|
|
||||||
value={this.props.currentTeamId}
|
|
||||||
onChange={e => this.handleTeamSelectChange(e)}
|
|
||||||
className='teamSelect'>
|
|
||||||
{this.renderTeamOptions()}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className='membersTableSection section'>
|
|
||||||
<div className='sectionTitle'>Members</div>
|
|
||||||
<div className='addMember'>
|
|
||||||
<div className='addMemberLabel'>Add member</div>
|
|
||||||
<div className='addMemberControl'>
|
|
||||||
<Select
|
|
||||||
className='memberName'
|
|
||||||
placeholder='Input username to add'
|
|
||||||
autoload={false}
|
|
||||||
asyncOptions={getUsers}
|
|
||||||
onChange={val => this.handleNewMemberChange(val)}
|
|
||||||
value={this.state.newMember}
|
|
||||||
/>
|
|
||||||
<button onClick={e => this.handleClickAddMemberButton(e)} className='addMemberBtn'>add</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<ul className='memberList'>
|
|
||||||
<li className='header'>
|
|
||||||
<div className='colUserName'>Username</div>
|
|
||||||
<div className='colRole'>Role</div>
|
|
||||||
<div className='colDelete'>Delete</div>
|
|
||||||
</li>
|
|
||||||
{membersEl}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
renderNoTeam () {
|
|
||||||
return (
|
|
||||||
<div className='TeamSettingTab content'>
|
|
||||||
<div className='header'>
|
|
||||||
<span>Setting of</span>
|
|
||||||
<select
|
|
||||||
value={this.props.currentTeamId}
|
|
||||||
onChange={e => this.handleTeamSelectChange(e)}
|
|
||||||
className='teamSelect'>
|
|
||||||
{this.renderTeamOptions()}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div className='section'>Please select a team</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MemberSettingTab.propTypes = {
|
|
||||||
currentUser: PropTypes.shape(),
|
|
||||||
teams: PropTypes.array,
|
|
||||||
currentTeamId: PropTypes.number,
|
|
||||||
switchTeam: PropTypes.func
|
|
||||||
}
|
|
||||||
@@ -1,171 +0,0 @@
|
|||||||
import React, { PropTypes } from 'react'
|
|
||||||
import _ from 'lodash'
|
|
||||||
import linkState from 'boost/linkState'
|
|
||||||
import api from 'boost/api'
|
|
||||||
|
|
||||||
export default class TeamSettingTab extends React.Component {
|
|
||||||
constructor (props) {
|
|
||||||
super(props)
|
|
||||||
let team = this.getCurrentTeam(props)
|
|
||||||
this.state = {
|
|
||||||
teamName: team != null ? team.profileName : '',
|
|
||||||
deleteConfirm: false,
|
|
||||||
alert: null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
componentWillReceiveProps (nextProps) {
|
|
||||||
let team = this.getCurrentTeam(nextProps)
|
|
||||||
|
|
||||||
this.setState({
|
|
||||||
teamName: team != null ? team.profileName : '',
|
|
||||||
deleteConfirm: false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
getCurrentTeam (props) {
|
|
||||||
if (props == null) props = this.props
|
|
||||||
return _.findWhere(props.teams, {id: props.currentTeamId})
|
|
||||||
}
|
|
||||||
|
|
||||||
handleTeamSelectChange (e) {
|
|
||||||
this.props.switchTeam(e.target.value)
|
|
||||||
}
|
|
||||||
|
|
||||||
handleSaveButtonClick (e) {
|
|
||||||
let input = {
|
|
||||||
profileName: this.state.teamName
|
|
||||||
}
|
|
||||||
let alert = {
|
|
||||||
type: 'info',
|
|
||||||
message: 'Sending...'
|
|
||||||
}
|
|
||||||
this.setState({alert}, () => {
|
|
||||||
api.updateTeamInfo(this.props.currentTeamId, input)
|
|
||||||
.then(res => {
|
|
||||||
console.log(res.body)
|
|
||||||
let alert = {
|
|
||||||
type: 'success',
|
|
||||||
message: 'Successfully done!'
|
|
||||||
}
|
|
||||||
this.setState({alert})
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
var message
|
|
||||||
if (err.status != null) {
|
|
||||||
message = err.response.body.message
|
|
||||||
} else if (err.code === 'ECONNREFUSED') {
|
|
||||||
message = 'Can\'t connect to API server.'
|
|
||||||
} else throw err
|
|
||||||
|
|
||||||
let alert = {
|
|
||||||
type: 'error',
|
|
||||||
message: message
|
|
||||||
}
|
|
||||||
|
|
||||||
this.setState({alert})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
handleDeleteConfirmButtonClick (e) {
|
|
||||||
api.destroyTeam(this.props.currentTeamId)
|
|
||||||
.then(res => {
|
|
||||||
console.log(res.body)
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
let message
|
|
||||||
if (err.status != null) {
|
|
||||||
message = err.response.body.message
|
|
||||||
} else if (err.code === 'ECONNREFUSED') {
|
|
||||||
message = 'Can\'t connect to API server.'
|
|
||||||
} else throw err
|
|
||||||
console.log(message)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
renderTeamOptions () {
|
|
||||||
return this.props.teams.map(team => {
|
|
||||||
return (
|
|
||||||
<option key={'team-' + team.id} value={team.id}>{team.name}</option>)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
render () {
|
|
||||||
let team = this.getCurrentTeam()
|
|
||||||
|
|
||||||
if (team == null || team.userType === 'person') {
|
|
||||||
return this.renderNoTeam()
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className='TeamSettingTab content'>
|
|
||||||
<div className='header'>
|
|
||||||
<span>Setting of</span>
|
|
||||||
<select
|
|
||||||
value={this.props.currentTeamId}
|
|
||||||
onChange={e => this.handleTeamSelectChange(e)}
|
|
||||||
className='teamSelect'>
|
|
||||||
{this.renderTeamOptions()}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div className='section'>
|
|
||||||
<div className='sectionTitle'>Team profile</div>
|
|
||||||
<div className='sectionInput'>
|
|
||||||
<label className='label'>Team Name</label>
|
|
||||||
<input valueLink={this.linkState('teamName')} type='text'/>
|
|
||||||
</div>
|
|
||||||
<div className='sectionConfirm'>
|
|
||||||
<button onClick={e => this.handleSaveButtonClick(e)}>Save</button>
|
|
||||||
|
|
||||||
{this.state.alert != null
|
|
||||||
? (
|
|
||||||
<div className={'alert ' + this.state.alert.type}>{this.state.alert.message}</div>
|
|
||||||
)
|
|
||||||
: null}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{!this.state.deleteConfirm
|
|
||||||
? (
|
|
||||||
<div className='section teamDelete'>
|
|
||||||
<label>Delete this team</label>
|
|
||||||
<button onClick={e => this.setState({deleteConfirm: true})} className='deleteBtn'><i className='fa fa-fw fa-trash'/> Delete</button>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
: (
|
|
||||||
<div className='section teamDeleteConfirm'>
|
|
||||||
<label>Are you sure to delete this team?</label>
|
|
||||||
<button onClick={e => this.setState({deleteConfirm: false})}>Cancel</button>
|
|
||||||
<button onClick={e => this.handleDeleteConfirmButtonClick(e)} className='deleteBtn'><i className='fa fa-fw fa-check'/> Sure</button>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
renderNoTeam () {
|
|
||||||
return (
|
|
||||||
<div className='TeamSettingTab content'>
|
|
||||||
<div className='header'>
|
|
||||||
<span>Setting of</span>
|
|
||||||
<select
|
|
||||||
value={this.props.currentTeamId}
|
|
||||||
onChange={e => this.handleTeamSelectChange(e)}
|
|
||||||
className='teamSelect'>
|
|
||||||
{this.renderTeamOptions()}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div className='section'>Please select a team</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TeamSettingTab.propTypes = {
|
|
||||||
currentTeamId: PropTypes.number,
|
|
||||||
teams: PropTypes.array,
|
|
||||||
switchTeam: PropTypes.func
|
|
||||||
}
|
|
||||||
|
|
||||||
TeamSettingTab.prototype.linkState = linkState
|
|
||||||
@@ -1,12 +1,11 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import { connect, Provider } from 'react-redux'
|
import { connect, Provider } from 'react-redux'
|
||||||
import linkState from 'boost/linkState'
|
import linkState from 'browser/lib/linkState'
|
||||||
import store from 'boost/store'
|
import store from '../store'
|
||||||
import AppSettingTab from './Preference/AppSettingTab'
|
import AppSettingTab from './Preference/AppSettingTab'
|
||||||
import HelpTab from './Preference/HelpTab'
|
|
||||||
import FolderSettingTab from './Preference/FolderSettingTab'
|
import FolderSettingTab from './Preference/FolderSettingTab'
|
||||||
import ContactTab from './Preference/ContactTab'
|
import ContactTab from './Preference/ContactTab'
|
||||||
import { closeModal } from 'boost/modal'
|
import { closeModal } from 'browser/lib/modal'
|
||||||
|
|
||||||
const APP = 'APP'
|
const APP = 'APP'
|
||||||
const HELP = 'HELP'
|
const HELP = 'HELP'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React, { PropTypes } from 'react'
|
||||||
import MarkdownPreview from 'boost/components/MarkdownPreview'
|
import MarkdownPreview from 'browser/components/MarkdownPreview'
|
||||||
import CodeEditor from 'boost/components/CodeEditor'
|
import CodeEditor from 'browser/components/CodeEditor'
|
||||||
|
|
||||||
export default class Tutorial extends React.Component {
|
export default class Tutorial extends React.Component {
|
||||||
constructor (props) {
|
constructor (props) {
|
||||||
|
|||||||
@@ -29,11 +29,11 @@ import {
|
|||||||
// view mode
|
// view mode
|
||||||
IDLE_MODE
|
IDLE_MODE
|
||||||
} from './actions'
|
} from './actions'
|
||||||
import dataStore from 'boost/dataStore'
|
import dataStore from 'browser/lib/dataStore'
|
||||||
import keygen from 'boost/keygen'
|
import keygen from 'browser/lib/keygen'
|
||||||
import activityRecord from 'boost/activityRecord'
|
import activityRecord from 'browser/lib/activityRecord'
|
||||||
import { openModal } from 'boost/modal'
|
import { openModal } from 'browser/lib/modal'
|
||||||
import EditedAlert from 'boost/components/modal/EditedAlert'
|
import EditedAlert from './modal/EditedAlert'
|
||||||
|
|
||||||
const initialStatus = {
|
const initialStatus = {
|
||||||
mode: IDLE_MODE,
|
mode: IDLE_MODE,
|
||||||
|
|||||||
4
index.js
4
index.js
@@ -4,7 +4,7 @@ function isFinderCalled () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isFinderCalled()) {
|
if (isFinderCalled()) {
|
||||||
require('./finder.js')
|
require('./lib/finder-app')
|
||||||
} else {
|
} else {
|
||||||
require('./main.js')
|
require('./lib/main-app')
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,9 +9,11 @@ app.on('ready', function () {
|
|||||||
app.dock.hide()
|
app.dock.hide()
|
||||||
}
|
}
|
||||||
|
|
||||||
var template = require('./atom-lib/menu-template')
|
var template = require('./menu-template')
|
||||||
var menu = Menu.buildFromTemplate(template)
|
var menu = Menu.buildFromTemplate(template)
|
||||||
Menu.setApplicationMenu(menu)
|
Menu.setApplicationMenu(menu)
|
||||||
|
|
||||||
finderWindow = require('./atom-lib/finder-window')
|
finderWindow = require('./finder-window')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
module.exports = app
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ if (process.platform === 'darwin') {
|
|||||||
|
|
||||||
var finderWindow = new BrowserWindow(config)
|
var finderWindow = new BrowserWindow(config)
|
||||||
|
|
||||||
var url = path.resolve(__dirname, '../browser/finder/index.html')
|
var url = path.resolve(__dirname, './finder.html')
|
||||||
|
|
||||||
finderWindow.loadURL('file://' + url)
|
finderWindow.loadURL('file://' + url)
|
||||||
finderWindow.setSkipTaskbar(true)
|
finderWindow.setSkipTaskbar(true)
|
||||||
|
|||||||
@@ -7,17 +7,17 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
|
||||||
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css" media="screen" charset="utf-8">
|
<link rel="stylesheet" href="../node_modules/font-awesome/css/font-awesome.min.css" media="screen" charset="utf-8">
|
||||||
<link rel="stylesheet" href="../../node_modules/devicon/devicon.min.css">
|
<link rel="stylesheet" href="../node_modules/devicon/devicon.min.css">
|
||||||
<link rel="stylesheet" href="../../node_modules/highlight.js/styles/xcode.css">
|
<link rel="stylesheet" href="../node_modules/highlight.js/styles/xcode.css">
|
||||||
<link rel="shortcut icon" href="favicon.ico">
|
<link rel="shortcut icon" href="favicon.ico">
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Lato';
|
font-family: 'Lato';
|
||||||
src: url('../../resources/Lato-Regular.woff2') format('woff2'), /* Modern Browsers */
|
src: url('../resources/Lato-Regular.woff2') format('woff2'), /* Modern Browsers */
|
||||||
url('../../resources/Lato-Regular.woff') format('woff'), /* Modern Browsers */
|
url('../resources/Lato-Regular.woff') format('woff'), /* Modern Browsers */
|
||||||
url('../../resources/Lato-Regular.ttf') format('truetype');
|
url('../resources/Lato-Regular.ttf') format('truetype');
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
text-rendering: optimizeLegibility;
|
text-rendering: optimizeLegibility;
|
||||||
@@ -26,14 +26,14 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="content"></div>
|
<div id="content"></div>
|
||||||
<script src="../../submodules/ace/src-min/ace.js"></script>
|
<script src="../submodules/ace/src-min/ace.js"></script>
|
||||||
<script>
|
<script>
|
||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
electron.webFrame.setZoomLevelLimits(1, 1)
|
electron.webFrame.setZoomLevelLimits(1, 1)
|
||||||
const _ = require('lodash')
|
const _ = require('lodash')
|
||||||
var scriptUrl = _.find(electron.remote.process.argv, a => a === '--hot')
|
var scriptUrl = _.find(electron.remote.process.argv, a => a === '--hot')
|
||||||
? 'http://localhost:8080/assets/finder.js'
|
? 'http://localhost:8080/assets/finder.js'
|
||||||
: '../../compiled/finder.js'
|
: '../compiled/finder.js'
|
||||||
var scriptEl=document.createElement('script')
|
var scriptEl=document.createElement('script')
|
||||||
scriptEl.setAttribute("type","text/javascript")
|
scriptEl.setAttribute("type","text/javascript")
|
||||||
scriptEl.setAttribute("src", scriptUrl)
|
scriptEl.setAttribute("src", scriptUrl)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ const app = electron.app
|
|||||||
const ipc = electron.ipcMain
|
const ipc = electron.ipcMain
|
||||||
const globalShortcut = electron.globalShortcut
|
const globalShortcut = electron.globalShortcut
|
||||||
const jetpack = require('fs-jetpack')
|
const jetpack = require('fs-jetpack')
|
||||||
const mainWindow = require('./atom-lib/main-window')
|
const mainWindow = require('./main-window')
|
||||||
const nodeIpc = require('@rokt33r/node-ipc')
|
const nodeIpc = require('@rokt33r/node-ipc')
|
||||||
|
|
||||||
var userDataPath = app.getPath('userData')
|
var userDataPath = app.getPath('userData')
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ const autoUpdater = electron.autoUpdater
|
|||||||
const path = require('path')
|
const path = require('path')
|
||||||
const ChildProcess = require('child_process')
|
const ChildProcess = require('child_process')
|
||||||
const _ = require('lodash')
|
const _ = require('lodash')
|
||||||
|
const nodeIpc = require('@rokt33r/node-ipc')
|
||||||
|
const GhReleases = require('electron-gh-releases')
|
||||||
// electron.crashReporter.start()
|
// electron.crashReporter.start()
|
||||||
|
|
||||||
var mainWindow = null
|
var mainWindow = null
|
||||||
@@ -114,7 +116,6 @@ function notify (title, body) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var isUpdateReady = false
|
var isUpdateReady = false
|
||||||
var GhReleases = require('electron-gh-releases')
|
|
||||||
|
|
||||||
var ghReleasesOpts = {
|
var ghReleasesOpts = {
|
||||||
repo: 'BoostIO/boost-releases',
|
repo: 'BoostIO/boost-releases',
|
||||||
@@ -153,14 +154,13 @@ updater.on('update-downloaded', (info) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const nodeIpc = require('@rokt33r/node-ipc')
|
|
||||||
nodeIpc.config.id = 'node'
|
nodeIpc.config.id = 'node'
|
||||||
nodeIpc.config.retry = 1500
|
nodeIpc.config.retry = 1500
|
||||||
// nodeIpc.config.silent = true
|
// nodeIpc.config.silent = true
|
||||||
|
|
||||||
function spawnFinder() {
|
function spawnFinder() {
|
||||||
if (process.platform === 'darwin') {
|
if (process.platform === 'darwin') {
|
||||||
var finderArgv = [path.join(__dirname, 'finder.js'), '--finder']
|
var finderArgv = [path.join(__dirname, 'finder-app.js'), '--finder']
|
||||||
if (_.find(process.argv, a => a === '--hot')) finderArgv.push('--hot')
|
if (_.find(process.argv, a => a === '--hot')) finderArgv.push('--hot')
|
||||||
finderProcess = ChildProcess
|
finderProcess = ChildProcess
|
||||||
.execFile(process.execPath, finderArgv)
|
.execFile(process.execPath, finderArgv)
|
||||||
@@ -227,7 +227,7 @@ app.on('ready', function () {
|
|||||||
if (finderProcess) finderProcess.kill()
|
if (finderProcess) finderProcess.kill()
|
||||||
})
|
})
|
||||||
|
|
||||||
var template = require('./atom-lib/menu-template')
|
var template = require('./menu-template')
|
||||||
if (process.platform === 'win32') {
|
if (process.platform === 'win32') {
|
||||||
template.unshift({
|
template.unshift({
|
||||||
label: 'Boostnote',
|
label: 'Boostnote',
|
||||||
@@ -264,7 +264,7 @@ app.on('ready', function () {
|
|||||||
|
|
||||||
checkUpdate()
|
checkUpdate()
|
||||||
|
|
||||||
mainWindow = require('./atom-lib/main-window')
|
mainWindow = require('./main-window')
|
||||||
if (process.platform === 'win32') {
|
if (process.platform === 'win32') {
|
||||||
mainWindow.setMenu(menu)
|
mainWindow.setMenu(menu)
|
||||||
}
|
}
|
||||||
@@ -278,7 +278,7 @@ app.on('ready', function () {
|
|||||||
console.log('fired only once ')
|
console.log('fired only once ')
|
||||||
spawnFinder()
|
spawnFinder()
|
||||||
} else {
|
} else {
|
||||||
finderWindow = require('./atom-lib/finder-window')
|
finderWindow = require('./finder-window')
|
||||||
|
|
||||||
finderWindow.on('close', function (e) {
|
finderWindow.on('close', function (e) {
|
||||||
if (appQuit) return true
|
if (appQuit) return true
|
||||||
@@ -296,3 +296,6 @@ app.on('ready', function () {
|
|||||||
|
|
||||||
require('./hotkey')
|
require('./hotkey')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
module.exports = app
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ var mainWindow = new BrowserWindow({
|
|||||||
'standard-window': false
|
'standard-window': false
|
||||||
})
|
})
|
||||||
|
|
||||||
const url = path.resolve(__dirname, '../browser/main/index.html')
|
const url = path.resolve(__dirname, './main.html')
|
||||||
|
|
||||||
mainWindow.loadURL('file://' + url)
|
mainWindow.loadURL('file://' + url)
|
||||||
|
|
||||||
|
|||||||
@@ -4,18 +4,18 @@
|
|||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
|
||||||
|
|
||||||
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css" media="screen" charset="utf-8">
|
<link rel="stylesheet" href="../node_modules/font-awesome/css/font-awesome.min.css" media="screen" charset="utf-8">
|
||||||
<link rel="stylesheet" href="../../node_modules/devicon/devicon.min.css">
|
<link rel="stylesheet" href="../node_modules/devicon/devicon.min.css">
|
||||||
<link rel="stylesheet" href="../../node_modules/highlight.js/styles/xcode.css">
|
<link rel="stylesheet" href="../node_modules/highlight.js/styles/xcode.css">
|
||||||
<link rel="shortcut icon" href="favicon.ico">
|
<link rel="shortcut icon" href="../resources/favicon.ico">
|
||||||
<title>Boostnote</title>
|
<title>Boostnote</title>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Lato';
|
font-family: 'Lato';
|
||||||
src: url('../../resources/Lato-Regular.woff2') format('woff2'), /* Modern Browsers */
|
src: url('../resources/Lato-Regular.woff2') format('woff2'), /* Modern Browsers */
|
||||||
url('../../resources/Lato-Regular.woff') format('woff'), /* Modern Browsers */
|
url('../resources/Lato-Regular.woff') format('woff'), /* Modern Browsers */
|
||||||
url('../../resources/Lato-Regular.ttf') format('truetype');
|
url('../resources/Lato-Regular.ttf') format('truetype');
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
text-rendering: optimizeLegibility;
|
text-rendering: optimizeLegibility;
|
||||||
@@ -47,13 +47,13 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="loadingCover">
|
<div id="loadingCover">
|
||||||
<img src="../../resources/app.png">
|
<img src="../resources/app.png">
|
||||||
<div class='message'>Loading...</div>
|
<div class='message'>Loading...</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="content"></div>
|
<div id="content"></div>
|
||||||
|
|
||||||
<script src="../../submodules/ace/src-min/ace.js"></script>
|
<script src="../submodules/ace/src-min/ace.js"></script>
|
||||||
<script type='text/javascript'>
|
<script type='text/javascript'>
|
||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
electron.webFrame.setZoomLevelLimits(1, 1)
|
electron.webFrame.setZoomLevelLimits(1, 1)
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
const _ = require('lodash')
|
const _ = require('lodash')
|
||||||
var scriptUrl = _.find(electron.remote.process.argv, a => a === '--hot')
|
var scriptUrl = _.find(electron.remote.process.argv, a => a === '--hot')
|
||||||
? 'http://localhost:8080/assets/main.js'
|
? 'http://localhost:8080/assets/main.js'
|
||||||
: '../../compiled/main.js'
|
: '../compiled/main.js'
|
||||||
var scriptEl = document.createElement('script')
|
var scriptEl = document.createElement('script')
|
||||||
scriptEl.setAttribute("type","text/javascript")
|
scriptEl.setAttribute("type","text/javascript")
|
||||||
scriptEl.setAttribute("src", scriptUrl)
|
scriptEl.setAttribute("src", scriptUrl)
|
||||||
|
|||||||
@@ -11,7 +11,8 @@ var config = {
|
|||||||
extensions: ['', '.js', '.jsx'],
|
extensions: ['', '.js', '.jsx'],
|
||||||
packageMains: ['webpack', 'browser', 'web', 'browserify', ['jam', 'main'], 'main'],
|
packageMains: ['webpack', 'browser', 'web', 'browserify', ['jam', 'main'], 'main'],
|
||||||
alias: {
|
alias: {
|
||||||
'boost': path.resolve(__dirname, 'lib')
|
'lib': path.resolve(__dirname, 'lib'),
|
||||||
|
'browser': path.resolve(__dirname, 'browser')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
|
|||||||
Reference in New Issue
Block a user