diff --git a/App.js b/App.js index f1b36c8..658fb72 100644 --- a/App.js +++ b/App.js @@ -1,8 +1,8 @@ import React from 'react'; import {Provider} from 'react-redux'; -import StartScreen from './src/components/start-screen'; +import StartScreen from './src/components/main-component'; import store from './src/store'; -const App = () => { +const App = props => { return ( diff --git a/src/actions/anki-get-actions.js b/src/actions/anki-get-actions.js index fca64a3..38cfce0 100644 --- a/src/actions/anki-get-actions.js +++ b/src/actions/anki-get-actions.js @@ -7,27 +7,56 @@ import { GET_MODEL_LIST, REQUEST_PERMISSIONS, } from '../constants/anki-constants'; +import {getPermissionName} from 'react-native-ankidroid/dist/utilities'; -export const requestAnkiPermissions = async ( - ankiProvider = AnkiDroid.requestPermission, -) => { - const [err, res] = await ankiProvider(); - const permission = res === 'granted'; - return err ? {type: ERROR, err} : {type: REQUEST_PERMISSIONS, permission}; +/*Permissions*/ + +const setRequestAnkiPermissions = (err, res) => { + return err + ? {type: ERROR, err} + : {type: REQUEST_PERMISSIONS, payload: res === 'granted'}; +}; +export const requestAnkiPermission = () => async dispatch => { + try { + const [err, res] = await AnkiDroid.requestPermission(); + if (err) throw err; + console.log(res); + await dispatch(setRequestAnkiPermissions(err, res)); + return res; + } catch (err) { + console.log(err); + } }; export const checkAnkiAccess = async ( ankiApiProvider = AnkiDroid.isApiAvailable, ) => { const [err, res] = await ankiApiProvider(); + console.log(res, 'result'); return err ? {type: ERROR, err} : {type: CHECK_ANKI_ACCESS, payload: res}; }; -export const getDeckList = async ( - getDeckListFunction = AnkiDroid.getDeckList, -) => { - const [err, res] = await getDeckListFunction(); - return err ? {type: ERROR, err} : {type: GET_DECK_LIST, payload: res}; +/*Anki Data*/ + +const setDeckList = deckList => { + return { + type: GET_DECK_LIST, + payload: deckList, + }; +}; + +export const getDeckList = () => async dispatch => { + try { + const [err, deckList] = await AnkiDroid.getDeckList(); + if (err) { + console.log('you have an error'); + throw err; + } + await dispatch(setDeckList(deckList)); + return deckList; + } catch (err) { + console.log(err); + } }; export const getModelList = async ( @@ -44,3 +73,5 @@ export const getFieldList = async ( const [err, res] = await getFieldListFunction(id); return err ? {type: ERROR, err} : {type: GET_FIELD_LIST, payload: res}; }; + +export const dd = () => {}; diff --git a/src/components/add-word-form.jsx b/src/components/add-word-form.jsx new file mode 100644 index 0000000..21e5daf --- /dev/null +++ b/src/components/add-word-form.jsx @@ -0,0 +1,14 @@ +import React from 'react' +import {connect} from 'react-redux' +import DeckPicker from './view/deck-picker'; +import{Form} from 'native-base'; + +const AddWordForm = props => { + return ( +
+ + + ) +} + +export default connect()(AddWordForm) diff --git a/src/components/main-component.jsx b/src/components/main-component.jsx new file mode 100644 index 0000000..8f51bba --- /dev/null +++ b/src/components/main-component.jsx @@ -0,0 +1,20 @@ +import React from 'react'; +import {Container, Text} from 'native-base'; +import {ScrollView} from 'react-native' +import Permissions from './permissions'; +import {connect, Provider} from 'react-redux'; +import DeckPicker from './view/deck-picker'; +import AddWordForm from './add-word-form'; + +const StartScreen = props => { + return ( + + {!props.ankiAvailable? : null} + + + ) +}; + +export default connect(state => ({ + ankiAvailable: state.anki.appHasAccess, +}))(StartScreen); diff --git a/src/components/permissions.js b/src/components/permissions.js new file mode 100644 index 0000000..8b2c6a8 --- /dev/null +++ b/src/components/permissions.js @@ -0,0 +1,20 @@ +import React, {useState, useEffect} from 'react'; +import {Text, Button} from 'native-base'; +import {connect} from 'react-redux'; +import {requestAnkiPermission} from '../actions/anki-get-actions'; +const Permissions = props => { + useEffect(() => { + props.requestAnkiPermission(); + }, []); + return ( + + ); +}; +export default connect( + state => ({ + // ankiAccess: state.anki.isApiAvailable, + }), + {requestAnkiPermission: requestAnkiPermission}, +)(Permissions); diff --git a/src/components/start-screen.jsx b/src/components/start-screen.jsx deleted file mode 100644 index 3bae246..0000000 --- a/src/components/start-screen.jsx +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react'; -import {Container, Text} from 'native-base'; - -const StartScreen = props => { - return world , УХТЫ БЛЯ; -}; - -export default StartScreen; diff --git a/src/components/view/deck-picker.jsx b/src/components/view/deck-picker.jsx new file mode 100644 index 0000000..aab74dd --- /dev/null +++ b/src/components/view/deck-picker.jsx @@ -0,0 +1,29 @@ +import React, {useEffect, useState} from 'react' +import {connect} from 'react-redux' +import {Picker, Text} from 'native-base' +import { getDeckList} from '../../actions/anki-get-actions'; +import {selectDeck} from '../../actions/anki-set-actions'; + +const DeckPicker = props => { + const [deckList, setDeckList] = useState([{name: "no decks", id:"666"}]) + const [selectedDeck, setSelectedDeck] = useState('1') + useEffect(() => { + props.getDeckList() + setDeckList(props.decks) + }, []) + return ( + setSelectedDeck(id)} selectedValue={selectedDeck} > + {deckList.map(deck => ( + + ))} + + ) +} + +export default connect(state => ({ + decks: state.anki.deckList, + selectedDeck: state.anki.selectedDeck +}),{ + getDeckList, + setDeck: selectDeck +})(DeckPicker) diff --git a/src/components/view/field-list-component.jsx b/src/components/view/field-list-component.jsx new file mode 100644 index 0000000..e69de29 diff --git a/src/components/view/input-field-component.jsx b/src/components/view/input-field-component.jsx new file mode 100644 index 0000000..e69de29 diff --git a/src/reducers/anki-reducer.js b/src/reducers/anki-reducer.js index 9f9dc92..3bcd247 100644 --- a/src/reducers/anki-reducer.js +++ b/src/reducers/anki-reducer.js @@ -1,13 +1,27 @@ +import { + GET_DECK_LIST, + REQUEST_PERMISSIONS, + SET_DECK, +} from '../constants/anki-constants'; + const initialState = { isApiAvailable: false, - isAnkiConnected: false, + appHasAccess: false, deckList: [], + selectedDeck: '0', mainFieldIsAvailable: false, fieldList: [], }; const ankiReducer = (state = initialState, action) => { switch (action.type) { + case REQUEST_PERMISSIONS: + console.log(action.payload); + return {...state, appHasAccess: action.payload}; + case GET_DECK_LIST: + return {...state, deckList: action.payload}; + case SET_DECK: + return {...state, selectedDeck: action.payload}; default: return state; } diff --git a/src/reducers/main-reducer.js b/src/reducers/main-reducer.js index 20d38e8..cf55340 100644 --- a/src/reducers/main-reducer.js +++ b/src/reducers/main-reducer.js @@ -3,8 +3,8 @@ import ankiReducer from './anki-reducer'; import apiReducer from './api-reducer'; const mainReducer = combineReducers({ - ankiReducer, - apiReducer, + anki: ankiReducer, + api: apiReducer, }); export default mainReducer; diff --git a/src/store.js b/src/store.js index 12083eb..8ed9aa6 100644 --- a/src/store.js +++ b/src/store.js @@ -1,10 +1,11 @@ import {createStore, applyMiddleware} from 'redux'; import {composeWithDevTools} from 'redux-devtools-extension'; +import thunk from 'redux-thunk'; import mainReducer from './reducers/main-reducer'; //your reducer const composeEnhancers = composeWithDevTools({realtime: true, port: 8081}); //possible to run without arguments const store = createStore( mainReducer, - /* preloadedState, */ composeEnhancers(/*connect of middelwares*/), + composeEnhancers(applyMiddleware(thunk)), ); export default store;