Bug fixes

This commit is contained in:
Jason Wall 2020-08-16 09:46:52 -04:00
parent c1544f79b2
commit f83a4f5d48
5 changed files with 78 additions and 64 deletions

View File

@ -49,8 +49,8 @@ export class PassageCardComponent extends CardComponent implements OnInit {
} }
copy() { copy() {
const html = this.passageElement.nativeElement.innerHTML; const html = this.passageElement.nativeElement.innerHTML + ` - ${this.ref.toString()}`;
const text = this.passageElement.nativeElement.innerText; const text = this.passageElement.nativeElement.innerText + ` - ${this.ref.toString()}`;
this.copyToClip(text, html); this.copyToClip(text, html);
} }

View File

@ -26,7 +26,7 @@ export class StrongsCardComponent extends CardComponent implements OnInit {
); );
} }
ngOnInit(): void { ngOnInit(): void {
console.log(this.cardItem); // console.log(this.cardItem);
} }
copy() { copy() {

View File

@ -1,12 +1,31 @@
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { reducer } from './app-state-reducer'; import { reducer, getNewestStorable } from './app-state-reducer';
import { AppAction, AppActionFactory } from './app-state-actions'; import { AppActionFactory } from './app-state-actions';
import { Overlap } from '../common/bible-reference'; import { Overlap } from '../common/bible-reference';
import { IStorable, Storable } from '../common/storable'; import { Storable } from '../common/storable';
import { CardType, CardIcons, CardItem } from '../models/card-state'; import { CardType, CardItem } from '../models/card-state';
import { SavedPage } from '../models/page-state'; import { SavedPage } from '../models/page-state';
import { AppState } from '../models/app-state'; import { AppState } from '../models/app-state';
describe('getNewestStorable', () => {
it('maybeMutateStorable', () => {
const s1 = {
createdOn: new Date(2019, 1, 1, 0, 0, 0, 0).toISOString(),
value: 'test1',
};
const s2 = {
createdOn: new Date(2020, 1, 1, 0, 0, 0, 0).toISOString(),
value: 'test1',
};
expect(getNewestStorable(s1, s2)).toBe(s2, 'Should be the second item');
expect(getNewestStorable(null, s2)).toBe(s2, 'Should be the second item');
expect(getNewestStorable(s1, null)).toBe(s1, 'Should be the first item');
expect(getNewestStorable(null, null)).toBe(null, 'Should be null');
});
});
describe('AppService Reducer', () => { describe('AppService Reducer', () => {
const preState = { const preState = {
user: null, user: null,

View File

@ -12,29 +12,19 @@ import { initialState } from './app-state-initial-state';
import { SavedPage } from '../models/page-state'; import { SavedPage } from '../models/page-state';
import { CardType, CardItem } from '../models/card-state'; import { CardType, CardItem } from '../models/card-state';
function maybeMutateStorable<T>( export function getNewestStorable<T>(candidate: IStorable<T>, incumbant: IStorable<T>): IStorable<T> {
state: AppState,
candidate: IStorable<T>,
incumbant: IStorable<T>,
composeState: (item: IStorable<T>) => AppState
): AppState {
// if the candidate is null, then return the state. // if the candidate is null, then return the state.
if (!candidate) { if (!candidate) {
return state; return incumbant;
}
// if the incumbant is null, then def use the candidate.
if (!incumbant) {
return composeState(candidate);
} }
// only update if the settings are newer. // only update if the settings are newer.
if (!incumbant || new Date(candidate.createdOn) > new Date(incumbant.createdOn)) { if (!incumbant || new Date(candidate.createdOn) > new Date(incumbant.createdOn)) {
return composeState(candidate); return candidate;
} }
// candidate didn't win. return state untouched. // candidate didn't win. return state untouched.
return state; return incumbant;
} }
export function reducer(state: AppState, action: AppAction): AppState { export function reducer(state: AppState, action: AppAction): AppState {
@ -44,6 +34,13 @@ export function reducer(state: AppState, action: AppAction): AppState {
} }
switch (action.type) { switch (action.type) {
case 'UPDATE_ERROR': {
return {
...state,
error: action.error,
};
}
//#region Saved Page Settings //#region Saved Page Settings
case 'UPDATE_CARD_MERGE_STRATEGY': { case 'UPDATE_CARD_MERGE_STRATEGY': {
@ -58,12 +55,11 @@ export function reducer(state: AppState, action: AppAction): AppState {
} }
case 'UPDATE_PAGE_SETTINGS': { case 'UPDATE_PAGE_SETTINGS': {
return maybeMutateStorable(state, action.settings, state.pageSettings, (item) => { const item = getNewestStorable(action.settings, state.pageSettings);
return { return {
...state, ...state,
pageSettings: item, pageSettings: item,
}; };
});
} }
//#endregion //#endregion
@ -71,12 +67,12 @@ export function reducer(state: AppState, action: AppAction): AppState {
//#region Display Settings //#region Display Settings
case 'UPDATE_DISPLAY_SETTINGS': { case 'UPDATE_DISPLAY_SETTINGS': {
return maybeMutateStorable(state, action.settings, state.displaySettings, (item) => { const item = getNewestStorable(action.settings, state.displaySettings);
return {
...state, return {
displaySettings: item, ...state,
}; displaySettings: item,
}); };
} }
case 'UPDATE_CARD_FONT_SIZE': { case 'UPDATE_CARD_FONT_SIZE': {
const settings = new Storable<DisplaySettings>({ const settings = new Storable<DisplaySettings>({
@ -110,13 +106,13 @@ export function reducer(state: AppState, action: AppAction): AppState {
}; };
} }
case 'UPDATE_SAVED_PAGES': { case 'UPDATE_SAVED_PAGES': {
return maybeMutateStorable(state, action.savedPages, state.savedPages, (item) => { const item = getNewestStorable(action.savedPages, state.savedPages);
return {
...state, return {
savedPagesLoaded: true, ...state,
savedPages: item, savedPagesLoaded: true,
}; savedPages: item,
}); };
} }
case 'UPDATE_SAVED_PAGE': { case 'UPDATE_SAVED_PAGE': {
const savedPages = new Storable<SavedPage[]>( const savedPages = new Storable<SavedPage[]>(
@ -128,24 +124,22 @@ export function reducer(state: AppState, action: AppAction): AppState {
}) })
); );
return maybeMutateStorable(state, savedPages, state.savedPages, (item) => { const item = getNewestStorable(savedPages, state.savedPages);
return { return {
...state, ...state,
savedPagesLoaded: true, savedPagesLoaded: true,
savedPages: item, savedPages: item,
}; };
});
} }
case 'REMOVE_SAVED_PAGE': { case 'REMOVE_SAVED_PAGE': {
const savedPages = new Storable<SavedPage[]>(state.savedPages.value.filter((o) => o.id !== action.savedPage.id)); const savedPages = new Storable<SavedPage[]>(state.savedPages.value.filter((o) => o.id !== action.savedPage.id));
const item = getNewestStorable(savedPages, state.savedPages);
return maybeMutateStorable(state, savedPages, state.savedPages, (item) => { return {
return { ...state,
...state, savedPagesLoaded: true,
savedPagesLoaded: true, savedPages: item,
savedPages: item, };
};
});
} }
case 'UPDATE_CURRENT_PAGE': { case 'UPDATE_CURRENT_PAGE': {
const current = { const current = {
@ -159,14 +153,13 @@ export function reducer(state: AppState, action: AppAction): AppState {
current, current,
]); ]);
return maybeMutateStorable(state, savedPages, state.savedPages, (item) => { const item = getNewestStorable(savedPages, state.savedPages);
return { return {
...state, ...state,
currentSavedPage: current, currentSavedPage: current,
savedPagesLoaded: true, savedPagesLoaded: true,
savedPages: item, savedPages: item,
}; };
});
} }
case 'SAVE_PAGE': { case 'SAVE_PAGE': {
const savedPages = new Storable([ const savedPages = new Storable([

View File

@ -401,12 +401,13 @@ export class AppService extends createStateService(reducer, initialState) {
if (j + 1 === chapters.length) { if (j + 1 === chapters.length) {
end = section.end.verse; end = section.end.verse;
} else { } else {
end = '*'; // go to the end of the chapter
end = chapters[j].vss.length;
} }
// get the verses requested. // get the verses requested.
const tvs = chapters[j].vss.length; const tvs = chapters[j].vss.length;
if (end === 0 || end > tvs) { if (end === 0) {
end = tvs; end = tvs;
} }
@ -843,6 +844,7 @@ export class AppService extends createStateService(reducer, initialState) {
// tslint:disable-next-line: prefer-for-of // tslint:disable-next-line: prefer-for-of
for (let j = 0; j < referenceSet.length; j++) { for (let j = 0; j < referenceSet.length; j++) {
const refs = referenceSet[j]; const refs = referenceSet[j];
results[j] = []; // initialize inner array
if (refs != null) { if (refs != null) {
for (let i = 0; i < refs.length; i++) { for (let i = 0; i < refs.length; i++) {
const r = refs[i].split(':'); const r = refs[i].split(':');