diff --git a/src/handlers/reducers.ts b/src/handlers/reducers.ts index 14b8f6c..2cc65ed 100644 --- a/src/handlers/reducers.ts +++ b/src/handlers/reducers.ts @@ -83,24 +83,18 @@ export const homework = { return filter; }, }, - hidden: { - HOMEWORK_TOGGLE_HIDDEN( state: any[], { id }){ - let copy = state.slice( 0 ); - let i = copy.indexOf( id ); - if( i > -1 ){ - copy.splice(i, 1); - } else { - copy.push(id) - } - return copy; + homework: { + HOMEWORK_TOGGLE_CHECKED( state: any[], { id }){ + return state.map( item => item.lsn_id === id + ? { ...item, _checked: !item._checked } + : item + ); + }, + HOMEWORK_SET( state = [], { response }){ + return response.homework.map( item => ({ + ...item, + _checked: !!state.find( el => item.lsn_id === el.lsn_id && el._checked ) + }) ).reverse(); }, - }, - HOMEWORK_SET( state, { response }){ - return { - ...state, - // removes unnecessary id's, otherwise the app would accumulate id's for EVER! - hidden: state.hidden.filter( id => !!response.homework.find( item => item.lsn_id === id ) ), - homework: response.homework.slice(0).reverse(), - }; }, }; diff --git a/src/pages/homework/homework.html b/src/pages/homework/homework.html index 478c0f5..4efa485 100644 --- a/src/pages/homework/homework.html +++ b/src/pages/homework/homework.html @@ -36,8 +36,8 @@ {{ item.calc_date }} @@ -47,8 +47,8 @@ diff --git a/src/pages/homework/homework.ts b/src/pages/homework/homework.ts index f2d270a..4a34348 100644 --- a/src/pages/homework/homework.ts +++ b/src/pages/homework/homework.ts @@ -27,9 +27,8 @@ import { expand } from '../../components/animations'; animations: [ expand ] }) export class Homework { - homework: Array<{calc_class: string, calc_date: string, lsn_date: string, lsn_hw: string, lsn_id: string}> = []; classes: any[] = []; - filter: string = 'ALL_CLASSES'; + filter: string; hideChecked: boolean = true; loading: Loading = this.loadingCtrl.create(); @@ -47,6 +46,7 @@ export class Homework { homework: getHomework(state), filter: getHomeworkFilter(state), classes: getHomeworkClasses(state), + today: state.today, }) )( this ); store.dispatch({ type: 'LOAD', key: 'homework' }); @@ -56,29 +56,6 @@ export class Homework { log.warn(err); } } - // async get( refresh = false ){ - // try { - // let hw = await this.store.get( - // 'HOMEWORK', - // ({ newData, oldData = { homework: [] } }) => ({ - // ...newData, - // homework: newData.homework.map( item => { - // if( oldData.homework.find( el => item.lsn_id === el.lsn_id && el.checked ) ){ - // item.checked = true; - // } - // return item; - // } ) - // }), - // refresh, - // ); - // // this.homework serves as a backup - // // this.filteredHw is presented in view - // this.filteredHw = this.homework = hw.homework.slice(0).reverse(); - // } catch(err){ - // this.log.warn(err); - // } - // } - popover(e){ const buttons = this.classes .map( className => ({ @@ -110,9 +87,8 @@ export class Homework { }).present(); } check( item ){ - store.dispatch({ type: 'HOMEWORK_TOGGLE_HIDDEN', id: item.lsn_id }); + store.dispatch({ type: 'HOMEWORK_TOGGLE_CHECKED', id: item.lsn_id }); } - refresh( refresher: Refresher ){ store.dispatch({ type: 'LOAD', key: 'homework', refresh: true }); refresher.complete(); diff --git a/src/providers/log.ts b/src/providers/log.ts index 235f940..0b15004 100644 --- a/src/providers/log.ts +++ b/src/providers/log.ts @@ -8,24 +8,25 @@ enum levels { debug = 4 }; +const level = levels.debug; +// const level = levels.none; + @Injectable() export class Log { - // public level: number = levels.none; - public level: number = levels.debug; debug(...rest){ - if( this.level < levels.debug){ return; } + if( level < levels.debug){ return; } console.debug(`DEBUG [StudentAccess]`, ...rest); } info(...rest){ - if( this.level < levels.info){ return; } + if( level < levels.info){ return; } console.info(`%cINFO [StudentAccess]`, 'color: blue', ...rest); } warn(...rest){ - if( this.level < levels.warn){ return; } + if( level < levels.warn){ return; } console.warn(`WARN [StudentAccess]`, ...rest); } error(...rest){ - if( this.level < levels.error){ return; } + if( level < levels.error){ return; } console.error(`ERROR [StudentAccess]`, ...rest); } } diff --git a/src/selectors/index.ts b/src/selectors/index.ts index 79ef81b..8cd4058 100644 --- a/src/selectors/index.ts +++ b/src/selectors/index.ts @@ -15,10 +15,9 @@ export const getFilteredStaff = createSelector( ); export const getRawHomework = state => state.homework.homework; -export const getHiddenHomework = state => state.homework.hidden; export const getHomeworkFilter = state => state.homework.filter; -export const getFilteredHomework = createSelector( +export const getHomework = createSelector( getRawHomework, getHomeworkFilter, ( state = [], filter = 'ALL_CLASSES' ) => filter === 'ALL_CLASSES' @@ -26,15 +25,6 @@ export const getFilteredHomework = createSelector( : state.filter( item => item.calc_class === filter ), ); -export const getHomework = createSelector( - getFilteredHomework, - getHiddenHomework, - ( homework = [], hidden = []) => homework.map( item => ({ - ...item, - _hidden: hidden.includes( item.lsn_id ), - })), -); - export const getHomeworkClasses = createSelector( getRawHomework, ( homework = [] ) => homework diff --git a/src/store/create-connect.ts b/src/store/create-connect.ts new file mode 100644 index 0000000..9169fbd --- /dev/null +++ b/src/store/create-connect.ts @@ -0,0 +1,28 @@ +import 'rxjs/add/operator/distinctUntilChanged'; +import 'rxjs/add/operator/map'; +import { bindActionCreators } from 'redux'; + +export const createConnect = (store, unSubName) => (mapState, mapDispatch?) => target => { + if( typeof mapDispatch === 'function' ){ + Object.assign( target, mapDispatch( store.dispatch ) ); + } else if( typeof mapDispatch === 'object' ){ + Object.assign( target, bindActionCreators( mapDispatch, store.dispatch ) ); + } + + const sub = store.state + .map(mapState) + .distinctUntilChanged() + .subscribe(state => Object.assign(target, state)); + + if( unSubName ){ + const original: () => void = target[unSubName]; + target[unSubName] = function(...args){ + sub.unsubscribe(); + if( original ){ + return original.apply(this, args); + } + }; + } + + return sub; +}; diff --git a/src/store/index.ts b/src/store/index.ts index 9789457..0415260 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1,10 +1,10 @@ -import 'rxjs/add/operator/distinctUntilChanged'; -import 'rxjs/add/operator/map'; -import { Observable } from 'rxjs'; +import { createConnect } from './create-connect'; import { createStore } from 'rstate'; -import handlers from '../handlers'; -import { applyMiddleware, compose, bindActionCreators } from 'redux'; + +import { applyMiddleware, compose } from 'redux'; import logger from 'redux-logger'; + +import handlers from '../handlers'; import devToolsEnhancer from './dev-tools'; import { initialState } from './initial'; @@ -26,27 +26,4 @@ window['store'] = store; export default store; -const createConnect = (store, unSubName) => (mapState, mapDispatch?) => target => { - if( typeof mapDispatch === 'function' ){ - Object.assign( target, mapDispatch( store.dispatch ) ); - } else if( typeof mapDispatch === 'object' ){ - Object.assign( target, bindActionCreators( mapDispatch, store.dispatch ) ); - } - const sub = Observable.prototype.map.call(store.state, mapState) - .distinctUntilChanged() - .subscribe(state => Object.assign(target, state)); - - if( unSubName ){ - const original: () => void = target[unSubName]; - target[unSubName] = function(...args){ - sub.unsubscribe(); - if( original ){ - return original.apply(this, args); - } - }; - } - - return sub; -}; - export const connect = createConnect(store, 'ionViewWillUnload'); diff --git a/src/store/initial.ts b/src/store/initial.ts index 414e2c4..3e04634 100644 --- a/src/store/initial.ts +++ b/src/store/initial.ts @@ -73,7 +73,6 @@ export const initialState = { }, homework: { homework: [], - hidden: [], filter: 'ALL_CLASSES', }, login: {