diff --git a/package.json b/package.json index 35d0eef..2b4c83f 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,9 @@ "description": "", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "serve": "webpack-dev-server --output-public-path=dist", + "build": "webpack" }, "author": "", "license": "ISC", @@ -14,6 +16,7 @@ "@types/underscore": "^1.8.6", "bootstrap": "^4.0.0-beta.2", "firebase": "^4.8.0", + "re-base": "^3.2.1", "react": "^16.2.0", "react-dom": "^16.2.0", "react-redux": "^5.0.6", diff --git a/src/components/Editor.tsx b/src/components/Editor.tsx new file mode 100644 index 0000000..26cc048 --- /dev/null +++ b/src/components/Editor.tsx @@ -0,0 +1,13 @@ +// import * as React from "react"; +// import { Col, FormText } from "reactstrap"; +// import Document from '../models/Document' +// export interface EditorProps {document: Document, onChange} +// export class Editor extends React.Component{ +// render(){ +// return( +// +// +// ); +// } + +// } \ No newline at end of file diff --git a/src/components/Tab1.tsx b/src/components/Tab1.tsx index fea6710..3ae73f7 100644 --- a/src/components/Tab1.tsx +++ b/src/components/Tab1.tsx @@ -28,12 +28,10 @@ public static class Extension export class Tab1 extends React.Component{ render(){ return( - {exampleText} - - ); + ); } } \ No newline at end of file diff --git a/src/components/TabNav.tsx b/src/components/TabNav.tsx index 428fc68..2f485ba 100644 --- a/src/components/TabNav.tsx +++ b/src/components/TabNav.tsx @@ -1,3 +1,5 @@ +import { IsLoggedIn } from '../containers/IsLoggedIn'; +import { Edit } from '../containers/Edit'; import { Tab1 } from './Tab1'; import * as React from 'react'; import { TabContent, TabPane, Nav, NavItem, NavLink, Card, Button, CardTitle, CardText, Row, Col, NavbarBrand } from 'reactstrap'; @@ -20,6 +22,8 @@ export class TabNav extends React.Component { } } render() { + var plzLogin =

Please login, yo

+ var editor = return (
- + + + -

Comming Soon

+
diff --git a/src/containers/Edit.tsx b/src/containers/Edit.tsx new file mode 100644 index 0000000..ba7d8ab --- /dev/null +++ b/src/containers/Edit.tsx @@ -0,0 +1,81 @@ +import { AppState } from '../models/AppState'; +import * as React from 'react'; +import * as _ from 'underscore'; +import fbData from '../startup/firebase' +import {Document} from '../models/Document' +import { Col } from 'reactstrap'; +import { connect } from 'react-redux'; + +interface PassedInProps {docId: string} +interface ReduxProps {appState: AppState} +interface EditProps extends PassedInProps, ReduxProps{} +interface EditState {document: Document} + +const mapStateToProps = (state : AppState, ownProps : PassedInProps) : EditProps => +{ + return {appState: state, docId: ownProps.docId}; +} +export class edit extends React.Component{ + constructor(props: EditProps){ + super(props) + this.state = { + document:{ + Title: '', + Body: '' + } + }; + } + ref: any + componentDidMount() { + if(!this.props.appState.login.isLoggedIn){ + return; + } + var docId = ''; + if(this.props && this.props.docId && this.props.docId.length > 0){ + docId = this.props.docId; + } + else{ + docId = this.generateDocId() + } + this.ref = fbData.rebase.syncState(`docs/${this.props.appState.login.uid}/${docId}`, { + context: this, + state: 'document', + asArray: false + }); + } + + componentWillUnmount() { + fbData.rebase.removeBinding(this.ref); + } + generateDocId(){ + var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + var result = ''; + for (var i = 0; i < 8; i++){ + result += str.charAt(Math.floor(Math.random()*str.length)) + } + return result; + } + updateDocument(docBody: string){ + this.setState({ + document: { + Title: '', + Body: docBody + } + }) + } + + render(){ + var textArea = null; + if(this.props.appState.login.isLoggedIn){ + textArea = + } + return( + + {textArea} + + ); + } + +} + +export const Edit = connect(mapStateToProps)(edit) \ No newline at end of file diff --git a/src/containers/IsLoggedIn.tsx b/src/containers/IsLoggedIn.tsx new file mode 100644 index 0000000..6a860a7 --- /dev/null +++ b/src/containers/IsLoggedIn.tsx @@ -0,0 +1,22 @@ +import { AppState } from '../models/AppState'; +import * as React from 'react'; +import { connect } from 'react-redux'; +export interface IsLoggedInReduxProps {appstate: AppState} +export interface IsLoggedInPassedProps {isTrue: JSX.Element, isFalse: JSX.Element} +export interface IsLoggedInProps extends IsLoggedInReduxProps,IsLoggedInPassedProps {} +const mapStateToProps = (state : AppState, ownProps : IsLoggedInPassedProps) : IsLoggedInProps => +{ + return {isTrue: ownProps.isTrue, isFalse: ownProps.isFalse, appstate: state}; +} +class isLoggedIn extends React.Component{ + render(){ + if(this.props.appstate.login.isLoggedIn){ + return this.props.isTrue + } + else{ + return this.props.isFalse + } + } +} + +export const IsLoggedIn = connect(mapStateToProps)(isLoggedIn) \ No newline at end of file diff --git a/src/index.tsx b/src/index.tsx index 212ee03..e2ad615 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -4,12 +4,12 @@ import { Hello } from "./components/Hello"; import 'bootstrap/dist/css/bootstrap.css'; import { TabNav } from './components/TabNav' import { NavBar } from './components/NavBar' -import { BoostrapFirebase } from './startup/firebase' +import rebase from './startup/firebase' import { LoginContainer } from './containers/Login' import { createStore } from 'redux' import {MainReducer} from './reducers/MainReducer' import { Provider } from 'react-redux' -BoostrapFirebase(); + let store = createStore(MainReducer) const App = () => (
diff --git a/src/models/Document.ts b/src/models/Document.ts new file mode 100644 index 0000000..95fb2d8 --- /dev/null +++ b/src/models/Document.ts @@ -0,0 +1,4 @@ +export interface Document { + Title: string, + Body: string +} \ No newline at end of file diff --git a/src/re-base.d.ts b/src/re-base.d.ts new file mode 100644 index 0000000..440f1b7 --- /dev/null +++ b/src/re-base.d.ts @@ -0,0 +1 @@ +declare module "re-base"; \ No newline at end of file diff --git a/src/reducers/MainReducer.ts b/src/reducers/MainReducer.ts index 54baec4..87031ec 100644 --- a/src/reducers/MainReducer.ts +++ b/src/reducers/MainReducer.ts @@ -6,9 +6,9 @@ import * as _ from 'underscore' export function MainReducer(state:AppState = {login: { isLoggedIn: false, displayName: '', uid: ''}}, action: AnyAction) { switch(action.type){ case appActions.LOGGED_IN: - return _.extend({}, state, {login:{ isLoggedIn: true, displayName: action.payload.displayName, uid: action.payload.displayName}}) + return _.extend({}, state, {login:{ isLoggedIn: true, displayName: action.payload.displayName, uid: action.payload.uid}}) case appActions.LOGGED_OUT: - return _.extend({}, state, {login:{ isLoggedIn: false, displayName: ""}}) + return _.extend({}, state, {login:{ isLoggedIn: false, displayName: "", uid: ''}}) default: return state } diff --git a/src/startup/firebase.ts b/src/startup/firebase.ts index b66001f..1f557dd 100644 --- a/src/startup/firebase.ts +++ b/src/startup/firebase.ts @@ -1,14 +1,14 @@ import * as firebase from "firebase" +import * as Rebase from "re-base" - - export function BoostrapFirebase(){ - var config = { - apiKey: "AIzaSyBi1oHDSe7juSTOZws30RkyXgv9u9ey-HA", - authDomain: "minbin-784f1.firebaseapp.com", - databaseURL: "https://minbin-784f1.firebaseio.com", - projectId: "minbin-784f1", - storageBucket: "minbin-784f1.appspot.com", - messagingSenderId: "437102882585" - }; - firebase.initializeApp(config); - } \ No newline at end of file +var config = { + apiKey: "AIzaSyBi1oHDSe7juSTOZws30RkyXgv9u9ey-HA", + authDomain: "minbin-784f1.firebaseapp.com", + databaseURL: "https://minbin-784f1.firebaseio.com", + projectId: "minbin-784f1", + storageBucket: "minbin-784f1.appspot.com", + messagingSenderId: "437102882585" +}; +var app = firebase.initializeApp(config); +var db = firebase.database(app); +export default {db:firebase.database(app), rebase: Rebase.createClass(db)} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 42d7634..8b5dc29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,16 +2,41 @@ # yarn lockfile v1 +"@firebase/app-types@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.1.0.tgz#27069ba4f8d74990eae7c88ec8f3d282e5215786" + "@firebase/app@0.1.4": version "0.1.4" resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.1.4.tgz#595b85390b1dc5846a88933d65d4fae7208f835d" dependencies: "@firebase/util" "0.1.4" +"@firebase/app@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.1.5.tgz#3e7610a69ba6dbebc649a1b785eb898619c8a067" + dependencies: + "@firebase/app-types" "0.1.0" + "@firebase/util" "0.1.5" + +"@firebase/auth-types@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.1.0.tgz#2dd03f99d70bd3dda791bfeb97bd3025076d6c22" + "@firebase/auth@0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.3.0.tgz#971c22d894205454e14850848012235c44459086" +"@firebase/auth@0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.3.1.tgz#b9813ec4fbd1d1d165a165ee10e82be681f4a44f" + dependencies: + "@firebase/auth-types" "0.1.0" + +"@firebase/database-types@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.1.0.tgz#dbc9e096cf1061ac422f17e8957baac6d3c018a7" + "@firebase/database@0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.1.5.tgz#6e5b0da6f0be15cba30c694e2ff24c6a5f03c182" @@ -19,6 +44,18 @@ "@firebase/util" "0.1.4" faye-websocket "0.11.1" +"@firebase/database@0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.1.6.tgz#52d92224398544dbd62e813729365d1b81b22df4" + dependencies: + "@firebase/database-types" "0.1.0" + "@firebase/util" "0.1.5" + faye-websocket "0.11.1" + +"@firebase/firestore-types@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-0.1.0.tgz#4a125891d7537be0e7260cef5bf162dd96fa0809" + "@firebase/firestore@0.2.1": version "0.2.1" resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-0.2.1.tgz#b60dbaa59626d6f84d4316fcdc5aa0c0eaa59e38" @@ -26,26 +63,59 @@ "@firebase/webchannel-wrapper" "0.2.5" grpc "^1.7.1" +"@firebase/firestore@0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-0.2.2.tgz#c6a3a6d838f3681f256c25baf9d1b15fb6953788" + dependencies: + "@firebase/firestore-types" "0.1.0" + "@firebase/webchannel-wrapper" "0.2.5" + grpc "^1.7.1" + +"@firebase/messaging-types@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/messaging-types/-/messaging-types-0.1.0.tgz#5f8b33745f914c19b977521c39fc199326fdeac3" + "@firebase/messaging@0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.1.5.tgz#11ca0e9215ea54839cc80947eeec548cd21ac251" dependencies: "@firebase/util" "0.1.4" +"@firebase/messaging@0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.1.6.tgz#db68362a82934722ecbd79769402ba56612e1c92" + dependencies: + "@firebase/messaging-types" "0.1.0" + "@firebase/util" "0.1.5" + "@firebase/polyfill@0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@firebase/polyfill/-/polyfill-0.1.3.tgz#9b0a2f93ad629e2c433b692e0cd5f34f35229c12" dependencies: promise-polyfill "^6.0.2" +"@firebase/storage-types@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.1.0.tgz#4716c91c62e37b23d87c78371fe2048c2370f8d0" + "@firebase/storage@0.1.4": version "0.1.4" resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.1.4.tgz#3aca74b6dcb4e87569ecc07153ea0f4ecb883ca0" +"@firebase/storage@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.1.5.tgz#23ca6b85eaf90c06960dae79e9e882f425e1a3a6" + dependencies: + "@firebase/storage-types" "0.1.0" + "@firebase/util@0.1.4": version "0.1.4" resolved "https://registry.yarnpkg.com/@firebase/util/-/util-0.1.4.tgz#80d7f6039ff6cb94215ddd44d3cb09f6d32902ea" +"@firebase/util@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@firebase/util/-/util-0.1.5.tgz#b8daf57cedda1c035fddf5ca9c56b86a1f95b38b" + "@firebase/webchannel-wrapper@0.2.5": version "0.2.5" resolved "https://registry.yarnpkg.com/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.2.5.tgz#11ccb45505cb56d4bc0a9a09712b14585248e784" @@ -820,6 +890,20 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +firebase@^4.5.0: + version "4.8.1" + resolved "https://registry.yarnpkg.com/firebase/-/firebase-4.8.1.tgz#ae1b0c9f94525abcd35447e22fa2da49eb920c2c" + dependencies: + "@firebase/app" "0.1.5" + "@firebase/auth" "0.3.1" + "@firebase/database" "0.1.6" + "@firebase/firestore" "0.2.2" + "@firebase/messaging" "0.1.6" + "@firebase/polyfill" "0.1.3" + "@firebase/storage" "0.1.5" + dom-storage "^2.0.2" + xmlhttprequest "^1.8.0" + firebase@^4.8.0: version "4.8.0" resolved "https://registry.yarnpkg.com/firebase/-/firebase-4.8.0.tgz#c0b5bad5c1241222f3a6f06065ea121ebbc14fd3" @@ -1929,6 +2013,12 @@ rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +re-base@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/re-base/-/re-base-3.2.1.tgz#2feb74d5e7cc06783446a707e7f1e72685941e73" + dependencies: + firebase "^4.5.0" + react-dom@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044"